SIMPLE アーキテクチャ

アドバンスト コンピュータ アーキテクチャ
RISC と 命令パイプライン
五島
2015/10/1
講義の内容
1.
2.
3.
4.
RISC
命令セット
非パイプライン実装
命令パイプライン
2
RISC とは
 CISC:
 Complex Instruction Set Computer
 複合 (?) 命令セット計算機
 アーキテクチャの進化 = 高機能な命令の追加
 RISC:
 Reduced Instruction Set Computer
 縮小命令セット計算機
 複雑な機能は,基本的な命令の組み合わせで
 コンパイラ
 アーキテクチャの進化 = システムの高効率化
3
RISC の位置づけ
 Reduced:
 ごく基本的な命令のみ
 とにかく HW が簡単/高効率になるように
 最近のほとんどすべてのプロセッサの基礎
 RISC スーパースカラ
 VLIW
 x86 スーパースカラ(RISC ではない!)
 Java プロセッサ/アクセラレータ (RISC ではない!)
 etc.
 RISC 以前のことは,忘れてもよい (?)
 少なくとも,RISC を下敷きに議論し直したほうがよい.
4
RISC アーキテクチャ
 Reduced:
 ごく基本的な命令のみ
 とにかく HW が簡単/高効率になるように
 商用 RISC アーキテクチャの例:
 i860, M88000, PA-RISC
 SPARC, MIPS, POWER/PowerPC
 どれも,似たりよったり
5
RISC の特徴
 Reduced:
 ごく基本的な命令のみ
 とにかく HW が簡単/高効率になるように
 固定長命令
 32b
 大容量の汎用レジスタ・ファイル
 汎用レジスタ (General Purpose Reg: GPR) x32
 #0 レジスタは「0 レジスタ」
 ロード/ストア・アーキテクチャ
 演算は,レジスタに対してのみ
6
ロード/ストア・アーキテクチャ
演算器
演算器
演算
RF
RF
ロード
ストア
主記憶
主記憶
非 ロード/ストア ―
ロード/ストア ―
7
講義の内容
1.
2.
3.
4.
RISC
命令セット
非パイプライン実装
命令パイプライン
8
命令の種類
 数え方にもよるが,数十種くらい.
 ロード/ストア
 演算命令
 算術論理演算 (ALU: Arithmetic Logic Unit)
 シフト
 浮動小数点演算
 制御命令
 分岐 (branch) 命令
:PC 相対
 ジャンプ命令
:絶対
 その他
 システム・コール
 コプロセッサ制御
9
命令フォーマット
op
31
Rs
25
op
31
Rt
20
Rs
25
15
Rt
20
op
31
Rd
func
10
0
immediate
15
0
jump_target
25
op : op code
0
Rs : source reg #
Rt : target reg #
Rd : destination reg #
10
演算命令
 算術論理演算 (ALU, Arithmetic Logic Unit) 命令
 r[Rd] = r[Rs] + r[Rt], …
 r[Rt] = r[Rs] + immediate, …
 シフト命令
 r[Rd] = r[Rs] << shamt, …
op
31
Rs
25
op
31
Rt
20
Rs
25
Rd
15
Rt
20
shamt func
10
0
immediate
15
0
11
ロード/ストア命令
 ロード命令
 r[Rt] = *(r[Rs] + immediate);
 ストア命令
 *(r[Rs] + immediate) = r[Rt];
op
31
Rs
25
Rt
20
immediate
15
0
12
制御命令 (分岐命令)
 (条件)分岐命令
 if (cond) PC = PC + immediate;
 branch on register
 cond: R[Rs] == 0, R[Rs] > 0, …
 compare and branch
 cond: R[Rs] == R[Rt], R[Rs] != R[Rt]
op
31
Rs
25
Rt
20
immediate
15
0
13
制御命令 (ジャンプ命令)
 ジャンプ命令 (絶対)
 PC = jump_target;
 ジャンプ命令(レジスタ間接)
 PC = r[Rs];
op
31
Rs
25
op
31
Rt
20
immediate
15
0
jump_target
25
0
14
講義の内容
1.
2.
3.
4.
RISC
命令セット
非パイプライン実装
命令パイプライン
15
命令の実行フェーズ
命令フェッチ
命令デコード/レジスタ読み出し
実行
メモリ・アクセス
レジスタ書き戻し (Write-Back)
1.
2.
3.
4.
5.
IF
ID
EX
MEM
WB

名称は歴史的(esp. ID)
16
100
IF
PC
IR
0
200
ID
Rs
Rt
Reg
File
EX
MEM
WB
DR
MDR
MA MD
100
104
12 8
add 23 1
208
1000
ld
Main Memory
17
実行例
100
ld
r2 = *(r1 + 8)
104
add
r3 = r2 + 1
18
100
104
IF
PC
IR
ld
0
200
ID
12 8
Rs
Rt
Reg
File
EX
MEM
WB
DR
MDR
MA MD
100
104
12 8
add 23 1
208
1000
ld
Main Memory
19
104
IF
PC
IR
ld
0
200
ID
12 8
Rs
Rt
Reg
File
200
WB
DR
12 8
add 23 1
208
1000
ld
8
EX
MEM
100
104
MDR
MA MD
Main Memory
20
104
IF
PC
IR
ld
0
200
ID
12 8
Rs
Rt
Reg
File
200
100
104
12 8
add 23 1
208
1000
ld
8
EX
208
MEM
WB
DR
MDR
MA MD
Main Memory
21
104
IF
PC
IR
ld
0
200
ID
12 8
Rs
Rt
Reg
File
200
100
104
12 8
add 23 1
208
1000
ld
8
EX
208
MEM
DR
MDR
1000
WB
MA MD
Main Memory
22
104
IF
PC
IR
ld
ID
0
200
1000
Reg
File
200
12 8
Rs
Rt
100
104
12 8
add 23 1
208
1000
ld
8
EX
208
MEM
DR
MDR
1000
WB
MA MD
Main Memory
23
104
108
IF
PC
IR
add 23
ID
0
200
1000
Reg
File
1
Rs
Rt
EX
MEM
WB
DR
MDR
MA MD
100
104
12 8
add 23 1
208
1000
ld
Main Memory
24
108
IF
PC
IR
add 23
ID
0
200
1000
Reg
File
1000
1
Rs
Rt
WB
DR
12 8
add 23 1
208
1000
ld
1
EX
MEM
100
104
MDR
MA MD
Main Memory
25
108
IF
PC
IR
add 23
ID
0
200
1000
Reg
File
1000
1
Rs
Rt
100
104
12 8
add 23 1
208
1000
ld
1
EX
1001
MEM
WB
DR
MDR
MA MD
Main Memory
26
108
IF
PC
IR
add 23
ID
0
200
1000
Reg
File
1000
1
Rs
Rt
100
104
12 8
add 23 1
208
1000
ld
1
EX
1001
MEM
DR
MDR
1001
WB
MA MD
Main Memory
27
108
IF
PC
IR
add 23
ID
0
200
1000
1001
Reg
File
1000
1
Rs
Rt
100
104
12 8
add 23 1
208
1000
ld
1
EX
1001
MEM
DR
MDR
1001
WB
MA MD
Main Memory
28
講義の内容
1.
2.
3.
4.
RISC
命令セット
非パイプライン実装
命令パイプライン
29
非命令パイプライン
I1
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
I0
30
命令パイプライン
I1
I0
IF
ID
EX
MEM
WB
パイプライン・ステージ
31
命令パイプラインの表現
I1
I0
IF
I0
I1
I2
I3
I4
I5
IF
ID
EX
MEM
WB
cycle
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
32
パイプライン化
 パイプライン化 (pipelining) の効果
 レイテンシ (latency)
 1命令の処理時間
 変わらない(か,やや延びる)
 スループット (throughput)
 単位時間当たりの処理量
 (ステージ数)倍になる
 使い勝手がよい技
 「手」が余っているときには,やってみるとよい.
33
CPI




CPI : Cycles Per Instruction
スループット
命令パイプラインの効率を計る指標
(性能) = (クロック速度)÷ (CPI)
cycle
I0
IF
ID
EX
MEM
WB
I1
IF
ID
I2
EX
MEM
CPI = 5
WB
IF
ID
EX
MEM
WB
cycle
I0
I1
I2
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
CPI = 1
WB
34
パイプライン・ハザード
 パイプライン・ハザード (hazard)
 パイプライン動作を妨げる要因
1. 構造ハザード (structural hazard)
 HW の資源の不足が原因
2. 非構造ハザード
 SW の持つ依存関係が原因
1. データ・ハザード (data hazard)
 データ依存
2. 制御ハザード (control hazard)
 制御依存,分岐命令の実行
35
構造ハザードの例
 メモリのポートの不足
cycle
LD
I1
I2
I3
I4
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
IF
ID
EX
36
W
M
IF
100
PC
ID
IR
0
200
5
Reg
File
Rs
LD 1 2 10 100
Rt
EX
MEM
WB
1000
DR
MDR
MA MD
210
Main Memory
37
構造ハザードの例
 メモリのポートの不足
cycle
LD
I1
I2
I3
I4
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
IF
ID
EX
38
W
M
ちなみに…
 ステージ間で,使用する資源が異なる
cycle
LD
ADD
I2
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
39
データ・ハザード
 命令間のデータ依存
cycle
add r4 = r1 + r2
add r5 = r4 + r3
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
40
制御ハザード
 分岐命令の実行
cycle
BE
I1
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
41
インターロック と バブル
 パイプライン・ハザード (hazard)
 パイプライン動作を妨げる要因
 パイプライン・インターロック (interlock) によって対処
 パイプライン・バブル (bubble) が発生
 「パイプラインが乱れる」
42
ロード命令 と バブル
I4
I3
I2
I1
LD
IF
ID
EX
MEM
WB
43
ロード/ストア命令 と バブル
I4
I3
I2
I1
LD
IF
インターロック
ID
EX
MEM
WB
44
バブルの表現
cycle
LD
I1
I2
I3
I4
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
45
アーキテクチャ的対処
 インターロックする ⇒ バブルが発生 ⇒ 性能低下
 インターロックする機会を減らすことが重要!
 構造ハザード
 資源の不足が原因
 資源の追加で消える
 例えば,メモリ・ポートの場合,
命令キャッシュとデータ・キャッシュの分離 (separate)
 非構造ハザード
 プログラムが原因
 原理的に消えない
 バブルの削減
46
バブルの削減 (データ・ハザード)
cycle
add r4 = r1 + r2
IF
add r5 = r4 + r3
add r4 = r1 + r2
add r5 = r4 + r3
EX
MEM
WB
IF
IF
add r5 = r4 + r3
add r4 = r1 + r2
ID
OR
ID
EX
OR
IF
OR
EX
OR
M
MEM WB
IF
IF
EX
EX
MEM WB
MEM WB
EX
MEM WB
バイパス
47
バイパス
 同じもの:
 オペランド・バイパス
 レジスタ・バイパス
 結果 (result) バイパス
 (データ)フォワーディング (forwarding)
48
IF
100
PC
ID
IR
0
200
5
Reg
File
Rs
LD 1 2 10 100
Rt
EX
MEM
WB
1000
DR
MDR
MA MD
210
Main Memory
49
バブルの削減(制御ハザード)
cycle
I0
IF
be
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
I1
I0
be
I1
IF
IF
ID
EX
MEM
IF
nPC
EX
MEM WB
IF
OR
ID
EX
MEM
WB
EX
MEM WB
next PC 計算器
50
W
インターロックの排除(制御ハザード)
cycle
I0
IF
be
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
I1
I0
IF
IF
be
ID
EX
MEM
IF
nPC
EX
MEM WB
IF
OR
I1
be
I0
I1
IF
nPC
IF
EX
OR
IF
ID
EX
MEM
WB
EX
MEM WB
MEM WB
EX
OR
MEM WB
EX
遅延分岐
MEM WB
51
W
遅延分岐
 遅延分岐 (delayed branch)
 分岐命令の実行が(1サイクル)遅延される(遅れる)
 遅延スロット (delay slot)
 分岐命令の次の命令(を置く場所)
 「遅延スロットに置かれた命令は(分岐の成立/不成立にかか
わらず)必ず実行される」
 遅延スロットに入れる命令
 本来の分岐の上流にあたる部分から探す
 見つからなければ,nop を入れる
52
インターロックの排除(データ・ハザード)
cycle
I0
IF
ld
ID
EX
MEM
WB
IF
ID
EX
MEM
I1
I0
IF
IF
ld
OR
IF
I1
ld
I0
I1
WB
EX
OR
ID
OR
IF
EX
OR
IF
MEM
WB
MEM WB
EX
バイパス
MEM WB
IF
IF
EX
OR
EX
MEM WB
MEM WB
EX
OR
MEM WB
EX
遅延ロード
MEM WB
53
遅延ロード
 遅延ロード (delayed load)
 ロード命令の実行が(1サイクル)遅延される(遅れる)
 遅延スロット (delay slot)
 ロード命令の次の命令(を置く場所)
 「遅延スロットに置かれた命令は,ロード命令の結果を使うこ
とができない」
 遅延スロットに入れる命令
 まわりから探す
 見つからなければ,nop を入れる
54
遅延分岐,遅延ロード
 プログラムに対して制約を課す
 HW を簡単化するため
 インターロック機構の排除
 性能のため
 遅延スロットを埋めることができれば,性能は向上する
 (コンパイラなら)多くの場合 埋められる
 MIPS (Tech. inc./Architecture)
 Microprocessor w/o Interlocked Pipeline Stages
 パイプライン・マシンのため
 スーパースカラ化すると負の遺産に…
55
バック・エッジ
 もろもろの元凶は,パイプラインのバック・エッジ
 バック・エッジ
 逆向きの信号の流れ
56
IF
100
PC
ID
IR
0
200
5
Reg
File
Rs
LD 1 2 10 100
Rt
EX
MEM
WB
1000
DR
MDR
MA MD
210
Main Memory
57
バック・エッジ長 と バブルの量
cycle
BE
I1
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
58
まとめ
 RISC
 現在のアーキテクチャの基礎
 命令パイプライン
 パイプライン・ハザード
 構造ハザード: HW の追加で消せる
 非構造ハザード:
原理的に消えない
 非構造ハザード
 バック・エッジが元凶
59
今後の予定
 次回
 休み
 次々回
 スーパースカラ・プロセッサ
 Out-of-Order 実行
 それ以降
 投機:バック・エッジを消す?!
60