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

Sia*_*mak 1 performance cuda gpu

我开发了两个 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"
Run Code Online (Sandbox Code Playgroud)

在特斯拉 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"
Run Code Online (Sandbox Code Playgroud)

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

感谢您的任何回答或评论!

Rob*_*lla 5

然而,我真的很困惑,因为我在两块板上获得了几乎相同的性能,而 K80 提供了几乎两倍宽的理论带宽和 DP 峰值性能。

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

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

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