示例#1
0
def fusion_with_transient_fpga():
    A = np.random.rand(2, 20)
    expected = A * A * 2
    sdfg = fusion_with_transient.to_sdfg()
    sdfg.apply_strict_transformations()
    assert sdfg.apply_transformations_repeated(MapFusion) >= 2
    assert sdfg.apply_transformations_repeated(FPGATransformSDFG) == 1
    sdfg(A=A)
    assert np.allclose(A, expected)
示例#2
0
def test_fusion_with_transient_fpga():
    A = np.random.rand(2, 20)
    expected = A * A * 2
    sdfg = fusion_with_transient.to_sdfg()
    sdfg.coarsen_dataflow()
    assert sdfg.apply_transformations_repeated(MapFusion) >= 2
    assert sdfg.apply_transformations_repeated(FPGATransformSDFG) == 1
    sdfg(A=A)
    assert np.allclose(A, expected)
    return sdfg
示例#3
0
def test_fusion_with_transient_fpga():
    # To achieve II=1 with Xilinx, we need to decouple reads/writes from memory
    A = np.random.rand(2, 20)
    expected = A * A * 2
    sdfg = fusion_with_transient.to_sdfg()
    sdfg.simplify()
    assert sdfg.apply_transformations_repeated(MapFusion) >= 2
    assert sdfg.apply_transformations_repeated(FPGATransformSDFG) == 1
    sdfg(A=A)
    assert np.allclose(A, expected)
    return sdfg
示例#4
0
def test_fusion_with_transient_fpga_decoupled():

    A = np.random.rand(2, 20)
    expected = A * A * 2
    sdfg = fusion_with_transient.to_sdfg()
    sdfg.simplify()
    assert sdfg.apply_transformations_repeated(MapFusion) >= 2
    assert sdfg.apply_transformations_repeated(FPGATransformSDFG) == 1
    with set_temporary("compiler",
                       "xilinx",
                       "decouple_array_interfaces",
                       value=True):
        sdfg(A=A)
    assert np.allclose(A, expected)
    return sdfg