Comments
Description
Transcript
第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サイクルのストールが必要になる。