2

MESI (Modified, Exclusive, Shared, Invalid) プロトコルは、CPU キャッシュが通信し、すべてがキャッシュ ラインの最新の値を使用していることを確認するために使用されます。1 つの CPU がキャッシュ ラインの値を変更すると、このキャッシュ ラインにサブスクライブしている他のすべての CPU は、キャッシュ ラインへの変更に関するアラートを受け続けます。

ただし、MESI に関して読んだすべての文献で、プロトコルの通信中にパフォーマンス コストが発生するかどうかはわかりませんでした。このコストは、x86LOCKプレフィックスのコストの一部にすぎませんか? LOCKx86プレフィックスが使用できない場合でも、MESIを使用できると確信していますか?

NB Intel は実際には MESIF プロトコルを使用しています。ここで、F は追加の「転送」状態です。

4

2 に答える 2

1

はい、MESI(F) プロトコルはすべてのメモリ操作 (読み取りと書き込み) で使用されます。キャッシュに何かを書き込んで (つまり、「M」状態)、その行を削除する必要があると想像してください。プロトコルは、それをメモリに書き戻す必要があると言っています。プロトコルが使用されていない場合は、常にメモリにライトスルーする必要があるか (帯域幅のコストが非常に高くなります)、メモリに一貫性がありません (悪い考えです)。

つまり、共有がない場合でも MESI プロトコルが使用され、その場合、回線は「E」、「I」、または「M」状態になり、「S」は使用されません。

補足: 通常、システム上のほぼすべてのアプリケーションは、何らかの動的ライブラリ コードを共有することに注意してください。そのコードはどこにあり、そのアクセスはどのように管理されると思いますか?

ここで、パフォーマンスへの影響に関するご質問にお答えします。はい、MESI(f) または任意のコヒーレンス プロトコルを実装すると、パフォーマンスに影響がありますが、コヒーレンス プロトコルが存在しない場合と比較すると、その影響は実際にはプラスです。その場合、すべての読み取り/書き込みはメイン メモリに移動する必要があります (つまり、アプリケーションは数百倍遅くなります)。

要するに、MESI(f) プロトコルは帯域幅にマイナスの影響を与えますが、全体的にはパフォーマンスにプラスの影響を与えます。キャッシュ コヒーレンス プロトコルを使用しない場合 (キャッシュなし) と比較して、実際には多くのパフォーマンス (およびパワー) が得られます。

于 2016-01-14T20:17:31.150 に答える