【问题标题】:The motivation for multidimensional CUDA block grid多维CUDA块网格的动机
【发布时间】:2018-12-31 23:31:38
【问题描述】:

我和in this discussion 提出的问题基本相同。特别是我想参考这个最终回复:

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

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

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

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

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

我想了解的是,这样做是否有重要目的(例如,从空间局部性中获得实际好处)还是为了方便而存在(例如,在图像处理环境中,是否存在只是为了我们可以让 CUDA 知道特定块正在处理的 x/y “补丁”,以便它可以将其报告给 CUDA Visual Profiler 或其他东西)?

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

【问题讨论】:

    标签: cuda


    【解决方案1】:

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

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

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

    如果其中一些数据无需进一步处理就可以使用,不仅您可以获得算术指令 - 可能在多维数据的每个索引步骤中,而且更重要的是您可以节省寄存器,这在任何情况下都是非常稀缺的资源硬件。

    【讨论】:

      猜你喜欢
      • 2013-12-24
      • 2019-02-26
      • 2021-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2011-08-28
      • 2011-08-14
      相关资源
      最近更新 更多