圖像處理流相關問題:
1:異步并行時,cudamemcpyasync的緩沖區要用pinned配置設定,直接用普通記憶體無效果:
pinned memory (分頁鎖存器):
cuda運作時提供了使用分頁鎖定主機存儲器(也稱為pinned)的函數(與正常的使用malloc()配置設定的可分頁的主機存儲器不同):
cudahostalloc()和cudafreehost()配置設定和釋放分頁鎖定主機存儲器;
cudahostregister()分頁鎖定一段使用malloc()配置設定的存儲器。
2在cudamemcpyasync後直接對目标變量進行操作會有一定幾率出錯
3當gpu處理時間與cpu讀取時間相近時可以在host端上啟動兩個以上線程(或者更多數量–如果你喜歡的話)來将cpu讀取時間掩蓋掉,每個線程裡面獨自的邏輯線.
4如果cpu讀取時間過長,gpu處理時間較短如,那麼優化的時間是讀寫時間,gpu處理的時間被掩蓋,而試圖達到這點, 需要你至少啟動2個cpu線程, 每個裡面單獨的一條邏輯線(讀取檔案, 處理, 回寫),繼續優化gpu就無意義了
舉例子:如果你讀寫檔案需要100ms,kernel需要10ms,上500次處理過程,而不是500 * 10ms,更長的時間能掩蓋更短的(在合理的安排下)
5關于測試環境:你如果要測試. 得弄點真實的測試環境.例如你原本如果是傳過來的視訊幀, 例如從網絡, 而不需要磁盤io,那麼請提供一個這樣的環境,否則用從磁盤讀寫檔案得到的效果無意義,測試環境麼,必須上盡量一樣的,你用個不同的東西測試, 最終生産的時候完全不是一回事.