关于OpenCL中缓冲区传输的问题: 我想将缓冲区(cl_mem)从主机传递到内核(即传递给设备)。 有两个主机功能:
我使用clSetKernelArg将我的缓冲区传递给其中一个内核参数。但这是否意味着缓冲区会自动转移到设备上? 此外,还有函数clEnqueueWriteBuffer,它将缓冲区写入设备。
我的问题:对于我的用例(将缓冲区传递给内核),只使用(a。)clSetKernelArg或(b。)clSetKernelArg和clEnqueueWriteBuffer是否有区别?
答案 0 :(得分:2)
您必须在将内核排入队列以执行之前调用这两个函数。
<强> clSetKernelArg 强>
用于设置内核的特定参数的参数值。
这个只设置参数值,例如一些指针,用于被调用的内核。 没有隐式数据传输。
请考虑以下示例:
clSetKernelArg()
切换读取和写入缓冲区(双缓冲)
一般来说:主机和计算设备之间的数据传输非常昂贵,因此应该避免,最好通过明确触发它们来实现。