メモリの一貫性とキャッシュの一貫性


16

Sequential ConsistencyがCache Coherenceよりも強力なプロパティであることは本当ですか?

による

ソリン、ダニエルJ; ヒル、マークD; Wood、David A:メモリの一貫性とキャッシュの一貫性に関する入門書、Morgan&Claypool、2011

順次一貫性は、(正式ではなく)と説明できます。

シーケンシャル整合性メモリモデルは、システムがすべてのスレッドのロードとストアをすべてのメモリ位置に実行し、各スレッドのプログラム順序を考慮した合計順序で実行する必要があることを指定します。各ロードは、その合計順序で最新のストアの値を取得します。

言い換えると、各スレッドのメモリイベント(ロードおよびストア)が与えられた場合、次のようにすべてのイベントを順序付けることができます。1)各スレッドについて、イベントの順序が保持され、2)グローバルな順序がシリアル(保存された最新の値を返すロード)。

今、彼らは一貫性を説明し続けています。

定義コヒーレンスシーケンシャル一貫性の定義に類似してコヒーレントシステムは、各スレッドのプログラム順序を尊重総ために単一のメモリ位置へのすべてのスレッドのロードとストアを実行するために現れなければならないということです。

つまり、システムは一貫性があり、各場所の各スレッドのメモリイベントが与えられた場合、1)各スレッドのその場所へのイベントの順序が保持され、2)それぞれの注文がシリアルである場所

最後に、彼らは違いを指摘します:

この定義は、一貫性と一貫性の重要な違いを強調してます。一貫性はすべてのメモリ場所に関して指定されるのに対し、一貫性はメモリ場所ごとに指定されます。

したがって、一貫性のあるシステムでは、各場所のすべてのイベントの合計順序(特定の場所のイベント間の順序)が必要ですが、一貫性のあるシステムでは、すべてのイベントの合計順序を定義する必要があります(したがって、順序は異なる場所のイベント間でもありますか?)

それは、一貫性が一貫性ほど厳密ではないということですか?(面白いようです!)一貫性のある一貫性のないトレースはありますか?


2
「回答を確認してください!」という形式の質問は気に入らないことに注意してください。より具体的な質問を追加できますか?ギャップはどこにあると思いますか?
ラファエル

@ラファエルはあなたが正しいです、そして私が質問を書いていたとき、それはあまり良い感じではありませんでした。しかし、インターネット上で答えを見つけることができなかった場合(「一貫性はすべてのビットについて話す」という曖昧な主張を除く)、それで答えを見つけようとしたとき、それが正しいかどうかはわかりませんでした。私は怪しい質問を思い付くべきでしたか?または質問に答えを提供しませんか?:)
Ayrat 14年

@Ayrat私はあなたの質問の最後の部分をあなたがチェックしたい答えとして読んだ。その場合は、読者に特定する必要がある疑いがあるはずです(そうでない場合は、なぜ尋ねますか?)。たぶん私は誤解していますか?
ラファエル

@Raphael「最後の部分を確認したい」-はい。'何で質問する?' -トピックは新しいものであり、結論が正しいとは確信できませんでした。私は将来この種の質問を避け、おそらくそれをチェックする誰かを見つけることを
試み

回答:


9

指摘したように、一貫性は個々のメモリロケーションのプロパティであり、一貫性はすべてのメモリロケーションへのアクセスの順序を指します。シーケンシャル一貫性は、一貫性よりも厳密に強い特性です。つまり、連続的に一貫性のあるすべてのシステムは、すべてのメモリ位置で一貫性があります。反対は真実ではありません。すべての場所で一貫性のあるメモリは、必ずしも連続して一貫しているとは限りません。実際、メモリモデルの整合性が弱いだけの実際のキャッシュコヒーレントマルチプロセッサが多数あります(異なる場所へのアクセスが異なる順序で発生することを異なるプロセッサが観測する場合があります)。

連続的に一貫性があるという証明は、一貫性があることを意味します。

バツバツ

バツyバツ0y0バツyバツyyバツ

これは驚くべき結果につながる可能性があります。例えば

initially A=B=0
process 1               process 2
store A := 1            load B (gets 1)
store B := 1            load A (gets 0) 

このトレースは一貫性があります。

  • Aの場合、順序は次のとおりですproc2 loads A(gets 0)proc1 stores A:=1
  • Bの順序は次のとおりですproc1 stores B:=1proc2 loads B(gets 1)

しかし、それは一貫していません!if proc2 load Bが1を返す場合、proc1 store A := 1すでに発生しており、proc2 load A1も返す必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.