我尝试使用 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
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我没有root权限..
我不知道为什么它在特斯拉设备上更少。谁能指出是什么原因?
您服务器中的 GPU 很可能不在 16 通道 PCI Express 插槽中。我希望像 K20C 这样的 PCI-e v2.0 设备能够在合理指定的现代服务器上实现 4.5-5.5Gb/s 的峰值吞吐量(在集成 PCI-e 控制器的台式机系统上可能达到 6Gb/s )。您的结果看起来像是将 GPU 托管在只有 8 个甚至 4 个活动通道的 16x 插槽中。
可能还有其他因素在起作用,例如 CPU-IOH 亲和性,这会增加托管 GPU 的 PCI-e 总线与处理器及其运行测试的内存之间的“跳跃”数)。但是提供进一步的分析需要关于服务器的配置和硬件的更多细节,这确实超出了 StackOverflow 的范围。