Hi Markus,

you should only use fp_tex2D if your texref is bound to a 2D array--but
you are binding to linear memory. In this case, fp_tex1Dfetch() is the
right thing.

HTH,
Andreas

On Fri, 11 Mar 2011 17:39:19 +0100, Markus Wollgarten 
<[email protected]> wrote:
> Dear Mailing-Listeners!
> 
> Executing the following code (adapted from test_driver.py):
> 
> -------------------
> import pycuda.driver as drv
> import pycuda.gpuarray as ga
> from pycuda.compiler import SourceModule 
> 
> print "pycuda.VERSION "+str(pycuda.VERSION)
> print "Compute Capapility
> "+str(drv.Context.get_device().compute_capability())
> 
> for tp in [numpy.float32, numpy.float64]:
>     from pycuda.tools import dtype_to_ctype
>     
>     tp_cstr = dtype_to_ctype(tp)
>     mod = SourceModule("""
>     #include <pycuda-helpers.hpp>
>     
>     texture<fp_tex_%(tp)s, 2>my_tex;
>     
>     __global__ void copy_texture(%(tp)s *dest)
>     {
> 
> dest[threadIdx.xthreadIdx.y*8]=fp_tex2D(my_tex,threadIdx.y,threadIdx.x);
>     }
>     """ % {"tp": tp_cstr})
>     
>     copy_texture = mod.get_function("copy_texture")
>     my_tex = mod.get_texref("my_tex")
>     
>     shape = (8,2,)
>     a = numpy.random.randn(*shape).astype(tp)
>     
>     a_gpu = ga.to_gpu(a)
>     a_gpu.bind_to_texref_ext(my_tex, allow_double_hack=True)
>     blck=shape+(1,)
>     
>     dest = numpy.zeros(shape, dtype=tp)
>     g_dest=drv.to_device(dest)
>     copy_texture.prepare("P",blck,texrefs=[my_tex])
>     time=copy_texture.prepared_timed_call((1,1),g_dest)
>     dest=drv.from_device(g_dest, dest.shape, dest.dtype, order='C')
>     print a
>     print dest
> 
> ---------
> 
> returns:
> 
> 
> pycuda.VERSION (0, 94, 2)
> Compute Capapility (1, 3)
> [[-0.92633218  0.20489018]
>  [ 1.14500916  0.23236905]
>  [ 0.43516356  0.4719891 ]
>  [-0.8008799   0.81867486]
>  [-0.20814744 -0.55152911]
>  [ 0.81224    -1.37392473]
>  [ 1.99982738  0.11174646]
>  [ 0.11471771 -1.01642931]]
> [[-0.92633218 -0.92633218]
>  [-0.92633218 -0.92633218]
>  [-0.92633218 -0.92633218]
>  [-0.92633218 -0.92633218]
>  [ 0.          0.        ]
>  [ 0.          0.        ]
>  [ 0.          0.        ]
>  [ 0.          0.        ]]
> [[ -6.39043527e-01  -1.95960158e-01]
>  [  1.69915072e+00   1.16279297e+00]
>  [ -4.03001846e-01  -1.23898467e+00]
>  [  3.62089701e-01   1.84103824e-01]
>  [  5.73958324e-01  -3.26678644e-04]
>  [ -2.28391102e-01   1.59704601e+00]
>  [  1.43664545e+00  -1.15527274e-01]
>  [  4.74887599e-01   7.09184358e-01]]
> [[-0.63904353 -0.63904353]
>  [-0.63904353 -0.63904353]
>  [-0.63904353 -0.63904353]
>  [-0.63904353 -0.63904353]
>  [ 0.          0.        ]
>  [ 0.          0.        ]
>  [ 0.          0.        ]
>  [ 0.          0.        ]]
> 
> which is not what I expected, i.e. getting the same array back. The 1D
> test from test_driver.py works but for 2D I probably did something
> wrong. However, I have no clue what and would appreciate your help very
> much.
> 
> Best wishes,
> 
> Markus
> 
> 
> _______________________________________________
> PyCUDA mailing list
> [email protected]
> http://lists.tiker.net/listinfo/pycuda
> 

Attachment: pgpgjDmuQrcu0.pgp
Description: PGP signature

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

Reply via email to