diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index bc8cf16c6da2a6115320e1792c9977e0d93ba554..65132c1744d828ab274d58a462779c98c80a7991 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 diff --git a/test/test_wrapper.py b/test/test_wrapper.py index 5652d754b635bc96a384ae8675105e4d7f184742..fff07e0d1e115d0ff80482a754f6d5b542fb2ea6 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)