The GPU uses single precision by default, so you need to use a higher
threshold 1e-7 works.
Craig


On Thu, Feb 20, 2014 at 10:00 AM, <[email protected]> wrote:

> Send PyCUDA mailing list submissions to
>         [email protected]
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         http://lists.tiker.net/listinfo/pycuda
> or, via email, send a message with subject or body 'help' to
>         [email protected]
>
> You can reach the person managing the list at
>         [email protected]
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of PyCUDA digest..."
>
>
> Today's Topics:
>
>    1. strange behaviour of cumath.exp (Dirk Boonzajer Flaes)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Thu, 20 Feb 2014 17:31:36 +0100
> From: Dirk Boonzajer Flaes <[email protected]>
> To: <[email protected]>
> Subject: [PyCUDA] strange behaviour of cumath.exp
> Message-ID: <[email protected]>
> Content-Type: text/plain; charset="iso-8859-1"; Format="flowed"
>
> Hi All!
>
> I am quite new to GPU programming, but I found some strange behaviour in
> the cumath.exp function. Maybe it is well known, but to me it seems that
> the real and imaginary part are swapped. Consider the following code:
>
>
>      import pycuda.gpuarray as gpuarray
>      import pycuda.autoinit
>      import pycuda.cumath as cumath
>      import numpy as np
>
>      # create some random numbers in the complex plane
>      random_reals = np.random.rand(100,100)
>      random_complex = np.exp(1j*random_reals)
>
>      # use the same random numbers, but compute the complex numbers on
> the GPU
>      g_random_reals = gpuarray.to_gpu(random_reals)
>      g_random_complex = cumath.exp(1.j*g_random_reals)
>
>      # it seems that the two arrays are not equal
>      print "Equal: " , np.all(g_random_complex.get().real -
> random_complex.real < 1e-12)
>
>      # .. but the imaginary part and the real part are just swapped
>      print "Imag and real swapped 1: " ,
> np.all(g_random_complex.get().imag - random_complex.real < 1e-12)
>      print "Imag and real swapped 2: " ,
> np.all(g_random_complex.get().real - random_complex.imag < 1e-12)
>
> prints
>
> Equal:  False
> Imag and real swapped 1:  True
> Imag and real swapped 2:  True
>
>
>
>
> Is this indeed a bug? Or am I just missing something?
>
> regards,
>
> Dirk
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <
> http://lists.tiker.net/pipermail/pycuda/attachments/20140220/958e5bb3/attachment-0001.html
> >
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> PyCUDA mailing list
> [email protected]
> http://lists.tiker.net/listinfo/pycuda
>
>
> ------------------------------
>
> End of PyCUDA Digest, Vol 68, Issue 4
> *************************************
>
_______________________________________________
PyCUDA mailing list
[email protected]
http://lists.tiker.net/listinfo/pycuda

Reply via email to