Opencl 启动并发内核
Opencl launch concurrent kernels
据我所知,要执行并发内核(在我的例子中是相同的内核但不同的 I/O 数据),必须通过启动具有明显自己的工作组的独特计算单元(流式多处理器 -SM)来完成.
例如 gtx960m 有 5 个 SM(Opencl 中的计算单元)。以自己的 16x16 (2d) 工作组异步且无序地启动 clEnqueueNDRangeKernel
5 次,会启动所有 5 个计算单元并发执行它们吗?报告的本地内存为 64kb。那是针对所有计算单元还是每个计算单元都有自己的 64kb?
每个 CU 有 4 个 (Maxwell/Pascal) 或 2 个 (Turing/Ampere, AMD) Warps。一个 Warp 是硬件中的一组 32 个 CUDA 核心/流处理器。
在一个 Warp 中的所有线程 运行ning 必须执行完全相同的指令。在一个 Warp 中,甚至连分支都是不可能的。一个 CU 中的两个 Warp 可以处理不同的分支,但不能同时处理不同的内核。
如果您在 960m 上使用 5 个 CU 在不同队列中并行执行两个内核,例如内核 1 可以有 3 个 CU,内核 2 可以有剩余的 2 个。但是 CU 不能拆分为 运行 同时使用多个内核。
在 OpenCL 中,您可以将工作组大小设置为 Warp 大小 (32) 的某个倍数。 4(工作组大小 32)、2(工作组大小 64)或 1(工作组大小 128 或更大)OpenCL 工作组可以同时在一个 Maxwell CU 上执行。
每个 CU 的本地内存量(在您的情况下为 64KB)。因此,如果您有一个大型工作组,例如 256 个线程,则每个线程的可用本地内存比工作组大小为 64 的情况要少,因为工作组中的所有线程在它们 运行 所在的一个 CU 上共享相同的本地内存.
据我所知,要执行并发内核(在我的例子中是相同的内核但不同的 I/O 数据),必须通过启动具有明显自己的工作组的独特计算单元(流式多处理器 -SM)来完成.
例如 gtx960m 有 5 个 SM(Opencl 中的计算单元)。以自己的 16x16 (2d) 工作组异步且无序地启动 clEnqueueNDRangeKernel
5 次,会启动所有 5 个计算单元并发执行它们吗?报告的本地内存为 64kb。那是针对所有计算单元还是每个计算单元都有自己的 64kb?
每个 CU 有 4 个 (Maxwell/Pascal) 或 2 个 (Turing/Ampere, AMD) Warps。一个 Warp 是硬件中的一组 32 个 CUDA 核心/流处理器。
在一个 Warp 中的所有线程 运行ning 必须执行完全相同的指令。在一个 Warp 中,甚至连分支都是不可能的。一个 CU 中的两个 Warp 可以处理不同的分支,但不能同时处理不同的内核。
如果您在 960m 上使用 5 个 CU 在不同队列中并行执行两个内核,例如内核 1 可以有 3 个 CU,内核 2 可以有剩余的 2 个。但是 CU 不能拆分为 运行 同时使用多个内核。
在 OpenCL 中,您可以将工作组大小设置为 Warp 大小 (32) 的某个倍数。 4(工作组大小 32)、2(工作组大小 64)或 1(工作组大小 128 或更大)OpenCL 工作组可以同时在一个 Maxwell CU 上执行。
每个 CU 的本地内存量(在您的情况下为 64KB)。因此,如果您有一个大型工作组,例如 256 个线程,则每个线程的可用本地内存比工作组大小为 64 的情况要少,因为工作组中的所有线程在它们 运行 所在的一个 CU 上共享相同的本地内存.