1
我想爲我的一個算法使用動態並行機制,我用12個塊* 512線程從CPU啓動一個內核,我想知道如果我將使用動態並行機制,每個線程將啓動新的內核。每個線程是否啓動動態並行?
void main(){
dynamic<<<12,512,0>>>(x,y,z);
}
__global__ void dynamic(int x,int y, int z){
preprocessing<<<1,100>>>(x,y);
}
__global__ void preprocessing(int x,int y){
//do stuff
}
這是否意味着我的每個〜6000線程都會嘗試啓動100個線程?或者是我的第一個動態內核將暫停所有〜6000線程,啓動100個線程並返回結果由我的6000個前面的線程處理?
如果是的話,我可以簡單地使用100個線程嗎?我應該使用像
if(tid==1){
preprocessing<<<1,100>>>(x,y)
}
這是否意味着一些緩慢的起伏?例如我的預處理在CPU上安靜得很快,所以如果我通過動態並行處理在GPU上運行它,會產生一些後果嗎? – Anoracx 2013-03-13 20:06:24
我修改了這個例子,因爲我想知道所有的線程如何看到數據,而不僅僅是線程0.這在前面引用的Dynamic Parallelism指南的第1行第7頁得到了回答。 – Anoracx 2013-03-13 20:13:52
我真的不知道。你可能不得不測試兩種情況,看看哪個更快。我確信有些事情可以在GPU上運行得更慢,比如[this example](http://stackoverflow.com/questions/14855408/dynamic-programming-in-cuda-global-memory-allocations-以交換數據,有智)。但是與大多數GPU編碼一樣,如果有很好的並行機會可以利用,它可能會在GPU上運行得更快。 – 2013-03-13 20:15:12