Opencl 启动并发内核

特立独行

据我所知,要执行并发内核(在我的情况下是相同的内核但不同的 I/O 数据),必须通过启动独特的计算单元(流式多处理器 -SM)来完成,显然它们有自己的工作组。

例如 gtx960m 有 5 个 SM(Opencl 中的计算单元)。clEnqueueNDRangeKernel以自己的 16x16 (2d) 工作组异步无序启动5 次,是否会启动所有 5 个计算单元以同时执行它们?报告的本地内存为 64kb。那是针对所有计算单元还是每个计算单元都有 64kb?

ProjectPhysX

每个 CU 有 4 个(麦克斯韦/帕斯卡)或 2 个(图灵/安培,AMD)扭曲。Warp 是一组 32 个 CUDA 核心/硬件流处理器。

在一个 Warp 中运行的所有线程必须执行完全相同的指令。在 Warp 中,甚至不可能进行分支。一个 CU 中的两个 Warp 可以处理不同的分支,但不能同时处理不同的内核。

如果您在具有 5 个 CU 的 960m 上并行执行不同队列中的两个内核,例如,内核 1 可以有 3 个 CU,内核 2 可以有剩余的 2 个。但是不能拆分一个 CU 以同时运行多个内核。

在 OpenCL 中,您可以将工作组大小设置为 Warp 大小 (32) 的倍数。可以在一个 Maxwell CU 上同时执行 4 个(工作组大小为 32)、2 个(工作组大小为 64)或 1 个(工作组大小为 128 或更大)的 OpenCL 工作组。

每个 CU 的本地内存量(在您的情况下为 64KB)。因此,如果您有一个大型工作组,例如 256 个线程,则每个线程的可用本地内存比工作组大小为 64 时少,因为工作组中的所有线程都共享相同的本地内存,如果它们运行在一个 CU 上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章