我开发了两个CUDA内核。一个是内存绑定内核,另一个是计算绑定。内核,首先对特斯拉K40进行了优化,我现在正在特斯拉K40和特斯拉K80上进行性能测试,以比较它们的性能结果。然而,我真的很困惑,因为我在两块板上获得了几乎相同的性能,而K80提供了将近2倍的理论带宽和DP峰值性能。我还测试了每个块的不同线程数,但与特斯拉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"理论上,我应该得到更高的性能在特斯拉K80,但我不知道为什么不工作。
谢谢您的回复或评论!
发布于 2016-07-06 16:10:59
然而,我真的很困惑,因为我在两块板上获得了几乎相同的性能,而K80提供了将近2倍的理论带宽和DP峰值性能。
特斯拉K80只有当你有一个可以利用多个GPU的代码时,才能提供这些好处。您似乎正在为测试运行单个内核(启动),而K80运行单个内核(启动)的速度不会比K40更快。
K80实际上是两个GPU捆绑在一个物理单元中。这两个GPU中的每一个都有一个K40的80%-90%的性能,因此捆绑在一起,它可以提供几乎两倍的性能,但只能在多GPU识别的代码上。
K80 (与K40相比)不会为单个内核(启动)的执行提供任何好处。
https://stackoverflow.com/questions/38228624
复制相似问题