第9回講義

計算機アーキテクチャー Computer Architecture
講義内容
単一サイクル方式
・データパスの実現
・制御論理の設計
・単一サイクル方式の欠点
パイプライン処理
・方式比較
・データパス/制御部のパイプライン化
・パイプラインハザード
・更なる高速化手法
1
計算機アーキテクチャー Computer Architecture
2
復習:プロセッサの処理イメージ1
アドレス
プログラム
命令メモリ
カウンタ
(PC)
加算
8->12
8
8 add $1,$2,$3
+4
12 sw $3,10($0)
16 beq $2,$31,12
0 0 0 1 10 0 0
演算
レジスタファイル
$0
$1
$2
$3
レジスタ書き込み
制御論理
命令デコード
レジスタ読み出し
0
2
2->6
1
5
…
$31
1
ALU
固定
命令
フェッチ
6
計算機アーキテクチャー Computer Architecture
3
復習:単一サイクル方式の欠点
26
32
2bit 28
CPU時間=実行命令数×CPI(=1)×クロックサイクル時間
shift
4
長い!!!
命令フェッチ
命令デコード
ALU
0
1
符号
拡張
分岐用
加算器
CK(書き
込み時)
CK(書き
込み時)
RegDst
CK
16
6
X
U
M
5
レジスタ
ファイル
2
レジスタ
書込み
X
U
M
5
5
2bit
shift
ALU
制御
データ
メモリ
3
演 算
メモリアクセス
X
U
M
PC
命令
メモリ
主制御
6
Jump
Branch
MemRead
MemtoReg
ALUOp
MemWrite
ALUSrc
RegWrite
X
U
M
+4
X
U
M
PC+4[31-28]
計算機アーキテクチャー Computer Architecture
各方式の性能比較
CPU時間=実行命令数×CPI×クロックサイクル時間
命 令
R形式命令
load word
store word
分岐命令
ジャンプ命令
合計
命令
出現
回数
50
20
10
10
10
100
単一サイクル方式 可変長クロックサイクル マルチサイクル方式
クロック 命令
クロック 命令
クロック 命令
CPI サイクル 実行時間 CPI サイクル 実行時間 CPI サイクル 実行時間
400ns 1 6ns 300ns 4 2ns 400ns
1 8ns
160ns 1 8ns 160ns 5 2ns 200ns
1 8ns
80ns 1 7ns
80ns
1 8ns
70ns 4 2ns
80ns 1 5ns
60ns
1 8ns
50ns 3 2ns
80ns 1 2ns
20ns
1 8ns
20ns 1 2ns
800ns
760ns
600ns
最近のコンピュータでは上記方式は採用されていない!!!
パイプライン方式(今週説明)
4
計算機アーキテクチャー Computer Architecture
洗濯の分析
単一サイクル方式
作業1
作業2
作業3
作業4
各要素の立場でみると
洗濯機
乾燥機
折畳み
収納
お休み
お休み
お休み
お休み
お休み
お休み
お休み
お休み
お休み
お休み
お休み
お休み
5
計算機アーキテクチャー Computer Architecture
洗濯の速度向上
単一サイクル方式
洗濯1
洗濯2
洗濯3
洗濯4
パイプライン方式
洗濯1
洗濯2
洗濯3
洗濯4
①各資源(リソース)を時分割して共用
②命令をずらして同時並行実行
6
計算機アーキテクチャー Computer Architecture
7
コンピュータでのパイプライン処理
単一サイクル方式
1マシン・サイクル
命令 命令 演 算 メモリ レジスタ
命令1 フェッチ
デコード
アクセス 書込み
命令2
命令 命令 演 算 メモリ レジスタ
フェッチデコード
アクセス 書込み
命令3
パイプライン方式
1マシン・サイクル
命令
フェッチ
パイプライン・ステージ=単一サイクル方式の1step
命令 命令
メモリ レジスタ
命令1 フェッチデコード 演 算 アクセス 書込み
命令 命令 演 算 メモリ レジスタ
命令2
フェッチデコード
アクセス 書込み
命令 命令 演 算 メモリ レジスタ
命令3
フェッチデコード
アクセス 書込み
命令の実行時間(TAT)短縮ではなく命令のスループット改善
計算機アーキテクチャー Computer Architecture
8
単一サイクル方式 の実行時間
Step1: Step2: Step3: Step4: Step5:
クロック
命令
命 令
サイクル
命令
命令
演 算 メモリ レジスタ
実行時間
時間
フェッチ デコード
アクセス 書込み
1ns
6ns
2ns
R形式命令
2ns
1ns
1ns
8ns
8ns
2ns
2ns
load word
2ns
1ns
7ns
2ns
2ns
store word
2ns
1ns
5ns
2ns
2ns
1ns
分岐命令
2ns
2ns
ジャンプ命令
★クロックサイクル時間 = 最大命令実行時間(8ns)
☆1命令の実行時間 = クロックサイクル時間(8ns)
Load word
Load word
R形式命令
Store word
8ns
5命令の実行時間: 5×8ns = 40ns
R形式命令
計算機アーキテクチャー Computer Architecture
パイプライン方式の実行時間
9
Stage1: Stage2: Stage3: Stage4: Stage5:
クロック
命令
命 令
サイクル
命令
命令
演 算 メモリ レジスタ
実行時間
時間
フェッチ デコード
アクセス 書込み
1ns
10ns
2ns
R形式命令
2ns
1ns
1ns
10ns
2ns
2ns
load word
2ns
1ns
2ns
10ns
2ns
2ns
store word
2ns
1ns
10ns
2ns
2ns
1ns
分岐命令
10ns
2ns
ジャンプ命令
★クロックサイクル時間 = 最大ステージ実行時間(2ns)
☆1命令の実行時間 = クロックサイクル時間(2ns) x ステージ数(5段) = 10ns
オフセット時間(最初の命令の結果が得られるまでの準備時間)
サイクル数
Load word
Load word
R形式命令
Store word
R形式命令
1
2
3
4
5
6
7
8
9
5命令の実行時間:
4×2ns + 5 x 2ns =18ns
計算機アーキテクチャー Computer Architecture
10
両方式の性能比較
CPU時間=実行命令数×CPI×クロックサイクル時間
命 令
R形式命令
load word
store word
分岐命令
ジャンプ命令
合計
命令
出現
回数
50
20
10
10
10
100
5段パイプライン方式
単一サイクル方式
クロック 命令
クロック 命令
CPI サイクル 実行時間 CPI サイクル 実行時間
400ns 1 2ns
1 8ns
100ns
160ns 1 2ns
1 8ns
40ns
80ns 1 2ns
1 8ns
20ns
80ns 1 2ns
1 8ns
20ns
80ns 1 2ns
1 8ns
20ns
800ns
208ns
この合計は
200ns
注意!!
100個の命令すべてが滞りなく実行される場合、
2ns x 100命令 + ( 5ステージ - 1ステージ ) × 2ns = 208ns
オフセット時間(最初の命令の結果が得られるまでの準備時間)
計算機アーキテクチャー Computer Architecture
11
データパスのパイプライン化
Load word
分岐命令
(beq)
分岐命令
(jump)
レジスタ
読出し
データ
メモリ
レジスタ
書込み
命令
メモリ
レジスタ
読出し
データ
メモリ
レジスタ
書込み
命令
メモリ
レジスタ
読出し
データ
メモリ
レジスタ
書込み
命令
メモリ
レジスタ
読出し
ALU
命令
メモリ
レジスタ
書込み
ALU
Store word
データ
メモリ
ALU
レジスタ
読出し
命令
ALU
R形式命令 メモリ
ALU
時間(クロックサイクル)
データ
メモリ
機能ユニットの
使用有無に関
わらずステージ
数は等しい
レジスタ
書込み
計算機アーキテクチャー Computer Architecture
12
データパスのパイプライン化
命令フェッチ
命令デコード
演 算
メモリアクセス
レジスタ
書込み
0
X
U
M
命令
メモリ
データパス用
パイプライン・レジスタ
レジスタ
書込み 読出し
レジスタ データ2
書込み
データ
16 符号 32
\
\
拡張
0
ALU
1
0
1
6
\
X
U
M
命令
[31-0]
2ビット
左シフト
読出し
レジスタ1
読出し 読出し
レジスタ2 データ1
読出し
アドレス データ
データ
メモリ
X
U
M
PC
読出し
アドレス
加算
加算
+4
ALU
制御
書込み
データ
1
0
X
U
M
1
計算機アーキテクチャー Computer Architecture
制御のパイプライン化
時間(クロックサイクル)
命令
Load word メモリ
レジスタ
読出し
ALU
R形式命令
命令
メモリ
レジスタ
読出し
データ
メモリ
レジスタ
書込み
ALU
データ
メモリ
レジスタ
書込み
制御情報もパイプライン・レジスタで転送
13
計算機アーキテクチャー Computer Architecture
14
制御のパイプライン化
命令デコード
命令
[31-0]
命令
メモリ
データパス用
パイプライン・レジスタ
制御論理用
パイプライン・レジスタ
2ビット
左シフト
[25-21]rs 読出し
レジスタ1
[20-16]rt 読出し 読出し
レジスタ2 データ1
ゼロ判定
レジスタ
書込み 読出し
レジスタ データ2
書込み
データ
[15-0] 16 符号 32
\
\
拡張
[15-11]rd
0
ALU
1
0
1
ALU結果
6
ALU
\
制御
[5-0]funct
X
U
M
X
U
M
PC
読出し
アドレス
レジスタ
書込み
加算
加算
+4
[31-26]op
メモリアクセス
主制御
1
RegWrite
MemtoReg
MemRead
MemWrite
Branch
ALUOp
ALUSrc
RegDst
X
U
M
0
演 算
読出し
アドレス データ
データ
メモリ
書込み
データ
1
0
X
U
M
命令フェッチ
計算機アーキテクチャー Computer Architecture
パイプライン方式の問題
★パイプライン・ハザード
次のクロックサイクルで次の命令を実行できない事態
(パイプラインの乱れ)
3つのパイプライン・ハザード
① 構造ハザード
ハードウエアの制限によるパイプラインの乱れ
② デ ー タハザード
データの依存関係によるパイプラインの乱れ
③ 制御ハザード(分岐ハザード)
分岐命令に起因するパイプラインの乱れ
15
計算機アーキテクチャー Computer Architecture
洗濯での構造ハザード
2度洗い時の洗濯機の競合
洗濯1
洗濯2
洗濯3
1回目の洗濯と2回目
の洗濯で洗濯機が競合
洗濯1
洗濯2
洗濯3
洗濯機が2台あれば解決!!!
16
計算機アーキテクチャー Computer Architecture
構造ハザードの例(メモリ競合)
17
時間(クロックサイクル)
Load word メモリ
レジスタ
読出し
Store word
メモリ
Store word
R形式命令
分岐命令
ALU
レジスタ
読出し
メモリ
メモリ
ALU
レジスタ
読出し
メモリ
レジスタ
書込み
メモリ
ALU
レジスタ
読出し
メモリ
レジスタ
書込み
メモリ
ALU
レジスタ
読出し
レジスタ
書込み
メモリ
ALU
レジスタ
書込み
メモリ
命令フェッチとデータアクセスでメモリ競合が発生
メモリを2種(命令用、データ用)に分離
レジスタ
書込み
計算機アーキテクチャー Computer Architecture
構造ハザードの例(レジスタ競合)
時間(クロックサイクル)
Load word メモリ
レジスタ
読出し
R形式命令
メモリ
Store word
Store word
ALU
レジスタ
読出し
メモリ
メモリ
ALU
レジスタ
読出し
メモリ
レジスタ
書込み
メモリ
ALU
レジスタ
読出し
レジスタ
書込み
メモリ
ALU
レジスタ
書込み
メモリ
レジスタ
書込み
レジスタファイルの読み出しと書き込みで競合が発生
・読み出しポートと書き込みポートを2つ持つ
・1サイクルの前半で書き込み・後半で読み出しを実行
(厳密に言うと、こっちはデータハザード対策に対応)
18
計算機アーキテクチャー Computer Architecture
洗濯でのデータハザード
靴下の洗濯
靴下を間違えて片方だけ洗ってしまった
(靴下はペアで洗濯したい)
洗濯1
洗濯2
残りの靴下
洗濯3
ストール(バブル)による解決
洗濯1
洗濯2
洗濯3
片方の靴下の洗濯全工程
靴下投入
が終わるまで待つ
19
計算機アーキテクチャー Computer Architecture
洗濯でのデータハザード
靴下の洗濯
洗濯1
靴下を間違えて片方だけ洗ってしまった
(靴下はペアで洗濯したい)
洗濯2
残りの靴下
洗濯3
フォワーディング(バイパス)による解決
洗濯1
洗濯2
洗濯3
たたみ損ねた片方の靴下をバイパス
20
計算機アーキテクチャー Computer Architecture
21
データハザード
 問題点
例1)R形式命令間でデータの依存関係がある場合
add $5,$1,$2
命令
フェッチ
sub $4,$5,$3
レジスタ
読出し
演 算
メモリ
アクセス
レジスタ
書込み
命令
フェッチ
レジスタ
読出し
演 算
メモリ
アクセス
ここでレジスタ$5が確定
レジスタ
書込み
各命令の実行ステージ
ここでレジスタ$5を読出し
例2)ロードデータとR形式命令間で依存関係がある場合
lw $4,20($1)
sub $3,$4,$2
命令
フェッチ
レジスタ
読出し
演 算
メモリ
アクセス
レジスタ
書込み
命令
フェッチ
レジスタ
読出し
演 算
メモリ
アクセス
ここでレジスタ$4が確定
レジスタ
書込み
ここでレジスタ$4を読出し
前の命令のレジスタ書き込みステージよりも前に、後の命令が同じレジスタ
に対する読み出しを行う場合に発生。
計算機アーキテクチャー Computer Architecture
ストール(バブル)による解決
★ストール(バブル)による解決
前の命令が終了するまで待つ
例1)R形式命令間でデータの依存関係がある場合
add $5,$1,$2
命令
フェッチ
sub $4,$5,$3
レジスタ
読出し
演 算
命令
フェッチ
レジスタ
読出し
メモリ
アクセス
レジスタ
書込み
ストールストール
演 算
メモリ
アクセス
レジスタ
書込み
レジスタ$5が確定してから読み出し
例2)ロードデータとR形式命令間で依存関係がある場合
lw $4,20($1)
sub $3,$4,$2
命令
フェッチ
レジスタ
読出し
演 算
命令
フェッチ
レジスタ
読出し
メモリ
アクセス
レジスタ
書込み
ストールストール
演 算
メモリ
アクセス
レジスタ
書込み
レジスタ$4が確定してから読み出し
注意!!: レジスタファイルは、1サイクルの前半で書き込み・後半で読み出しが可能
=> レジスタ$5は、同一サイクルで書き込みと読み出しが可能。
22
計算機アーキテクチャー Computer Architecture
フォーワーディング(バイパシング)による解決
★フォーワーディング(バイパシング)による解決
前の命令から結果を先送りする(バイパスする)
add $h,$1,$2
命令
メモリ
sub $4,$h,$3
レジスタ
読出し
ALU
命令
メモリ
レジスタ
読出し
データ
メモリ
レジスタ
書込み
ALU
データ
メモリ
レジスタ
書込み
フォワーディング
フォワーディング
ユニット
ユニット
X
U
M
X
U
M
レジスタ
読出し
ALU
データ
メモリ
レジスタ
書込み
ハードウェアの変更
23
計算機アーキテクチャー Computer Architecture
24
ストールとフォワーディング
例1)R形式命令間でデータの依存関係がある場合
add $5,$1,$2
命令
フェッチ
sub $4,$5,$3
レジスタ
読出し
演 算
メモリ
アクセス
レジスタ
書込み
命令
フェッチ
レジスタ
読出し
演 算
メモリ
アクセス
ここで$5=$1+$2の結果が得られる!!!
レジスタ
書込み
各命令の実行ステージ
演算結果をバイパス
例2)ロードデータとR形式命令間で依存関係がある場合
lw $4,20($1)
sub $3,$4,$2
命令
フェッチ
レジスタ
読出し
演 算
メモリ
アクセス
レジスタ
書込み
命令
フェッチ
レジスタ
読出し
ストール
演 算
メモリ
アクセス
ここで$4へのメモリの読み出し結果が得られる!!!
レジスタ
書込み
メモリ読み出し結果をバイパス
注意!!: lw命令と直後のR形式命令間のハザードでは、フォワーディングを用いても
1サイクルのストールが必要になる。
1サイクルのストールが必要になる。