我正在使用OpenCL,並且我需要memset()
全局設備內存中的一些數組。 CUDA具有類似memset()
的API函數,但OpenCL不支持。我讀this,在那裏我發現了兩個可能的選擇:什麼是OpenCL最快的memset()替代品?
- 一些臨時緩衝區在主機上使用
memset()
,然後clEnqueueWriteBuffer()
來複制到設備上的緩衝。 入隊(藻?)下面的內核:
__kernel空隙memset_uint4(__全球uint4 * MEM,__私人uint4 VAL){ MEM [get_global_id(0)] = VAL; }
哪個更好?或者說,在哪種情況下/哪個平臺比另一個更好呢?
備註:如果零記憶的特殊情況值得特別處理,那也很好。
由於OP提到CUDA,很可能他們正在使用NVidia的卡,目前只支持OpenCL 1.1。此外,您的答案並未解決兩個給定方法中哪一個「更好」的問題。 – xperroni
開普勒或更高版本架構的NVIDIA®(英偉達™)卡從2015年開始支持OpenCL 1.2。[驅動程序發行說明](https://a248.e.akamai.net/f/248/10/10/us.download.nvidia.com /Windows/350.12/350.12-win8-win7-winvista-desktop-release-notes.pdf) – einpoklum