我有一個處理大量數據的CUDA內核。 因爲我不能一次傳輸所有數據,所以我不得不將它們分成塊,並按塊處理它們並更新GPU上的輸出。 我正在解析文件中的輸入數據。 我在想如果我可以通過在主機和GPU中有兩個緩衝區來重疊塊的內存傳輸。在處理一個卡盤時,我可以讀取另一個卡片,將其轉移到GPU並將內核啓動到同一個流。 我的問題是內核的執行時間比分析數據並將它們傳送到GPU要慢。我如何確保memcpys不會覆蓋內核使用的數據,因爲memcpys沒有被阻塞?cuda內存計算重疊問題
//e.g. Pseudocode
//for every chunk
//parse data
//cudaMemcpyAsync (dev, host, size, H2D)
//launch kernel
//switch_buffer
//copy result from device to host
在此先感謝您。
如果這是一個選項,不要每次重複使用相同的內存並切換緩衝區,可以看看這個[webinar](http://on-demand.gputechconf.com/gtc-快遞/ 2011 /簡報/ StreamsAndConcurrencyWebinar.pdf)。一種可能性是爲每對相關的memcpy和內核啓動使用不同的流。你也必須確保你使用固定內存!在您的僞代碼中,'cudaMemcpyAsync'中也缺少用過的cuda流。 – hubs