我在特斯拉K40和特斯拉K80上的表现几乎相同

时间:2016-07-06 16:05:42

标签: performance cuda gpu

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

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

关于特斯拉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"

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

感谢您的回答或评论!

1 个答案:

答案 0 :(得分:4)

  

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

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

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

K80(与K40相比)对单个内核(启动)执行没有任何好处。