我正在使用 OpenCL,我需要memset()
全局设备内存中的某个数组。 CUDA 有一个memset()
- 类似 API 函数,但 OpenCL 没有。我读this,我在那里找到了两种可能的替代方案:
- using
memset()
在带有一些暂存缓冲区的主机上,然后clEnqueueWriteBuffer()
将其复制到设备上的缓冲区。
-
将以下内核排队:
__kernel void memset_uint4(
__global uint4* mem,
__private uint4 val)
{
mem[get_global_id(0)] = val;
}
哪个更好?或者更确切地说,在什么情况下/对于哪些平台,一个比另一个更好?
Note:如果内存归零的特殊情况值得特殊对待,那么也很高兴知道这一点。
您可以使用clEnqueueFillBuffer()从 OpenCL v1.2 开始。这正是您所需要的。并且它在如何用模式填充缓冲区方面非常灵活。
如果您使用的是 1.1 或更低版本...那么您必须诉诸其他方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)