Hello Ajay,

Your arrays are of an incorrect type (float64, while kernel treats
them as float32). You can fix it by writing

o = array([range(10),range(10)]).astype(float32)

On Thu, Nov 22, 2012 at 12:17 PM, Ajay Shah <[email protected]> wrote:
> Hello,
>
> This is something I'm a bit stumped on.
>
> I know how to operate on two vectors by using "Adventures in Pyopencl", but
> when I use components of a vector to do operations, I get the wrong results.
> when printing the results, c = a zero vector.
>
> Could you look at my simple code?
>
> from numpy import *
> import pyopencl as cl
>
> ctx = cl.create_some_context()
> queue = cl.CommandQueue(ctx)
> fstr = "__kernel void part1(__global float* a, __global float* b,__global
> float* c,){  unsigned int i = get_global_id(0); float value = 0;  value =
> (a[i] + b[i]); c[i] = value ; }"
> program = cl.Program(ctx,fstr).build()
>
> o = array([range(10),range(10)])
> a = o[0,:]
> b = o[1,:]
>
> mf = cl.mem_flags
> a_buf = cl.Buffer(ctx,mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf = a.copy())
> b_buf = cl.Buffer(ctx,mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf = b.copy())
> dest_buf = cl.Buffer(.ctx, mf.WRITE_ONLY, b.nbytes)
>
> program.part1(queue, a.shape, None, a_buf, b_buf,dest_buf)
> c = empty_like(a)
> cl.enqueue_read_buffer(queue, dest_buf, c).wait()
>
> Thanks,
>
> Ajay
>
> _______________________________________________
> PyOpenCL mailing list
> [email protected]
> http://lists.tiker.net/listinfo/pyopencl
>

_______________________________________________
PyOpenCL mailing list
[email protected]
http://lists.tiker.net/listinfo/pyopencl

Reply via email to