8192 個元素的緩慢循環:了解性能損失
提供的程式碼透過計算九個元素的平均值來處理矩陣img每個非邊界元素的周圍單元格並將結果儲存在矩陣res 中。當矩陣大小為 8192x8192 時,程式表現出顯著的效能下降。
這種減慢歸因於與超級對齊相關的記憶體管理問題。編譯器會對齊記憶體中的資料結構以提高效能,在這種情況下,矩陣佈局可能會導致記憶體存取效率低下。
要解決此問題,應互換平均操作中的循環順序。循環不應按列迭代,而應按行迭代。
以下是修改後的程式碼:
for(j=1;j<SIZE-1;j++) { for(i=1;i<SIZE-1;i++) { res[j][i]=0; res[j][i] += img[j-1][i-1]; res[j][i] += img[j ][i-1]; res[j][i] += img[j+1][i-1]; res[j][i] += img[j-1][i ]; res[j][i] += img[j ][i ]; res[j][i] += img[j+1][i ]; res[j][i] += img[j-1][i+1]; res[j][i] += img[j ][i+1]; res[j][i] += img[j+1][i+1]; res[j][i] /= 9; } }
透過更改循環順序,順序記憶體保持訪問,消除與非順序存取相關的效能損失。
性能比較:
互換的循環結構顯著提高了性能:
原始代碼:
交換循環:
此修改可確保高效的記憶體管理並解決循環 8192 個元素時效能緩慢的問題。
以上是為什麼循環順序對於 8192x8192 矩陣的高效處理至關重要?的詳細內容。更多資訊請關注PHP中文網其他相關文章!