プロセッサの一貫性は、並行コンピューティングの領域(分散共有メモリ、分散トランザクションなど) で使用される一貫性モデルの 1 つです。
プロセッサ一貫性とは、他のプロセッサが個々のプロセッサからの書き込みを参照する順序が、書き込みが発行された順序と同じである場合に、システムがプロセッサ一貫性を示すことを意味します。このため、プロセッサ一貫性は複数のプロセッサを持つシステムにのみ適用できます。プロセッサ一貫性は、すべてのプロセッサからの書き込みが同じ順序で参照される必要がないため因果一貫性モデルよりも弱いですが、キャッシュの一貫性を必要とするため、PRAM一貫性モデルよりも強力です。[1]因果一貫性とプロセッサ一貫性のもう1つの違いは、プロセッサ一貫性では、ロードがストアの完了を待つ必要がなくなり、書き込みアトミック性も必要なくなることです。[1]プロセッサ一貫性は、同じメモリ位置への書き込みだけでなく、プロセッサによるすべての書き込みが順序どおりに参照される必要があるため、キャッシュ一貫性よりも強力です。[1]
プロセッサの一貫性の例
右側の例 1 では、各プロセッサによるすべての書き込みが他のプロセッサによって発生した順序で表示され、トランザクションが一貫しているため、単純なシステムはプロセッサの一貫性に従います。
例 2 はプロセッサ一貫性がなく、P1 と P3 による書き込みがそれぞれ P2 と P4 によって順序どおりに行われていないように見えます。
例 3 はプロセッサ一貫性がありますが、因果一貫性はありません。これは、P3 において、P1 の W(x)2 が P2 の W(y)3 に因果的に先行するため、因果一貫性があるはずです。
R(y)3,R(x)1 R(y)3,R(x)2
例 4 は、P2 ではプロセッサ一貫性がありません。プロセッサ一貫性の場合、W(x)2 は P1 の W(y)3 に先行する x への最新の書き込みであるため、一貫性があるはずです。
この例のキャッシュ一貫性は、P2 が P1 で発行された順序で個々のメモリ位置への書き込みを認識するため、一貫性があります。
R(y)3,R(x)1 R(y)3,R(x)2
プロセッサの一貫性とシーケンシャルな一貫性
プロセッサ一貫性 (PC) は、シーケンシャル一貫性(SC)で強制される古いストアと新しいロード間の順序付けを緩和します。 [2]これにより、ロードがキャッシュに発行され、古いストアより先に完了する可能性があります。つまり、ロード投機を実装しなくてもストアを書き込みバッファにキューイングできます (ロードは自由に続行できます)。[3]この点では、失敗した投機に対する回復技術が不要で、パイプラインのフラッシュが少なくなるため、PC は SC よりパフォーマンスが優れています。[3] SC システムが採用するプリフェッチの最適化は、PC システムにも適用できます。[3] プリフェッチとは、ロード/ストアの待ち時間を削減するために、実際に必要になる前に、今後のロードとストアのデータを事前にフェッチする行為です。PC は、対応するストアの前にロードを再順序付けできるようにすることでロード待ち時間を短縮するため、プリフェッチされたデータはロードよりもストアに使用されることが多くなり、プリフェッチの必要性がいくらか軽減されます。[3]
プログラマーの直感
PC システムがプログラマーの直感にどれだけ従っているかという点では、適切に同期されたシステムでは、PC と SC の結果は同じであることがわかります。[3]プログラマーの直感とは、基本的に、プログラマーが命令の実行を期待する方法であり、通常は「プログラム順序」と呼ばれます。マルチプロセッサ システムでのプログラム順序とは、命令の実行が順次実行と同じ結果をもたらすことです。PC と SC の両方がこの期待に従うという事実は、PC システムでの対応するロードとストアが依然として相互に順序付けられているという事実の直接的な結果です。[3]たとえば、ロック同期では、PC によって動作が完全に定義されていない唯一の操作はロック取得ストアです。この操作では、後続のロードがクリティカル セクションにあり、その順序が結果に影響します。[3]ただし、この操作は通常、ストア条件付きまたはアトミック命令で実装されるため、操作が失敗した場合は後で繰り返され、すべての新しいロードも繰り返されます。[3]このストアの前に発生するすべてのロードは、クリティカルセクションで発生するロードに対して順序付けられているため、クリティカルセクションのロードが実行される前に、古いロードがすべて完了する必要があります。
プロセッサの一貫性とその他の緩和された一貫性モデル
プロセッサ一貫性は、シーケンシャル一貫性よりは弱いものの、ほとんどの場合、必要以上に強い一貫性モデルです。これは、マルチプロセッサ システムで実行されるプログラムに固有の同期ポイントの数によるものです。[4]これは、データ競合が発生しないことを意味します (データ競合とは、少なくとも 1 つのアクセスが書き込みであるメモリ位置への複数の同時アクセスです)。[3]これを念頭に置くと、モデルでは、同期ポイント[3]を通過する操作がなく、1 つの操作が通過する限り、すべてのメモリ操作の再編成が可能になることは明らかです。これは、弱い順序付けと呼ばれます。ただし、弱い順序付けでは、プロセッサ一貫性と同じ制限がいくつか課されます。つまり、システムは一貫性を維持する必要があり、同じメモリ位置へのすべての書き込みは、すべてのプロセッサで同じ順序で認識される必要があります。[4]弱い順序付けと同様に、リリース一貫性モデルではすべてのメモリ操作の順序変更が可能ですが、さらに具体的になり、同期操作を細分化して、順序変更をさらに緩和できます。[3]これらのモデルは両方とも、コードの適切な同期と、場合によってはハードウェア同期のサポートを前提としているため、モデルを使用して実行されるプログラムの信頼性が不明な場合は、プロセッサ一貫性モデルに従う方が安全です。
SPARC V8 TSO、IBM-370、x86-TSOメモリモデルとの類似性
プロセッサの一貫性の主な構成要素の 1 つは、書き込みの後に読み取りが続く場合、プログラム順序外で実行できることです。これにより、ロードがストアより先に実行されると、書き込みの遅延が隠蔽されます。多くのアプリケーションはこの構造で正しく機能するため、このタイプの緩和された順序付けを実装するシステムは、通常、連続的に一貫性があるように見えます。この仕様に準拠する他の 2 つのモデルは、SPARC V8 TSO (Total Store Ordering) と IBM-370 です。[4]
IBM-370 モデルは、いくつかの例外を除いて、書き込みとそれに続く読み取りをプログラム順序以外で実行できるようにする仕様に従っています。1 つ目は、操作が同じ場所に対して行われる場合、プログラム順序で実行する必要があることです。2 つ目は、いずれかの操作がシリアル化命令の一部である場合、または 2 つの操作の間にシリアル化命令がある場合、操作はプログラム順序で実行する必要があることです。[4]このモデルは、TSO モデルが前述の例外の 1 つを排除しているため、検討されている 3 つのモデルの中でおそらく最も厳密です。
SPARC V8 TSO モデルは IBM-370 モデルと非常によく似ていますが、重要な違いは、同じ場所への操作がプログラム順序どおりに完了しないことです。これにより、ロードによって、プログラム順序の観点から「古い」ストアが返される可能性があります。[4]これらのモデルはプロセッサ一貫性に似ていますが、これらのモデルにはメモリのコピーが 1 つしかありませんが、プロセッサ一貫性にはそのような制限はありません。これは、各プロセッサが独自のメモリを持つシステムを示唆しており、プロセッサ一貫性の「一貫性要件」 を強調しています。 [4]
x86-TSO モデルには、いくつかの異なる定義があります。トータル ストア モデルは、その名前が示すように、SPARC V8 と非常によく似ています。もう 1 つの定義は、ローカル書き込みバッファに基づいています。x86 と SPARC TSO モデルの違いは、一部の命令が省略され、他の命令が含まれていることですが、モデル自体は非常によく似ています。[5]書き込みバッファ定義では、さまざまな状態とロックを使用して、特定の値が読み取り/書き込み可能かどうかを判断します。さらに、x86 アーキテクチャのこの特定のモデルは、以前の (一貫性の弱い) モデルの問題に悩まされることはなく、プログラマーが構築するためのより直感的な基盤を提供します。[5]
参照
参考文献
- ^ abc David Mosberger (1992). 「記憶一貫性モデル」(PDF) . アリゾナ大学. 2015年4月1日閲覧。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - ^ Kourosh Gharachorloo、Daniel Lenoski、James Laudon、Phillip Gibbons、Anoop Gupta、John Hennessy (1998 年 8 月 1 日)。「スケーラブルな共有メモリ型マルチプロセッサにおけるメモリの一貫性とイベント順序付け」( PDF )。コンピュータ アーキテクチャに関する国際シンポジウムの 25 年 (選抜論文)。ACM。pp. 376–387。doi :10.1145/285930.285997。ISBN 1581130589. S2CID 47089892 . 2015年4月1日閲覧。
- ^ abcdefghijk Solihin, Yan (2009).並列コンピュータアーキテクチャの基礎: マルチチップおよびマルチコアシステム. Solihin Pub. pp. 297–299. ISBN 978-0-9841630-0-7。
- ^ abcdef Kourosh Gharachorloo (1995). 「共有メモリ型マルチプロセッサのメモリ一貫性モデル」(PDF) . Western Research Laboratory . 2015-04-07閲覧。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - ^ ab Scott Owens、Susmit Sarkar、Peter Sewell (2009)。「より優れた x86 メモリ モデル: x86-TSO (拡張バージョン)」(PDF)。ケンブリッジ大学。doi : 10.48456/tr-745。2015年 4 月 8 日閲覧。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です
