多维CUDA块网格的动因

多维CUDA块网格的动因,cuda,Cuda,我的问题基本上与刚才提出的相同。我特别想提及这一最后答复: 我认为这里面有两个不同的问题 线程: 使用输入或输出数据到线程的2D或3D映射是否有性能优势?答案是“绝对”的 您和其他人描述的原因。如果数据或计算结果 空间局部性,那么将工作分配给 扭曲 使用CUDA的多维网格执行此工作任务是否有性能优势?在这种情况下,我不这么认为,因为 您可以自己在列表顶部进行索引计算 内核这会烧掉一些算术指令,但应该是这样 与内核启动开销相比可以忽略不计 这就是为什么我认为多维网格是作为 程序员的方便,而不是一种

我的问题基本上与刚才提出的相同。我特别想提及这一最后答复:

我认为这里面有两个不同的问题 线程:

  • 使用输入或输出数据到线程的2D或3D映射是否有性能优势?答案是“绝对”的 您和其他人描述的原因。如果数据或计算结果 空间局部性,那么将工作分配给 扭曲

  • 使用CUDA的多维网格执行此工作任务是否有性能优势?在这种情况下,我不这么认为,因为 您可以自己在列表顶部进行索引计算 内核这会烧掉一些算术指令,但应该是这样 与内核启动开销相比可以忽略不计

  • 这就是为什么我认为多维网格是作为 程序员的方便,而不是一种提高性能的方法。你 绝对需要考虑每个扭曲的内存访问模式, 不过

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

    我试图理解的是,这是否有一个重要的目的(例如,空间位置的实际好处)或者是为了方便(例如,在图像处理环境中,它是否只是为了让CUDA知道x/y“补丁”某个特定的块正在处理,因此它可以向CUDA视觉探查器或其他什么报告)


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

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

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

     %tid
     %ntid
     %laneid
     %warpid
     %nwarpid
     %ctaid
     %nctaid
    
    如果这些数据中的一部分可以在无需进一步处理的情况下使用,那么您不仅可以获得算术指令(可能在多维数据的每个索引步骤中),而且更重要的是,您正在保存寄存器,这在任何硬件上都是一种非常稀缺的资源