コンピュータ工学基礎 マルチサイクル化とパイプライン化 テキスト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値は どうなるか?
© Copyright 2024 ExpyDoc