我開發了兩個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,但我得到更高的性能不知道爲什麼這不起作用。
感謝您的任何答覆或評論!
因此,K80將只對多GPU代碼有效,對吧?我的代碼是一個GPU,第二個內核在第一個內核執行完成後執行。 – Siamak
正確。作爲一項微不足道的測試,您可以使用CUBLAS啓動兩個獨立的gemm操作。如果你在一臺K40上運行它們,那麼最有可能的就是一個接一個地運行。如果您在單個K80上運行它們,則可以在K80上的兩個獨立GPU上運行它們,因此每個GPU都可以同時運行,而且應該大約是K40測試的一半。 –