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
