【问题标题】:cuda memory bandwidth calculationcuda内存带宽计算
【发布时间】:2018-08-28 22:53:33
【问题描述】:

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

1.假设GPU的显存带宽为144 Gb/s,PCIe总线带宽为2.25 Gb/s,将一个100,000,000个double的数组传输到GPU需要多少毫秒?

2.鉴于GPU全局内存的大小为3Gb,你可以处理的最大数组大小是多少?如果你必须处理一个更长的数组,你怎么能改变你的程序来完成这个?

这个我不知道怎么计算,谁能帮帮我,谢谢

【问题讨论】:

    标签: c++ architecture cuda gpu cpu


    【解决方案1】:
    1. PCIE 总线将成为此处的限制因素。只需将总数据传输大小(以字节为单位)除以速度(以字节/秒为单位)即可得到持续时间(以秒为单位)。据我所知,2.25 Gb/s 看起来不像 PCIE 的典型传输速度,但您的系统可能就是这种情况。现代系统通常可以达到 ~6GB/s(对于 PCIE Gen2 x16 链接)或 ~11GB/s(对于 PCIE Gen3 x16 链接)的速度。您可以使用bandwidthTest CUDA 示例代码测量您的传输速度(可能)。请注意,要在您的应用程序中获得峰值传输吞吐量,通常需要与a pinned allocation 进行传输(

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

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 2014-06-10
      • 1970-01-01
      • 2015-03-24
      • 2011-12-20
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      相关资源
      最近更新 更多