2013-02-26 82 views
1

CUDA C語言編程指南提供了以下聲明:瞭解CUDA依賴檢查

對於支持併發內核執行,但它們計算能力的3.0 或更低,這需要依賴檢查任何操作,看是否有設備流內核 啓動完成:

‣可以開始了,當所有內核之前所有的線程塊從CUDA上下文任何 流已開始執行啓動僅執行;

‣阻止來自CUDA上下文中任何流的所有稍後的內核啓動,直到內核 啓動被檢查完成。

我在這裏相當迷茫。什麼是依賴檢查?我可以說某些設備內存上的內核執行需要對涉及相同設備內存的所有以前的內核或內存傳輸進行依賴性檢查嗎?如果這是真的(可能不是真的),這個依賴性檢查根據上面的語句阻塞來自任何其他流的所有後來的內核,並且因此以後不會發生異步或併發執行,這看起來不正確。

任何解釋或闡述將不勝感激!

回答

4

首先,我建議你訪問nvidia的webinar-site,並觀看併發&流的網絡研討會。

此外考慮以下幾點:頒發給相同的流

  • 命令被視爲依賴

    例如你會插入一個內核到流一個數據的memcopy這個內核將會訪問。關於數據可用的內核「取決於」。因此相同的流中

  • 命令被保證會執行依次(或同步,其通常被用作同義詞)
  • 命令在不同的流然而是獨立的並且可以同時運行
  • 所以依賴關係只有程序員才知道,並使用流來表達(以避免錯誤)!

以下僅對應於計算能力爲3.0或更低(如問題所述)的設備。如果您想了解更多關於流計劃功能的流調度行爲的更改,請參閱HyperQ和相應的example。在這一點上,我也想參考this線程,我發現了HyperQ的例子:)

關於你的第二個問題:我不太明白你的意思是「內核執行某些設備內存」或「內核執行涉及設備內存「,所以我將你的陳述簡化爲:

內核執行需要對所有先前的內核和內存傳輸進行依賴性檢查。

更好

是:

一個CUDA操作需要依賴檢查,看閹相同的流在前述CUDA運算已經完成。

我認爲你的問題在於表達式「開始執行」。這意味着仍然可以獨立(即在不同的流)內核啓動,其中與以前的內核並行,前提是它們全部開始執行足夠的設備資源可用。