def iet_build(stree): """ Create an Iteration/Expression tree (IET) from a :class:`ScheduleTree`. The nodes in the returned IET are decorated with properties deriving from data dependence analysis. """ # Schedule tree -> Iteration/Expression tree iet = iet_make(stree) # Data dependency analysis. Properties are attached directly to nodes iet = iet_analyze(iet) # Replace stepping dimensions with modulo dimensions iet = iet_lower_steppers(iet) return iet
def iet_build(stree): """ Create an Iteration/Expression tree (IET) from a :class:`ScheduleTree`. The nodes in the returned IET are decorated with properties deriving from data dependence analysis. """ # Schedule tree -> Iteration/Expression tree iet = iet_make(stree) # Data dependency analysis. Properties are attached directly to nodes iet = iet_analyze(iet) # Turn DerivedDimensions into lower-level Dimensions or Symbols iet = iet_lower_dimensions(iet) return iet
def iet_build(stree): """ Create an Iteration/Expression tree (IET) from a ScheduleTree. The nodes in the returned IET are decorated with properties deriving from data dependence analysis. """ # Schedule tree -> Iteration/Expression tree iet = iet_make(stree) # Data dependency analysis. Properties are attached directly to nodes iet = iet_analyze(iet) # Turn DerivedDimensions into lower-level Dimensions or Symbols iet = iet_lower_dimensions(iet) return iet
def test_loops_collapsed(fe, t0, t1, t2, t3, exprs, expected, iters): scope = [fe, t0, t1, t2, t3] node_exprs = [Expression(DummyEq(EVAL(i, *scope))) for i in exprs] ast = iters[6](iters[7](iters[8](node_exprs))) ast = iet_analyze(ast) nodes = transform(ast, mode='openmp').nodes iterations = FindNodes(Iteration).visit(nodes) assert len(iterations) == len(expected) # Check for presence of pragma omp for i, j in zip(iterations, expected): pragmas = i.pragmas if j is True: assert len(pragmas) == 1 pragma = pragmas[0] assert 'omp for collapse' in pragma.value else: for k in pragmas: assert 'omp for collapse' not in k.value
def test_iterations_ompized(self, fa, fb, fc, fd, t0, t1, t2, t3, exprs, expected, iters): scope = [fa, fb, fc, fd, t0, t1, t2, t3] node_exprs = [Expression(DummyEq(EVAL(i, *scope))) for i in exprs] ast = iters[6](iters[7](node_exprs)) ast = iet_analyze(ast) iet, _ = transform(ast, mode='openmp') iterations = FindNodes(Iteration).visit(iet) assert len(iterations) == len(expected) # Check for presence of pragma omp for i, j in zip(iterations, expected): pragmas = i.pragmas if j is True: assert len(pragmas) == 1 pragma = pragmas[0] assert 'omp for' in pragma.value else: for k in pragmas: assert 'omp for' not in k.value
def iet_build(clusters, dtype): """ Create an Iteration/Expression tree (IET) given an iterable of :class:`Cluster`s. The nodes in the returned IET are decorated with properties deriving from data dependence analysis. """ # Clusters -> Iteration/Expression tree iet = iet_make(clusters, dtype) # Data dependency analysis. Properties are attached directly to nodes iet = iet_analyze(iet) # Substitute derived dimensions (e.g., t -> t0, t + 1 -> t1) # This is postponed up to this point to ease /iet_analyze/'s life subs = {} for tree in retrieve_iteration_tree(iet): uindices = flatten(i.uindices for i in tree) subs.update({i.expr: LoweredDimension(name=i.index.name, origin=i.expr) for i in uindices}) iet = SubstituteExpression(subs).visit(iet) return iet