Thanks for the help.  I've found plenty of references on OpenCL, but I'm
surprised that the only pyopencl samples I've run across are the three in
the source.  I'm trying to find ones that use threadIdx.x/y and __local
kernel args, since I wasn't able to figure out how you interface with those
things from python.
Also- when I run the narray.py example, I get this:

Traceback (most recent call last):
  File "narray.py", line 6, in <module>
    ctx = cl.create_context_from_type(cl.device_type.GPU)
pyopencl.RuntimeError: clCreateContextFromType failed: device not found

This is running on OS X Snow Leopard w/ 0.91, installed exactly according
the steps in the installation wiki.  My GPU is an ATI Radeon HD 2600, from
an iMac7,1 (~1.5 yrs old).

On Wed, Sep 16, 2009 at 8:26 PM, David Garcia <[email protected]> wrote:

> Hi Matt,
> Good, I was going to reply the that the code looked and ran fine :)
> For any doubts about the semantics of OpenCL I can only recommend reading
> the spec, at least chapters 1, 2 and 3.
>
> http://www.khronos.org/registry/cl/specs/opencl-1.0.43.pdf
>
> Cheers,
>
> David
>
>
> 2009/9/16 Matt Gattis <[email protected]>
>
>>  Apologize, my code seems to work... was using numpy's float64 so I should
>> have been using double * in my opencl code.
>>
>>
>> On Wed, Sep 16, 2009 at 7:16 PM, Matt Gattis <[email protected]> wrote:
>>
>>> Hi, I am having trouble with the basic usage of pyopencl.  What is the
>>> GLOBAL_SIZE parameter to the kernel calls?  I can't seem to find a
>>> description of this in the documentation.  Perhaps it would help if anybody
>>> knows where a few example programs could be found, outside of the three that
>>> are included with the source?
>>> Here's my failed attempt to multiply two square matrices:
>>>
>>> import sys
>>> import pyopencl as cl
>>> from numpy import *
>>>
>>> N = int(sys.argv[1])
>>> precision = int(sys.argv[2])
>>>
>>> m1 = random.rand(N,N).astype('float%s' % precision)
>>> m2 = random.rand(N,N).astype('float%s' % precision)
>>>
>>> print "m1:\n",m1
>>> print "m2:\n",m2
>>>
>>> ctx = cl.create_context_from_type(cl.device_type.ALL)
>>> queue = cl.CommandQueue(ctx)
>>>
>>> mf = cl.mem_flags
>>> a_buf = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=m1)
>>> b_buf = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=m2)
>>> dest_buf = cl.Buffer(ctx, mf.WRITE_ONLY, m2.nbytes)
>>>
>>> prg = cl.Program(ctx, """
>>>
>>>
>>>
>>> __kernel void multwo(__global float *a,
>>>
>>>
>>>
>>>                      __global float *b,
>>>
>>>
>>>
>>>                      __global float *c)
>>>
>>>
>>>
>>> {
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>   int row = get_global_id(1);
>>>
>>>
>>>
>>>   int col = get_global_id(0);
>>>   float sum = 0.0f;
>>>
>>>
>>>
>>>   for (int i = 0; i < %d; i++) {
>>>
>>>
>>>
>>>      sum += a[row*%d+i] * b[i*%d+col];
>>>   }
>>>
>>>
>>>
>>>   c[row*%d+col] = sum;
>>>
>>>
>>>
>>> }
>>>
>>>
>>>
>>> """%(N,N,N,N)).build()
>>>
>>> prg.multwo(queue, (N,N), a_buf, b_buf, dest_buf)
>>>
>>> product = zeros([N,N],dtype='float%s' % precision)
>>> cl.enqueue_read_buffer(queue, dest_buf, product).wait()
>>>
>>> print product
>>>
>>>
>>> I get a bogus result:
>>>
>>> [[  1.21239019e+002   9.03297802e-315   0.00000000e+000]
>>>  [  0.00000000e+000   0.00000000e+000   0.00000000e+000]
>>>  [  0.00000000e+000   0.00000000e+000   0.00000000e+000]]
>>>
>>
>>
>> _______________________________________________
>> PyOpenCL mailing list
>> [email protected]
>> http://tiker.net/mailman/listinfo/pyopencl_tiker.net
>>
>>
>
_______________________________________________
PyOpenCL mailing list
[email protected]
http://tiker.net/mailman/listinfo/pyopencl_tiker.net

Reply via email to