2014-03-05 52 views
1

爲了準確計算我的內核執行時間,我應該運行多少次並取其平均值?在運行時間內,我發現30次運行和500次運行(20%差異)之間的差異非常大。我想GPU可能會自行降低功耗(GTX 580Ti)。我如何禁用此功能?可以根據單次運行所花費的時間計算所需的啓動次數嗎?CUDA計時內核 - 啓動次數?

謝謝!

回答

2

如果您的代碼具有可變的執行路徑(可能與數據有關,也許您正在給它提供不同的數據),那麼沒有人能真正爲您解答。

如果你的代碼有一個相對穩定的執行路徑,我通常會得到相當好的結果,通過計時兩次並丟棄第一組結果。

各種GPU都具有電源管理功能,但是第一次運行內核時,任何相關功能都會升級到最高狀態,並且在短時間內(微秒)運行時不會改變內核再次,爲時機。

標杆傳統主義者會告訴你運行一個代碼數百或數千次,並取得平均結果。我很少對這種清晰度感興趣。我通常可以通過計時第二次運行得到一個相當好的答案,以確定某物的速度有多快。

作爲一個實驗,您可能會嘗試繪製500次運行的每次運行時間的數據。這可能會給你更多的洞察力,而不是任何有關SO可以提供的答案。如果你在開始時看到一個很大的高峯,而不是試圖在大量的跑步中進行平均,我通常更感興趣的是放棄它 - 因爲它不代表我的其餘數據。

另外,請注意,在WDDM下運行的GPU在時序上只是古怪。操作系統實際上管理的WDDM GPU比計算任務真正需要的程度要好得多,所以這可能是您不得不放棄並耗費大量時間的情況。如果您可以在Windows上以TCC模式運行GPU(無法與GeForce GPU一起使用),或者在沒有在該GPU上運行X的Linux上運行GPU,那麼運行時可能會有更加一致且可預測的結果。 (如果可以的話,X可以運行,只要將它放在計算GPU上即可。)在我看來,在WDDM下,時序挑戰性要大得多。