【问题标题】:Shared and Global memory accesses共享和全局内存访问
【发布时间】:2011-09-29 15:01:31
【问题描述】:

我可以发现,对于“全局”内存访问,线程所需的内存地址的合并(相邻)是优化事务的关键,而在“共享”内存中,线程发出的非冲突地址是关键.我理解的很好吗?

【问题讨论】:

  • 是的。合并内存访问是高效全局内存访问的关键,避免存储库冲突对于高效共享内存访问很重要。

标签: memory cuda global gpu shared


【解决方案1】:

来自 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 提供了有关架构的更多信息。

问候!

【讨论】:

  • @BehzadX 顺便说一句,你理解得很好;)
  • 感谢您的详细回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多