3
例如...這是我在NVIDIA的文檔,請參閱:如何知道cudaMemcpyAsync已完成讀取主機內存?
cudaMemcpyAsync(a_d, a_h, size, cudaMemcpyHostToDevice, 0);
kernel<<<grid, block>>>(a_d);
cpuFunction();
讓我們說這是包裝在一個函數...
void consume() {
cudaMemcpyAsync(a_d, a_h, size, cudaMemcpyHostToDevice, 0);
kernel<<<grid, block>>>(a_d);
}
如果我也有一個功能
void produce() {
// do stuff
a_h[0] = 1;
a_h[1] = 3;
a_h[2] = 5;
//...
}
如果我稱之爲:
produce();
consume();
produce(); // problem??
第二產()將開始在a_h
更改主機上的內存我怎麼知道CUDA是不是還異步內存拷貝程序中讀取主機內存?
如何在不中斷異步存儲副本的情況下安全地寫入主機a_h
內存?
編輯---
我知道我可以叫cudaDeviceSynchronize()
或cudaStreamSynchronize()
但也將等待kernel
完成。我寧願不要等到kernel
完成。
我想盡快寫信給主機a_h
,而不是等待kernel
完成。
我剛剛閱讀有關cuda的活動。謝謝!! – tmsimont