std::hardware_destructive_interference_size および std::hardware_constructive_interference_size について
キャッシュ ラインサイズ
std::hardware_destructive_interference_size および std::hardware_constructive_interference_size は、システムのキャッシュライン サイズに基づいてメモリ アクセス パターンを最適化するための移植可能なヒントを提供することを目的とした C 17 で導入された定数です。
L1 キャッシュ ラインとの関係Size
これらの定数は理論的には L1 キャッシュ ラインのサイズを示しますが、実際にはこれが常に保証されているわけではありません。コンパイラは、これらの値を決定するために環境ヒントを推定または使用する場合があります。
使用例
コンパイルとバイナリの実行
キャッシュ ラインのサイズはマシンによって異なる可能性があるため、 、コンパイルされたバイナリでこれらの定数を直接使用すると、問題が発生する可能性があります。既知のシステム アーキテクチャに基づいて正確な値を定義するか、フォールバック メカニズムを使用して実行時に適切なサイズを決定することをお勧めします。
例
次のコードを考えてみましょう。
struct CacheLineObject { alignas(std::hardware_destructive_interference_size) int value; };
システムのキャッシュ ライン サイズが 64 バイトの場合、CacheLineObject 構造体の配列を宣言すると、各オブジェクトが独自のキャッシュ ラインを占有するようにして、破壊的な干渉を最小限に抑え、パフォーマンスを向上させます。
以上が`std::hardware_destructive_interference_size` と `std::hardware_constructive_interference_size` はメモリ アクセス パターンの最適化にどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。