第7回 メモリ非曖昧化

高性能コンピューティング論2
1
高性能コンピューティング論2
第7回 メモリ非曖昧化
高性能コンピューティング学講座
三輪 忍
[email protected]
高性能コンピューティング論2
本日の講義内容
• メモリに関するデータ依存
• メモリ非曖昧化
2
高性能コンピューティング論2
3
メモリに関するデータ依存
高性能コンピューティング論2
4
復習: データ依存
• 制御駆動型 (control-driven) (⇔ データ駆動,data-driven)
• 命令間のデータの授受は,
• プログラム・オーダ上で,先行/後続 の関係にある 2命令が,
• 同一のロケーションを ライト ⇒ リード する
ことで表現
• ロケーション:レジスタ と メモリ
Write
add r4 = r1 + r2
add r5 = r4 + r3
Read
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
5
復習: データ依存
後続命令
Read
Read
Ip
Ip
Is
Is
time
先
行
命
令
Write
time
入力依存 (input)
逆依存 (anti)
Write
Ip
Ip
Is
Is
time
time
フロー依存 (flow)
出力依存 (output)
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より
高性能コンピューティング論2
6
ロード/ストア命令とメモリ依存
• ロード命令
• r[Rt] = *(r[Rs] + immediate);
• ストア命令
• *(r[Rs] + immediate) = r[Rt];
op
Rs
25
31
Rt
20
後続命令
Read
Read
先
行
命
令
Write
ld
r1 = *A
ld
r1 = *A
ld
r2 = *A
st
*A = r2
入力依存 (input)
逆依存 (anti)
Write
st
*A = r1
st
*A = r1
ld
r2 = *A
st
*A = r2
フロー依存 (flow)
出力依存 (output)
immediate
15
0
高性能コンピューティング論2
7
レジスタ と メモリ の違い
• レジスタ番号
• 少数
• 高々 25 個程度
• 簡単なハードウェアで依存関係を追跡可能
• 静的
• (実行の度に)変わらない
• フロントエンド(デコード・ステージ)で分かる
• メモリのアドレス
• 多数
• 232 種類
• 完全に依存関係を追跡しようとすると,ハードウェアが複雑化
• 動的
• 実行の度に変わり得る
• バックエンド(アドレス計算(実行)ステージ)で初めて分かる:「曖昧」
高性能コンピューティング論2
メモリ依存への保守的な対処法
• 保守的な解決策
• すべてのロード/ストアは先行するロード/ストアに依存すると仮定
• すべてのロード/ストアを in-order で実行
• 性能はあまり高くない(理想的な場合の1/2程)
• プログラム中のロード/ストアの割合: 2~4割程度
• 「偽の依存」が存在
• アドレス計算してみたら,依存関係がないことがわかった
8
高性能コンピューティング論2
9
ロード/ストアの Out-of-Order 実行
• できるだけ正確にスケジューリング
• メモリ依存を解析し,依存関係が存在しないことが判明した時点で実行
• 投機的手法
• 依存関係が存在しないと予測して out-of-order に実行
• メモリ順序違反を検出したらキャンセル,再実行
• すべて out-of-order 実行した場合,0~7%のロードが順序違反を起こす
• ロード/ストアの依存関係を賢く予測
高性能コンピューティング論2
10
ロード/ストア命令のスケジューリングの重要性
• 性能に強く影響
• すべて in-order 実行した場合と理想的なスケジューリングとは2倍の差
• 上手にスケジューリングすると計算のかたまりがオーバーラップするため
• 計算のかたまり: ロードで始まり,ストアで終わる
ILP
• ロード/ストアのスケジューリングの目標
• ロードをできるだけ早く実行する
• ストアは遅くてもよい
ld
ILP
ld
ld
• 依存する命令がクリティカル・パス上にない
st
(ことが多い)
• 結局,リオーダ・バッファで待たされる
(正確な例外を保証するため)
ld
st
st
ILP: Instruction
Level
Parallelism
st
[ in-order 実行の場合 ] [ 理想的な場合 ]
高性能コンピューティング論2
メモリ非曖昧化
11
高性能コンピューティング論2
メモリ・ディスアンビギュエーション
• ディスアンビギュエーション (disambiguation):
• 「非曖昧化」,「曖昧性除去(解消)」
• メモリ・ディスアンビギュエーション
• ロード/ストアを out-of-order 実行するための技術の総称
• メモリ依存の解析
• メモリ順序違反の検出,回復
12
高性能コンピューティング論2
メモリ非曖昧化の代表的な手法
• 分離ロード/ストア + ロード/ストアキュー
• ストアセット予測
13
高性能コンピューティング論2
14
ロード/ストア命令
• 通常のロード/ストア命令:
• アドレス計算部
• メモリ・アクセス部
• ロード命令 :r[Rt] = *(r[Rs] + immediate);
• ストア命令: *(r[Rs] + immediate) = r[Rt];
op
31
Rs
25
Rt
20
immediate
15
0
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
15
分離 ロード/ストア (split load/store)
• 通常のロード/ストア命令:
• アドレス計算部
• メモリ・アクセス部
• 分離 ロード/ストア:
• ディスパッチ時に分離,以降 2つの命令としてスケジューリング
• 効果:
• ストア・バリューがなくても,アドレス計算が開始できる
• バリューより,アドレスが早く決まることが多い
• ロードは変わらない
• バリューに相当するソース・オペランドがないから
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
16
ロード/ストアキューによるメモリ非曖昧化
• 方針
• ロードの実行時にメモリ依存を解析
• メモリ依存が存在しないことが判明したら,先行するロード/ストアを追い
越して命令を実行
• ロード/ストアキュー
• プロセッサに投入されたロード/ストア命令を格納するバッファ
• ロード/ストア命令のプログラム・オーダと,実効アドレス,データを管理
• ロードの実行時にキューを参照し,以下のいずれかの場合に実行中止
• 先行するストアと実効アドレスが一致し,ストアデータが未解決だった場合
• 先行するストアの実効アドレスが(1つでも)未解決だった場合
高性能コンピューティング論2
17
ロード/ストアキュー
• 更新方法
• ロード/ストアのディスパッチ時に
エントリを順に割り当て
• 実効アドレスやストアデータが計
算されるとエントリを更新
実効アドレス ストアデータ
st
*A = r1
A
ld
r2 = *B
B
100
≠
• スケジューリング
• ストア:
• キューの先頭から順に
• 実効アドレスとストアデータが揃っ
ていたらキャッシュに反映
• ロード:
• 自身よりも上位のエントリと実効ア
ドレスを比較
• アドレスが一致しないことが確定し
たらキャッシュのアクセスを開始
st A
ld 100
B
データキャッシュへ
高性能コンピューティング論2
18
ストアフォワーディング
レジスタへ
• ロードのアドレスが先行する
ストアのアドレスと一致
実効アドレス ストアデータ
st
*B = r3
B
• データキャッシュにアクセスしない
st
*A = r1
A
• ロード/ストアキューからデータ供給
ld
r2 = *A
A
100
• メリット
• ロードのレイテンシの短縮
• キャッシュ・ポートの浪費を防止
データキャッシュへ
高性能コンピューティング論2
19
ロード/ストアキューの問題点
• スケジューリングが(まだ)保守的
• 先行するすべてのストアのアドレスが解決するまでロードの発行は不可
• 偽の依存が存在
• ハードウェアが複雑
• スケジューリングのために,比較器のマトリクス(行列)が必要
• 比較器数 ≒ ½ ×(ウィンドウ・サイズ)2
高性能コンピューティング論2
20
発行可能検出 ― 比較器のマトリクス
L/S V
0
effective
address
0
1
2
3
4
先行命令
ready?
―
―
1
0
―
0
=
0
≠
1
Valid
Load
1
2
=?
L/S
Store
1
3
4
5
後続
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
21
ストア・セット
• あるロードのストア・セットとは:
• そのロードが依存したことがあるストアの集合
• 計算の方法:recovery-based
• 最初「依存していない」としておいて,
• 順序違反 (memory-order violation) を検出して,追加
• 利用の方法:
• ロードは,そのストア・セット内のストアに依存すると予測
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
22
予測器の実装
• 原理的には:
• ストア・セット内のすべてのストアが実行された後でロードを実行
• 実装上の制限:
• ストア・セット内のストアは in-order で実行
• In-order チェイン:
• ストア → ストア → … → ストア → ロード
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
23
構造と動作
SSID Table
S1
SSID X
S
S2
S
L
L
SSID X
Last
Fetched
Store
Table
S21
X
SSID X
PC of Fetched Instructions
SSID : Store Set ID
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
24
Recovery-Based
• ストア・セットの計算の方法:recovery-based
• 最初「依存していない」としておいて,
• 順序違反 (memory-order violation) を検出して,追加
• 順序違反の検出:
• 比較器数 ≒(ウィンドウ・サイズ)×(発行幅)
• 「教訓」:
• 厳密にやるより,いい加減にやったほうがうまくいく(こともある)
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
25
データ依存(load/store)
後続命令
Read
Read
Ip
Ip
Is
Is
time
先
行
命
令
Write
time
入力依存 (input)
逆依存 (anti)
Write
Ip
Ip
Is
Is
time
time
フロー依存 (flow)
出力依存 (output)
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より
高性能コンピューティング論2
26
順序違反の検出
• プログラム・オーダで,
• 後続の命令を先に実行した後で,
• 先行する命令を実行した時に…
• この 2命令が,フロー,逆,出力依存の関係にあれば順序違反
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
27
順序違反検出 ― 比較器のアレイ
+
L/S V
effective
address
0 L 1 0x100
1: S, 0x100
+
0: L, 0x100
address
calculators
後続
load
先行
load
1 S 1 0x100
store
store
Violation
Violation
Violation
2
3 L 1 0x100
4
5
6
後続
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
28
発行可能検出 ― 比較器のマトリクス
L/S V
0
effective
address
0
1
2
3
4
先行命令
ready?
―
―
1
0
―
0
=
0
≠
1
Valid
Load
1
2
=?
L/S
Store
1
3
4
5
後続
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「メモリ非曖昧化」より
高性能コンピューティング論2
本日のまとめ
29
高性能コンピューティング論2
まとめ
• メモリに関するデータ依存
• メモリ非曖昧化
30
高性能コンピューティング論2
次回
• 12/17(木) 10:40~
• 10日は休講
• 「マルチスレッドプロセッサ」について解説
31