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

アクセスカウンタ

zoom RSS 各種プロセッサのメモリオーダリングについて

<<   作成日時 : 2017/04/16 05:39  

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

 メモリに対しプロセッサからのロード/ストアが前後することのあるメモリオーダリングについて整理してみた。

メモリオーダリングまたはメモリコンシステンシに関する過去記事:
ロード・ストアの順序が入れ替わるメモリコンシステンシ(メモリオーダリング)
SPARCのメモリオーダリング

 メモリオーダリングとは、プロセッサから発行されるメモリ参照命令(ロード/ストア)の並び順に関する制約のことで、強い(Strong)/弱い(Weak)と表現する。強いオーダリングは命令発行順を守り、弱いオーダリングは任意に入れ換えが可能。ロード/ストアを入れ替えることにより、例えば命令発行順で先行するストア命令が完了しなくても次のロード命令がメモリアクセスを実行することができる。このしくみはキャッシュによるメモリ管理で、ストア命令をロード命令が追い越せるにはストアバッファの存在が前提となる(ストアバッファがあればメモリへの書き込みは後回しにしてメモリからの読み出しを先に行える)。弱いメモリオーダリングは命令列のアウトオブオーダ実行が必須というわけではない。
(補足:ストアバッファがあれば命令の実行は突き放してすすめるが、キャッシュ前提でのライト動作は下位層のメモリを読み出してから書き換えることになる。つまりロード時にミスヒットしたくらいの時間がかかる)

 メモリ参照の順序を入れ換えてはいけない場合はバリア命令を使用する。バリア命令は(種別にもよるが)バリア命令以前のロード/ストア命令が完了した後に後続のロード/ストア命令を実行する。またはバリア属性のついたロード/ストア命令やメモリ管理機構によるメモリオーダリングの指定がついたページを使用する。

Memory ordering(Wikipedia)

↓こちらにはSPARC V8 TSOとIBMSystem370,x86との類似点について記載がある
Processor consistency(Wikipedia)

プロセッサを支える技術 p.148 メモリバリア命令/FENCE命令
高性能コンピュータ技術の基礎 p.162 4.8 メモリオーダリング


 SPARC V9はTSO(Total Store Ordering)、PSO(Pertial Store Ordering)、RMO(Relax Memory Oredering)を持つ。これらは以下の関係がある。

強い ←メモリモデル→ 弱い
SO ⊃ TSO ⊃ PSO ⊃ RMO

弱いメモリモデル向けに書かれたバリア命令があるコードはそのままでより強いメモリモデルで動作する。

 では各種プロセッサのメモリオーダリングについて。SPARCがいちばん種類が多いのでSPARCから。

□SPARC

☆SPARC V8 TSOとPSOのみ。TSOは必須
sparcv8.pdf[pdf]

☆SPARCV9 PSO/RMOは実装依存 TSOは必須
sparcv9.pdf[pdf]

D.5 Specification of Partial Store Order (PSO)
The specification of Partial Store Order (PSO) is that of Relaxed Memory Order (RMO) with the additional requirement that all memory transactions with load semantics are followed by an implied MEMBAR #LoadLoad | #LoadStore .

D.6 Specification of Total Store Order (TSO)
The specification of Total Store Order (TSO) is that of Partial Store Order (PSO) with the additional requirement that all memory transactions with store semantics are followed by an implied MEMBAR #StoreStore .


SPARC V9はMEMBAR命令でバリアを行う。バリアに関する指示は以下の組み合わせが可能。
#LoadLoad Load <m Load ロード同士は順序を守る(ロードはロードを追い越せない)
#StoreLoad Store <m Load ストアはロードを追い越せる(ロードはストアを追い越せない)
#LoadStore Load <m Store ロードはストアを追い越せる(ストアはロードを追い越せない)
#StoreStore Store <m Store ストア同士は順序を守る(ストアはストアを追い越せない)

これを踏まえて分類すると:

SO:Strong Oredering
#All ロード・ストアは命令発行順を守る

TSO:Total Store Ordering
#LoadLoad ロード同士は命令発行順を守る
#StoreStore ストア同士は命令発行順を守る
#LoadStore ストアはロードを追い越さない(ロードはストアを追い越す)

PSO:Partial Store Ordering
#LoadLoad ロード同士は命令発行順を守る
(ストア同士は命令発行順を守らない)
#LoadStore ストアはロードを追い越さない(ロードはストアを追い越す)

RMO:Relax Memory Ordering
ロード・ストアは命令発行順を守らない

SPARC V8の資料によるとTSOはストアバッファがFIFOの構造、PSOは単なるバッファで準備ができた順にメモリへの書き込みを行うようなモデルの図がある。

☆SPARC64III
HaLが設計したSPARC V9プロセッサは変わったモデルを持つ。
sparc64.pdf[pdf]

LSO: Load/Store Order … SPARCV9のTSOよりも強いメモリモデル
#All Load/StoreはLoad/Storeを追い越せない(=SO)

TSO: Total Store Order … SPARCV9のPSOよりも強いメモリモデル(=V9のTSO)
#LoadLoad ロードはロード同士の順序を守る。
#StoreStore | #LoadStore ストアはロード・ストアの順序を守る。
つまり、ロードはストアを追い越せるがロードは順序どおり。
ストアは先行するロード・ストアを追い越せない。

STO: Store Order … SPARCV9のRMOよりも強いメモリモデル
#StoreStore | #LoadStore ストアはロード・ストアの順序を守る。
つまり、ロードは先行するロード・ストアを追い越せる。
ストアは先行するロード・ストアを追い越せない。

 これらはSPARC V9のメモリオーダリングを指定するPSTATE.MMビットにそれぞれ対応しており、SPARC V9のメモリモデルよりも強いので互換性には問題ない。

□PA-RISC

☆PA-RISC1.1
PA-RISC 1.1 Architecture and Instruction Set Reference Manual[pdf]
Flow Control and Interruptions
Ordering of Accesses
Accesses to the address space (both to memory and I/O) through load, store, and semaphore instructions are strongly ordered. This means that accesses appear to software to be done in program order. In multiprocessor systems, accesses by a given processor must appear to that processor, as well as to all other processors in the system, to be done in program order.


☆PA-RISC2.0
PA-RISC 2.0[pdf]

G章 Memory Ordering Model
メモリオーダリングはstrongly ordered/ordered/weakly ordered の三種類に分類。
strongly ordered:
 I/O空間へのアクセス
 TLBのU-bitが1のページにアクセスしたとき
 セマフォ命令(LDCW.LDCD)
 SYNC命令が強制的にSOアクセスにする
 TLBパージ命令(PITLB/PDTLB)

ordered:ロードは順序を守る。ストアはロードを追い越さない(SPARCのTSO相当)
 Oのコンプリータ(修飾)がついたロード/ストア命令
 仮想アクセスでPSW[O]のビットが1の時にTLBのO-bitが1のページにアクセスしたとき
 絶対アクセスでPSW[O]のビットが1の時

weakly ordered:(SPARCのRMO相当)
 上記以外のアクセス


□POWER

☆POWER ISA 3.0B
POWER ISA 3.0B
1.7.1 Storage Access Ordering
weakly consistent(RMO) と strong access ordering (SO)の二種類


 さて、以下のAlphaと最近のMIPSはロード/ストアの番地(キャッシュライン)が同じ場合と異なる場合もあつかう。

□Alpha

仕様書では完全にRMO。
Alpha Architecture Reference Manual Fourth Edition[pdf]

5.6 Read/Write Ordering
For any two memory accesses A and B, either A must occur before B in all Alpha implementations, B must occur before A, or they are UNORDERED.


実際の実装を見てみる。
☆Alpha21264
Alpha 21264 Microprocessor Hardware Reference Manual[pdf]

2.10 Instruction Ordering

同じ番地/違う番地でのロード/ストアの組み合わせ(X,Yはメモリの番地)

LD X ; LD X - 順序どおり
LD X ; LD Y - どちらでもよい
ST X ; ST X - 順序どおり
ST X ; ST Y - 順序どおり
LD X ; ST X - 順序どおり
LD X ; ST Y - どちらでもよい
ST X ; LD X - 順序どおり
ST X ; LD Y - どちらでもよい

つまり、同じ番地へのロード/ストアとストア同士の順序は守る。TSOに近い。

I/Oへのアクセス
LD X ; ST Y - どちらでもよい
ST X ; LD Y - どちらでもよい
その他は順序どおり

つまり、ストアの後のロード以外は順序を守る=ロードはストアを追い越せる。TSOと同じ。


□MIPS
MIPS® Coherence Protocol Specification, Revision 01.01[pdf]

The MIPS Architecture allows weak ordering of memory transactions.
Loads and Stores using the Uncached coherency (CCA=2) are always executed in program order.


Uncached chherency(CCA=2)、つまりI/O空間のときStrong Order。

4.2.1 Memory Operation Relaxations allowed for Execution Order.
4.2.1.1 ST X ; LD Y - どちらでもよい
4.2.1.2 ST X ; ST Y - どちらでもよい
4.2.1.3 LD X ; ST Y - どちらでもよい
4.2.1.4 LD X ; LD Y - どちらでもよい

→アドレス(キャッシュライン)が異なるロード/ストアは順序が入れ替わることができる。つまり参照するアドレスが同じ命令同士ならSO、違っていればRMO。



エーモン 目盛り付きマスキングテープ 幅20mm×長さ約15m 1693エーモン 目盛り付きマスキングテープ 幅20mm×長さ約15m 1693

エーモン工業(amonkogyo)
売り上げランキング : 203

Amazonで詳しく見る
by G-Tools






今週誕生日なのでよろしくおねがいします
ほしいものリスト





テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




各種プロセッサのメモリオーダリングについて 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる