CUDA 或 OpenCL 内核中的执行顺序 - 用于内存访问优化



有没有关于内核执行顺序的提示?

假设我开始使用 8x8 的工作组处理 1024x1024 的网格。我有 1080 个,每个 128 个内核有 20 个计算单元 - 总共 2560 个内核。

现在很明显,平均每个物理内核平均在网格中处理大约 400 个项目。问题 从统计上讲,每个内核的执行顺序是什么?会不会是排大?列主要还是每个核心都有自己的"子区域"来工作?

为了确保内存访问对缓存友好,这个问题很重要。

假设我开始处理 1024x1024 的网格,工作组 8x8. 我有 1080 个,每个 20 个计算单元 128 个内核 - 总共 2560 个 核心。

这并不是可视化GPU的有效方法。您有 20 个计算单元。就是这样。"内核"实际上是一对(2 x 32(通道矢量ALU单元,每个单元都有一个指令调度器和一个共享的L1缓存。

现在很明显,平均每个物理内核都会在 网格中平均约有 400 个项目。

由于多种原因,这并不遵循。工作的分发方式取决于您编写的代码以及用于运行代码的执行参数。内核输入的大小与给定 SM 或 SM 中的"核心"将执行的并行操作量之间没有内在关系。

问题 从统计上讲,每个内核的执行顺序是什么?

定义。CUDA 对执行顺序不作任何暗示或其他形式的保证。

会不会是排大?列主要..?

仍然未定义。

或者每个核心都有自己的"子区域"来工作?

由程序员定义编程模型公开的逻辑线程/块编号方案如何映射到输入数据或内存的特征。

为了确保内存访问对缓存友好,这个问题很重要。

GPU具有分层缓存设计,这意味着它实际上并不重要,就像您想象的那样。有文档记录的编程指南,用于确保最大的内存吞吐量和缓存利用率。它们不受您的问题所暗示的执行顺序的影响。

最新更新