キャッシュされていない無関係なアドレスを指している 2 つのポインターがあると仮定してみましょう。したがって、逆参照されるときは両方ともメイン メモリから取得する必要があります。
int load_and_add(int *pA, int *pB)
{
int a = *pA; // will most likely miss in cache
int b = *pB; // will most likely miss in cache
// ... some code that does not use a or b
int c = a + b;
return c;
}
アウトオブオーダー実行により、 の値が計算される前にコードを実行できる場合、最新の Intel プロセッサでは値の取得と処理c
はどのように行われるのでしょうか?a
b
潜在的にパイプライン化されたメモリ アクセスは完全にシリアル化されていますか、それとも CPU のメモリ コントローラによって何らかのフェッチ オーバーラップが実行されている可能性がありますか?
つまり、メイン メモリにアクセスするのに 300 サイクルかかると仮定すると、フェッチa
とb
コストは 600 サイクルになりますか、それともアウトオブオーダーの実行によりオーバーラップが可能になり、サイクルのコストが削減される可能性がありますか?