2012-11-12 60 views
-1

我正在使用一個cuda程序,我設法將一個工作分配給一個流多處理器。例如,我有作品A和B,我的GPU有2個SM(SM0和SM1)。是否有辦法將工作A正好分配給SM0,將工作B分配給SM1?控制cuda中一個流多處理器的工作

你能告訴我一些方法嗎?

感謝您的幫助。

+1

考慮加入一些代碼樣本 –

+2

你不想編寫工作分配給各個SMS程序。讓GPU做到這一點。這是一個壞主意。創建無論你有多少工作,將其組織成塊,並讓塊由GPU處理。今天你正在開發一款帶有2個SM的GPU。明天它可能是一個帶有8個SM的GPU。 GPU將爲您處理調度。 –

+0

謝謝M Afifi和Robert Crovella。但是我不知道有什麼方法可以手動將作品分割到SM上? – sunway

回答

1

一種方法是將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

+0

謝謝Reguj。那是一個好主意。如果每個流都使用它自己的紋理內存,你認爲這是可行的嗎?例如,我們爲stream1創建texture1,爲stream2創建texture2?我想知道在使用2個紋理的2個流和2個紋理的2個流之間哪個更快。 – sunway

+0

是的,這應該工作(雖然紋理槽數量有限) – Reguj

相關問題