C 17 では、2 つの静的 constexpr 定数、std::hardware_destructive_interference_size と std::hardware_constructive_interference_size が導入されました。 std::hardware_constructive_interference_size、キャッシュラインのサイズに関する情報を提供します。ただし、これらの定数には、単に L1 キャッシュ ライン サイズを取得するだけではなく、より広範な目的があります。
これらの定数の目的は、最適なオフセットを表す値を提供することです。または、それぞれ偽共有を回避するため、または真の共有を促進するためのデータ構造の制限。理論上、これらの値は L1 キャッシュラインのサイズと適切に一致するはずですが、実際にそうなるとは保証されません。
これらの定数は、さまざまなシナリオで使用できます。
これらの定数はコンパイル時に定義され、必ずしも実際のキャッシュを表すわけではありません。実行時の行サイズ。マシンごとにキャッシュ ライン サイズが異なる場合があります。
パフォーマンスを最大化することが重要な要件である場合は、プリプロセッサ マクロを使用するか、キャッシュを検出するプラットフォーム固有のライブラリを使用して、正確なキャッシュ ライン サイズ値を定義することをお勧めします。実行時の行サイズ。
提供されたサンプル プログラムは、これらの定数を効果的に使用する方法を示しています。これは、異なるアライメントを持つ int ラッパーの配列と異なるアライメントを持つ int のペアを割り当てることによってフォールス シェアリングを示し、パフォーマンスへの影響を示しています。
このプログラムには、ユーティリティ関数、cache_line_size() も含まれています。フォールバックとして使用することも、利用可能な場合は既知の L1 キャッシュライン サイズを使用するようにコンパイル中に再定義することもできます。
これらの定数を理解し、適切に使用することで、コードを最適化してメモリ アクセスを効率化し、パフォーマンスを向上させることができます。
以上がstd::hardware_destructive_interference_size と std::hardware_constructive_interference_size はメモリ アクセスの最適化にどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。