From 1d3db91f7104e51dd90ce41da3f84a0140ab69e4 Mon Sep 17 00:00:00 2001 From: Samuel Martin Date: Thu, 3 Aug 2023 08:38:15 +0200 Subject: [PATCH 1/3] Update dependency --- dace/external/hlslib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dace/external/hlslib b/dace/external/hlslib index 1b5b3aee5d..1403cd016c 160000 --- a/dace/external/hlslib +++ b/dace/external/hlslib @@ -1 +1 @@ -Subproject commit 1b5b3aee5dab19adcc443fa9a7cd45244bd246b1 +Subproject commit 1403cd016ce63a9961eeb3899bea70c873a929ce From b47d82b72decce012b088602acc9b8290da04f8e Mon Sep 17 00:00:00 2001 From: Samuel Martin Date: Thu, 3 Aug 2023 13:55:34 +0200 Subject: [PATCH 2/3] Add fix plus testcase --- dace/frontend/fortran/fortran_parser.py | 1 + tests/fortran/array_test.py | 50 +++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/dace/frontend/fortran/fortran_parser.py b/dace/frontend/fortran/fortran_parser.py index 6d1be7138a..d7112892fe 100644 --- a/dace/frontend/fortran/fortran_parser.py +++ b/dace/frontend/fortran/fortran_parser.py @@ -463,6 +463,7 @@ def subroutine2sdfg(self, node: ast_internal_classes.Subroutine_Subprogram_Node, if i.type == "ALL": shape.append(array.shape[indices]) mysize = mysize * array.shape[indices] + index_list.append(None) else: raise NotImplementedError("Index in ParDecl should be ALL") else: diff --git a/tests/fortran/array_test.py b/tests/fortran/array_test.py index 8685628012..a8ece680a6 100644 --- a/tests/fortran/array_test.py +++ b/tests/fortran/array_test.py @@ -11,6 +11,7 @@ from dace.frontend.fortran import fortran_parser from fparser.two.symbol_table import SymbolTable from dace.sdfg import utils as sdutil +from dace.sdfg.nodes import AccessNode import dace.frontend.fortran.ast_components as ast_components import dace.frontend.fortran.ast_transforms as ast_transforms @@ -167,6 +168,54 @@ def test_fortran_frontend_input_output_connector(): assert (a[1, 2] == 0) +def test_fortran_frontend_memlet_in_map_test(): + """ + Tests that no assumption is made where the iteration variable is inside a memlet subset + """ + test_string = """ + PROGRAM memlet_range_test + implicit None + REAL INP(100, 10) + REAL OUT(100, 10) + CALL memlet_range_test_routine(INP, OUT) + END PROGRAM + + SUBROUTINE memlet_range_test_routine(INP, OUT) + REAL INP(100, 10) + REAL OUT(100, 10) + DO I=1,100 + CALL inner_loops(INP(I, :), OUT(I, :)) + ENDDO + END SUBROUTINE memlet_range_test_routine + + SUBROUTINE inner_loops(INP, OUT) + REAL INP(10) + REAL OUT(10) + DO J=1,10 + OUT(J) = INP(J) + 1 + ENDDO + END SUBROUTINE inner_loops + + """ + sdfg = fortran_parser.create_sdfg_from_string(test_string, "memlet_range_test") + sdfg.simplify() + # Expect that start is begin of for loop -> only one out edge to guard defining iterator variable + assert len(sdfg.out_edges(sdfg.start_state)) == 1 + iter_var = symbolic.symbol(list(sdfg.out_edges(sdfg.start_state)[0].data.assignments.keys())[0]) + + for state in sdfg.states(): + if len(state.nodes()) > 1: + for node in state.nodes(): + if isinstance(node, AccessNode) and node.data in ['INP', 'OUT']: + edges = [*state.in_edges(node), *state.out_edges(node)] + # There should be only one edge in/to the access node + assert len(edges) == 1 + memlet = edges[0].data + # Check that the correct memlet has the iteration variable + assert memlet.subset[0] == (iter_var, iter_var, 1) + assert memlet.subset[1] == (1, 10, 1) + + if __name__ == "__main__": test_fortran_frontend_array_3dmap() @@ -174,3 +223,4 @@ def test_fortran_frontend_input_output_connector(): test_fortran_frontend_input_output_connector() test_fortran_frontend_array_ranges() test_fortran_frontend_twoconnector() + test_fortran_frontend_memlet_in_map_test() From 4c824a310a53c2aefd6d03113dda091f4c48bad8 Mon Sep 17 00:00:00 2001 From: Samuel Martin Date: Thu, 3 Aug 2023 13:59:20 +0200 Subject: [PATCH 3/3] Tried to undo wrong update of dependency --- dace/external/hlslib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dace/external/hlslib b/dace/external/hlslib index 1403cd016c..1b5b3aee5d 160000 --- a/dace/external/hlslib +++ b/dace/external/hlslib @@ -1 +1 @@ -Subproject commit 1403cd016ce63a9961eeb3899bea70c873a929ce +Subproject commit 1b5b3aee5dab19adcc443fa9a7cd45244bd246b1