CUDA編程:流stream

流是一系列順序執行的命令。可以通過創建流對象來定義流,並且可以指定它作爲一系列內核發射和設備主機間存儲器拷貝的流參數。

下面就創建兩個流。

cudaStream t stream[2];
for (int i = 0; i < 2; ++i)
    cudaStreamCreate(&stream[i]);
float ∗ hostPtr;
cudaMallocHost(&hostPtr, 2 ∗ size);

下面定義每個流負責一次主機到設備的傳輸,一次內核發射,一次設備到主機的傳輸。

for (int i = 0; i < 2; ++i) 
{
    cudaMemcpyAsync(inputDevPtr + i ∗ size, hostPtr + i ∗ size, size , cudaMemcpyHostToDevice, stream[i]);
    MyKernel <<<100, 512, 0, stream[i]>>>(outputDevPtr + i ∗ size, inputDevPtr + i ∗ size, size );
    cudaMemcpyAsync(hostPtr + i ∗ size, outputDevPtr + i ∗ size, size , cudaMemcpyDeviceToHost, stream[i]);
}

最後要釋放流。

for (int i = 0; i < 2; ++i)
    cudaStreamDestroy(stream[i]);

cudaStreamDestroy()等待指定流中所有的任務完成,然後釋放流並將控制權返回給主機線程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章