Load-Hit-Store とは

ロード・ヒット・ストア(LHSと略記されることもある)は、ストア操作のターゲットであったメモリ位置がロードされるCPU内のデータ依存性である。 CPUは、ストアが終了するまで待ってから、正しい値を取得する必要があります。これには、例えば、 L1キャッシュ往復では、パイプラインのほとんどまたはすべてがストールし、パフォーマンスが大幅に低下します。たとえば、(C / C ++):
ここで、言語規則は、ポインタaおよびbが異なるメモリ位置を参照することをコンパイラが想定することを可能にしない。したがって、一般的には、最終的な加算用のレジスタに格納された値を保持することはできません(または、この単純な例では、戻り値を12に事前計算します)。しかし、最初の値から少なくとも値をリロードするメモリロケーション、* a。現実的な唯一の選択肢は、aとbが等しいかどうかを調べるテストと分岐です。正しい戻り値は14ですが、ポインターが等しくない場合はかなりのオーバーヘッドが追加され、関数のインライン展開では最適化が有効になります。
今度は、aとbの同じアドレスを使ってslowへの呼び出しが行われた場合、メモリストアとメモリロードの間のデータ依存関係が、最終的な遅いステートメントの中にあります。 CPU(デスクトップまたはノートブックコンピュータ用の汎用プロセッサのようなもの)の中には、複雑なストアからロードへの転送にかなりの量のダイスペースを割り当てるものがあり、オペランドのネイティブアライメントなどの適切な状況下では、キャッシュラウンドトリップ。他のCPU(例えば、組み込み機器またはビデオゲーム機用)は、あまり精巧でない、または最小限のアプローチを使用してもよく、ソフトウェア開発者が性能重視のコードに頻繁に負荷をかけないようにするか、最小限のアプローチでは、ストア・ツー・ロードの依存関係により、ストア・バッファのフラッシュとパイプラインのストールが強制されます。これにより、高い計算コストで正確な計算結果が得られます。