库达内存带宽计算

cuda memory bandwidth calculation

本文关键字:计算 带宽 内存      更新时间:2023-10-16

我有几个与cuda编程和GPU架构相关的问题要问:

1.假设GPU的内存带宽为144 Gb/s,PCIe总线带宽为2.25 Gb/s,那么将具有100,000,000双精度的阵列传输到GPU需要多少毫秒?

2.假设 GPU 全局内存的大小为 3Gb,您可以处理的最大数组大小是多少? 如果必须处理更长的数组,如何更改程序来实现此目的?

我不知道如何计算这个,谁可以帮助我,谢谢

  1. PCIE 总线将是这里的限制因素。 只需将总数据传输大小(以字节为单位)除以速度(以字节/秒为单位)即可获得持续时间(以秒为单位)。 据我所知,2.25 Gb/s 看起来不像 PCIE 的典型传输速度,但在您的系统上可能是这种情况。 现代系统通常可以达到~6GB/s(对于PCIE Gen2 x16链路)或~11GB/s(对于PCIE Gen3 x16链路)的速度。 您可以使用bandwidthTestCUDA 示例代码测量传输速度(可能)。 请注意,若要在应用程序中获取峰值传输吞吐量,通常需要在固定分配之间传输(<- 提示、单击并读取)。

  2. 如果 GPU 总共有 3GB 内存,其中一些将被 CUDA 和其他系统开销用完。剩余的"可用"金额可以使用实用程序或cudaMemGetInfo()运行时 API 调用来估算nvidia-smi。 可用内存大约是可能的总数据存储的"上限"。 您实际可以分配的金额将比这少一些金额。 如果确定或估计可以分配的数量,请将此数量(以字节为单位)除以要存储的数据元素的大小。 例如,double数量占用 8 字节的存储空间。 C 库sizeof()函数可用于发现这一点。 将可用内存大小除以元素大小后,您将得到可以存储在该内存量的元素总数。 实际可行的数额将略低于估计数给出的数额。