def test_same_node_read_write_not_overlap(): oir = StencilFactory(vertical_loops=[ VerticalLoopFactory(sections__0=VerticalLoopSectionFactory( interval=Interval(start=AxisBound.start(), end=AxisBound.from_start(1)), horizontal_executions__0__body__0=AssignStmtFactory( left__name="field", right__name="other"), )), VerticalLoopFactory(sections__0=VerticalLoopSectionFactory( interval=Interval(start=AxisBound.from_start(1), end=AxisBound.from_start(2)), horizontal_executions__0__body__0=AssignStmtFactory( left__name="field", right__name="field", right__offset__k=-1), )), ]) sdfg = OirSDFGBuilder().visit(oir) convert(sdfg, oir.loc)
def optimize_horizontal_executions( stencil: oir.Stencil, transformation: Transformation ) -> oir.Stencil: sdfg = OirSDFGBuilder().visit(stencil) api_fields = {param.name for param in stencil.params} for subgraph in iter_vertical_loop_section_sub_sdfgs(sdfg): subgraph.apply_transformations_repeated( transformation, validate=False, options=dict(api_fields=api_fields) ) return dace_to_oir.convert(sdfg)
def test_stencils_roundtrip(stencil_name): stencil_def = stencil_registry[stencil_name] externals = externals_registry[stencil_name] oir = stencil_def_to_oir(stencil_def, externals) sdfg = OirSDFGBuilder().visit(oir) sdfg_pre = deepcopy(sdfg) oir = convert(sdfg) sdfg_post = OirSDFGBuilder().visit(oir) assert_sdfg_equal(sdfg_pre, sdfg_post)
def test_two_vertical_loops_no_read(): oir_pre = StencilFactory(vertical_loops=[ VerticalLoopFactory(sections__0=VerticalLoopSectionFactory( horizontal_executions=[ HorizontalExecutionFactory(body__0=AssignStmtFactory( left__name="field", right=Literal(value="42.0", dtype=DataType.FLOAT32), )) ], interval__end=AxisBound.from_start(3), ), ), VerticalLoopFactory(sections__0=VerticalLoopSectionFactory( horizontal_executions=[ HorizontalExecutionFactory(body__0=AssignStmtFactory( left__name="field", right=Literal(value="43.0", dtype=DataType.FLOAT32), )) ], interval__start=AxisBound.from_start(3), ), ), ]) sdfg = OirSDFGBuilder().visit(oir_pre) convert(sdfg, oir_pre.loc)
def optimize_horizontal_executions( stencil: oir.Stencil, transformation: Transformation ) -> oir.Stencil: if has_variable_access(stencil): warnings.warn( "oir dace optimize_horizontal_executions is not yet supported with variable vertical accesses. See https://github.com/GridTools/gt4py/issues/517" ) return stencil sdfg = OirSDFGBuilder().visit(stencil) api_fields = {param.name for param in stencil.params} for subgraph in iter_vertical_loop_section_sub_sdfgs(sdfg): subgraph.apply_transformations_repeated( transformation, validate=False, options=dict(api_fields=api_fields) ) return dace_to_oir.convert(sdfg)
def optimize_horizontal_executions( stencil: oir.Stencil, transformation: Transformation) -> oir.Stencil: sdfg = OirSDFGBuilder().visit(stencil) for subgraph in iter_vertical_loop_section_sub_sdfgs(sdfg): subgraph.apply_transformations_repeated(transformation, validate=False) return dace_to_oir.convert(sdfg)