2017-03-07 121 views
1

我正在閱讀有關CUDA流和事件。主持人聲明(我引用):CUDA流和事件:澄清

在CUDA中,提交給流的命令將保證按順序完成。如果應用程序將網格啓動和事件記錄提交給流,則驅動程序會將網格啓動,同步命令和事件記錄推送到連接。在內核啓動完成並清除同步令牌之前,前端不會處理事件記錄命令。 連接被阻止。在計算能力3.5設備上,前端可以繼續處理其他連接。在計算能力上,設備的前端只是被阻塞。

我努力了,但我無法理解爲什麼主持人聲明連接被阻止。請解釋一下嗎?謝謝。

主題網址:https://devtalk.nvidia.com/default/topic/599056/concurrent-kernel-and-events-on-kepler/?offset=4

+0

在這種情況下的連接就像命令隊列一樣。計算能力<3.5的設備只有一個連接/命令隊列。雖然邏輯上可以有多個流,但是當命令發送到設備時,它們都會在同一隊列中結束,並且不能再彼此超車。因此,阻止設備端的一條命令(如錄製一個事件)會阻止所有其他命令。後來的設備支持多個連接,所以(最多有一些限制)每個流獲得它自己的命令隊列。 – tera

+0

@tera:如果你想添加它,那將是一個完美的答案。 – talonmies

回答

3

連接在這方面的作用類似命令隊列。計算能力爲< 3.5的設備只有一個連接/命令隊列。雖然邏輯上可以有多個流,但是當命令發送到設備時,它們都會在同一隊列中結束,並且不能再彼此超車。

因此,阻止設備端的一條命令(如錄製事件)會阻止所有其他命令。所以(最大限度)每個流都得到它自己的命令隊列。