根据documentation,kernal_name
函数需要3个API参数:
program.kernel_name(queue, shape, None, kernal-params...)
但未记录,使用了None
和shape
个参数。据我所知,第三个参数是内核函数本身,可能只是None
,但第二个参数shape
用于什么?
答案 0 :(得分:0)
根据书" OpenCL in Action"参数是:
通过代码中名为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语言的方式进行。这需要更多的打字,但优点是很清楚看到会发生什么: