我在Win7 x64機器上的Quadro NVS 295上使用CUDA 4.2。從CUDA C編程手冊我這樣說的:cudaStreamDestroy()不同步/阻止?
」 ...流是通過調用cudaStreamDestroy釋放()
for (int i = 0; i < 2; ++i)
cudaStreamDestroy(stream[i]);
cudaStreamDestroy()等待指定流中所有上面的命令。 在破壞流並將控制權返回給主機線程之前完成。「
這是真的嗎?我寫了一個小的代碼,我做或多或少以下(我把唯一的僞代碼):
//transfer input buffer to device
cudaMemcpyToArrayAsync(... , stream[1]);
//launch kernel
my_kernel <<<dimGrid, dimBlock, 0, stream[1]>>> (...);
//transfer from device to host
cudaMemcpyAsync(.., cudaMemcpyDeviceToHost, stream[1]);
//Destroy stream. In theory this should block the host until everything on the stream is completed!
ret = cudaStreamDestroy(stream[1]);
有了這個例子,似乎cudaStreamDestroy()調用立即返回到主機,即不等待爲cudaMemcpyAsync()調用和其他strem指令完成。如果我把「cudaStreamSynchronize(stream [1]);」電話befor銷燬流,一切順利,但速度較慢。那麼,我做錯了什麼?
非常感謝您的回覆!
非常感謝! 我正在閱讀完全相同的文檔(4.2),但可能是不同的章節。我的意思是,在這一部分,它不是很清楚,我認爲這有點誤導。 再次感謝您! – ACRay
@ user1449129:如果這解決了你的問題,或許你可以如此友好[接受它](http://meta.stackexchange.com/a/5235/163653)。 – talonmies