厳格な整合性と順次整合性の違い


8

厳格で順次的な一貫性は独立してかなりよく理解しています。

厳密なCは、基本的に、命令がグローバルクロックで実行される実際の順序を強制します。

Sequential Consistencyは、基本的に1つのプロセッサでのみ順序を強制します。

でもいくつかの文献をまとめるのに苦労しています。 http://www.cs.nmsu.edu/~pfeiffer/classes/573/notes/consistency.htmlは、メモリの「ラグ」を可能にする順次一貫性について説明しています。書き込みがすべてのプロセッサに伝播するまでに時間がかかる場合があります。しかし、それが行われると、一度にすべてに届きます。したがって、以下はSequential Consistencyで有効です

P1:  W(x)1
-----------------------
P2:        R(x)0 R(x)1

今私が気にしているのは、次のプロセスです。これはデッカーのアルゴリズムのようなものです。

P1:  W(x)1  R(y)0
-----------------
P2:  W(y)1  R(x)0

これは、シーケンシャル一貫性(http://portal.acm.org/citation.cfm?id=1787234.1787255 pg 2)の下では確かに可能ではないはずです。この結果が得られる合計順序はありません。

しかし、シーケンシャルな一貫性により書き込みの伝播が遅くなり、1つのスレッドが他のプロセッサの状態を把握していない可能性があるという考えからは理にかなっています。

ここで何が欠けていますか?


逐次的一貫性と因果的一貫性は紛らわしいと思います。SCは、直感的な言い回しよりも強い状態です。2番目の実行はCC(およびPRAM C)ですが、SCではありません。
アーロンスターリング

はい、たぶん。私の質問は、2番目の実行が連続して一貫していないのはなぜですか?最初のものがそうである場合、実行2を不整合にする特別な理由は何ですか?
jetru

すべての回答をありがとう。また、因果の一貫性について読み、私が考えていたのはまさにそれだと理解しました。
jetru

回答:


8

あなたは何も見逃していません:)

Dekkerのアルゴリズムは、分散共有メモリ階層ベースのマルチプロセッサで順次一貫していませんが、メモリの更新はローカルメモリ(キャッシュ)の更新と同期せずに、MESI(弱いメモリモデル)などのキャッシュコヒーレンスプロトコルを介して非同期に伝播するため、非常に可能です。

デッカーのアルゴリズムが適用されているユニプロセッサでは、これは当てはまりません。厳密に一貫しています。


したがって、メモリ更新の伝播を考慮することで、実際にメモリモデルを緩和しているため、想像上のメモリモデルでは、実行2が可能です。適切にシーケンシャルに一貫したメモリストアでは、書き込みは即座に伝播します。これは正しいですか?
jetru

1
はい。すべてのプロセスがローカルメモリのみを参照する場合、実行2が可能です。適切にシーケンシャルな一貫性では、書き込みは即座に伝播する必要はありませんが、他の場所が書き込まれた場所を参照または更新する場合は通常そうです。
サイベンカット

4

あなたはすでに正しい答えを持っています。「この結果が得られる順序の合計はない」ため、2番目の実行は順番に一貫していません。

あなたの混乱はこの考えに由来すると思います:

シーケンシャルな一貫性により、書き込みの伝播が遅くなり、1つのスレッドが他のプロセッサの状況を把握していない可能性があります。

これは正しいです。伝播が遅くなる可能性があります。シーケンシャルな一貫性により、1つのスレッドが他のプロセスがどのようなプログラムであるかを認識できなくなります。ただし、逐次一貫性では、すべてのスレッドが他のプロセスが何をしているかを認識できないわけではありません(一部のプログラムでは、デッカーのアルゴリズムを含みます)。

上記の「一部のプログラム」というフレーズは、この考慮事項に基づいています。逐次一貫性の下でも、スレッドが共有メモリを使用しない場合、どのスレッドも別のスレッドの動作を認識しません。


3

この論文は、あなたが言及している2つの一貫性の違いについてそのタイトルが示唆しているため、理解にも役立つかもしれません。(ただし、メッセージパッシングでのSeqConおよびStrictCon共有オブジェクトの実装に関する大部分は、あなたが言及したラグについて考える1つの方法です。)

特定の質問に答えるために:逐次一貫性では、すべてのイベントが特定の順序で発生し、1つのプロセスで発生することが常に時間と一貫している必要があります。

だから理由

P1:  W1(x,1)  R2(y)0
-------------------
P2:  W2(y,1)  R2(x)0

不可能W1(x,1) R1(y)0 W2(y,1) R2(x)?です。たとえば、グローバルシーケンスが必要です。このシーケンスでは、最後の読み取りは明らかに0を返すことができません。ただし、このシーケンスは、リアルタイムと一貫している必要はありません。イベントのシーケンスがリアルタイムであったことは完全に可能です(シーケンシャル一貫性)W1(x,1) W2(y,1) R1(y)0 R2(x)1。厳密な整合性のため、このシーケンスは不正です(R1(y)は以前の書き込みの値を返さなかったため)。


コメントが遅れて申し訳ありませんが、W1(x、1)W2(y、1)R1(y)1 R2(x)1が順次一貫した環境でも発生する可能性はありますか?実行順序が時間内に発生する前にこの順序で発生するように調整されている場合はどうなりますか?
William

W1(x、1)W2(y、1)R1(y)1 R2(x)1の実行は、私が誤っていない限り、連続して一貫しており、厳密に一貫しています(今日はもう少し疲れています)。
マーティンB.

「実行命令が発生するように調整されている」とは正確にはどういう意味か、わかりません。
マーティンB.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.