我正在学习 CUDA 优化。我在此链接上找到了一个演示文稿:Paulius Micikevicius 的 Optimizing CUDA。
在本次演讲中,他们谈到
最大化全球内存带宽
,他们说全局内存合并将提高带宽。
我的问题,你如何计算全局内存带宽。谁能用一个简单的程序示例来解释我。
我正在学习 CUDA 优化。我在此链接上找到了一个演示文稿:Paulius Micikevicius 的 Optimizing CUDA。
在本次演讲中,他们谈到
最大化全球内存带宽
,他们说全局内存合并将提高带宽。
我的问题,你如何计算全局内存带宽。谁能用一个简单的程序示例来解释我。
可以使用硬件规格计算理论带宽。
例如,NVIDIA GeForce GTX 280 使用 DDR RAM,内存时钟频率为 1,107 MHz,内存接口为 512 位宽。使用这些数据项,NVIDIA GeForce GTX 280 的峰值理论内存带宽为 141.6 GB/秒:
在此计算中,内存时钟速率转换为 Hz,乘以接口宽度(除以 8,将位转换为字节)并乘以 2,因为数据速率是双倍的。最后,该产品除以 109 以将结果转换为 GB/秒 (GBps)。
有效带宽是通过定时特定的程序活动和了解程序如何访问数据来计算的。为此,请使用以下等式:
有效带宽 = (( Br + Bw ) / 109 ) / 时间
这里,有效带宽以 GBps 为单位,Br 是每个内核读取的字节数,Bw 是每个内核写入的字节数,时间以秒为单位。
CUDA 最佳实践指南中提供了更多信息。