首頁 >後端開發 >C++ >為什麼循環順序對於 8192x8192 矩陣的高效處理至關重要?

為什麼循環順序對於 8192x8192 矩陣的高效處理至關重要?

DDD
DDD原創
2024-12-06 16:03:16226瀏覽

Why is Loop Order Crucial for Efficient Processing of an 8192x8192 Matrix?

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;
    }
}

透過更改循環順序,順序記憶體保持訪問,消除與非順序存取相關的效能損失。

性能比較:

互換的循環結構顯著提高了性能:

原始代碼:

  • 8191: 1.499 秒
  • 8192:2.122秒
  • 8193:1.582秒

交換循環:

  • 8191:0.376秒
  • 8192: 0.357秒
  • 8193: 0.351 秒

此修改可確保高效的記憶體管理並解決循環 8192 個元素時效能緩慢的問題。

以上是為什麼循環順序對於 8192x8192 矩陣的高效處理至關重要?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn