2011-12-20 86 views
0

我正在使用CUDA編寫的程序出現問題。我有一個輸入數組和輸出數組,我需要將其複製到設備內存。問題在於兩個陣列太大而無法放入設備內存。我現在正在做的是拆分輸入和輸出數組,併爲這兩個部分按順序運行內核。

爲了使這種方法起作用,我使用了一箇中間數組,因爲cudaMemcpyFromArray和cudaMemcpyToArray只能用於紋理內存。這會導致不必要的內存複製操作。有誰知道更有效的方法?CUDA中大量輸入的高效memcpy?

回答

0

如果數組的一個段上的操作獨立於數組的另一個段上的操作,則可以使用異步存儲器複製。這將幫助您在計算時來回複製事物。來自cuda c編程指南:

某些函數調用是異步的:在設備完成所請求的任務之前,將控制返回給主機 線程。它們是:

  • 內核啓動;
  • 設備到設備的內存拷貝;
  • 64 KB或更少內存塊的主機到設備內存副本;
  • 由帶有Async後綴的函數執行的內存副本;
  • 內存集函數調用。

希望它能幫助兄弟。你也可以考慮使用大米編碼來壓縮數組,以使它們合適。