パイプライン処理 (pipeline)
Download
Report
Transcript パイプライン処理 (pipeline)
コンピュータ工学基礎
マルチサイクル化とパイプライン化
テキスト9章 115~124
情報工学科
天野英晴
1サイクルCPUの問題点
• クリティカルパスが長い
– 全ての処理を1サイクルで実行
– 全ての命令が最長の命令遅延に合わせる
• 動作周波数を上げることが難しい
• 資源の共用ができない
– ALUの使いまわし
– 命令メモリとデータメモリの共用
→ マルチサイクル化
クリティカルパスの切断
‘0’
2:0
00 01 10
extext11
pcsel
THB
ADD
00
01
10
S Y
A
+
zero
‘1’
+
0
1
zero
7:0
comsel
10:0
00
7:0
pcjr
B
rf_a
rf_b
alu_bsel
01
10
ext ext0
aadr
10:8
PC
‘7’
0
1
badr
cadr
rf_c
casel
rf_csel
00
01
rwe
10
7:5
idatain
7ns
EX
実行
ddatain
iaddr
…
命令メモリ
ddataout
IF
命令フェッチ
データメモリ
…
daddr
we
2サイクル版POCO
2:0
THB
ADD
00
01
10
S Y
A
10:0
comsel
B
00
10
命令レジスタ
0
1
rf_a
pcjr
rf_b
01
10
11
ext ext0
‘1’
aadr
10:8
PC
alu_bsel
7:5
7:0
‘7’
0
1
badr
cadr
rf_c
casel
rf_csel
00
01
rwe
10
2:0
datain
dataout
0 1
…
addr
we
命令・データメモリ
IF/EX
コントローラの状態遷移
rst_n = L
命令フェッチ
IF
共用メモリから
命令を取ってきて
IR(命令レジスタ)
に格納
実行
EX
EX(実行)
IR中の命令に従って
実行
命令フェッチ
PC+1
2:0
THB
ADD
00
01
10
S Y
A
10:0
comsel
B
00
10
命令レジスタ
0
PC
1
rf_a
pcjr
rf_b
alu_bsel
01
10
11
ext ext0
‘1’
aadr
命令
10:8
7:5
7:0
‘7’
0
1
badr
cadr
rf_c
casel
rf_csel
00
01
rwe
10
2:0
datain
dataout
0 1
…
addr
we
命令・データメモリ
IF/EX
LDI r0,#0x1
2:0
THB
ADD
00
01
10
S Y
A
10:0
comsel
B
00
10
命令レジスタ
0
1
rf_a
pcjr
rf_b
01
10
11
ext ext0
‘1’
aadr
10:8
PC
alu_bsel
7:5
7:0 1
‘7’
0
1
badr
cadr
rf_c
casel
rf_csel
00
01
rwe
10
2:0
datain
dataout
0 1
…
addr
we
命令・データメモリ
IF/EX
LD r1,(r0)
2:0
00
01
10
THB
ADD
S Y
A
comsel
10:0
B
00
10
命令レジスタ
0
1
rf_a
pcjr
10:8
PC
7:5
1
01
10
11
ext ext0
‘1’
aadr
‘7’
7:0
2:0
rf_b
alu_bsel
0
1
badr
cadr
rf_c
casel
0
rf_csel
00
01
rwe
10
datain
dataout
0 1
…
addr
we
命令・データメモリ
IF/EX
BEQ r0,-3
2:0
THB
ADD
00
01
10
S Y
A
10:0
comsel
B
00
10
命令レジスタ
0
1
rf_b
rf_a
aadr
pcjr
10:8
PC
7:5
7:0
0
1
‘7’
01
10
11
ext ext0
‘1’
badr
cadr
rf_c
casel
alu_bsel
rf_csel
00
01
rwe
10
2:0
datain
zero?
dataout
0 1
…
addr
we
命令・データメモリ
IF/EX
1サイクル版のクリティカルパスの計算(復習)
• 全体の回路で最も長いパス=クリティカルパス
• 動作周波数はクリティカルパスによって決まる
• 以下を仮定する
–
–
–
–
–
–
メモリ遅延 2nsec
レジスタファイル読み出し 1nsec
2入力マルチプレクサ 0.3nsec
3(4)入力マルチプレクサ 0.5nsec
セットアップ時間 0.2nsec
ALUの遅延 3nsec
クリティカルパス候補1 2+1+0.5+3+0.5+0.2=7.2
クリティカルパス候補2 2+1+2+0.5+0.2=5.7
1/7.2nsec →138 MHzで動作!
POCOの場合、1クロックに1命令実行できるので、138MIPS(Million
Instruction Per Second)で動くと言える
例題
• LD命令のクリティカルパスを計算してみよう
• レジスタファイル(1nsec)+2入力マルチプレ
クサ(0.3nsec)+メモリ遅延(2nsec)+3入力マ
ルチプレクサ(0.5nsec)+セットアップ時間
(0.2nsec)=4nsec
演習1
• 2サイクル版のPOCOのクリティカルパスを計
算せよ。(ADDの場合を求めてLDの場合と比
較して長い方を採用)
• 全ての命令は2サイクルで終了する。MIPS値
を求めよ。
2サイクル版POCOの
性能面での問題
– CPIが2倍になる
– 動作周波数は2倍にはならない
→ 結果として1サイクル版より遅い
どうすれば性能が上がるか?
→パイプライン化
マルチサイクル版と違って、クリティカルパスをたく
さん切る方が有利
クリティカルパスの切断
‘0’
2:0
00 01 10
extext11
pcsel
THB
ADD
書き込み
WB
00
01
10
実行
EX
S Y
A
+
zero
‘1’
+
1
0
zero
7:0
comsel
10:0
00
7:0
pcjr
B
rf_a
rf_b
alu_bsel
01
10
ext ext0
aadr
10:8
PC
命令読み出し
IF
命令デコード
ID
‘7’
0
1
badr
cadr
rf_c
casel
rf_csel
00
01
rwe
10
7:5
idatain
7ns
ddatain
iaddr
…
命令メモリ
ddataout
データメモリ
…
daddr
we
パイプライン処理
1サイクル版
の遅延
命令読み出し
制御信号生成
レジスタ読み出し
演算
データアクセス
レジスタ
書き込み
いくつかのステージに分割
命令1
命令2
命令3
命令読み出し
制御信号生成
レジスタ読み出し
命令読み出し
演算
データアクセス
レジスタ
書き込み
演算
データアクセス
制御信号生成
レジスタ読み出し
命令読み出し
演算
データアクセス
制御信号生成
レジスタ読み出し
命令4
命令読み出し
一つのステージの実行が終わったら
すぐに次のステージの実行を開始
レジスタ
書き込み
制御信号生成
レジスタ読み出し
レジスタ
書き込み
演算
データアクセス
レジスタ
書き込み
CPI
(Clock cycles Per Instruction)は1
パイプライン処理の原則
1サイクル版
の遅延
命令読み出し
最長
ステージの
遅延
制御信号生成
レジスタ読み出し
演算
データアクセス
レジスタ
書き込み
1サイクル版の周期
パイプライン版の周期
1.なるべく均等に分割
2.なるべくたくさんのステージに分割
理想の場合、ステージ数(深さ)がdならば性能はd倍
しかし、、、
そうは言っても均等には切れない
ステージ間の受け渡しのための損失がある
パイプライン処理と並列処理
パイプライン処理はdステージあれば理想はd倍
並列処理はnプロセッサあれば理想はn倍
しかし、
– パイプライン処理は各ステージが自分に必要な資源のみを持
てば良い(命令メモリ、ALU、データメモリetc.)
– 並列処理は全プロセッサが全資源を持つ必要がある
• パイプライン処理の方が簡単に性能が向上する
例)工場ではまずパイプライン処理(流れ作業)
– 生産が追いつかなくなると、ラインを複数にする→並列化
POCOの4段パイプライン
• IF:Instruciton Fetch 命令フェッチ
– 命令メモリから命令を取ってきて ir(命令レジスタ)に入れる
• ID:Instruction Decode 命令デコード
– ir中の命令に従って制御信号を作る
– レジスタファイルからデータを読み出しrega、regbに入れる
• EX:Execution 命令実行
– ALUで命令を実行する or データメモリを読み書きする
• WB:Write Back 結果書き込み
– ALUの計算結果 or データメモリから読み出した値をレジスタファイル
に書き戻す
• それぞれのステージ間のパイプラインレジスタに注目!
– 制御信号もレジスタで遅らせる必要がある
IF
EX
ID
rwe
decorder st_op
ld_op
funct
3:0
rwe_id
opcode
15:11
funct
2:0
rd_id
10
alu_bsel
daddr
ddataout
st_op_id
命令メモリ
creg dreg
S Y
B
01
ext ext0
imm 7:0
PC
breg
00
+
rd_ex
A
rwe_ex
rs 7:5
com_id
areg
‘1’
ADD
00 01 10
ir
rwe_ex
st_op_id
ld_op_id
THB
rd 10:8
WB
we
データ
メモリ
ddatain
0
1
LDI r2,#2
LDI r0,#0
LDI r1,#1
IF
EX
ID
rwe
decorder st_op
ld_op
funct
3:0
rwe_id
opcode
15:11
funct
2:0
rd_id
10
alu_bsel
daddr
ddataout
命令メモリ
0
creg dreg
S Y
B
01
ext ext0
imm 7:0
PC
breg
00
+
rd_ex
A
rwe_ex
rs 7:5
com_id
areg
‘1’
ADD
00 01 10
ir
rwe_ex
st_op_id
ld_op_id
THB
rd 10:8
WB
st_op_id
we
データ
メモリ
ddatain
0
1
LD r3,(r0)
LDI r2,#2
IF
EX
ID
rwe
decorder st_op
ld_op
funct
3:0
funct
2:0
ADD
00 01 10
rd_id
10
alu_bsel
daddr
ddataout
命令メモリ
1
creg dreg
S Y
B
01
ext ext0
imm 7:0
PC
breg
00
+
rd_ex
A
rwe_ex
rs 7:5
com_id
areg
‘1’
rwe_ex
st_op_id
ld_op_id
THB
ir
WB
rwe_id
opcode
15:11
rd 10:8
LDI r0,#0
LDI r1,#1
st_op_id
we
データ
メモリ
ddatain
0
1
LD r3,(r0)
ADD r0,r1
IF
LDI r2,#2
EX
ID
rwe
decorder st_op
ld_op
funct
3:0
funct
2:0
ADD
00 01 10
rd_id
10
alu_bsel
daddr
ddataout
命令メモリ
2
creg dreg
S Y
B
01
ext ext0
imm 7:0
PC
breg
00
+
rd_ex
A
rwe_ex
rs 7:5
com_id
areg
‘1’
rwe_ex
st_op_id
ld_op_id
THB
ir
WB
rwe_id
opcode
15:11
rd 10:8
LDI r1,#1
st_op_id
we
データ
メモリ
ddatain
0
1
ADD r2,r2
IF
LD r3,(r0)
ADD r0,r1
EX
ID
rwe
decorder st_op
ld_op
funct
3:0
funct
2:0
ADD
00 01 10
rd_id
10
alu_bsel
daddr
ddataout
命令メモリ
creg dreg
S Y
B
01
ext ext0
imm 7:0
PC
breg
00
+
rd_ex
A
rwe_ex
rs 7:5
com_id
areg
‘1’
rwe_ex
st_op_id
ld_op_id
THB
ir
WB
rwe_id
opcode
15:11
rd 10:8
LDI r2,#2
st_op_id
we
データ
メモリ
ddatain
0
1
ADD r0,r1
ADD r2,#3
IF
ID
rwe
decorder st_op
ld_op
funct
3:0
00 01 10
funct
2:0
ADD
com_id
rd 10:8
rd_id
10
alu_bsel
daddr
ddataout
命令メモリ
creg dreg
S Y
B
01
breg
00
imm 7:0
ext ext0
rs 7:5
rd_ex
A
areg
rwe_ex
+
PC
rwe_ex
st_op_id
ld_op_id
THB
‘1’
WB
rwe_id
opcode
15:11
ir
LD r3,(r0)
ADD r0,r1
EX
st_op_id
we
データ
メモリ
ddatain
0
1
演習2
パイプライン化POCOの各ステージの遅延を計
算せよ。
例 IF:2nsec+0.2nsec=2.2nsec
もっとも長い命令がクリティカルパスになる。
1命令が1クロックで終わるとすると、MIPS値は
どうなるか?