Hi Andreas,
Now I know what you were talking about. You try to implement complex
numbers at the C++ level instead of the Python level, so very little
change is needed in the Python codes. It should make it easier to maintain.
Could you also modify elementwise.py and reduction.py so that
pycuda-complex.hpp is included in the preamble when the dtypes are
complex? This should make +, -, *, / , etc work for complex GPUArray
objects.
Could you merge the complex branch to the master branch as soon as
possible? I am close to finish my Python package which uses Pycuda. I
want people to be able to use my package with the latest Pycuda.
Thank you for your work on Pycuda.
Daniel
Andreas Klöckner wrote:
Hi Daniel,
To be honest, I'd much prefer an overloaded 'complex' class over just
"float2", which could mean any number of things. I.e. this would be just like
std::complex (which we can't use directly since nvcc doesn't like it).
I've prototyped this based on STLPort's [1] excellent complex arithmetic class
in a new branch 'complex' in PyCUDA's git. Check out
'examples/demo_complex.py'. This needs some work before it's ready for prime
time, but I think it might be a better way forward. What do you think?
Andreas
[1] License is MIT-compatible, I think? Any lawyers?
On Donnerstag 24 Dezember 2009, Ying Wai (Daniel) Fan wrote:
Hi,
Regarding my complex arithmetic wrapper (complex.py) posted previously
on this mailing list, the following changes need to be made to make it
work. One usage scenario of the wraper is arithmetic operations on the
output of CUFFT, which is in float2 datatype on the GPU.
diff --git a/pycuda/tools.py b/pycuda/tools.py
index f91a6d5..d7af3a9 100644
--- a/pycuda/tools.py
+++ b/pycuda/tools.py
@@ -371,6 +371,8 @@ def dtype_to_ctype(dtype, with_fp_tex_hack=False):
return "fp_tex_double"
else:
return "double"
+ elif dtype == numpy.complex64:
+ return "float2"
else:
raise ValueError, "unable to map dtype '%s'" % dtype
@@ -447,6 +449,7 @@ def parse_c_arg(c_arg):
elif tp in ["char"]: dtype = numpy.int8
elif tp in ["unsigned char"]: dtype = numpy.uint8
elif tp in ["bool"]: dtype = numpy.bool
+ elif tp in ["float2"]: dtype = numpy.complex64
else: raise ValueError, "unknown type '%s'" % tp
return arg_class(dtype, name)
Daniel
_______________________________________________
PyCUDA mailing list
PyCUDA@tiker.net
http://tiker.net/mailman/listinfo/pycuda_tiker.net