2013-11-25 64 views
-3
_global__ ChildKernel1(void* data){ 
     //Operate on data 
    } 


_global__ ChildKernel2(void* data){ 
     //Operate on data 
    } 


_global__ ChildKernel3(void* data){ 
     //Operate on data 
    } 

__global__ ParentKernel(void *data){ 
     ChildKernel1<<<16, 2>>>(data); 
     ChildKernel2<<<64, 3>>>(data); 
     ChildKernel3<<<32, 4>>>(data); 
     ChildKernel4<<<16, 5>>>(data); 

    } 
    // In Host Code 
    ParentKernel<<<256, 64>>(data); 

我想並行運行所有子內核。那麼我該怎麼做?在CUDA中並行運行多個子內核

+0

還應該配合投票原因。 – gpuguy

+1

我沒有downvote。問題是什麼 ?如果您可以發佈一個小型複製器並描述問題是什麼,那將會很有幫助。我假設你知道動態並行性需要CC3.5 GPU。 –

+1

Downvote的基本原因是將鼠標懸停在downvote按鈕上。 「這個問題沒有顯示任何研究工作,但目前還不清楚......」你的問題是否顯示出研究過該主題的證據,以發現可能的答案?另外,上面的評論指出「什麼問題?」這可能是一個不明確問題的指標。 –

回答

2

你看過編程指南的dynamic parallelism section了嗎?

如您所示,您的ParentKernel中的每個線程都將執行由4個對子內核調用組成的代碼。這使答案複雜化。

因此,就各個線程而言,是的,各個內核可以在線程之間並行運行。

但請記住,由給定線程發佈到同一個流中的cuda內核將被序列化。因此,對於ParentKernel中的每個單獨線程,將從該線程啓動的各個子內核將被序列化。

要使單個線程中的內核能夠並行運行,請將它們分別啓動到streams。最後,需要注意的是:就像從主機發起的asynchronous concurrent execution of kernels一樣,設備端內核只能在資源允許的情況下「並行」運行。並行執行內核不能保證。