我可以发现,对于“全局”内存访问,线程所需的内存地址的合并(相邻)是最佳事务的关键,而在“共享”内存中,线程发出的非冲突地址是关键。我理解得好吗?
答案 0 :(得分:1)
来自NVIDIA CUDA编程指南:
为了最大化全局内存吞吐量,因此最大化非常重要 合并:
- 遵循基于G.3.2和G.4.2节的最佳访问模式,
- 使用符合详细规格和对齐要求的数据类型 第5.3.2.1.1节,
- 在某些情况下填充数据,例如,在访问二维时 第5.3.2.1.2节中描述的数组。
这与warp中的线程的内存访问有关,该warp被合并为“打包”到一个或多个事务中。对于计算能力2.x的设备,此问题已经放宽。
另一方面,对于共享内存访问,您需要了解如何实现此内存。
为了实现高带宽,共享内存被分成大小相同的内存 模块,称为银行,可以同时访问。
如果两个或多个线程访问同一个银行,则传输被序列化,例如银行冲突。
附录G.计算能力有更多关于架构的信息。
问候!