弱い順序 (ウィークオーダリング)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/29 18:38 UTC 版)
「一貫性モデル (ソフトウェア)」の記事における「弱い順序 (ウィークオーダリング)」の解説
プログラムの順序やアトミック性(不可分性)は、すべての読み取りと書き込みではなく、特定の操作に対してのみ維持される。これは、クリティカルセクションで行われるようなある種のメモリ操作は、クリティカルセクション内のすべての操作が完了するまで、すべてのプロセッサには見えないようにする必要があるという理解に基づいている。また、マルチプロセッサシステムで実行されるプログラムには、データレースが起こらないように必要な同期が含まれており、常に逐次一貫性の結果が得られるようになっていることを利用している。このように、弱い順序(ウィークオーダリング)では、同期操作以外の操作をデータ操作に分類することができる。 プロセッサー1プロセッサー2X = 1;fence xready = 1; fencewhile (!xready) {}; fence y = 2; 同期操作は、すべてのプロセッサによって行われた以前のすべての操作を完了して見たことを確認するために、プロセッサに信号を送信する。弱い順序を維持するために、同期操作の前の書き込み操作は、同期操作の前にグローバルに実行されなければならない。また、同期操作の後に存在する操作は、同期操作が完了した後にのみ実行されなければなりません。したがって、同期変数へのアクセスは逐次的に一貫しており、読み出しや書き込みは、以前の同期操作が完了した後にのみ実行されなければならない。このモデルでは、一貫性は緩和されない。これらの要件が満たされていれば、他のすべての「データ」操作の順序を変更することができる。 プログラム内の明示的な同期への高い依存度がある。弱い順序モデルでは、プログラマは、テスト&セット、fetch-and-op、ストア・コンディショナル、ロード・リンクなどのアトミック・ロック命令を使用するか、同期変数にラベルを付けるか、フェンスを使用しなければならない。
※この「弱い順序 (ウィークオーダリング)」の解説は、「一貫性モデル (ソフトウェア)」の解説の一部です。
「弱い順序 (ウィークオーダリング)」を含む「一貫性モデル (ソフトウェア)」の記事については、「一貫性モデル (ソフトウェア)」の概要を参照ください。
弱い順序
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/29 18:38 UTC 版)
「一貫性モデル (ソフトウェア)」の記事における「弱い順序」の解説
上記の制約のほとんどを緩和したモデルの例として、弱い順序(Weak Ordering)がある(他のプロセッサの書き込みを早く読むことを除く)。このモデルでは、メモリ操作をデータ操作と同期操作の2つのカテゴリに分類します。プログラムの順序を強制するために、プログラマはプログラムの中に少なくとも1つの同期操作を見つける必要がある。これが機能する前提は、同期操作の間にデータ領域へのメモリ操作を並べ替えても、プログラムの結果には影響しないということである。同期操作は、プログラムの順序を守るためのセーフティネットとして機能する。この仕組みは、データ操作の回数をカウンターで追跡し、このカウンターがゼロになるまで、同期操作は発行されないというものである。さらに、以前の同期操作がすべて完了しない限り、それ以上のデータ操作は発行されない。2つの同期変数の間にあるメモリ操作は、プログラムの正しさに影響を与えることなく、オーバーラップしたり、順序を変えたりすることができる。このモデルでは、書き込みの不可分性が常に維持されるため、弱い順序のための追加のセーフティネットは必要ありません。
※この「弱い順序」の解説は、「一貫性モデル (ソフトウェア)」の解説の一部です。
「弱い順序」を含む「一貫性モデル (ソフトウェア)」の記事については、「一貫性モデル (ソフトウェア)」の概要を参照ください。
- 弱い順序のページへのリンク