ein*_*ica 3 performance memset opencl
我正在使用OpenCL,我需要memset()一些全局设备内存中的数组.CUDA具有类似memset()API的功能,但OpenCL没有.我读了这篇文章,在那里我发现了两种可能的选择
memset()与一些临时缓冲区在主机上,然后clEnqueueWriteBuffer()该复制到设备上的缓冲区.排队(sp?)以下内核:
__kernel void memset_uint4(__ global uint4*mem,__ private uint4 val){mem [get_global_id(0)] = val; }
哪个更好?或者更确切地说,在哪种情况下/哪个平台比另一个更好?
注意:如果零记忆的特殊情况值得特别对待,那也很高兴知道.
您可以使用OpenCL v1.2中的clEnqueueFillBuffer().这正是你所需要的.它在如何用模式填充缓冲区方面非常灵活.
这里是doc页面:
http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clEnqueueFillBuffer.html
如果你在1.1或以下....那么你应该重复其他方法.
一个很快的方法(如果你有额外的内存可用)是有一个预先调整大小的初始化数组(例如一个填充全零),然后在你需要将缓冲区清零时进行设备上的复制.根据我的经验,这比填写OpenCL或CUDA的任何调用要快得多.显然这是一个特例,但是当我上次测试它时要快得多.
| 归档时间: |
|
| 查看次数: |
5545 次 |
| 最近记录: |