PyOpenCL内核参数

时间:2018-05-16 14:09:48

标签: python opencl pyopencl

根据documentationkernal_name函数需要3个API参数:

program.kernel_name(queue, shape, None, kernal-params...)

但未记录,使用了Noneshape个参数。据我所知,第三个参数是内核函数本身,可能只是None,但第二个参数shape用于什么?

1 个答案:

答案 0 :(得分:0)

根据书" OpenCL in Action"参数是:

  1. 队列
  2. global_size:tuple
  3. local_size:tuple
  4. * args:内核参数
  5. global_offset =无
  6. wait_for =无
  7. 通过代码中名为kernel_name的名称选择内核函数。 例如。如果你有一个名为" __ kernel void foo(...)"的内核函数,那么只需在Python中调用program.foo(...)。 global_size指定使用的工作项数量,本地大小指定工作组的大小。 内核的参数按照它们出现在内核函数中的顺序传递,用* args。

    表示

    以下是上述书中的一个例子: program.mult(queue, (25,), (25,), scalar, float_buffer, lm)。 从程序中,名为" mult"的内核创建,全局和本地大小设置为25,即它是一维任务,并传递参数标量(类型为numpy.float32),float_buffer(类型为cl.Buffer)和lm(类型为cl.LocalMemory)到内核​​。 相应的内核是: __kernel void mult(float num, __global float *global_floats, __local float4 *local_floats) {...}

    当然,您也可以按照C语言的方式进行。这需要更多的打字,但优点是很清楚看到会发生什么:

    1. 创建内核:cl.Kernel
    2. 设置参数:kernel.set_arg
    3. 入队任务:cl.enqueue_nd_range_kernel