【问题标题】:CUDA coalesced memory access speed depending on word sizeCUDA 根据字长合并内存访问速度
【发布时间】:2019-09-08 22:44:56
【问题描述】:

我有一个 CUDA 程序,其中一个 warp 需要访问(例如)96 字节的全局内存。

它正确对齐内存位置和通道索引,以便在单个事务中合并和完成访问。

程序可以使用 12 个通道进行访问,每个通道访问一个 uint8_t。或者,它会使用 6 个通道访问 uint16_t,或 3 个通道访问 uint32_t。

这些替代方案之间是否存在性能差异,如果每个线程访问的内存量较小,访问是否会更快?

当每个 warp 需要访问的内存量不同时,优化它以使线程尽可能访问更小的单元(16 位或 8 位)是否有好处?

【问题讨论】:

    标签: cuda gpu nvidia gpgpu


    【解决方案1】:

    在不知道数据将如何在寄存器中使用一次的情况下,很难说出最佳选项。对于几乎所有 GPU,这些选项之间的性能差异可能非常小。

    NVIDIA GPU L1 支持从 L1 返回 64 字节/warp (CC5.,6.) 或 128 字节/warp (CC3., CC7.) 返回。只要每个线程的大小

    在 CC 5./6. 中,减少谓词真实线程的数量(更喜欢更大的数据)可能会带来很小的性能优势。 L1TEX 单元将全局访问分成 4 x 8 线程请求。如果断定完整的 8 个线程组,则保存 L1TEX 循环。写回寄存器文件需要相同数量的周期。线程的分组顺序未公开。

    良好的做法是编写微基准测试。 CUDA 分析器为 L1TEX 路径的不同部分提供了许多计数器,以帮助查看差异。

    【讨论】:

      猜你喜欢
      • 2014-01-10
      • 2012-09-17
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多