Memory 共享和全局内存访问

Memory 共享和全局内存访问,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节所述 这与合并到一个或多个事务中的扭曲中线程的内存访问有

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

来自NVIDIA CUDA编程指南:

因此,为了最大化全局内存吞吐量,最大化 通过以下方式合并:

  • 遵循基于第G.3.2节和第G.4.2节的最佳访问模式
  • 使用符合中详细说明的大小和对齐要求的数据类型 第5.3.2.1.1节
  • 在某些情况下填充数据,例如,在访问二维 阵列如第5.3.2.1.2节所述
这与合并到一个或多个事务中的扭曲中线程的内存访问有关。对于计算能力为2.x的设备,这个问题已经被放宽

另一方面,对于共享内存访问,您需要了解该内存是如何实现的

为了获得高带宽,共享内存被分成大小相等的内存 模块,称为银行,可同时访问

如果两个或多个线程访问同一个银行,则传输被序列化,即银行冲突

附录G.计算能力提供了有关体系结构的更多信息


问候

来自NVIDIA CUDA编程指南:

因此,为了最大化全局内存吞吐量,最大化 通过以下方式合并:

  • 遵循基于第G.3.2节和第G.4.2节的最佳访问模式
  • 使用符合中详细说明的大小和对齐要求的数据类型 第5.3.2.1.1节
  • 在某些情况下填充数据,例如,在访问二维 阵列如第5.3.2.1.2节所述
这与合并到一个或多个事务中的扭曲中线程的内存访问有关。对于计算能力为2.x的设备,这个问题已经被放宽

另一方面,对于共享内存访问,您需要了解该内存是如何实现的

为了获得高带宽,共享内存被分成大小相等的内存 模块,称为银行,可同时访问

如果两个或多个线程访问同一个银行,则传输被序列化,即银行冲突

附录G.计算能力提供了有关体系结构的更多信息


问候

对。无合并内存访问是高效全局内存访问的关键,避免银行冲突对于高效共享内存访问非常重要。是的。无合并内存访问是高效全局内存访问的关键,避免银行冲突对于高效共享内存访问非常重要。@BehzadX顺便说一句,您很了解;)谢谢您的详细回复。@BehzadX顺便说一句,您理解得很好;)谢谢你的详细回复。