diff --git a/loopy/target/pyopencl.py b/loopy/target/pyopencl.py index 34faf0a03d60b5be391c7f49e9baf247093e965a..e8b5e4464be3206b5b590d38ed435d513d1641fe 100644 --- a/loopy/target/pyopencl.py +++ b/loopy/target/pyopencl.py @@ -411,6 +411,9 @@ class PyOpenCLTarget(OpenCLTarget): from loopy.target.pyopencl_execution import PyOpenCLKernelExecutor return PyOpenCLKernelExecutor(queue.context, kernel) + def with_device(self, device): + return type(self)(device) + # }}} diff --git a/loopy/target/pyopencl_execution.py b/loopy/target/pyopencl_execution.py index 27be619870de6939cf3de06751dea65a3fd558c0..0186a279fed37913e4e29a31f1f5c0933b1b2ea9 100644 --- a/loopy/target/pyopencl_execution.py +++ b/loopy/target/pyopencl_execution.py @@ -267,7 +267,8 @@ class PyOpenCLKernelExecutor(KernelExecutorBase): from loopy.target.pyopencl import PyOpenCLTarget if isinstance(kernel.target, PyOpenCLTarget): - self.kernel = kernel.copy(target=PyOpenCLTarget(context.devices[0])) + self.kernel = kernel.copy(target=( + kernel.target.with_device(context.devices[0]))) def get_invoker_uncached(self, kernel, codegen_result): generator = PyOpenCLExecutionWrapperGenerator()