From e46db02291a645b54ca853c6f001972d0582cc04 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 25 Sep 2018 11:28:14 -0500 Subject: [PATCH 1/2] Make sure Program.all_kernels() returns fully functional kernels (closees #244 on github) --- pyopencl/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index bc8cf16c..65132c17 100644 --- a/pyopencl/__init__.py +++ b/pyopencl/__init__.py @@ -349,7 +349,10 @@ class Program(object): return self._get_prg().get_build_info(*args, **kwargs) def all_kernels(self): - return self._get_prg().all_kernels() + result = self._get_prg().all_kernels() + for knl in result: + knl._setup(self) + return result def int_ptr(self): return self._get_prg().int_ptr -- GitLab From ab69833f0275502edb4731f719ebf597ebac659b Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 25 Sep 2018 11:28:45 -0500 Subject: [PATCH 2/2] Tweak wrapper tests to use all_kernels, test Kernel.get_work_group_info --- test/test_wrapper.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/test/test_wrapper.py b/test/test_wrapper.py index 5652d754..fff07e0d 100644 --- a/test/test_wrapper.py +++ b/test/test_wrapper.py @@ -48,7 +48,6 @@ else: def _skip_if_pocl(plat, up_to_version, msg='unsupported by pocl'): if plat.vendor == "The pocl project": if up_to_version is None or get_pocl_version(plat) <= up_to_version: - import pytest pytest.skip(msg) @@ -122,7 +121,7 @@ def test_get_info(ctx_factory): def do_test(cl_obj, info_cls, func=None, try_attr_form=True): if func is None: def func(info): - cl_obj.get_info(info) + cl_obj.get_info(info) for info_name in dir(info_cls): if not info_name.startswith("_") and info_name != "to_string": @@ -182,9 +181,20 @@ def test_get_info(ctx_factory): do_test(a_buf, cl.mem_info) - kernel = prg.sum + kernel = prg.all_kernels()[0] do_test(kernel, cl.kernel_info) + for i in range(2): # exercise cache + for info_name in dir(cl.kernel_work_group_info): + if not info_name.startswith("_") and info_name != "to_string": + try: + print("kernel_wg_info: %s" % info_name) + kernel.get_work_group_info( + getattr(cl.kernel_work_group_info, info_name), + device) + except cl.LogicError as err: + print("" % err) + evt = kernel(queue, (n,), None, a_buf) do_test(evt, cl.event_info) -- GitLab