【发布时间】:2015-01-29 16:17:46
【问题描述】:
我正在尝试学习 open cl,但有一个 混乱的根源我不明白 现在,它与这些行有关
size_t global_item_size = LIST_SIZE; // Process the entire lists
size_t local_item_size = 64; // Divide work items into groups of 64
ret = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL,
&global_item_size, &local_item_size, 0, NULL, NULL);
我知道内核在 LIST_SIZE 线程数上被调用(我的意思是我在执行中得到了 LIST_SIZE 内核,希望是并行的)[对吗?] 但是什么意思
size_t local_item_size = 64; // Divide work items into groups of 64
?
这是否意味着每个线程/内核都在 64 通道类似 simd 的波前执行? (如果是这样,我可以称之为双重并行化,但我可能会混淆一些东西)
有人可以澄清/帮助理解这一点吗?,[也可能添加一些重要的提示,在安排扭动此类内核时要注意什么?]
【问题讨论】:
-
如果您阅读该规范,则非常清楚。内核函数由每个工作项 (global_size) 执行。然后可选地,可以选择本地大小,在每个本地组的工作项之间提供额外的同步。显然,局部大小必须完全除以全局大小。
-
不明白,你不能解释更多(还有我读过的这个教程/文档,我无法在我的脑海中澄清这一点)
-
还有什么同步功能?
-
只需在 google 中快速搜索即可获得大量信息。 software.intel.com/sites/landingpage/opencl/optimization-guide/…
-
我知道,但我在 opencl 上阅读了 5 天,感到疲倦和困惑 - 在这种情况下,人与人之间的交谈可能会有所帮助
标签: parallel-processing opencl gpgpu