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 上获得更高的性能,但我不知道为什么这不起作用。
感谢您的任何回答或评论!
然而,我真的很困惑,因为我在两块板上获得了几乎相同的性能,而 K80 提供了几乎两倍宽的理论带宽和 DP 峰值性能。
只有当您的代码可以利用多个 GPU 时,Tesla K80 才能提供这些优势。您似乎在为测试运行单个内核(启动),而 K80 运行单个内核(启动)的速度不会比 K40 快。
K80 实际上是将两个 GPU 捆绑到一个物理单元中。两个 GPU 中的每一个都具有单个 K40 的 80-90% 的性能,因此捆绑在一起,它可以提供几乎两倍的性能,但仅限于多 GPU 感知代码。
K80(与 K40 相比)不会为单个内核(启动)执行提供任何好处。