我想用CUDA處理圖像。每個像素的新值是基於一行中的兩個相鄰像素計算的。對於像素值使用__shared__
內存是否有意義,因爲每個值只能使用兩次?不是瓷磚也是錯誤的做法,因爲它不適合問題結構?我的方法是在每個像素上運行一個線程,併爲每個線程每次加載相鄰的像素值。將共享內存用於相鄰的數組元素?
1
A
回答
4
目前支持的所有CUDA架構都有緩存。 從計算能力3.5開始,這些對於只讀數據特別有效(因爲讀寫數據只能在L2中緩存,L1緩存僅限於只讀數據)。如果您將輸入數據的指針標記爲const __restrict__
,則編譯器很可能會加載它via the L1 texture cache。您也可以通過明確使用__ldg()
builtin來強制執行此操作。
雖然可以通過共享內存顯式管理從鄰近像素重新使用數據,但您可能會發現這比只依賴緩存沒有什麼好處。
當然,無論您是否使用共享內存,您希望在x方向上最大化塊大小,並使用1的blockSize.y作爲最佳訪問局部性。
1
結合使用共享內存和利用合併內存訪問。你所需要做的就是確保圖像以行方式存儲。每個塊都會處理一個線性數組塊。由於數據重用(除了第一個和最後一個像素都會參與處理三次),如果在內核開始時您將複製將要處理的所有像素的值到共享內存,將是有益的。
相關問題
- 1. 將模板應用於相鄰元素?
- 2. 數組中的相鄰日期元素
- 3. 我不能在數組中存儲相鄰元素的值
- 4. Xpath的:基於相鄰元素
- 5. 查找基於相鄰值的元素
- 6. 相鄰元素的jquery包裝組
- 7. 組合列表中的相鄰元素
- 8. 有元素相鄰
- 9. 用於分叉的共享內存
- 10. 用於內容項目的共享元素值
- 11. C++:數組和共享內存
- 12. 選擇相鄰元素的子元素
- 13. 分組相鄰元素列表
- 14. XSLT每4個相鄰元素分組
- 15. 將共享庫共享到共享內存
- 16. 將結構數組保存到共享內存中
- 17. 內存共享
- 18. Cuda:使用共享內存計算元素
- 19. 如何將元素(cv :: Point)添加到共享數組中 - CUDA
- 20. 將整數數組讀入共享內存
- 21. 計數等於數組的相鄰值
- 22. Excel單元共享相同的內存地址
- 23. 通過比較兩個相鄰元素來分組數組
- 24. 基於共享內存的程序
- 25. XmlReader跳過相鄰元素
- 26. 乘以相鄰元素
- 27. jQuery選擇相鄰元素
- 28. 定位相鄰元素
- 29. cuda從全局內存複製數組到共享內存
- 30. 將元素存入數組
誰投票結束這個問題?你可以在下面看到,這個問題不是太寬泛,可以簡短地回答它。雖然我同意現在很多CUDA問題的質量都不高,但這並不是,我認爲立即關閉問題的習慣已經變得非常常見(我會很高興地承認這包括我自己)。 – tera