我正在使用一個cuda程序,我設法將一個工作分配給一個流多處理器。例如,我有作品A和B,我的GPU有2個SM(SM0和SM1)。是否有辦法將工作A正好分配給SM0,將工作B分配給SM1?控制cuda中一個流多處理器的工作
你能告訴我一些方法嗎?
感謝您的幫助。
我正在使用一個cuda程序,我設法將一個工作分配給一個流多處理器。例如,我有作品A和B,我的GPU有2個SM(SM0和SM1)。是否有辦法將工作A正好分配給SM0,將工作B分配給SM1?控制cuda中一個流多處理器的工作
你能告訴我一些方法嗎?
感謝您的幫助。
一種方法是將kernelA和workB中的工作A實現爲kernelB,並將它們作爲1 * 1網格在不同的流中啓動,因爲在Fermi和Kepler GPU上,這些內核可以同時運行。 1 * 1網格啓動的原因是,如果你有多個塊,那麼這些塊可以在不同的SM上執行,並且在這種情況下,這兩個內核不能同時執行(即,只有一個內核/ SM)
cudaStream_t stream1, stream2;
cudaStreamCreate (&stream1);
cudaStreamCreate (&stream2);
kernelA<<<1, 512, 0, stream1>>>(...);
kernelB<<<1, 512, 0, stream2>>>(...);
...
有關詳細信息,請參閱this NVIDIA presentation
考慮加入一些代碼樣本 –
你不想編寫工作分配給各個SMS程序。讓GPU做到這一點。這是一個壞主意。創建無論你有多少工作,將其組織成塊,並讓塊由GPU處理。今天你正在開發一款帶有2個SM的GPU。明天它可能是一個帶有8個SM的GPU。 GPU將爲您處理調度。 –
謝謝M Afifi和Robert Crovella。但是我不知道有什麼方法可以手動將作品分割到SM上? – sunway