【发布时间】:2018-11-10 01:41:06
【问题描述】:
有没有关于内核执行顺序的提示?
假设我开始使用 8x8 的工作组处理 1024x1024 的网格。我有 1080 个计算单元,每个计算单元有 128 个核心 - 总共 2560 个核心。
现在很明显,平均每个物理核心将平均处理网格中大约 400 个项目。质疑统计上每个核心的执行顺序是什么?会是行专业吗?专栏专业还是每个核心都会有自己的“子区域”来处理?
为了确保内存访问是缓存友好的,这个问题很重要。
【问题讨论】:
-
询问如何一个 GPU-kernel-code被安排执行“跨”一些主机指示的{ 1D |二维 | 3D }-块几何 + { 1D |二维 | 3D }-Thread-Geometry 或关于多个 GPU 内核代码单元如何映射到 SMX 单元的线性池?那些性能方面/延迟方面有趣的缓存资源对于单个 SM-s 来说是相当本地的,因此主要是隔离的,在 SIMT 执行几何的不同区域之间不可共享,所以你介意澄清哪种缓存类型友好吗你寻求? (+ WARP 范围内的调度可能会变得贪婪,取决于代码)
-
我问的是每个单核或翘曲/波前单元的平均情况 - 所以它是第一个。
-
对于 CUDA,至少,所请求的信息是未指定的,并且不能保证统计研究可以在不同的 GPU 类型或 CUDA 版本甚至运行到运行之间重现。如果您希望有可预测的工作顺序,独立于线程块或线程调度顺序,这是可能的,但我熟悉的方法将涉及根据实际调度顺序创建您自己的线程/块 ID。这个特别的search 将突出我所说的六个例子。
标签: caching cuda opencl gpgpu gpu