2012-07-31 173 views
3

我無法理解入住率計算器。我遇到了一些開發代碼的問題,其中有512個線程可以正常工作,但是有1024個線程給出了糟糕的數字。瞭解入住率計算器

我在Windows 7上運行特斯拉C2050,在Matlab(它不是我的錯,我不得不使用Matlab)和Mexfunction中開發。

我想我會玩佔用計算器,試圖找到任何其他限制對我的代碼影響結果。

當我每塊輸入1024個線程時,佔用率爲0%。有512個線程,佔用率爲33%。我本以爲我會得到至少有1024線程的東西。我注意到,代碼和佔用率計算器爲最多704個線程提供了很好的結果(這是一個並不代表真實的數字)。

我相信我對這個領域缺乏理解是我無法糾正我在代碼中看到的錯誤的原因。任何人都可以解釋爲什麼我得到這些結果?

的數字是:

  • 計算能力2.0
  • 共享內存大小49152個
  • 線程每塊中的每個螺紋44 512個或1024
  • 寄存器
  • 每塊
  • 共享存儲器0

ptxas info:使用了44個寄存器, 232字節cmem [0],144字節cmem [2],28字節cmem [16]

回答

4

每個塊的註冊總數爲32768(您可以在SDK中使用deviceQuery進行檢查)。 現在根據你的內核它使用44個寄存器/線程。如果你以每塊1024個線程啓動內核,你將得到總數超過限制的44 * 1024 = 45056個寄存器。 在ordet中運行它,每塊1024線程,你需要優化你的內核,每個線程使用不超過32個寄存器。

+4

請注意,佔用率0.33並不差,應該有足夠的線程來覆蓋內存延遲。爲了實現更高的佔用率,將塊大小減少到128個線程可能是一個好主意,這應該啓用640個線程(每個128線程的5個塊)在每個SM上同時運行。一旦基本潛伏期被覆蓋,入住率和績效之間就沒有很強的相關性。 – njuffa 2012-07-31 16:38:34