RISC-VにおけるRVWMOのメモリモデルについて、仕様書を読み直すことにした。
もうちょっと詳しく、RISC-V仕様書のAppendxx A. RVWMOの節を読み解いていくことにした。
RISC-V命令セットアーキテクチャにおける明示的な同期に関する内容であり、特にAcquireとRelease操作、RCsc Annotationの使用、および適切なメモリ順序を確保するための操作のペアリングに関する規則に焦点を当てている。
規則5: Acqurieアノテーション
- Acquire操作は、クリティカルセクションの開始時に使用される。
- これにより、同期変数に対してプログラム順序で後続するすべてのメモリ操作も、グローバルメモリ順序で追随することが保証される。
- Acquireアノテーション(例えば、AMOSWAP.W.AQの.aq)またはFENCE R,RW操作によって実現され、後者はすべての先行するロードに対して順序を強制するものである。
規則6: Releaseアノテーション
- Release操作は、クリティカルセクションの終了を示すものである。
- これは、プログラム順序で先行するすべてのメモリ操作が、Release操作のグローバルメモリ順序でも先行することを保証するものである。
- Releaseアノテーション(例えば、AMOSWAP.W.RLの.rl)またはFENCE RW,W操作によって実装され、特にストアの順序に影響する。
規則7: RCscアノテーション
- RCscアノテーションは、より強力な同期を実現するために使用され、ストアReleaseからロードAcquireへの順序を強制する。
- RCpc(キャッシュラインごとのRelease一貫性)だけでは対処できない特定のプログラミングシナリオに必要となる。
規則8: 操作のペアリング
- ストア条件式(SC)操作は、グローバルメモリ順序で、それにペアされたロード予約(LR)操作の後になければならないことを示す。
- LRによって返される値に依存しない値がストアされている場合でも適用され、期待どおりにアトミックな読み書き変更操作が行われることを保証する。
テキストでは、アノテーションおよびフェンスを使用したスピンロックの実装例を提供し、AcquireとReleaseのセマンティクスを示している。 図A.7では、AcquireとReleaseに.aqと.rlのアノテーションを使用したAMOSWAPを使用しており、クリティカルセクション内の順序は保証されるが、それ以外のロードやストアに対しては必ずしもそうではない。
図A.8では、AcquireとReleaseにFENCE命令を使用しており、プログラムの開始時にある無関係なロードを含め、より厳格な順序を適用している。 これらのメカニズムは、複数のプロセッサーやスレッドが共有データにアクセスして変更する並行システムの設計に不可欠となる。 AcquireとReleaseのセマンティクスの適切な使用、適切なアノテーションとともに、メモリ操作が定義された順序で発生することを保証し、データ競合を防ぎ、システム全体でのデータの一貫性を保証する。