2011-11-30 100 views
0

爲了隱藏調用cuda內核的延遲,是否支持調用一系列內核而無需返回到CPU來調用下一個內核?所以一系列內核可以在GPU設備上出列。在處理更大的內核時,這可能會遇到指令大小限制,並希望創建更多的模塊化以減小總體指令大小,這似乎很重要。 (其中內聯可能不是一個很好的解決方案)cuda中是否支持GPU內核隊列?

(如果它的重要,我使用JCuda,如果這造成在實現這一功能,請讓我知道的限制。)

回答

2

什麼指令大小限制是你指的是?我不知道一個。

所有CUDA內核調用(< < < >>>或cuLaunch等)都是異步的,意味着控制立即返回到CPU。 CUDA驅動程序將硬件命令(包括內核啓動)推送到硬件出隊的命令隊列中。因此,如果您調用多個隨後的CUDA內核而沒有其他干預CPU工作或CUDA調用,它們將由GPU異步執行,而不會「返回到CPU」,並且控制將在CUDA API排隊命令後立即返回到CPU。

有關更多詳細信息,請參閱CUDA編程指南。

+0

是否有保證內核將按順序執行,或者如果它們不佔用整個寬度,它們是否可能並行運行? – bmillare

+1

@bmillare CUDA內核在相同的流上按順序執行。如果在啓動時指定了不同的流,那麼如果有足夠的資源可用,則這些內核可以並行運行。 – flipchart

+0

除了使用單獨的CUDA流作爲活動掛圖提及外,並行內核執行還需要Compute Capability 2.0或更高版本。 – harrism