多维CUDA块网格的动机

时间:2016-05-03 13:14:05

标签: cuda

我提出的问题与in this discussion基本相同。特别是我想提到这个最终答复:

  

我认为这里有两个不同的问题   螺纹:

     
      
  1. 使用输入或输出数据到线程的2D或3D映射是否有性能优势?答案对所有人来说都是“绝对的”   你和其他人描述的原因。如果数据或计算有   空间局部性,那么应该将工作分配给线程   经线。

  2.   
  3. 使用CUDA的多维网格来完成这项工作分配是否有性能优势?在这种情况下,我不这么认为   你可以自己在顶部轻松地完成索引计算   核心。这会烧掉一些算术指令,但那应该是   与内核启动开销相比可忽略不计。

  4.         

    这就是为什么我认为多维网格的目的是为了   程序员的便利而不是提高性能的方法。您   绝对需要考虑每个warp的内存访问模式,   虽然。

我想知道今天这种情况是否仍然存在。我想知道为什么需要一个多维的“外部”网格。

我想要了解的是,这是否有重要意义(例如空间位置的实际好处)或是否为方便起见(例如在图像处理环境中,是否只有这样我们可以让CUDA知道特定块正在处理的x / y“补丁”,以便它可以将它报告给CUDA Visual Profiler或其他东西)?

第三种选择是,这只不过是早期版本的CUDA的延续,它是硬件索引限制的一种解决方法。

1 个答案:

答案 0 :(得分:7)

使用多维网格肯定有好处。不同的条目(tid,ctaid)是作为特殊寄存器可见的只读变量。见PTX ISA

  

PTX包含许多预定义的只读变量,这些变量作为特殊寄存器可见,并通过mov或cvt指令访问。   特殊寄存器是:

 %tid
 %ntid
 %laneid
 %warpid
 %nwarpid
 %ctaid
 %nctaid

如果某些数据可以在没有进一步处理的情况下使用,那么不仅可以获得算术指令 - 可能是在多维数据的每个索引步骤,但更重要的是,您正在保存寄存器,这是任何一个非常稀缺的资源。硬件