From 14b1dc055e3a72cdcc945a3c80dfee85bb89dc41 Mon Sep 17 00:00:00 2001 From: Kaushik Kulkarni Date: Fri, 4 Oct 2019 15:20:25 -0500 Subject: [PATCH 1/6] corrects shape specification in temp var --- loopy/kernel/data.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py index 975d7b3ef..9f61f297d 100644 --- a/loopy/kernel/data.py +++ b/loopy/kernel/data.py @@ -525,7 +525,7 @@ class TemporaryVariable(ArrayBase): "_base_storage_access_may_be_aliasing", ] - def __init__(self, name, dtype=None, shape=(), address_space=None, + def __init__(self, name, dtype=None, shape=auto, address_space=None, dim_tags=None, offset=0, dim_names=None, strides=None, order=None, base_indices=None, storage_shape=None, base_storage=None, initializer=None, read_only=False, @@ -536,6 +536,8 @@ class TemporaryVariable(ArrayBase): :arg base_indices: :class:`loopy.auto` or a tuple of base indices """ + assert shape == auto or isinstance(shape, tuple) + scope = kwargs.pop("scope", None) if scope is not None: warn("Passing 'scope' is deprecated. Use 'address_space' instead.", @@ -579,7 +581,10 @@ class TemporaryVariable(ArrayBase): if shape is auto: shape = initializer.shape - + else: + if shape != initializer.shape: + raise LoopyError("Shape of '{}' does match that of the" + " initializer.".format(name)) else: raise LoopyError( "temporary variable '%s': " -- GitLab From 991660218954e965ddcb992c6de34358affd4923 Mon Sep 17 00:00:00 2001 From: Kaushik Kulkarni Date: Fri, 4 Oct 2019 18:04:11 -0500 Subject: [PATCH 2/6] fixes minor bugs in initialization --- loopy/kernel/data.py | 2 +- loopy/target/opencl.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py index 9f61f297d..12b7d053e 100644 --- a/loopy/kernel/data.py +++ b/loopy/kernel/data.py @@ -594,7 +594,7 @@ class TemporaryVariable(ArrayBase): if order is None: order = "C" - if base_indices is None: + if base_indices is None and shape is not auto: base_indices = (0,) * len(shape) if not read_only and initializer is not None: diff --git a/loopy/target/opencl.py b/loopy/target/opencl.py index 8a6e52842..9bdfa8ded 100644 --- a/loopy/target/opencl.py +++ b/loopy/target/opencl.py @@ -551,8 +551,10 @@ class OpenCLCASTBuilder(CASTBuilder): from loopy.kernel.data import TemporaryVariable, AddressSpace ecm = codegen_state.expression_to_code_mapper.with_assignments( { - old_val_var: TemporaryVariable(old_val_var, lhs_dtype), - new_val_var: TemporaryVariable(new_val_var, lhs_dtype), + old_val_var: TemporaryVariable(old_val_var, lhs_dtype, + shape=()), + new_val_var: TemporaryVariable(new_val_var, lhs_dtype, + shape=()), }) lhs_expr_code = ecm(lhs_expr, prec=PREC_NONE, type_context=None) -- GitLab From 8760433c93713205b77bd29827be31a8d22aceab Mon Sep 17 00:00:00 2001 From: Kaushik Kulkarni Date: Fri, 4 Oct 2019 19:04:28 -0500 Subject: [PATCH 3/6] minor change to account for different shape default for tv --- loopy/kernel/array.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/loopy/kernel/array.py b/loopy/kernel/array.py index 3588f38af..9cead8db8 100644 --- a/loopy/kernel/array.py +++ b/loopy/kernel/array.py @@ -934,7 +934,8 @@ class ArrayBase(ImmutableRecord): return len(target_axes) def num_user_axes(self, require_answer=True): - if self.shape is not None: + from loopy import auto + if self.shape not in (None, auto): return len(self.shape) if self.dim_tags is not None: return len(self.dim_tags) -- GitLab From b7e654b2fa965e60b9292565fc9d314c7a8cb985 Mon Sep 17 00:00:00 2001 From: Kaushik Kulkarni Date: Fri, 4 Oct 2019 19:20:25 -0500 Subject: [PATCH 4/6] shape can be more that tuple/auto; it can take in strings(for symbolic expressions) --- loopy/kernel/data.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py index 12b7d053e..603a4fbfb 100644 --- a/loopy/kernel/data.py +++ b/loopy/kernel/data.py @@ -536,8 +536,6 @@ class TemporaryVariable(ArrayBase): :arg base_indices: :class:`loopy.auto` or a tuple of base indices """ - assert shape == auto or isinstance(shape, tuple) - scope = kwargs.pop("scope", None) if scope is not None: warn("Passing 'scope' is deprecated. Use 'address_space' instead.", -- GitLab From 6c2a2c98f198ccf128c82b7661147b80a121520f Mon Sep 17 00:00:00 2001 From: Kaushik Kulkarni Date: Fri, 4 Oct 2019 21:47:44 -0500 Subject: [PATCH 5/6] corrects a minor error in a test --- test/test_loopy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_loopy.py b/test/test_loopy.py index d101f6fd0..36dc35688 100644 --- a/test/test_loopy.py +++ b/test/test_loopy.py @@ -68,7 +68,7 @@ def test_globals_decl_once_with_multi_subprogram(ctx_factory): out[ii] = 2*out[ii]+cnst[ii]{id=second} """, [lp.TemporaryVariable( - 'cnst', shape=('n'), initializer=cnst, + 'cnst', initializer=cnst, scope=lp.AddressSpace.GLOBAL, read_only=True), '...']) knl = lp.fix_parameters(knl, n=16) -- GitLab From 5e86f950208b70d0884dcd7c39b10d5286e12439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Kl=C3=B6ckner?= Date: Mon, 15 Jun 2020 20:33:49 +0200 Subject: [PATCH 6/6] Apply suggestion to loopy/kernel/data.py --- loopy/kernel/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py index 603a4fbfb..9ac38fc87 100644 --- a/loopy/kernel/data.py +++ b/loopy/kernel/data.py @@ -581,7 +581,7 @@ class TemporaryVariable(ArrayBase): shape = initializer.shape else: if shape != initializer.shape: - raise LoopyError("Shape of '{}' does match that of the" + raise LoopyError("Shape of '{}' does not match that of the" " initializer.".format(name)) else: raise LoopyError( -- GitLab