第2回 プロセッサの基礎

高性能コンピューティング論2
1
高性能コンピューティング論2
第2回 プロセッサの基礎
高性能コンピューティング学講座
三輪 忍
[email protected]
高性能コンピューティング論2
本日の講義内容
• コンピュータの基礎
• 命令セットアーキテクチャ
• 非パイプライン実装
• 命令パイプライン
2
高性能コンピューティング論2
コンピュータの基礎
3
高性能コンピューティング論2
4
プログラムと命令
• プログラム
• さまざまな機能を実現
• 例: 文書作成,表計算,web ブラウジングなど
• 多様な言語によって記述
add $t1, $s1, $s2
add $t2, $s3, $s4
sub $s0, $t1, $t2
• 例: C,C++,Fortran,Java,Ruby,Python など
• (コンパイルにより)最終的には命令の列
命令
[ プログラム ]
• 命令
• プロセッサへの指示の単位
• 例: 「c = a + b」(a と b を足して c に代入)
「c = a << b」(a を b ビット分 シフトして c に代入) など
• a, b, c のような処理の対象はデータと呼ばれる
高性能コンピューティング論2
5
プログラム内蔵方式
• 主記憶にプログラムを格納
• プロセッサは主記憶から命令を順に取得
• 取得した命令にしたがって処理を行う
主記憶
プロセッサ
add $t1, $s1, $s2
add $t2, $s3, $s4
sub $s0, $t2, $t3
• メリット
• 主記憶の内容を変更すれば別の
プログラムを実行可能
[ プログラム内蔵方式 ]
高性能コンピューティング論2
6
コンピュータの構成要素
• 主記憶
• 命令とデータの格納場所
主記憶
命令1
• プロセッサ
• 演算器(ALU (Arithmetic Logic Unit) など)
命令2
命令3
• さまざまな演算を実行するハードウェア
• レジスタ
• 高速かつ小容量のメモリ
• 一時的な値(命令,データなど)を保持
• プログラム・カウンタ(PC)
• 実行する命令のアドレスを示すレジスタ
データ1
プロセッサ
PC
命令
レジスタ
レジスタ
ファイル
データ2
データ3
演算器
[ コンピュータの概念的な構成 ]
高性能コンピューティング論2
7
コンピュータの動作例
アドレス
0
lw $s1, 0($t0)
4
lw $s2, 4($t0)
8
lw $s3, 8($t0)
12
lw $s4, 16($t0)
16
add $t1, $s1, $s2
20
add $t2, $s3, $s4
24
sub $s0, $t1, $t2
28
sw $s0, 16($t0)
20($t0)
1024
1028
1032
1036
1040
プロセッサ
主記憶
100
10
42
3
0
PC
4
0
$s2
$s1 = M [1024 + 4]
0]
命令レジスタ
レジスタファイル
8 ($t0)
9 ($t1)
10 ($t2)
ALU
16 ($s0)
17 ($s1)
18 ($s2)
19 ($s3)
20 ($s4)
1024
高性能コンピューティング論2
8
コンピュータの動作例
アドレス
0
lw $s1, 0($t0)
4
lw $s2, 4($t0)
8
lw $s3, 8($t0)
12
lw $s4, 16($t0)
16
add $t1, $s1, $s2
20
add $t2, $s3, $s4
24
sub $s0, $t1, $t2
28
sw $s0, 16($t0)
20($t0)
1024
1028
1032
1036
1040
プロセッサ
主記憶
100
10
42
3
0
PC
12
16
20
$t2
$t1 = $s3
$s1 + $s4
$s2
命令レジスタ
lw $s4, 16($t0)
レジスタファイル
8 ($t0)
9 ($t1)
10 ($t2)
ALU
110
45
16 ($s0)
17 ($s1)
18 ($s2)
19 ($s3)
20 ($s4)
1024
100
10
42
3
高性能コンピューティング論2
9
コンピュータの動作例
アドレス
0
lw $s1, 0($t0)
4
lw $s2, 4($t0)
8
lw $s3, 8($t0)
12
lw $s4, 16($t0)
16
add $t1, $s1, $s2
20
add $t2, $s3, $s4
24
sub $s0, $t1, $t2
28
sw $s0, 16($t0)
20($t0)
1024
1028
1032
1036
1040
プロセッサ
主記憶
100
10
42
3
0
PC
24
20
$s0 = $t1 - $t2
命令レジスタ
add $t2, $s3, $s4
レジスタファイル
8 ($t0)
9 ($t1)
10 ($t2)
ALU
65
16 ($s0)
17 ($s1)
18 ($s2)
19 ($s3)
20 ($s4)
1024
110
45
100
10
42
3
高性能コンピューティング論2
10
コンピュータの動作例
アドレス
0
lw $s1, 0($t0)
4
lw $s2, 4($t0)
8
lw $s3, 8($t0)
12
lw $s4, 16($t0)
16
add $t1, $s1, $s2
20
add $t2, $s3, $s4
24
sub $s0, $t1, $t2
28
sw $s0, 16($t0)
1024
1028
1032
1036
1040
プロセッサ
主記憶
100
10
42
3
0
PC
28
24
M[1024+16] = $s0
命令レジスタ
sub $s0, $t1, $t2
レジスタファイル
ALU
8 ($t0)
9 ($t1)
10 ($t2)
1024
16 ($s0)
17 ($s1)
18 ($s2)
19 ($s3)
20 ($s4)
65
100
10
42
3
110
45
高性能コンピューティング論2
11
命令セットアーキテクチャ
高性能コンピューティング論2
12
命令セットアーキテクチャ
• ソフトウェアとハードウェアの間の契約
• ソフトウェアが利用可能な命令の一覧
• ハードウェアが処理可能な命令の一覧
• プロセッサの性能や複雑さを決める重要なもの
• 複雑な命令の採用
ハードウェアの複雑化,性能の向上(?)
• 単純な命令の採用
ハードウェアの簡単化,性能の低下(?)
• さまざまな命令セットアーキテクチャが存在
• 例: x86, ARM, POWER, SPARC, MIPS など
• 現在は本質的な差はほとんどない
• 同じ目標(コンパイラの開発が容易,プロセッサが高性能,低消費電力,
低価格など)を目指して開発を進めてきた結果
高性能コンピューティング論2
13
命令の種類
• 数え方にもよるが,数十種くらい.
• 演算命令
• 算術論理演算
• シフト
• 浮動小数点演算
• ロード/ストア命令
• 制御命令
演算
命令
• 条件分岐命令
• 無条件分岐(ジャンプ)命令
ロード/
• その他
ストア
• システム・コール
命令
• コプロセッサ制御
分岐
命令
[ MIPS命令セットアーキテクチャの一部 ]
高性能コンピューティング論2
14
命令フォーマット
op
31
Rs
25
op
31
op
op
20
Rs
25
31
Rt
Rd
15
Rt
20
func
10
0
immediate
15
0
jump_target
25
: op code
処理の種類
0
Rs
: source reg #
Rt
: target reg #
Rd
: destination reg #
処理対象の
データ
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
15
演算命令
• 算術論理演算 (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
10
func
0
immediate
15
0
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
16
ロード/ストア命令
• ロード命令
• r[Rt] = *(r[Rs] + immediate)
• ストア命令
• *(r[Rs] + immediate) = r[Rt]
op
31
Rs
25
Rt
20
immediate
15
0
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
17
制御命令 (1/2)
• (条件)分岐命令
• if (cond) PC = PC + immediate
• cond:
• R[Rs] == 0, R[Rs] > 0, …
• R[Rs] == R[Rt]
op
31
Rs
25
Rt
20
immediate
15
0
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
18
制御命令 (2/2)
• ジャンプ命令(直接)
• PC = PC + jump_target
• ジャンプ命令(レジスタ間接)
• PC = r[Rs]
op
31
25
op
31
jump_target
0
Rs
25
Rt
20
immediate
15
0
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
非パイプライン実装
19
高性能コンピューティング論2
20
コンピュータ の はたらき
プログラム・カウンタ
0x000
ld %1 = *(%sp + 0)
フェッチ
アドレス
命令
ld %1 = *(%sp + 0)
0x000
bge %1, +12
0x004
sub %1 = %0 – %1
0x008
st *(%sp + 0) = %1
0x00c
ret
0x010
命令レジスタ
0x014
ロード
演算
アドレス
%0
演算器
0
%1
データ
%2
アドレス
%sp
2 0x100 : a
0x100
データ
レジスタ・ファイル
ストア
主記憶
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
21
命令の実行フェーズ
• 5 フェーズ
1. IF
2. ID
3. EX
4. MEM
5. WB
命令フェッチ
命令デコード/レジスタ読み出し
実行
メモリ・アクセス
レジスタ書き戻し (Write-Back)
• 名称は歴史的(esp. ID)
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
100
IF
PC
0
200
ID
IR
Rs
100 ld 1 2 8
104 add 2 3 1
Rt
Reg
File
EX
MEM
22
208 1000
DR
MDR
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
23
実行例
100
ld
r2 = *(r1 + 8)
104
add
r3 = r2 + 1
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
24
104
100
IF
PC
IR
ld 1 2 8
0
200
ID
Rs
100 ld 1 2 8
104 add 2 3 1
Rt
Reg
File
EX
MEM
208 1000
DR
MDR
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
25
104
IF
PC
IR
ld 1 2 8
0
Rs
200
ID
100 ld 1 2 8
104 add 2 3 1
Rt
Reg
File
200
8
EX
MEM
208 1000
DR
MDR
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
26
104
IF
PC
IR
ld 1 2 8
0
Rs
200
ID
100 ld 1 2 8
104 add 2 3 1
Rt
Reg
File
200
8
EX
208 1000
208
MEM
DR
MDR
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
27
104
IF
PC
IR
ld 1 2 8
0
Rs
200
ID
100 ld 1 2 8
104 add 2 3 1
Rt
Reg
File
200
8
EX
208 1000
208
MEM
DR
MDR
1000
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
28
104
IF
PC
IR
ld 1 2 8
0
Rs
200
ID
Reg
File
1000
200
100 ld 1 2 8
104 add 2 3 1
Rt
8
EX
208 1000
208
MEM
DR
MDR
1000
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
29
104
108
IF
PC
IR
add 2 3 1
0
200
ID
Reg
File
1000
Rs
100 ld 1 2 8
104 add 2 3 1
Rt
EX
MEM
208 1000
DR
MDR
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
30
108
IF
PC
IR
add 2 3 1
0
Rs
200
ID
Reg
File
1000
1000
100 ld 1 2 8
104 add 2 3 1
Rt
1
EX
MEM
208 1000
DR
MDR
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
31
108
IF
PC
IR
add 2 3 1
0
Rs
200
ID
Reg
File
1000
1000
100 ld 1 2 8
104 add 2 3 1
Rt
1
EX
208 1000
1001
MEM
DR
MDR
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
32
108
IF
PC
IR
add 2 3 1
0
Rs
200
ID
Reg
File
1000
1000
100 ld 1 2 8
104 add 2 3 1
Rt
1
EX
208 1000
1001
MEM
DR
MDR
1001
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
33
108
IF
PC
IR
add 2 3 1
0
Rs
200
ID
Reg
File
1000
Rt
1001
1000
100 ld 1 2 8
104 add 2 3 1
1
EX
208 1000
1001
MEM
DR
MDR
1001
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「コンピュータの基礎」より
高性能コンピューティング論2
命令パイプライン
34
高性能コンピューティング論2
35
非命令パイプライン
IF
ID
EX
MEM
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
36
命令パイプライン
IF
ID
EX
MEM
WB
パイプライン・ステージ
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
37
命令パイプラインの表現
IF
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
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
38
パイプライン化の効果
• レイテンシ
• 1命令の処理時間
• ほとんど変わらない(やや延びる)
• スループット
• 単位時間あたりの実行命令数
• ほぼステージ数倍になる
• 例: 5ステージの命令パイプラインのスループットはパイプライン化前の約5倍
高性能コンピューティング論2
39
パイプライン・ハザード
• パイプライン・ハザード (hazard):
• パイプライン動作を妨げる要因
• 分類:
1. 構造ハザード (structural hazard): ハードウェアの資源不足が原因
2. 非構造ハザード:
ソフトウェア内の依存関係が原因
a.
b.
データ・ハザード (data hazard):
制御ハザード (control hazard):
データ依存
制御依存,i.e. 分岐命令の実行
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
IF
100
PC
0
200
ID
Reg
File
5
IR
Rs
DR
ld 1 2 10
100
1000
210
Rt
1つのメモリ・ポート
をIFステージとMEM
ステージが共有.
すると…
EX
MEM
40
MDR
MA MD
Main Memory
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
41
構造ハザードの例
• メモリのポートの不足
cycle
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
IF
ID
EX
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
W
M
高性能コンピューティング論2
42
データ・ハザード
• 命令間のデータ依存
cycle
add r4 = r1 + r2
add r5 = r4 + r3
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
43
制御ハザード
• 分岐命令の実行
cycle
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
ハザードに対する一般的な対処
• 対処:
• パイプライン・インターロック (interlock)
「止める機構」
• パイプライン・ストール (stall)
「止まる現象」
• パイプライン・バブル (bubble) が発生
• 「パイプラインが乱れる」
• その結果,性能が低下
44
高性能コンピューティング論2
45
ロード命令 と バブル
IF
ID
EX
MEM
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
46
ロード命令 と バブル
IF
インターロック
ID
EX
MEM
WB
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
47
バブルの表現
cycle
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
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
48
ハザードへのアーキテクチャ的対処
• 方針: インターロック,ストールする機会を減らす
• インターロック,ストールするとバブルが発生し,性能が低下
• 構造ハザード
• 資源の不足が原因
• 資源の追加で消える
• 例: IF ステージと MEM ステージでメモリ・ポートが競合する場合,命令 /
データ・キャッシュ を分離して各ステージが別メモリにアクセスするように変更
• 非構造ハザード
• プログラムが原因
• 原理的に消えない
• バブルの削減
高性能コンピューティング論2
バブルの削減 (データ・ハザード)
cycle
IF
ID
EX
MEM
WB
IF
IF
ID
OR EX
MEM
EX
ME
MEM
WB
WB
OR EX
IF
OR : Operand Read
IF
OR EX
IF
MEM
OR EX
WB
MEM
WB
バイパス
4
9
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
IF
100
PC
0
200
ID
Reg
File
5
IR
Rs
DR
100
1000
210
Rt
EX
MEM
ld 1 2 10
MDR
MA MD
Main Memory
WB
50
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
バブルの削減(制御ハザード)
cycle
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
IF
OR EX
IF
MEM
WB
IF
WB
IF
MEM
IF
OR EX
MEM
WB
nPC : next PC 選択
WB
OR EX
OR nPC EX MEM
OR EX
EX
OR : Operand Read
OR nPC EX MEM
IF
ID
MEM
遅延分岐
WB
MEM
WB
WB
51
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
52
遅延分岐
• 「分岐命令の遅延スロットに置かれた命令は(分岐の成立/不
成立にかかわらず)必ず実行される」という仕様
• 遅延スロット
• 分岐命令の次の命令(を置く場所)
• 通常,1命令分
• 遅延スロットに入れる命令
• 分岐命令の周辺から探す
• 見つからなければ,nop 命令を入れる
• メリットとデメリット
• 遅延スロットを埋めた分だけ性能向上
• 埋まらなかった分だけ nop が増加
高性能コンピューティング論2
53
コード例
x = a;
if (x < 0)
x = −x;
y = b;
if (y < 0)
y = −y;
ld %1 = [%sp + 0] // a
bgt %1, L0
sub %1 = 0 − %1
L0: ld %2 = [%sp + 4] // b
bgt %1, L1
sub %2 = 0 − %2
L1: add %3 = %1 + %2
st [%sp + 0] = %3 // z
z = x + y;
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
54
コード例(遅延分岐のある ISA)
x = a;
if (x < 0)
x = −x;
y = b;
if (y < 0)
y = −y;
ld %1 = [%sp + 0] // a
bgt %1, L0
ld %2 = [%sp + 4] // b
L0: bgt %1, L1
nop
sub %2 = 0 − %2
L1: add %3 = %1 + %2
st [%sp + 0] = %3 // z
sub %1 = 0 − %1
z = x + y;
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
55
実行の様子
ld
%1 = [%sp + 0]
bgt %1, L0
sub %1 = 0 − %1
L0: ld
%2 – [%sp + 4]
bgt %2, L1
sub %1= 0 − %2
L1: add %3 = %1 + %2
st
[%sp + 0] = %3
F
D X
F
M
D
W
X
M
F
W
D X
F
M
W
D X
M
F
D
W
X
M
F
W
D X
F
M
W
D X
M
W
D X
M
F
W
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
56
実行の様子(遅延分岐)
ld
%1 = [%sp + 0]
bgt %1, L0
ld
%2 – [%sp + 4]
L0: sub %1 = 0 − %1
bgt %2, L1
nop
D X
F
M
W
D
X
M
W
F
F D X
M
W
D X
M
W
D X
M
W
D X
M
W
D X
M
W
D X
M
W
D X
M
W
D X
M
F
F
F
sub %1= 0 − %2
L1: add %3 = %1 + %2
st
F
[%sp + 0] = %3
F
F
F
F
W
※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「命令パイプライン」より
高性能コンピューティング論2
まとめ
• コンピュータの基礎
• 命令セットアーキテクチャ
• 非パイプライン実装
• 命令パイプライン
57
情報システム基盤学基礎1
次回
• 10/29(木) 10:40~
• 22日は休講
• 「スーパスカラプロセッサの基礎」について解説
58