From 635546acb95b3be40b82217396f74db97048948d Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Wed, 1 May 2024 10:36:48 -0500 Subject: [PATCH] Avoid de/allocations for zero-sized temporaries --- loopy/target/pyopencl.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/loopy/target/pyopencl.py b/loopy/target/pyopencl.py index 2742e472..d4a8944f 100644 --- a/loopy/target/pyopencl.py +++ b/loopy/target/pyopencl.py @@ -817,10 +817,16 @@ class PyOpenCLPythonASTBuilder(PythonASTBuilderBase): for tv in global_temporaries: if not tv.base_storage: - nbytes_str = ecm(tv.nbytes, PREC_NONE, "i") - allocated_var_names.append(tv.name) - code_lines.append(Assign(tv.name, - f"allocator({nbytes_str})")) + if tv.nbytes: + # NB: This does not prevent all zero-size allocations, + # as sizes are parametric, and allocation size + # could turn out to be zero at runtime. + nbytes_str = ecm(tv.nbytes, PREC_NONE, "i") + allocated_var_names.append(tv.name) + code_lines.append(Assign(tv.name, + f"allocator({nbytes_str})")) + else: + code_lines.append(Assign(tv.name, "None")) code_lines.append(Assign("_global_temporaries", "[{tvs}]".format( tvs=", ".join(tv for tv in allocated_var_names)))) -- GitLab