2011-11-27 75 views
2

從理論上講,我們應該得到的性能增益,當我們使用CUDA,我實現高斯 - 塞德爾方法,並與流所需出奇時間比沒有streams.Does更大的人有例子,其中我可以看到性能增益流(除樣品給出的實例在同一時間作爲內核處理將被執行SDK的目錄不是如此有用)我們真的可以通過CUDA流獲得性能提升嗎?

回答

2

CUDA流使PCI Express的傳輸。由於Amdahl定律,只有進行數據傳輸和處理內核等量的工作負載將受益於CUDA流。要確定你的工作量是否將受益,配置文件或添加一些計時代碼到你的應用程序,看看理論最大性能優勢是什麼。

注意的是,爲了得到CUDA流的性能改進,你要「軟件管道」的下載,內核啓動,並上傳。這樣做:

foreach stream { 
    cudaMemcpyAsync(device[stream], host[stream], ... stream); 
} 
foreach stream { 
    LaunchKernel<<<...stream>>>(...); 
    // you can launch multiple kernels in stream, if desired. 
} 
foreach stream { 
    cudaMemcpyAsync(host[stream], device[stream], ... stream); 
} 

不是這個:

foreach stream { 
    cudaMemcpyAsync(device[stream], host[stream], ... stream); 
    LaunchKernel<<<...stream>>>(...); 
    cudaMemcpyAsync(host[stream], device[stream], ... stream); 
} 
1

是,在問題中,計算時間是顯著和所有的數據是不是相互依存。然後,您可以將昂貴的計算時間隱藏在昂貴的內存傳輸中。

注意,CUDA可同時進行內存複製和內核執行,所以當一個流是做內存拷貝其他的都可以做計算。

相關問題