Hi,

I'm attempting to use complex numbers in a reduction. It appears that complex numbers are not allowed as return values from reductions.

A simple example using gpuarray and the sum reduction:


import pycuda
import pycuda.gpuarray
import pycuda.autoinit
import pycuda.driver as drv
import numpy

a = numpy.random.randn(100).astype(numpy.complex64)
b = numpy.random.randn(100).astype(numpy.complex64)

a_gpu = pycuda.gpuarray.to_gpu(a)
b_gpu = pycuda.gpuarray.to_gpu(b)


gpu_result = pycuda.gpuarray.sum(a_gpu * b_gpu.conj())

result = numpy.dot(a,b.conj())

print gpu_result - result


results in a compile problem :


*** compiler output in /tmp/tmp9FkFFC
Traceback (most recent call last):
  File "test_muladd.py", line 15, in <module>
    gpu_result = pycuda.gpuarray.sum(a_gpu * b_gpu.conj())
File "/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/gpuarray.py", line 977, in sum
    krnl = get_sum_kernel(dtype, a.dtype)
  File "<string>", line 2, in get_sum_kernel
File "/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/tools.py", line 485, in context_dependent_memoize
    result = func(*args)
File "/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/reduction.py", line 271, in get_sum_kernel
    keep=True)
File "/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/reduction.py", line 188, in __init__
    preamble=preamble)
File "/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/reduction.py", line 163, in get_reduction_kernel_and_types
    name, keep, options, preamble)
File "/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/reduction.py", line 147, in get_reduction_module
    return SourceModule(src, options=options, keep=keep)
File "/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/compiler.py", line 238, in __init__
    arch, code, cache_dir, include_dirs)
File "/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/compiler.py", line 228, in compile
    return compile_plain(source, options, keep, nvcc, cache_dir)
File "/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/compiler.py", line 107, in compile_plain
    cmdline, stdout=stdout, stderr=stderr)
pycuda.driver.CompileError: nvcc compilation of /tmp/tmp9FkFFC/kernel.cu failed [command: nvcc --cubin -arch sm_20 -I/usr/local/midas/baseline/2010/python-2.6.2/pkg/lib/python2.6/site-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/../include/pycuda --keep kernel.cu]
[stderr:
kernel.cu(7): error: name followed by "::" must be a class or namespace name

kernel.cu(7): error: expected an identifier

kernel.cu(7): error: expected a ";"

kernel.cu(11): warning: invalid attribute for variable "reduce_kernel_stage1"

kernel.cu(11): error: incomplete type is not allowed

kernel.cu(11): error: identifier "out_type" is undefined

kernel.cu(11): error: identifier "out" is undefined

kernel.cu(11): error: expected a ")"

kernel.cu(13): error: expected a ";"

kernel.cu(36): warning: parsing restarts here after previous syntax error

kernel.cu(40): error: expected a declaration

kernel.cu(45): error: expected a declaration

kernel.cu(49): error: expected a declaration

kernel.cu(61): warning: parsing restarts here after previous syntax error

kernel.cu(64): error: expected a declaration

12 errors detected in the compilation of "kernel.cpp4.ii".
]

This may need a fix.

-- Frank Lind

<<attachment: flind.vcf>>

_______________________________________________
PyCUDA mailing list
[email protected]
http://lists.tiker.net/listinfo/pycuda

Reply via email to