我想用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. XSLT每4個相鄰元素分組
- 10. 將結構數組保存到共享內存中
- 11. 內存共享
- 12. Cuda:使用共享內存計算元素
- 13. 計數等於數組的相鄰值
- 14. Excel單元共享相同的內存地址
- 15. 定位相鄰元素
- 16. jQuery選擇相鄰元素
- 17. 乘以相鄰元素
- 18. XmlReader跳過相鄰元素
- 19. 將元素存入數組
- 20. 將結構數組初始化爲共享內存
- 21. 將結構數組複製到共享內存中
- 22. 刪除Ruby數組中的相鄰元素?
- 23. 獲取二維數組中的相鄰元素?
- 24. Ruby數組中相鄰的重複元素
- 25. 檢查2d數組中的相鄰元素並替換它們
- 26. 如何從另一個元素創建相鄰元素的數組列表?
- 27. iframe在相鄰顯示中:table-cell元素將其相鄰單元上的內容向下推
- 28. CUDA共享內存佔用
- 29. 如何將相鄰元素簡化爲單個元素
- 30. C共享內存
誰投票結束這個問題?你可以在下面看到,這個問題不是太寬泛,可以簡短地回答它。雖然我同意現在很多CUDA問題的質量都不高,但這並不是,我認爲立即關閉問題的習慣已經變得非常常見(我會很高興地承認這包括我自己)。 – tera