【发布时间】:2011-09-29 15:01:31
【问题描述】:
我可以发现,对于“全局”内存访问,线程所需的内存地址的合并(相邻)是优化事务的关键,而在“共享”内存中,线程发出的非冲突地址是关键.我理解的很好吗?
【问题讨论】:
-
是的。合并内存访问是高效全局内存访问的关键,避免存储库冲突对于高效共享内存访问很重要。
标签: memory cuda global gpu shared
我可以发现,对于“全局”内存访问,线程所需的内存地址的合并(相邻)是优化事务的关键,而在“共享”内存中,线程发出的非冲突地址是关键.我理解的很好吗?
【问题讨论】:
标签: memory cuda global gpu shared
来自 NVIDIA CUDA 编程指南:
为了最大化全局内存吞吐量,因此最大化 合并:
- 遵循基于第 G.3.2 和 G.4.2 节的最佳访问模式,
- 使用满足中详述的大小和对齐要求的数据类型 第 5.3.2.1.1 节,
- 在某些情况下填充数据,例如,当访问二维 数组,如第 5.3.2.1.2 节所述。
这与warp 中线程的内存访问有关,warp 被合并“打包”到一个或多个事务中。对于计算能力为 2.x 的设备,此问题已放宽。
另一方面,对于共享内存访问,您需要了解该内存是如何实现的。
为了实现高带宽,共享内存被划分为等大小的内存 模块,称为银行,可以同时访问。
如果两个或多个线程访问同一个银行,则传输被序列化,即银行冲突。
附录 G. Compute Capabilities 提供了有关架构的更多信息。
问候!
【讨论】: