2011-11-26 68 views
4

有沒有什麼辦法可以明顯地限制我的程序運行時使用的GPU多處理器的數量?我想計算一下隨着越來越多的多處理器,我的算法是如何擴展的。CUDA - 正在使用的SM的數量限制

如果有幫助:我正在使用CUDA 4.0和具有計算能力2.0的設備。

+0

我對此表示懷疑。唯一可能提供這種控制的是[設備API](http://www.clear.rice.edu/comp422/resources/cuda/html/group__CUDA__DRIVER.html),我沒有看到任何有希望的東西那裏。 –

+0

@kylo:不能做 – talonmies

+0

你能詳細解釋一下嗎?這是相當的架構問題,還是隻有沒有人需要讓他們的程序變慢呢? – Kylo

回答

1

Aaahhh ...我知道這個問題。在寫論文時我自己也玩過。

沒有明確的方法來做到這一點,但是你可以嘗試「黑客」,通過讓一些塊不做任何事情。

  • 如果因爲有多處理器,你永遠不會啓動更多的塊,那麼你的工作很簡單 - 只需啓動更少的塊。一些SM保證沒有工作,因爲一個塊不能分割成多個SM。
  • 如果你啓動更多的塊並且你只是依靠驅動程序來安排它們,請使用不同的方法:只需啓動儘可能多的塊,以便GPU可以處理,並且如果其中一個塊完成其工作,而不是終止它,循環回到開始處並獲取另一塊數據以進行工作。你的程序的表現很可能不會下降;它可能會更好,如果你仔細安排你的工作:)
  • 最大的問題是,當你所有的塊都在GPU上運行,但你有一個以上的塊每SM。然後,您需要正常啓動,但手動「禁用」某些塊並命令其他塊爲其工作。問題是 - 禁止哪些塊來保證一個SM正在工作而另一個沒有工作。

從我自己的實驗中,1.3個設備(我有GTX 285)按順序排列這些塊。因此,如果我在30個SM上啓動60個模塊,則將1-30模塊安排到SM 1-30,然後再將31-60模塊再次安排到SM 1-30。因此,通過禁用模塊5和35,SM 5實際上不是做任何事情。

但請注意,這是我2年前做的私人實驗觀察。它無法被NVIDIA確認,支持和維護,甚至可能會改變(或已經改變)新的GPU和/或驅動程序。

我會建議 - 嘗試使用一些簡單的內核來做很多愚蠢的工作,看看在各種「啓用」/「禁用」配置上計算需要多長時間。如果幸運的話,你會發現性能下降,表明2個塊實際上由單個SM執行。