【发布时间】:2018-10-26 15:28:07
【问题描述】:
根据documentationkernal_name函数需要3个API参数:
program.kernel_name(queue, shape, None, kernal-params...)
但没有记录,None 和 shape 参数的用途。据我了解,第三个参数是内核函数本身,可以是None,但第二个参数shape是干什么用的?
【问题讨论】:
根据documentationkernal_name函数需要3个API参数:
program.kernel_name(queue, shape, None, kernal-params...)
但没有记录,None 和 shape 参数的用途。据我了解,第三个参数是内核函数本身,可以是None,但第二个参数shape是干什么用的?
【问题讨论】:
根据“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,即它是一个一维任务,参数 scalar(类型为 numpy.float32)、float_buffer(类型为 cl.Buffer)和 lm(类型为 cl.LocalMemory)被传递给内核。
对应的内核是:
__kernel void mult(float num, __global float *global_floats, __local float4 *local_floats) {...}
当然,你也可以像在纯 C 中那样做。这需要更多的输入,但优点是很清楚会发生什么:
【讨论】: