【问题标题】:Memory bandwidth test on Nvidia GPU'sNvidia GPU 上的内存带宽测试
【发布时间】:2013-05-18 12:47:11
【问题描述】:

我尝试使用 nvidia 发布的代码并进行内存带宽测试,但得到了一些令人惊讶的结果

使用的程序在这里:https://developer.nvidia.com/content/how-optimize-data-transfers-cuda-cc

在桌面上(使用 MacOS)

Device: GeForce GT 650M
Transfer size (MB): 16

Pageable transfers
Host to Device bandwidth (GB/s): 4.053219
Device to Host bandwidth (GB/s): 5.707841

Pinned transfers
Host to Device bandwidth (GB/s): 6.346621
Device to Host bandwidth (GB/s): 6.493052

在 Linux 服务器上:

Device: Tesla K20c
Transfer size (MB): 16

Pageable transfers
Host to Device bandwidth (GB/s): 1.482011
Device to Host bandwidth (GB/s): 1.621912

Pinned transfers
Host to Device bandwidth (GB/s): 1.480442
Device to Host bandwidth (GB/s): 1.667752

顺便说一句,我没有root权限..

我不知道为什么它在特斯拉设备上更少.. 谁能指出原因是什么?

【问题讨论】:

  • 您能否提供更多有关您的软件(CUDA 版本、驱动程序版本)的信息?我的笔记本电脑上有相同的 GT 650M GPU,但测试程序返回的带宽对我来说要高得多(分别为~6.5~10.4 GB/s)。我使用 CUDA 5.0、Linux 64 位、驱动程序 319.17 对此进行了测试。
  • GT 650M 也可以使用 DDR3 或 GDDR5,这很重要。
  • CUDA 版本都是 CUDA 5.0,都是 64 位系统。@BenC 我的问题不在于 GT 650M.. 而在于 Tesla k20c.. 我不明白为什么会这样比 GT 650M 慢?
  • 我的观点是,除了硬件规格之外,可能还有其他原因,即使这些起主要作用。
  • 带宽可能受到可用/连接的 PCIe 通道的限制。这些可以通过lspci -vv 进行检查。请参阅this 问题。

标签: cuda nvidia


【解决方案1】:

您服务器中的 GPU 很可能不在 16 通道 PCI Express 插槽中。我希望像 K20C 这样的 PCI-e v2.0 设备能够在合理指定的现代服务器上实现 4.5-5.5Gb/s 的峰值吞吐量(在桌面系统上可能约为 6Gb/s,集成 PCI-e 控制器)。您的结果看起来就像您将 GPU 托管在只有 8 个甚至 4 个活动通道的 16x 插槽中。

还可能有其他因素在起作用,例如 CPU-IOH 亲和性,这可能会增加托管 GPU 的 PCI-e 总线与运行测试的处理器及其内存之间的“跳数”)。但是提供进一步的分析需要更多关于服务器配置和硬件的详细信息,这确实超出了 StackOverflow 的范围。

【讨论】:

  • @Sagar Masuti:如果这是合理的,你能接受吗,这样我们就可以从 CUDA 标签的未回答问题队列中清除这个问题?
  • 您的意思是您已经测试过 k20c 可以提供 4.5/5.5 Gb/s 吗?如果是,我很乐意接受答案并要求服务器管理员检查问题。
  • @SagarMasuti:我还没有测试过 K20c。我在 Sandy Bridge EP 主机上测试了较旧的 C2050 Fermi Tesla,这是一个 PCI-e 2.0 设备/主机,速度约为 5.5 Gb/s。我已经测试了一个 PCI-e 3.0 Kepler 设备,在 Ivy Bridge 主机上获得了大约 12.0 Gb/s 的速度。这是指向someone else's K20c results 的链接,在 Ivy Bridge 主机上显示大约 6Gb/s。所以你的数字很低,很可能是主机安装或配置问题。我能告诉你的就这些了。
【解决方案2】:

快速查看Tesla K20c specGT 650M spec 可以澄清问题。我们看到 Tesla 的 PCIe 接口的版本为 2.0,即slower,而 GT PCIe 接口的版本为 3.0。尽管 Tesla 在内存和内存总线方面拥有更多资源,但这两个参数会限制 内存带宽。因此,Tesla 可能会发出比 GT 更多的内存指令,但它们会因为 PCIe 接口而停止。

当然这可能不是唯一的原因,但对于细节,我会探索两张卡的架构,因为我看到了细微的差异(至少在命名方面)。

Edit#1:参考下面的 cmets 显然您可以在 PCIe 2.0 板上实现 PCIe 3.0 速度。检查this

【讨论】:

  • 他使用的是GT 650M,你应该根据合适的硬件调整你的答案。
  • @KiaMorot 好吧,这可能是一个原因.. 是否可以预期我使用 PCIe 2.0 获得的速度?还是更高?如果你知道否则我会检查出来..
  • @SagarMasuti 这至少是最快的逻辑原因。但这取决于你想挖多深。据我所知,我认为没有“预期率”这样的东西。 NVIDIA 工程师给出了理论带宽,而您看到的是实际带宽。可能还有其他更小的原因,您可以通过查看卡的架构来探索更多细节,因为我看到了一个小的差异(至少在命名方面)。也许有一些性能损失。
  • @SagarMasuti:关于PCIe 3.0,你可以阅读this。这也解释了 Kepler GPU 上可分页和固定内存传输之间的区别。
猜你喜欢
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 2016-10-09
  • 2013-08-18
  • 2011-05-17
  • 2012-09-03
相关资源
最近更新 更多