【问题标题】:CUDA coalesced access of FP64 dataCUDA 合并访问 FP64 数据
【发布时间】:2017-06-27 09:18:06
【问题描述】:

我对 FP64 数据如何影响 warp 发出的内存访问感到有点困惑。

  • 无论这些线程是执行 FP32 还是 FP64 计算,一个 warp 始终由 32 个线程组成。对吧?
  • 我读到,每次 warp 中的线程尝试读/写全局内存时,warp 都会访问 128 个字节(32 个单精度浮点数)。对吧?
  • 因此,如果 warp 中的所有线程都以合并的方式从内存中读取不同的单精度浮点数(总共 128 个字节),则 warp 将发出单个内存事务。对吧?

这是我现在的问题:

  • 如果 warp 中的所有线程都尝试以合并的方式访问不同的双精度浮点数(总共 256 个字节)怎么办? warp 会发出两个内存事务 (128+128) 吗?

PS:我最感兴趣的是 Compute Capability 2.0+ 架构

【问题讨论】:

    标签: cuda double gpgpu gpu-warp


    【解决方案1】:

    一个 warp 总是由 32 个线程组成,无论这些线程是否 进行 FP32 或 FP64 计算。对吧?

    正确

    我已经读过,每次经纱中的线程尝试读/写 全局内存,warp 访问 128 个字节(32 个单精度 浮动)。对吧?

    不完全是。还有 32 字节的事务大小。

    因此,如果经线中的所有线程都在读取不同的单精度 从内存中浮动(总共 128 个字节),但在合并中 方式,warp 将发出单个内存事务。对吧?

    正确

    如果 warp 中的所有线程都尝试访问不同的线程怎么办? 以合并的方式进行双精度浮点数(总共 256 个字节)? warp 会发出两个内存事务(128+128)吗?

    是的。当可以进行合并内存访问时,编译器将发出一个 64 位加载指令,该指令将由每个 warp 的两个 128 字节事务提供服务。

    【讨论】:

    • 感谢您的回答我的朋友。我愿意接受,但如果您能对 32 字节的交易发表评论,我也将不胜感激。它们在什么情况下发生?提前谢谢你。
    • @AstrOne:如果 warp 中的每个线程都需要加载 8 位或 16 位类型,则可以使用 32 字节事务处理这些类型。如果您愿意,还可以强制编译器发出 32 字节的事务。
    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2015-05-01
    • 2013-02-14
    • 2012-11-26
    相关资源
    最近更新 更多