2011-03-29 82 views
9

我仍然對這些未知大小的矩陣感到憤怒,這可能從每個維度的10-20.000變化。CUDA - 如果我選擇了太多塊,該怎麼辦?

我在看CUDA sdk並想知道:如果我選擇一些塊太高,會怎麼樣?

像X和Y尺寸的9999 x 9999塊的網格,如果我的硬件具有不能容納所有這些塊的SM,內核是否會出現問題或性能會崩潰?

我不知道如何在塊/線程中的尺寸可能會有很大的變化..我在考慮使用我的硬件支持的最大塊數,然後讓它們內部的線程在整個矩陣中工作這是正確的嗎?

回答

13

線程塊沒有與核心的一對一映射。塊被調度到核心,因爲它們變得可用,這意味着您可以請求儘可能多的(可能達到極限)。請求大量的塊會導致系統減速,因爲它會加載和卸載不執行任何內核的線程塊。

您可以在運行時指定網格和塊的尺寸。

編輯:這裏是從文檔中的網格和塊的尺寸限制。

enter image description here

2

如果選擇過大的塊大小,你浪費了一些週期,而「死」塊獲得退休(通常只有幾十微秒量級甚至上最大的網格大小「全尺寸」費米或GT200卡)。這不是一個巨大的懲罰。

但網格尺寸應始終可計算先驗。通常,數據並行工作的可量化單位之間存在已知關係 - 例如每個數據點有一個線程,或者每個矩陣列有一個塊或其他類型,這就允許在運行時計算所需的網格維度。

另一種策略是使用固定數量的塊(通常只需要像GPU上每MP的4-8個一樣),並讓每個塊/線程處理多個並行工作單元,這樣每個塊就變成「老大難」。如果每個線程在安裝過程中有很多固定的開銷成本,那麼可以通過每個線程的更多工作分攤這些固定開銷。

相關問題