コアAが変数Xを変更していて、コアBがその変数(X)を読み取っている場合を考えてみます。もちろん、この場合、XはコアAによって変更されているため、キャッシュコヒーレンスプロトコルはコアBのキャッシュを更新します。もちろん、このキャッシュコヒーレンスはコアBでの実行を遅くします。ただし、このキャッシュコヒーレンスはコアAのパフォーマンスにも影響します。変数Xがそのキャッシュにあると仮定します。
2 に答える
はい。パフォーマンスに影響を与える可能性のあるいくつかの方法があります。人々が使用する標準プロトコルは、MSI(Modified、Shared、Invalid)の変形であり、プロトコルにO(所有者)とE(排他的)が追加されることがあります。この例では、コアAはModified(またはExclusive)状態で開始し、コアBの読み取りにより、コアAはそれをShared状態に変更します。コアがいつでも実行できる操作は非常に多いため、このアクションはキャッシュ内でサイクルを消費します。クリティカルパスにないため、コアAへの影響はそれほど大きくありません。より大きな影響は、コアAが再度書き込みを行う場合です。キャッシュラインは共有(または無効)状態にあるため、MまたはEにアップグレードする要求を発行する必要があります。その要求はコアBに送信する必要があります。この操作はクリティカルパス上にあり、書き込みは可能です。tキャッシュブロックがアップグレードされるまで終了します。とは言うものの、書き込みは通常バッファリングされ、プロセッサは通常この操作でブロックされません。
はい、ME(O)SIコヒーレンスプロトコルを使用する現在のマイクロアーキテクチャでは、Aの更新も遅くなりますX
。これは、Bの読み取りにより、含まX
れているキャッシュラインが「共有」状態になってからコピーされ、Aの書き込みでは、Bのコピーを無効にして「排他的」状態になってから、再度変更できるためです。
とはいえ、Aの書き込みは、X
実際にはAの実行パイプラインを停止させない可能性があります。これは、アーキテクチャとプログラミング言語のメモリ整合性モデル、および書き込みがアトミック操作として強制されるか、後続の書き込みフェンスとして強制されるかによって異なります。