繁体   English   中英

Opencl 启动并发内核

[英]Opencl launch concurrent kernels

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

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

每个 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 上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM