Python PyOpenCL内核参数
根据Python PyOpenCL内核参数,python,opencl,pyopencl,Python,Opencl,Pyopencl,根据kernal_name函数需要3个API参数: program.kernel_name(queue, shape, None, kernal-params...) 但是它没有文档化,使用的是None和shape参数。据我所知,第三个参数是内核函数本身,可以是None,但第二个参数shape用于什么?根据《OpenCL在运行》一书,参数是: 排队 全局大小:元组 局部大小:元组 *args:内核的参数 全局偏移=无 等待=无 内核函数是通过您在代码中称为kernel_name的名称来选择的。
kernal_name
函数需要3个API参数:
program.kernel_name(queue, shape, None, kernal-params...)
但是它没有文档化,使用的是None
和shape
参数。据我所知,第三个参数是内核函数本身,可以是None
,但第二个参数shape
用于什么?根据《OpenCL在运行》一书,参数是:
program.mult(队列,(25,),(25,),标量,浮点缓冲区,lm)
。
从程序中,创建名为“mult”的内核,将全局和局部大小设置为25,即它是一个1D任务,并将参数scalar(numpy.float32类型)、float_buffer(cl.buffer类型)和lm(cl.LocalMemory类型)传递给内核。
相应的内核是:
\uuuuu内核void mult(float num,\uuuu全局浮点*全局浮点,\uuuu局部浮点4*局部浮点){…}
当然,您也可以按照纯C的方式进行操作。这需要更多的键入,但优点是可以非常清楚地看到发生了什么:
你能解释一下为什么全局大小和局部大小都是元组吗?对于全局大小,你可以说你想要多少个工作项。它可以是1d、2d或3d元组,例如,您希望更改320x240px图像的亮度->仅使用(320240)作为全局大小。对于本地大小,您可以说您希望在一个工作组中放置多少个工作项,即划分您的工作项。工作组中的项目可以一起工作,例如,它们可以共享快速本地内存。因为您将全局大小和本地大小划分为多个组,所以这两个组必须具有相同的维度,例如g.s=(1,10)和l.s=(1,2)给出5个组。如果你不关心工作小组,那就什么也不关心。