首頁 >後端開發 >C++ >`std::hardware_delta_interference_size` 和 `std::hardware_constructive_interference_size` 與 L1 快取線大小有何關係?

`std::hardware_delta_interference_size` 和 `std::hardware_constructive_interference_size` 與 L1 快取線大小有何關係?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-16 14:36:03202瀏覽

How do `std::hardware_destructive_interference_size` and `std::hardware_constructive_interference_size` relate to L1 cache line size and what are their use cases?

理解std::hardware_delta_interference_size 和std::hardware_constructive_interference_size

簡介:

這些常數與 L1 快取行大小有何關係?

這些常數旨在為目標架構提供 L1 快取行大小的近似值。

破壞性幹擾:
    std::hardware_delta_interference_size 提供一個值,可用作之間的偏移量對像以避免錯誤共享,即來自兩個或多個對象的資料放置在同一快取行上的情況,由於爭用而導致效能下降。
  • 建設性幹擾:
  • std::hardware_constructive_interference_size提供一個值,可用作物件的組合記憶體佔用和基本對齊的限制,以促進真正共享,其中來自不同物件的資料放置在同一快取行上以提高效能。
  • 有一個很好的例子來示範它們的用例嗎?
考慮以下範例:

在此範例中,alignas 屬性使用常數來確保 data.a 和 data .b 具有用於真正共享的最佳對齊和記憶體佈局。

struct CacheOptimizedStruct {
  alignas(std::hardware_constructive_interference_size) int a;
  alignas(std::hardware_constructive_interference_size) int b;
};

int main() {
  CacheOptimizedStruct data;
  // Accessing data.a and data.b in a tight loop will likely benefit from better cache locality.
}
兩者都定義為靜態 constexpr。如果您建立一個二進位檔案並在具有不同快取行大小的其他電腦上執行它,這不是問題嗎?

是的,這可能是一個問題。這些常數不能保證為所有目標電腦提供精確的快取行大小。

但是,您可以定義自己的常數或宏,以根據系統特定資訊提供更準確的值,例如:

以上是`std::hardware_delta_interference_size` 和 `std::hardware_constructive_interference_size` 與 L1 快取線大小有何關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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