From cfd5e958d8cbbbcae8680b9ad21b729c01727d0b Mon Sep 17 00:00:00 2001 From: "Timothy A. Smith" Date: Wed, 14 Aug 2019 08:43:40 -0500 Subject: [PATCH 1/6] change some syntax so Fortran test code will parse successfully --- test/test_fortran.py | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/test/test_fortran.py b/test/test_fortran.py index 2b62148a9..a94be0232 100644 --- a/test/test_fortran.py +++ b/test/test_fortran.py @@ -60,15 +60,15 @@ def test_fill(ctx_factory): !$loopy begin ! - ! fill, = lp.parse_fortran(SOURCE) + ! fill = lp.parse_fortran(SOURCE) ! fill = lp.split_iname(fill, "i", split_amount, ! outer_tag="g.0", inner_tag="l.0") - ! RESULT = [fill] + ! RESULT = fill ! !$loopy end """ - knl, = lp.parse_transformed_fortran(fortran_src, + knl = lp.parse_transformed_fortran(fortran_src, pre_transform_code="split_amount = 128") assert "i_inner" in knl.root_kernel.all_inames() @@ -92,7 +92,7 @@ def test_fill_const(ctx_factory): end """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) ctx = ctx_factory() @@ -115,7 +115,7 @@ def test_asterisk_in_shape(ctx_factory): end """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) ctx = ctx_factory() queue = cl.CommandQueue(ctx) @@ -139,7 +139,7 @@ def test_assignment_to_subst(ctx_factory): end """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) ref_knl = knl @@ -166,7 +166,7 @@ def test_assignment_to_subst_two_defs(ctx_factory): end """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) ref_knl = knl @@ -194,7 +194,7 @@ def test_assignment_to_subst_indices(ctx_factory): end """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) knl = lp.fix_parameters(knl, n=5) @@ -231,7 +231,7 @@ def test_if(ctx_factory): end """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) ref_knl = knl @@ -265,7 +265,7 @@ def test_tagged(ctx_factory): end """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) assert sum(1 for insn in lp.find_instructions(knl, "tag:input")) == 2 @@ -293,7 +293,7 @@ def test_matmul(ctx_factory, buffer_inames): end subroutine """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) assert len(knl.root_kernel.domains) == 1 @@ -355,7 +355,7 @@ def test_batched_sparse(): """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) knl = lp.split_iname(knl, "i", 128) knl = lp.tag_inames(knl, {"i_outer": "g.0"}) @@ -399,11 +399,11 @@ def test_fuse_kernels(ctx_factory): result(e,i,j) = prev + d(i,k)*q(e,k,j) """ - xderiv, = lp.parse_fortran( + xderiv = lp.parse_fortran( fortran_template.format(inner=xd_line, name="xderiv")) - yderiv, = lp.parse_fortran( + yderiv = lp.parse_fortran( fortran_template.format(inner=yd_line, name="yderiv")) - xyderiv, = lp.parse_fortran( + xyderiv = lp.parse_fortran( fortran_template.format( inner=(xd_line + "\n" + yd_line), name="xyderiv")) @@ -442,15 +442,17 @@ def test_parse_and_fuse_two_kernels(): !$loopy begin ! - ! fill, twice = lp.parse_fortran(SOURCE) + ! prg = lp.parse_fortran(SOURCE) + ! fill = prg["fill"] + ! twice = prg["twice"] ! knl = lp.fuse_kernels((fill, twice)) ! print(knl) - ! RESULT = [knl] + ! RESULT = knl ! !$loopy end """ - knl, = lp.parse_transformed_fortran(fortran_src) + knl = lp.parse_transformed_fortran(fortran_src) def test_precompute_some_exist(ctx_factory): @@ -470,7 +472,7 @@ def test_precompute_some_exist(ctx_factory): end subroutine """ - knl, = lp.parse_fortran(fortran_src) + knl = lp.parse_fortran(fortran_src) assert len(knl.root_kernel.domains) == 1 -- GitLab From ced3617c7635bd9d41a9c30ec4c45a73f1a7dea3 Mon Sep 17 00:00:00 2001 From: "Timothy A. Smith" Date: Wed, 14 Aug 2019 08:46:24 -0500 Subject: [PATCH 2/6] mark Fortran test as xfail since example seems to be broken --- test/test_fortran.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_fortran.py b/test/test_fortran.py index a94be0232..42911e097 100644 --- a/test/test_fortran.py +++ b/test/test_fortran.py @@ -416,6 +416,7 @@ def test_fuse_kernels(ctx_factory): lp.auto_test_vs_ref(xyderiv, ctx, knl, parameters=dict(nelements=20, ndofs=4)) +@pytest.mark.xfail def test_parse_and_fuse_two_kernels(): fortran_src = """ subroutine fill(out, a, n) -- GitLab From 555e212c6fafdc94f567cf98d6ec9831118a2d80 Mon Sep 17 00:00:00 2001 From: "Timothy A. Smith" Date: Wed, 14 Aug 2019 10:09:15 -0500 Subject: [PATCH 3/6] added a sane default for index_dtype when a Fortran subroutine doesn't have a loop --- loopy/frontend/fortran/translator.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/loopy/frontend/fortran/translator.py b/loopy/frontend/fortran/translator.py index 66961ce70..aa635eebf 100644 --- a/loopy/frontend/fortran/translator.py +++ b/loopy/frontend/fortran/translator.py @@ -797,13 +797,17 @@ class F2LoopyTranslator(FTreeWalkerBase): # }}} + index_dtype = self.index_dtype + if index_dtype is None: + index_dtype = np.int32 + knl = lp.make_function( sub.index_sets, sub.instructions, kernel_data, name=sub.subprogram_name, default_order="F", - index_dtype=self.index_dtype, + index_dtype=index_dtype, target=self.target, seq_dependencies=seq_dependencies, ) -- GitLab From 6b86c327ab899efe3648acb5704d898bc8401078 Mon Sep 17 00:00:00 2001 From: "Timothy A. Smith" Date: Wed, 14 Aug 2019 22:18:29 -0500 Subject: [PATCH 4/6] Revert "mark Fortran test as xfail since example seems to be broken" This reverts commit ced3617c7635bd9d41a9c30ec4c45a73f1a7dea3. --- test/test_fortran.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_fortran.py b/test/test_fortran.py index 42911e097..a94be0232 100644 --- a/test/test_fortran.py +++ b/test/test_fortran.py @@ -416,7 +416,6 @@ def test_fuse_kernels(ctx_factory): lp.auto_test_vs_ref(xyderiv, ctx, knl, parameters=dict(nelements=20, ndofs=4)) -@pytest.mark.xfail def test_parse_and_fuse_two_kernels(): fortran_src = """ subroutine fill(out, a, n) -- GitLab From acd70b141be841bad9287750a84e663b9572daed Mon Sep 17 00:00:00 2001 From: "Timothy A. Smith" Date: Wed, 14 Aug 2019 22:18:44 -0500 Subject: [PATCH 5/6] Revert "change some syntax so Fortran test code will parse successfully" This reverts commit cfd5e958d8cbbbcae8680b9ad21b729c01727d0b. --- test/test_fortran.py | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/test/test_fortran.py b/test/test_fortran.py index a94be0232..2b62148a9 100644 --- a/test/test_fortran.py +++ b/test/test_fortran.py @@ -60,15 +60,15 @@ def test_fill(ctx_factory): !$loopy begin ! - ! fill = lp.parse_fortran(SOURCE) + ! fill, = lp.parse_fortran(SOURCE) ! fill = lp.split_iname(fill, "i", split_amount, ! outer_tag="g.0", inner_tag="l.0") - ! RESULT = fill + ! RESULT = [fill] ! !$loopy end """ - knl = lp.parse_transformed_fortran(fortran_src, + knl, = lp.parse_transformed_fortran(fortran_src, pre_transform_code="split_amount = 128") assert "i_inner" in knl.root_kernel.all_inames() @@ -92,7 +92,7 @@ def test_fill_const(ctx_factory): end """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) ctx = ctx_factory() @@ -115,7 +115,7 @@ def test_asterisk_in_shape(ctx_factory): end """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) ctx = ctx_factory() queue = cl.CommandQueue(ctx) @@ -139,7 +139,7 @@ def test_assignment_to_subst(ctx_factory): end """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) ref_knl = knl @@ -166,7 +166,7 @@ def test_assignment_to_subst_two_defs(ctx_factory): end """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) ref_knl = knl @@ -194,7 +194,7 @@ def test_assignment_to_subst_indices(ctx_factory): end """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) knl = lp.fix_parameters(knl, n=5) @@ -231,7 +231,7 @@ def test_if(ctx_factory): end """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) ref_knl = knl @@ -265,7 +265,7 @@ def test_tagged(ctx_factory): end """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) assert sum(1 for insn in lp.find_instructions(knl, "tag:input")) == 2 @@ -293,7 +293,7 @@ def test_matmul(ctx_factory, buffer_inames): end subroutine """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) assert len(knl.root_kernel.domains) == 1 @@ -355,7 +355,7 @@ def test_batched_sparse(): """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) knl = lp.split_iname(knl, "i", 128) knl = lp.tag_inames(knl, {"i_outer": "g.0"}) @@ -399,11 +399,11 @@ def test_fuse_kernels(ctx_factory): result(e,i,j) = prev + d(i,k)*q(e,k,j) """ - xderiv = lp.parse_fortran( + xderiv, = lp.parse_fortran( fortran_template.format(inner=xd_line, name="xderiv")) - yderiv = lp.parse_fortran( + yderiv, = lp.parse_fortran( fortran_template.format(inner=yd_line, name="yderiv")) - xyderiv = lp.parse_fortran( + xyderiv, = lp.parse_fortran( fortran_template.format( inner=(xd_line + "\n" + yd_line), name="xyderiv")) @@ -442,17 +442,15 @@ def test_parse_and_fuse_two_kernels(): !$loopy begin ! - ! prg = lp.parse_fortran(SOURCE) - ! fill = prg["fill"] - ! twice = prg["twice"] + ! fill, twice = lp.parse_fortran(SOURCE) ! knl = lp.fuse_kernels((fill, twice)) ! print(knl) - ! RESULT = knl + ! RESULT = [knl] ! !$loopy end """ - knl = lp.parse_transformed_fortran(fortran_src) + knl, = lp.parse_transformed_fortran(fortran_src) def test_precompute_some_exist(ctx_factory): @@ -472,7 +470,7 @@ def test_precompute_some_exist(ctx_factory): end subroutine """ - knl = lp.parse_fortran(fortran_src) + knl, = lp.parse_fortran(fortran_src) assert len(knl.root_kernel.domains) == 1 -- GitLab From ac17838678136c8b47d4521f0c9b258eb7c5f79b Mon Sep 17 00:00:00 2001 From: "Timothy A. Smith" Date: Thu, 15 Aug 2019 11:33:52 -0500 Subject: [PATCH 6/6] refactor how index_dtype default is set in LoopKernel constructor --- loopy/frontend/fortran/translator.py | 6 +----- loopy/kernel/__init__.py | 4 +++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/loopy/frontend/fortran/translator.py b/loopy/frontend/fortran/translator.py index aa635eebf..66961ce70 100644 --- a/loopy/frontend/fortran/translator.py +++ b/loopy/frontend/fortran/translator.py @@ -797,17 +797,13 @@ class F2LoopyTranslator(FTreeWalkerBase): # }}} - index_dtype = self.index_dtype - if index_dtype is None: - index_dtype = np.int32 - knl = lp.make_function( sub.index_sets, sub.instructions, kernel_data, name=sub.subprogram_name, default_order="F", - index_dtype=index_dtype, + index_dtype=self.index_dtype, target=self.target, seq_dependencies=seq_dependencies, ) diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py index 5836b20cb..3168f6d8e 100644 --- a/loopy/kernel/__init__.py +++ b/loopy/kernel/__init__.py @@ -248,7 +248,7 @@ class LoopKernel(ImmutableRecordWithoutPickling): applied_iname_rewrites=None, cache_manager=None, - index_dtype=np.int32, + index_dtype=None, options=None, state=KernelState.INITIAL, @@ -292,6 +292,8 @@ class LoopKernel(ImmutableRecordWithoutPickling): if cache_manager is None: from loopy.kernel.tools import SetOperationCacheManager cache_manager = SetOperationCacheManager() + if index_dtype is None: + index_dtype = np.int32 # }}} -- GitLab