2016-11-24 86 views
0

我有一個簡單的問題。我分配的關聯像一個獨特cuda_stream(簡化)內存N擋,[這可能是一個非常糟糕的主意-_-]:一個cuda內核的幾個cuda_stream

void *ptr = NULL; 
cudaStream_t stream; 
cudaMallocManaged(&ptr, size); 
cudaStreamAttachMemAsync(stream, ptr); 

在我的代碼後,我打電話給我的內核的這6內存塊(由隨機過程確定)。 cuda啓動程序只需要一個數據流參數

update_gpu<<<256, 256,0,???>>>(block1,block2,block3,block4,block5,block6); 

???應該是一個流,但我應該通過哪一個?我可以用

cudaDeviceSynchronize() 

同步,但它可能是太多了,因爲我有很多塊的

cudaStreamSynchronize(...) 

看起來像一個解決方案,我應該做的,是爲我流五?

有什麼建議嗎?

最好,

++牛逼

回答

1

Attaching memory to a specific stream是一種優化,告訴這個內存不需要可見於任何其他比流特定的運行時間。 如果有疑問,只是不要將內存附加到任何流,它將對所有內核都可見。 如果您根本不使用流(這意味着所有內核都啓動到默認流),這尤其是正確的方法。

如果想要利用此優化,在內核運行時,所有託管內存必須完全不附加,或者附加到啓動內核的特定流。 「

+0

」不需要對特定流以外的任何人都可見「這樣說是有道理的,謝謝。 –