簡體   English   中英

並發內核和CUDA流的行為

[英]Behaviour of concurrent kernel and CUDA streams

我想知道,如果我在一個流中運行一個包含10個1000個線程的塊的內核來分析數據數組,然后啟動一個需要10個1000個線程的10個塊來分析第二個流的另一個數組的內核,那該怎么辦?發生?

卡上的非活動線程是否將開始分析第二個陣列的過程? 還是第二個流將被暫停直到第一個流必須完成?

謝謝。

一般而言,如果內核是從同一應用程序的不同(非默認)流中發出的,並且滿足了執行並發內核的所有要求 ,並且有足夠的可用資源(尤其是SM,我想這就是您的意思)意思是“非活動線程”來調度兩個內核,那么第二個內核的某些塊將沿着已經執行的第一個內核的塊開始執行。 這可能發生在已經調度了第一個內核塊的同一SM上,或者發生在其他未占用的SM上,或者發生在這兩者上(例如,如果您的GPU有14個SM,則工作分配器將分配10個10個SM中的第一個內核,到那時剩下4個尚未使用。)

另一方面,如果您的內核具有需要32KB共享內存使用量的線程塊,而您的GPU具有8個SM,則第一個內核的線程塊將有效地“用完”這8個SM,而第二個內核的線程塊則不會開始執行,直到第一個內核的某些線程塊“耗盡”,即完成並退出使用。 那只是資源利用的一個例子,它可能會阻止並發執行。 當然,如果您要啟動的內核每個線程塊很多(例如100個或更多),則第一個內核將主要占用計算機,而第二個內核將在第一個內核基本完成后才開始執行。

如果在“ cuda並發內核”的右上角搜索,則會發現許多問題,這些問題突出了與觀察並發內核執行相關的一些挑戰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM