Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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)