我正在使用 OpenCL,我需要memset()
在全局设备内存中存储一些数组。CUDA 有一个类似memset()
的 API 函数,但 OpenCL 没有。我读了这个,在那里我找到了两种可能的选择:
- 在主机上使用
memset()
一些暂存缓冲区,然后clEnqueueWriteBuffer()
将其复制到设备上的缓冲区。 将以下内核排队:
__kernel void memset_uint4( __global uint4* mem, __private uint4 val) { mem[get_global_id(0)] = val; }
哪个更好?或者更确切地说,在哪种情况下/哪个平台比另一个更好?
注意:如果归零内存的特殊情况值得特殊处理,那也很高兴知道。