I've noticed that the 'take' function doesn't seem to work for arrays
complex dtypes (complex64, complex128). I've added to patches that allow
this to work. It requires adding texture support for these types.
As was done for double precision, it is a bit hacky. I'm not sure if there
is a much better way as there doesn't seem to be native support for these
types in cuda.
There are two patches as this requires adding some lines to
"pycuda-helpers.hpp" and "gpuarray.py", as well as some lines in the
compyte submodule to add in the mapping to the fake texture types.
Below is a small script that demonstrates this issue for my install.
from pycuda.gpuarray import to_gpu, take
a = numpy.array([1, 2, 3, 4+2j, 5])
b = a.astype(numpy.complex64)
c = a.astype(numpy.complex128)
i = numpy.array([3, 1], dtype=numpy.int64)
i_gpu = to_gpu(i)
b_gpu = to_gpu(b)
c_gpu = to_gpu(a)
print take(b_gpu, i_gpu)
print take(c_gpu, i_gpu)
Show replies by date