6. パイプライン制御
パイプライン (Pipelining) 命令のスループットをあげて性能を向上する Program eection order Time (in instrctions) lw $, ($) fetch 2 4 6 8 2 4 6 8 Data access lw $2, 2($) 8 ns fetch Data access lw $3, 3($) Program eection Time order (in instrctions) lw $, ($) lw $2, 2($) fetch 2 ns 8 ns 2 4 6 8 2 4 fetch Data access Data access fetch 8 ns... lw $3, 3($) 2 ns fetch Data access 2 ns 2 ns 2 ns 2 ns 2 ns
パイプライン (Pipelining) 望ましい性質 命令長が等しい 命令形式が少ない ロード ストアアーキテクチャ 基本的課題 ( ハザードへの対応 ) 構造ハザード : メモリの競合 コントロールハザード : 分岐命令の処理 データハザード : 先行する命令へ依存する場合 高度な課題 例外処理 順不同実行の制御 (ot-of-order eection) など
パイプラインの基本構造 命令フェッチ (IF) デコードとレジスタアクセス (D) 実行 (EX):, アドレス計算 条件判断 メモリ参照 (E) 結果の格納 (WB) 各実行段階を流れ作業で並列処理
理想的なパイプライン動作 IF D EX E WB IF D EX E WB IF D EX E clock cycle t IF D EX
データパスのパイプライン化 IF/ID ID/EX EX/E E/WB Add 4 Shift left 2 Add reslt Add PC Address memory register data register 2 isters data 2 register data Zero reslt Address data Data memory data 6 Sign etend 32
パイプラインの模式図 Program eection order (in instrctions) lw $, 2($) Time (in clock cycles) CC CC 2 CC 3 CC 4 CC 5 CC 6 I D sb $, $2, $3 I D
パイプライン制御 PCSrc IF/ID ID/EX EX/E E/WB Add 4 Shift left 2 Add Add reslt Branch PC Address memory register register 2 isters register data data data 2 [5 ] 6 Sign 32 etend Src 6 control Zero reslt Address data em Data memory em data emto [2 6] [5 ] Op Dst
パイプライン制御 制御信号をデータのように伝達する Eection/Address Calclation stage control lines emory access stage control lines stage control lines Dst Op Op Src Branch em em write em to R-format lw sw X X beq X X WB Control WB EX WB IF/ID ID/EX EX/E E/WB
制御線とデータパス制御線とデータパス制御線とデータパス制御線とデータパス PC memory Add [2 6] emto Op Branch Dst Src 4 6 32 [5 ] Add Add reslt isters register data data data 2 register register 2 Sign etend reslt Zero data data control Shift left 2 em Control [5 ] 6 EX WB WB WB IF/ID PCSrc ID/EX EX/E E/WB em Address Data memory Address
パイプラインの乱れ ( ハザード ) 例 sb $2, $, $3 and $2, $2, $5 or $3, $6, $2 add $4, $2, $2 sw $5, ( $2 )...
データハザード Time (in clock cycles) Vale of register $2: Program eection order (in instrctions) sb $2, $, $3 CC CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 / 2 2 2 2 2 I D and $2, $2, $5 I D or $3, $6, $2 I D add $4, $2, $2 I D sw $5, ($2) I D
ハザードの分類 データハザード 先行する命令の結果を使用する場合 コントロールハザード 分岐命令によるパイプの乱れ 構造ハザード 資源の競合 ( メモリの競合など )
ストール (Stalling) 命令を同じステージに止める ( ストール バブル ) Program eection order (in instrctions) Time (in clock cycles) CC CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 CC lw $2, 2($) I D and $4, $2, $5 I D or $8, $2, $6 add $9, $4, $2 I I D bbble I D slt $, $6, $7 I D
フォワード (Forwarding) 中間結果を書き込み前に使う register file forwarding ( 同一レジスタへのリード ライト ) forwarding Time (in clock cycles) CC CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 Vale of register $2 : / 2 2 2 2 2 Vale of EX/E : X X X 2 X X X X X Vale of E/WB : X X X X 2 X X X X Program eection order (in instrctions) sb $2, $, $3 I R eg D and $2, $2, $5 I D or $3, $6, $2 I D add $4, $2, $2 I D sw $5, ($2) what if this $2 was $3? I D
ハザード対策 データハザード対策 バイパス (forwarding) 命令の並べ替え 遅延用命令 (NOP) コントロールハザード対策 分岐予測制御 遅延分岐 構造ハザード対策 命令とデータキャッシュの分離 マルチアクセスレジスタ メモリ
コントロール ハザード対策 () 分岐を予測する 分岐しない / する方に賭ける 正方向の分岐は分岐しないとする負方向のみ分岐としておく 過去の履歴を記録して判断 ( 分岐テーブル ) 両方向とも仮に実行し 不要なほうを捨てる ( ハードウェアが十分ある場合 )
コントロール ハザード対策 (2) 遅延分岐 分岐命令の動作定義を変える 分岐は 分岐命令実行直後ではなく次の命令実行後に起こる ( と変更する ) 命令の並べ替えを行い, 分岐命令のあとに実行できる命令を分岐命令後に置く 並べ替えができないときは,NOP 命令挿入
構造ハザード対策 資源の競合が起こらないように 資源を追加 メモリからの命令読み出しとデータアクセスの競合 命令メモリとデータメモリを分ける (Harvard Architectre) レジスタ ファイルの競合 マルチアクセスレジスタファイル データ バスの競合 バスの幅を広げるあるいはバイパスを作る