竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS ロード・ストアの順序が入れ替わるメモリコンシステンシ(メモリオーダリング)

<<   作成日時 : 2013/06/12 08:08   >>

ブログ気持玉 0 / トラックバック 1 / コメント 0

 以前、SPARCのメモリオーダリングで調査途中だったメモリコンシステンシ(メモリオーダリング)について。

 通常、ロード命令やストア命令は命令の発行順序に行われているようにみえる。しかし、ロードするデータがキャッシュに載っていない場合は完了するまで時間がかかり、その間次のロード・ストアが待つことになる。これを後続のロード・ストア命令が追い越して実行する実装もある。これは命令のアウトオブオーダ実行とは独立した考え方で、命令を順に実行するプロセッサでキャッシュを介したプロセッサ間のやりとりを高速化するために実装している。
 このMemory ConsisitencyはモデルによりStrong(メモリアクセスの順序を守る)-Weak(メモリアクセスの順序を入れ替える)と表現し、Weakモデルで動作するよう合わせたコードはStrongモデルでそのまま動作する。

[Strong]
SO(Strong Ordering)またはSequencial Consistency ロード・ストアは命令発行順
TSO(Total Store Ordering) ロード同士は順序を守る。ストア同士は順序を守り、ストアはロードを追い越さない
PSO(Pertial Store Ordering) ロード同士は順序を守る
RMO(Relax Memory Ordering) ロード・ストアとも順序は保証しない
[Weak]

 Weakモデルで命令発行順序を守るためには、ロード・ストア命令間にバリア命令を挿入する。バリア命令は直前までのメモリ操作命令を完了してから次に進む。バリア命令はプロセッサによっては直前までの命令の実行完了まで待つSYNC動作を含むことがある。
 いかなるモデルでもロード・ストア命令発行順序を守らなければならないのはI/Oアクセス。例えばステータスをロードして確認してからデータを読むようなアクセスが入れ替わったらおかしくなる。このような空間のアクセスはバリア命令を挿入する。またはMMUでStrong Orderingアクセスを定義されたメモリ空間を使う。
 では各種プロセッサの実装について。

Memory Barriers: a Hardware View for Software Hackers
http://www.rdrop.com/users/paulmck/scalability/paper/whymb.2010.07.23a.pdf[PDF]

INVISIFENCE: Performance-Transparent Memory Ordering in Conventional Multiprocessors
http://acg.cis.upenn.edu/papers/isca09_invisifence.pdf[PDF]

Memory ordering[Wikipedia]
Memory barrier[Wikipedia]

上記と各プロセッサの仕様書から確認した。それぞれ定義のみで実装依存。コードはよりWeakなモデルに合わせ、実装はStrong側に倒してよい。

・SPARC
 SPARC V8(32bit)はSO/TSO/PSO、V9(64bit)はSO/TSO/PSO/RMO。SPARCの仕様書がいちばん詳しい。
 SPARC64VI以降はTSOまでしか実装していない。

・Alpha、POWER,ARMv7,IA-64
 RMO。

・PA-RISC
 32bitのPA-RISC1.1ではStrong Ordering。64bitのPA-RISC2.0はややStrongなRMO。

・MIPS
 仕様書から探しきれなかったが、見つからないということはStrong Ordering。その根拠はアウトオブオーダ命令実行のR10000について以下の記述があったので。
 "Although execution is out of order, the processor still provides sequential memory consistency and precise exception handling."
 A Study of Out-of-Order Completion for the MIPS R10K Superscalar Processor[PDF]

 なお、プロセッサ外部(マルチプロセッサ環境での他のプロセッサ)からの見え方は定義されていない。以下。
 4.1.4.1 Instruction Serialization (SYNC and SYNCI)
 "In normal operation, the order in which load and store memory accesses appear to a viewer outside the executing pro- cessor (for instance, in a multiprocessor system) is not specified by the architecture."

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
各種プロセッサのメモリオーダリングについて
 メモリに対しプロセッサからのロード/ストアが前後することのあるメモリオーダリングについて整理してみた。 ...続きを見る
竹下世界塔の計算機よもやま話
2017/04/16 05:39

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ロード・ストアの順序が入れ替わるメモリコンシステンシ(メモリオーダリング) 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる