On Mon, 11 Jul 2011 10:37:45 +0400, Алексей Гурин <[email protected]> wrote:
> 
> 11 июля 2011, 08:33 от Andreas Kloeckner <[email protected]>:
> > Dear Алексей,
> > 
> > On Fri, 08 Jul 2011 10:33:04 +0400, Алексей Гурин wrote:
> > > 06 июля 2011, 07:17 от Алексей Гурин:
> > >
> > >> When i try to pass double precision argument in this code
> > >>
> > >> ##########################
> > >> import pycuda.autoinit
> > >> import pycuda.driver as drv
> > >> import numpy as np
> > >> from pycuda.compiler import SourceModule
> > >>
> > >> mod = SourceModule("""
> > >> __global__ void someFunc(double *array,double var,int N)
> > >> {
> > >> int i = blockIdx.x*blockDim.x + threadIdx.x;
> > >> if (i < N)
> > >> {
> > >> array[i] = var;
> > >> }
> > >> }
> > >> """,arch="sm_13")
> > >>(snip)
> > >> ##########################
> > >>
> > >> i get incorrect output
> > >>
> > >> [ 2.12204896e-310 2.12204896e-310 2.12204896e-310 ...,
> > >> 2.12204896e-310 2.12204896e-310 2.12204896e-310]
> > >>
> > >> when expected
> > >>
> > >> [ 10. 10. 10. ..., 10. 10. 10.]
> > >>
> > >> i tried this on pycuda 2011.1.1 and pycuda 2011.1.2 on GeForce GTX
> > >
> > > i solved it somehow. When i pass arguments of different sizes like
> > > double = 8 bytes, int = 4 bytes and pointer to double = 4 bytes, size
> > > in bytes of all args before double must be a multiple of 8
> > >
> > > for example:
> > > double*,double,int - incorrect result
> > > double*,int,double - correct
> > > double*,int,int,double - incorrect
> > >
> > > if i put all 8 byte arguments before 4 byte ones it also works
> > > correctly
> > 
> > What kind of system are you on? (OS, Bitness, ...) What seems to be the 
> > case is that Python's struct module and nvcc disagree about alignment on 
> > your system. That's nasty. Unfortunately, I can't seem to provoke a 
> > similar bug on my 64-bit Linux system.
> > 
> > Andreas
> 
> i'm on Ubuntu linux 11.04 32-bit using CUDA 4.0.17. 

Can someone on 32-bit system confirm? What compiler are you using? Can
you try and figure out the string passed to struct.pack() to pack the
arguments?

Andreas

Attachment: pgpzCt1dU1s2O.pgp
Description: PGP signature

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

Reply via email to