CUDA 或 OpenCL 内核中的执行顺序 - 用于内存访问优化
Order of execution in CUDA or OpenCL kernels - for memory access optimisation
是否有关于内核执行顺序的提示?
假设我开始处理 1024x1024 的网格和 8x8 的工作组。我有 1080 个,每个 128 个内核有 20 个计算单元 - 总共 2560 个内核。
现在很明显,平均每个物理核心将平均处理网格中的大约 400 个项目。问题统计上每个核心的执行顺序是什么?会是行专业吗?专栏专业或每个核心都会有自己的 "subarea" 继续工作?
为了确保内存访问是缓存友好的,这个问题很重要。
Let's say I start processing of grid of 1024x1024 with work groups of
8x8. And I have 1080 with 20 compute units each 128 cores - total 2560
cores.
这并不是可视化 GPU 的真正有效方式。您有 20 个计算单元。而已。 "cores" 实际上是一对 (2 x 32) 通道矢量 ALU 单元,每个单元都有一个指令调度程序和一个共享的 L1 缓存。
Now it is clear that in average each physical core would process in
average about 400 items in the grid.
由于多种原因,事实并非如此。工作的分配方式取决于您编写的代码以及您用于 运行 代码的执行参数。内核输入的大小与给定 SM 或 SM 中的 "core" 将执行的并行操作量之间没有内在关系。
Question what statistically would be order of execution of each core?
未定义。 CUDA 对执行顺序不作任何暗示或其他方式的保证。
Would it be row major? Column major ..?
仍未定义。
or each core would get its own "subarea" to work on?
由程序员定义编程模型公开的逻辑 thread/block 编号方案如何映射到输入数据或内存的特征。
The question is important in order to make sure that the memory access is cache friendly.
GPU采用分层缓存设计,这意味着它实际上并不像您想象的那样重要。有详细记录的编程指南可确保最大的内存吞吐量和缓存利用率。它们不受您问题所暗示的执行顺序的影响。
是否有关于内核执行顺序的提示?
假设我开始处理 1024x1024 的网格和 8x8 的工作组。我有 1080 个,每个 128 个内核有 20 个计算单元 - 总共 2560 个内核。
现在很明显,平均每个物理核心将平均处理网格中的大约 400 个项目。问题统计上每个核心的执行顺序是什么?会是行专业吗?专栏专业或每个核心都会有自己的 "subarea" 继续工作?
为了确保内存访问是缓存友好的,这个问题很重要。
Let's say I start processing of grid of 1024x1024 with work groups of 8x8. And I have 1080 with 20 compute units each 128 cores - total 2560 cores.
这并不是可视化 GPU 的真正有效方式。您有 20 个计算单元。而已。 "cores" 实际上是一对 (2 x 32) 通道矢量 ALU 单元,每个单元都有一个指令调度程序和一个共享的 L1 缓存。
Now it is clear that in average each physical core would process in average about 400 items in the grid.
由于多种原因,事实并非如此。工作的分配方式取决于您编写的代码以及您用于 运行 代码的执行参数。内核输入的大小与给定 SM 或 SM 中的 "core" 将执行的并行操作量之间没有内在关系。
Question what statistically would be order of execution of each core?
未定义。 CUDA 对执行顺序不作任何暗示或其他方式的保证。
Would it be row major? Column major ..?
仍未定义。
or each core would get its own "subarea" to work on?
由程序员定义编程模型公开的逻辑 thread/block 编号方案如何映射到输入数据或内存的特征。
The question is important in order to make sure that the memory access is cache friendly.
GPU采用分层缓存设计,这意味着它实际上并不像您想象的那样重要。有详细记录的编程指南可确保最大的内存吞吐量和缓存利用率。它们不受您问题所暗示的执行顺序的影响。