計算機構成論 (Chap 5) @C306
計算機構成論 (Chap. 5) @C306
http://www.ngc.is.ritsumei.ac.jp/~ger/Lectures/CompArch2012/index.html (user=ganbare, passwd = 初回の講義で言いました) 講義に出るなら、分からないなら質問しよう。 単位を取りたいなら、章末問題は自分で全部といておこう (レポートと考えればいいんです!) ご意見、ご要望、ご質問は、 山下個人か [email protected] (レポ トと考えればいいんです!)山下 茂
山下個人か 受講者全員 にメールください。 [email protected] [email protected]0
情報システム学科 次世代コンピューティング研究室山下 茂
パイプライン処理の考え方②:
Chap4のスライド再掲
仕事が多い時を考える(3/3) 一つのタスク(今は一つの命令)の実行開始から完了までの時間 レイテンシ プ 一定時間内に処理できる仕事の量 スループット 最初の命令 2番目の命令 IF ID EX MEM WB IF ID EX MEM WB 実はこれは理想 うまくいかない現実を これから勉強 2番目の命令 3番目の命令 4番目の命令 番 命令 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB これから勉強 5番目の命令 : IF ID EX MEM WB IF ID EX MEM WB パイプライン マルチサイクル • レイテンシは、5サイクル スル プ トは 1命令/サイクル パイプライン • レイテンシは、5サイクル スル プットは 0 2命令/サイクル マルチサイクル1
• スループットは、1命令/サイクル • スループットは、0.2命令/サイクルChap. 5のセルフチェック
以下の文章の意味がわからないなら、今から,寝ないで
聞いてみましょう。
聞いてみましょう。
33 パイプライン処理が理想通りにいかない事態をハザードと呼ぶ. 34 ハザードにはデータハザードと制御ハザードがある. 35 デ タ ザ ドはほとんどの場合フ ワ デ ングによりスト ルする必要がない 35 データハザードはほとんどの場合フォワーディングによりストールする必要がない. 36 ストールするために,nop命令を使う. 37 制御ハザードに対処するために,動的分岐予測が使われる.2
What to learn
パイプライン処理が理想通りにいかない2つの事象とその対処方法 ハザード=パイプライン処理において次のクロック・サイクルで次の•
データハザード
ハザード=パイプライン処理において次のクロック・サイクルで次の 命令が実行できない事態 N t T i•
データハザード
1. MEMハザードの条件とフォワーディング 2. EXハザードの条件とフォワーディング Next Topic 3. フォワーディングでは対処不可能な条件とストール•
制御ハザード(分岐ハザード)
1 常に分岐が成立しないと予測して後続命令をフ チ 1. 常に分岐が成立しないと予測して後続命令をフェッチ 2. 動的分岐予測に分岐先命令をフェッチ – いずれの場合も予測がはずれるとパイプライン上で実行してず 場合 予測 ず ラ 実行 はいけない命令をフラッシュ 教材3
• 教科書4.7~4.8教科書P335の例
データハザードとは?
命令の実行に必要なデータがまだ利用可能になっていないために 予定している命令が実行できない状況 以下の例でデータハザードは3タイプある! それぞれの条件と対策方法が分かれば,OKsub
$2
, $1, $3
#$2に引き算の結果を格納
and
$12
$2
$5
#第1オペランドがsubに依存
and
$12,
$2
, $5
#第1オペランドがsubに依存
or
$13, $6,
$2
#第2オペランドがsubに依存
add
$14
$2 $2
#第1 2オペランドがsubに依存
add
$14,
$2
,
$2
#第1, 2オペランドがsubに依存
sw
$15, 100(
$2
) #インデックスがsubに依存
b命令が
$2
の値を更新し 後続命令がそれを使用
ポイ トsub命令が
$2
の値を更新し,後続命令がそれを使用
ポイント簡単な方法:
and命令以降の実行を遅らせる( ストール
)
4
簡単な方法:
and命令以降の実行を遅らせる( スト ル
)
お絵かきスペース
データをレジスタに読み
/書きするステージは?
• 新しいレジスタの値が決定するのは,EX ステージ 値を ジ タ 格納す は ジ レジスタの値を更新する命令 sub $2, $1, $3 レジスタの値を使用する命令 • その値をレジスタに格納するのは,WB ステージ subの後続命令 • 必要なオペランドをレジスタからロードするのは,ID ステージ • 実際にそのデータを使うのは EX ステージ レジスタの値を使用する命令 subの後続命令 実際にそのデ タを使うのは,EX ステ ジ b $2 $1 $3ミニミニクイズ
このままでは,どの命令の CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 , 命令 実行結果が所望と違うか? IF ID EX MEM WB IF ID EX MEM WB add $14, $2, $2 sw $15, 100($2)6
お絵かきスペース
ミニクイズ1: CC5の時点のパイプラインの様子を下図で説明せよ
命令デ ド 命令実行
IF: 命令フェッチ ID: 命令デコード+レジスタ・フェッチ EX: 命令実行 orアドレス生成 MEM: データ・メモリ・アクセス レジスタWB:
書き込み 4
加算
加算 IF/ID ID/EX EX/MEM MEM/WB
読出 読出 命令アドレス PC 2ビット 左に シフト M U X レジスタ 読出 reg1 ALU ALU 結果 読出 reg2 書込 reg 読出 reg1 読出 reg2 ゼロ判定 読出 デ タ アドレス 命令 命令メモリ reg M 結果 書込 データ データメモリ 書込データ データ 命令 M U X M U X 符号 拡張 32 16 図4.41
8
図お絵かきスペース
3つ前の命令の結果を使う場合 (CC5)
• レジスタの値を更新するのは,WBステージ レジスタの値を更新する命令 sub $2, $1, $3 今WBステージ レジスタの値を使用する命令 add $14, $2, $2 今IDステージ • 必要なオペランドをレジスタからロードするのは,IDステージ CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB sub $2, $1, $3 and $12, $2, $5 or $13 $6 $2 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB or $13, $6, $2 add $14, $2, $2 sw $15, 100($2) レジスタはクロックサイクルの前半で読み込み,すぐ値を更新するタイプを使う WBステ ジの前半で書き込んでも それをIDステ ジの後半で読みだせる 解決策10
→ WBステージの前半で書き込んでも,それをIDステージの後半で読みだせる.お絵かきスペース
2つ前の命令の結果を使う場合: MEMハザード (CC5)
• 更新するレジスタの値は,MEM/WB レジスタに格納 レジスタの値を更新する命令 sub $2, $1, $3 今WBステージ レジスタの値を使用する命令 or $13, $6, $2 今EXステージ • 必要なオペランドを使うのは,EXステージ CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB sub $2, $1, $3 and $12, $2, $5 or $13 $6 $2 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB or $13, $6, $2 add $14, $2, $2 sw $15, 100($2) MEMの結果(MEM/WBレジスタから)をALUの入力に転送(フォワーディング)する 解決策12
お絵かきスペース
ミニクイズ2: CC4の時点のパイプラインの様子を下図で説明せよ
命令デ ド 命令実行
IF: 命令フェッチ ID: 命令デコード+レジスタ・フェッチ EX: 命令実行 orアドレス生成 MEM: データ・メモリ・アクセス レジスタWB:
書き込み 4
加算
加算 IF/ID ID/EX EX/MEM MEM/WB
読出 読出 命令アドレス PC 2ビット 左に シフト M U X レジスタ 読出 reg1 ALU ALU 結果 読出 reg2 書込 reg 読出 reg1 読出 reg2 ゼロ判定 読出 デ タ アドレス 命令 命令メモリ reg M 結果 書込 データ データメモリ 書込データ データ 命令 M U X M U X 符号 拡張 32 16 図4.41
14
図お絵かきスペース
1つ前の命令の結果を使う場合: EXハザード (CC4)
レジスタの値を更新する命令 sub $2, $1, $3 今MEMステージ • 更新するレジスタの値は,EX/MEM レジスタに格納 レジスタの値を使用する命令 and $12, $2, $5 今EXステージ • 必要なオペランドを使うのは,EXステージ CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB sub $2, $1, $3 and $12, $2, $5 or $13 $6 $2 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB or $13, $6, $2 add $14, $2, $2 sw $15, 100($2) EXの結果(EX/MEMレジスタから)をALUの入力に転送(フォワーディング)する 解決策16
お絵かきスペース
パイプライン・レジスタの各フィールドの呼び方
add
$t0 $s0 $s1
add
$t0 $s0 $s1
($t0=$s0+$s1)
000000 10000
add
$t0, $s0, $s1
10001 01000 00000 100000
op
rs
rt
rd
shamt funct
000000
add
$t0, $s0, $s1
01000 00000 100000
op
rs
rt
rd
shamt funct
($t0=$s0+$s1)
$s0
$s1
$t0
000000 10000 10001 01000 00000 100000
add
$s0
$s1
$t0
000000
01000 00000 100000
add
lw $t0, 12($s0)
op
rs
rt
address
*配布資料から、rs, rt, rdフィールドがどこか読み取れるように100011
01000
0000000000001100
$t0
10000
$s0
+12
lw
rs rt rd rt 読みだすレジスタ番号は、 書き込む可能性があるレジスタ番号は、 IF/ID.RegisterRd: IF/IDレジスタの中のrdの情報18
*他も同様に指定(図4.60参照)フォワーディング制御の概要図
WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
19
図4.60:分岐の実現や符号拡張などの回路は省略されている.ミニクイズ
3
EXハザード(1つ前の命令の結果を必要とする状況)が発生する条件を2つ挙 EXハザード(1つ前の命令の結果を必要とする状況)が発生する条件を2つ挙 げよ.また、それぞれの時に、制御線ForwardA, ForwardBはどのように設定す れば良いか? (回答) (回答)①EX/MEM.RegWrite=1 かつEX/MEM.RegisterRd = ID/EX.RegisterRs この時,ForwardA = 10と制御すれば良い.
②
② EX/MEM.RegWrite=1 かつEX/MEM.RegisterRd = ID/EX.RegisterRt この時,ForwardB = 10と制御すれば良い. (解説) ( ) •EX/MEM.RegisterRdは, 今MEMステージにある命令(先行命令)の書き込みレジスタ番号 •ID/EX.RegisterRsは,ID/EX.RegisterRsは, 今EXステージにある命令(後続命令)のALUの上側の入力データを 供給するレジスタ番号 •ID/EX RegisterRtは •ID/EX.RegisterRtは, 今EXステージにある命令(後続命令)のALUの下側の入力データを 供給するレジスタ番号
20
*教科書にはEX/MEM.RegisterRd≠0も条件に書かれていますが,本質でないので割愛します.お絵かきスペース
ミニクイズ
4
MEMハザード(2つ前の命令の結果を必要とする状況)が発生する条件を2つ MEMハザード(2つ前の命令の結果を必要とする状況)が発生する条件を2つ 挙げよ.また、それぞれの時に、制御線ForwardA, ForwardBはどのように設定 すれば良いか? (回答)①MEM/WB.RegWrite=1 かつMEM/WB.RegisterRd = ID/EX.RegisterRs ば
この時,ForwardA = 01と制御すれば良い.
②MEM/WB.RegWrite=1 かつMEM/WB.RegisterRd = ID/EX.RegisterRt この時,ForwardB = 01と制御すれば良い. (解説) •MEM/WB.RegisterRdは,MEM/WB.RegisterRdは, 今WBステージにある命令(先行命令)の書き込みレジスタ番号
22
*教科書にはMEM/WB.RegisterRd≠0も条件に書かれていますが,本質でないので割愛します.お絵かきスペース
ミニクイズ
5
前ページのミニクイズ4の回答は 実は不完全です どのような場合に 前ページのミニクイズ4の回答は,実は不完全です.どのような場合に 正しく動作しないか?そして,正しい回答を示せ. (回答) (回答)①MEM/WB.RegWrite=1 かつMEM/WB.RegisterRd = ID/EX.RegisterRs
に加えて, EX/MEM.RegisterRd≠ID/EX.RegisterRs この時,ForwardA = 01と制御すれば良い.
②MEM/WB.RegWrite=1 かつMEM/WB.RegisterRd = ID/EX.RegisterRt
② g g g に加えて, EX/MEM.RegisterRd ≠ ID/EX.RegisterRt この時,ForwardB = 01と制御すれば良い. (前ページのままではうまくいかない例) ①add $1, $1, $2 ②add $1, $1, $3 ③add $1 $1 $4 ③の実行時に,フォワードしないといけないの は,①それとも②どちらの結果でしょう?
24
③add $1, $1, $4お絵かきスペース
重要問題1
クロックサイクル
1000で,以下の命令列の最初のsub命令のフェ
ッチを開始するとする。最初に
$2=10, $1=20, $3=30であったと
する それ以前の命令は全て無視することにする
する。それ以前の命令は全て無視することにする。
クロックサイクル
1001,1002,1003,1004のそれぞれの時刻に,
図
4 60の回路の各結線の値とレジスタ$2の値を述べよ
図
4.60の回路の各結線の値とレジスタ$2の値を述べよ
また,
ALUの入力となっているMUXが何を選択しているかも
回答せよ.
sub
$2
, $1, $3
#$2に引き算の結果を格納
(この問題の設定だけでは値が不明な結線は答える必要はない)and
$12,
$2
, $5
#第1オペランドがsubに依存
or
$13, $6,
$2
#第2オペランドがsubに依存
add
$14,
$2
,
$2
#第1, 2オペランドがsubに依存
sw
$15, 100(
$2
) #インデックスがsubに依存
26
,
( )
お絵かきスペース
重要問題1回答
clock=1001
WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
28
図4.60:分岐の実現や符号拡張などの回路は省略されている.重要問題1回答
clock=1001 (予備)
WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
29
図4.60:分岐の実現や符号拡張などの回路は省略されている.重要問題1回答
clock=1002
WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
30
図4.60:分岐の実現や符号拡張などの回路は省略されている.重要問題1回答
clock=1002 (予備)
WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
31
図4.60:分岐の実現や符号拡張などの回路は省略されている.重要問題1回答
clock=1003
WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
32
図4.60:分岐の実現や符号拡張などの回路は省略されている.重要問題1回答
clock=1003 (予備)
WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
33
図4.60:分岐の実現や符号拡張などの回路は省略されている.重要問題1回答
clock=1004
WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
34
図4.60:分岐の実現や符号拡張などの回路は省略されている.重要問題1回答
clock=1004 (予備)
WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
35
図4.60:分岐の実現や符号拡張などの回路は省略されている.What to learn
パイプライン処理が理想通りにいかない2つの事象とその対処方法 ハザード=パイプライン処理において次のクロック・サイクルで次の•
データハザード
ハザード=パイプライン処理において次のクロック・サイクルで次の 命令が実行できない事態•
データハザード
1. MEMハザードの条件とフォワーディング 2. EXハザードの条件とフォワーディング 3. フォワーディングでは対処不可能な条件とストール•
制御ハザード(分岐ハザード)
1 常に分岐が成立しないと予測して後続命令をフ チ Next Topic 1. 常に分岐が成立しないと予測して後続命令をフェッチ 2. 動的分岐予測に分岐先命令をフェッチ – いずれの場合も予測がはずれるとパイプライン上で実行してず 場合 予測 ず ラ 実行 はいけない命令をフラッシュ 教材36
• 教科書4.7~4.8フォワーディングでは対処不可能な条件とストール
以下の場合は,フォワーディングではうまくいない.
理由を考えよ
lw
$2
20(
$1
)
理由を考えよ.
lw
$2
, 20(
$1
)
and
$4,
$2
, $5
or
$8 $6
$2
or
$8, $6,
$2
add
$14,
$2
,
$2
sw
$15 100(
$2
)
sw
$15, 100(
$2
)
37
lwの結果をすぐ次の命令が使用するとき
レジスタの値を更新する命令 lw $2, 20($1) 今MEMステージ • 更新するレジスタの値は,MEMステージで決定 レジスタの値を使用する命令 and $4, $2, $5 今EXステージ • 必要なオペランドを使うのは,EXステージ IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB lw $2, 20($1) and $4, $2, $5 or $8 $6 $2 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB or $8, $6, $2 add $14, $2, $2 sw $15, 100($2) 解決策 フォワーディングではうまくいかないので,ストールする38
お絵かきスペース
ストールの実行の仕方
後続命令のIDステージで,ストールすべきか判断可能(ミニクイズ6参照) (図中のハザード検出ユニットで判定をする) ストール:nop命令(何もしない命令)を挿入して,後続命令をその分遅らせる IF ID EX MEM WB l $2 20($1) CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB lw $2, 20($1) and $4, $2, $5 or $8, $6, $2 add $14 $2 $2 IF ID EX MEM WB IF ID EX MEM WB add $14, $2, $2 sw $15, 100($2) • CC3でand命令はすぐに実行できないと判断し,nop命令に変更 (ID/EXレジスタの内容をすべて0 にする) 以下で CC3以降の様子の概略を見ていきましょう40
以下で,CC3以降の様子の概略を見ていきましょう.お絵かきスペース 前ページでストールが必要な命令数は?
ストールの実行例
(CC3)
CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB lw $2, 20($1) CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB and $4, $2, $5 or $8, $6, $2 add $14, $2, $2 $ $ IF ID EX MEM WB sw $15, 100($2)ID/EX EX/MEM MEM/WB
IF/ID
IFステージ IDステージ EXステージ MEMステージ WBステージ
lw
and
or
and
lw
or
• CC3でand命令はすぐに実行できないと判断したら, 1. ID/EXレジスタの内容をすべて0にする. 2. IF/IDレジスタの内容を変更しない⇒フラッシュ
42
容を変更 3. PCを変更しない(+4しない)お絵かきスペース
ストールの実行例
(CC4)
CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB lw $2, 20($1) CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB nop and $4, $2, $5 or $8, $6, $2 $ $ $ IF ID EX MEM WB add $14, $2, $2 sw $15, 100($2)ID/EX EX/MEM MEM/WB
IF/ID
IFステージ IDステージ EXステージ MEMステージ WBステージ
IFステ ジ IDステ ジ EXステ ジ MEMステ ジ WBステ ジ
lw
and
or
nopp
ストールの実行例
(CC5)
CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB lw $2, 20($1) CC1 CC2 CC3 CC4 CC5 CC6 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB nop and $4, $2, $5 or $8, $6, $2 $ $ $ IF ID EX MEM WB add $14, $2, $2 sw $15, 100($2)ID/EX EX/MEM MEM/WB
IF/ID
IFステージ IDステージ EXステージ MEMステージ WBステージ
IFステ ジ IDステ ジ EXステ ジ MEMステ ジ WBステ ジ
lw
and
or
nop
add
p
フォワ ディング
45
フォワーディング
ミニクイズ
6
データハザードによりストールしなければならない状況が発生する条件を述べよ データハザードによりストールしなければならない状況が発生する条件を述べよ. (回答) ID/EX M R d 1 かつ ID/EX.MemRead=1 かつ ID/EX.RegisterRt = IF/ID.RegisterRs または ID/EX.RegisterRt = IF/ID.RegisterRt この時,パイプラインをストールさせる (解説) ( ) •ID/EX.MemRead=1は,先行命令がlw であることを意味する •ID/EX.RegisterRtは, 今EXステージにある命令(先行命令)の書き込みレジスタ番号 今EXステ ジにある命令(先行命令)の書き込みレジスタ番号 •IF/ID.RegisterRsは, 今IDステージにある命令(後続命令)のALUの上側の入力データを 供給するレジスタ番号 供給するレジスタ番号 •F/ID.RegisterRtは, 今IDステージにある命令(後続命令)のALUの下側の入力データを 供給するレジスタ番号46
供給するレジスタ番号お絵かきスペース
自己確認クイズ
ストールすべき時,ハザード検出ユニットの3つの出力 によりどのように各部の動作が制御されるか説明せよ WB WB WB IF/IDWrite ハザード・検出 ユニット ID/EX.MemRead IF/ID 制御 M EX M EX M EX M U X PCWrite 0 ID/EX MEM/WB 読出 reg1 ALU 読出 読出 reg1 PC 命令メモリ MU XID/EX EX/MEM MEM/WB
0 1 ALU 読出 reg2 書込 reg 書込 データ 読出 reg2 データメモリ 読出 データ アドレス 命令メモリ M U X X レジスタ M U X 2 0 1 デ タ 書込データ IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRd M U X レジスタ Rt Rd EX/MEM.RegisterRd ForwardA ForwardB 2 フォワーディング・ ユニット Rs ID/EX.RegisterRt Rt MEM/WB.RegisterRd
48
図4.60:分岐の実現や符号拡張などの回路は省略されている.お絵かきスペース
What to learn
パイプライン処理が理想通りにいかない2つの事象とその対処方法 ハザード=パイプライン処理において次のクロック・サイクルで次の•
データハザード
ハザード=パイプライン処理において次のクロック・サイクルで次の 命令が実行できない事態•
データハザード
1. MEMハザードの条件とフォワーディング 2. EXハザードの条件とフォワーディング 3. フォワーディングでは対処不可能な条件とストール•
制御ハザード(分岐ハザード)
1 常に分岐が成立しないと予測して後続命令をフ チ Next Topic 1. 常に分岐が成立しないと予測して後続命令をフェッチ 2. 動的分岐予測に分岐先命令をフェッチ – いずれの場合も予測がはずれるとパイプライン上で実行してず 場合 予測 ず ラ 実行 はいけない命令をフラッシュ 教材50
• 教科書4.7~4.8制御ハザード
(分岐ハザード)とは?
パイプライン処理において、分岐が存在するため、フェッチ済みの後続する 命令が実行すべき命令か否か判断できず、所定のクロック・サイクル内で は命令を実行できない状況 は命令を実行できない状況140:beq $1 $3 7
clock=100 140:beq $1, $3, 7
144:and $12, $2, $5
148
$13 $6 $2
clock=100
148:or $13, $6, $2
152:add $14, $2, $2
156 b
$2 $4 8
156:beq $2, $4, 8
172
$15 100($2)
172:sw $15, 100($2)
#条件成立時のbeqからの分岐先51
ミニクイズ7
前ペ ジの命令列において clock 103の時のPCの値と clock 104の時の 前ページの命令列において,clock=103の時のPCの値と,clock=104の時の PCの値がどのように設定されるかを以降のページの図を用いて説明せよ. beq命令の分岐は成立するとする. IF ID EX MEM WB 100 101 102 103 104 105 clock 140:beq $1 $3 7 IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB 140:beq $1, $3, 7 144:and $12, $2, $5 148:or $13, $6, $2 IF ID EX MEM WB IF ID EX MEM WBID/EX EX/MEM MEM/WB
IF/ID 152:add $14, $2, $2
ID/EX EX/MEM MEM/WB
IF/ID
IFステージ IDステージ EXステージ MEMステージ WBステージ
beq
and
or
add
お絵かきスペース
ミニクイズ7の回答 clock=103
命令デ ド 命令実行
IF: 命令フェッチ ID: 命令デコード+レジスタ・フェッチ EX: 命令実行 orアドレス生成 MEM: データ・メモリ・アクセス レジスタWB:
書き込み 4
加算
加算 IF/ID ID/EX EX/MEM MEM/WB
読出 読出 命令アドレス PC 2ビット 左に シフト M U X レジスタ 読出 reg1 ALU ALU 結果 読出 reg2 書込 reg 読出 reg1 読出 reg2 ゼロ判定 読出 デ タ アドレス 命令 命令メモリ reg M 結果 書込 データ データメモリ 書込データ データ 命令 M U X M U X 符号 拡張 32 16 図4.41
54
図お絵かきスペース
ミニクイズ7の回答 clock=104
命令デ ド 命令実行
IF: 命令フェッチ ID: 命令デコード+レジスタ・フェッチ EX: 命令実行 orアドレス生成 MEM: データ・メモリ・アクセス レジスタWB:
書き込み 4
加算
加算 IF/ID ID/EX EX/MEM MEM/WB
読出 読出 命令アドレス PC 2ビット 左に シフト M U X レジスタ 読出 reg1 ALU ALU 結果 読出 reg2 書込 reg 読出 reg1 読出 reg2 ゼロ判定 読出 デ タ アドレス 命令 命令メモリ reg M 結果 書込 データ データメモリ 書込データ データ 命令 M U X M U X 符号 拡張 32 16 図4.41
56
図お絵かきスペース
制御ハザード
(分岐ハザード)の対処方法
分岐命令による分岐先のアドレスの決定はMEMステージで行われる. *Chap4の章末問題参照 (MEMステージでPCを書き換え,その次のクロックで分岐先の命令をフェッチ) もし 分岐が成立すると 後続命令3つを廃棄しなければならない もし,分岐が成立すると,後続命令3つを廃棄しなければならない (パイプライン)フラッシュ:命令を廃棄すること (パイプライン)フラッシュ:命令を廃棄すること →廃棄する命令に対応するパイプラインレジスタをすべて0にする→
nop命令に変更 *ハードウェアを追加すれば,IDステージで次に実行すべき命令の番地の決 定が可能。その場合,フラッシュしないといけない命令は1つとなる (教科書p 349-p 350参照 ただし本講義ではその改良については触れない)58
(教科書p.349 p.350参照,ただし本講義ではその改良については触れない)動的分岐予測(
1ビット方式)
分岐予測バッファ(分岐履歴テーブル)に,分岐命令のアドレス(の下位ビット) のindexで分岐したかどうかの1ビットを覚えておく. beq命令アドレスの下位 前回分岐したか? 0 1(分岐) 0 1(分岐) … … 38 0(分岐せず) 38 0(分岐せず) 40 1(分岐) … … IFステージで表を見て,次にフェッチすべき命令のアドレス計算してPCにセット 測が当たればペ な → 予測が当たればペナルティなし → 予測が外れればフェッチした後続命令をフラッシュ59
ミニクイズ
8
以下のループの2回目の実行で,beq命令は10回実行されるが,1ビットの予 測方式では,予測の成功確率はいくらか?i
9
for(i=0; i !=9; i++){ ループ }beq $1, $3, 7
}予測成功の確率=
80%
実際の分岐比率は
90%
実際のプログラムの大半では、ループ処理や例外処理など各分岐先への分 岐比率は偏りが大きいため 分岐予測は結構あたるので大変有用60
岐比率は偏りが大きいため、分岐予測は結構あたるので大変有用.お絵かきスペース
各カウンターは以下のような
4つの状態を表す
2ビット方式
各カウンターは以下のような
4つの状態を表す。
11:分岐する(可能性大):Strongly taken
10:分岐する(可能性小):Weakly taken
01:分岐しない(可能性小):Weakly not taken
00:分岐しない(可能性大):Strongly not taken
不成立
11
分岐 と予測10
分岐 と予測 不成立 成立 成立 成立 不成立 成立 不成立00
分岐しない と予測 不成立 成立01
分岐しない と予測 不成立 •2回連続で分岐が不成立なら,次から不成立と予測 2回連続で予測がはずれたら,予測を次から変更 成立 不成立62
•2回連続で分岐が成立したら,次から成立と予測ミニクイズ
9
以下のループの2回目の実行で,beq命令は10回実行されるが,2ビットの予 測方式では,予測の成功確率はいくらか?i
9
for(i=0; i !=9; i++){ ループ }beq $1, $3, 7
}予測成功の確率=
90%
実際の分岐比率は
90%なので理想的
63
お絵かきスペース