diff --git a/loopy/target/pyopencl_execution.py b/loopy/target/pyopencl_execution.py index a8f47adb991e331f8a473c4eb14b1ea634c7a3b1..2da25ba39ceef38a4af105913973226bd3773729 100644 --- a/loopy/target/pyopencl_execution.py +++ b/loopy/target/pyopencl_execution.py @@ -25,6 +25,7 @@ THE SOFTWARE. import six from six.moves import range, zip +import numpy as np from pytools import ImmutableRecord, memoize_method from loopy.diagnostic import ParameterFinderWarning from pytools.py_codegen import ( @@ -686,8 +687,17 @@ class PyOpenCLKernelExecutor(KernelExecutorBase): # {{{ debugging aids def get_code(self, arg_to_dtype=None): + def process_dtype(dtype): + if isinstance(dtype, type) and issubclass(dtype, np.generic): + dtype = np.dtype(dtype) + if isinstance(dtype, np.dtype): + dtype = NumpyType(dtype, self.kernel.target) + + return dtype + if arg_to_dtype is not None: - arg_to_dtype = frozenset(six.iteritems(arg_to_dtype)) + arg_to_dtype = frozenset( + (k, process_dtype(v)) for k, v in six.iteritems(arg_to_dtype)) kernel = self.get_typed_and_scheduled_kernel(arg_to_dtype)