CUDA合并了对FP64数据的访问

时间:2017-02-09 11:25:02

标签: cuda double gpgpu gpu-warp

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

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

现在我的问题是:

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

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

1 个答案:

答案 0 :(得分:1)

  

无论这些线程是什么,warp总是由32个线程组成   进行FP32或FP64计算。正确?

正确

  

我已经读过每次warp中的线程尝试读/写时   全局内存,warp访问128个字节(32个单精度   花车)。正确?

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

  

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

正确

  

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

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