我在 Tesla K40 和 Tesla K80 上获得几乎相同的性能

I get almost same performance on both Tesla K40 and Tesla K80

我开发了两个CUDA内核。一个是内存绑定内核,另一个是计算绑定内核。这些内核首先在 Tesla K40 上进行了优化,我现在正在对 Tesla K40 和 Tesla K80 进行性能测试以比较它们的性能结果。然而,我真的很困惑,因为我在两块板上获得了几乎相同的性能,而 K80 提供了几乎两倍的理论带宽和 DP 峰值性能。我还测试了每个块的不同线程数,但与 Tesla K40 相比,Tesla K80 也没有看到任何明显的性能改进(大约 2%)。

我使用以下标志编译代码:

在特斯拉 K40 上:

nvcc --cudart static --relocatable-device-code=false -gencode arch=compute_35,code=compute_35 -gencode arch=compute_35,code=sm_35 -link -o  "test"

在特斯拉 K80 上:

nvcc --cudart static --relocatable-device-code=false -gencode arch=compute_37,code=compute_37 -gencode arch=compute_37,code=sm_37 -link -o  "test"

理论上,我应该在 Tesla K80 上获得更高的性能,但我不知道为什么它不起作用。

感谢您的回答或评论!

However, I am really confused because I get almost same performance on both boards while K80 provides almost 2x wider theoretical bandwidth and DP peak performance.

Tesla K80 仅在您拥有可以利用多个 GPU 的代码时提供这些优势。您似乎 运行 正在为测试使用单个内核(启动),而 K80 不会 运行 单个内核(启动)比 K40 快。

K80 实际上是将两个 GPU 捆绑到一个物理单元中。两个 GPU 中的每一个都具有单个 K40 的大约 80-90% 的性能,因此捆绑在一起,它可以提供几乎两倍的性能,但仅限于多 GPU 感知代码。

K80(与 K40 相比)不会为单个内核(启动)执行提供任何好处。