2016-07-06 39 views
0

我開發了兩個CUDA內核。一個是內存限制的內核,另一個是計算限制的。內核首先在Tesla K40上進行了優化,現在我正在對Tesla K40和Tesla K80進行性能測試,以比較它們的性能結果。然而,我真的很困惑,因爲我在兩塊主板上的性能幾乎相同,而K80提供了幾乎兩倍的理論帶寬和DP峯值性能。我還測試了每塊不同數量的線程,但與特斯拉K40相比,Tesla K80沒有看到任何有形的性能提升(約2%)。我在Tesla K40和Tesla K80上獲得的性能幾乎相同

我使用以下標誌編譯代碼:

特斯拉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,但我得到更高的性能不知道爲什麼這不起作用。

感謝您的任何答覆或評論!

回答

2

但是,我非常困惑,因爲我在兩塊電路板上獲得了幾乎相同的性能,而K80提供了幾乎兩倍的理論帶寬和DP峯值性能。

特斯拉K80只提供那些好處,當你有一個代碼可以利用多個GPU。您似乎正在爲您的測試運行單個內核(啓動),並且K80不會以比K40更快的速度運行單個內核(啓動)。

K80實際上是將兩個GPU捆綁成一個物理單元。兩個GPU中的每一個都具有單個K40的80-90%的性能,因此捆綁在一起,它可以提供幾乎兩倍的性能,但只能提供支持多GPU的代碼。

K80(與K40相比)將不會爲單個內核(啓動)執行帶來好處。

+0

因此,K80將只對多GPU代碼有效,對吧?我的代碼是一個GPU,第二個內核在第一個內核執行完成後執行。 – Siamak

+0

正確。作爲一項微不足道的測試,您可以使用CUBLAS啓動兩個獨立的gemm操作。如果你在一臺K40上運行它們,那麼最有可能的就是一個接一個地運行。如果您在單個K80上運行它們,則可以在K80上的兩個獨立GPU上運行它們,因此每個GPU都可以同時運行,而且應該大約是K40測試的一半。 –