3

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

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

这是我现在的问题:

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

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

4

1 回答 1

2

不管这些线程是在做 FP32 还是 FP64 计算,一个 warp 总是由 32 个线程组成。对?

正确的

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

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

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

正确的

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

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

于 2017-02-09T11:44:49.247 回答