Advanced Computer Architecture 04. レジスタ・リネーミング 五島 正裕 2015/9/30 Advanced Computer Architecture 内容 1. レジスタ・リネーミングの復習 2. レジスタ・リネーミングの実際 3. 分岐予測の復習 4. レジスタ・リネーミングと分岐予測 2 Advanced Computer Architecture 1. レジスタ・リネーミングの復習 2015/9/30 Advanced Computer Architecture 4 スーパースカラ・プロセッサの基本構造 フェッチ幅 命令 キャッシュ フェッチ Fetch ディスパッチ幅 リネーム 命令 ウィンドウ ロジック リネーム Rename フロントエンド front-end 発行幅 ディスパッチ Dispatch スケジュール Schedule RFRF 演算器 発行 Issue 実行 Exec バックエンド back-end 書戻 WB Advanced Computer Architecture 命令スケジューリングの制約 計算資源 :「実行するハードウエア側の問題」 「演算器など,計算資源が空いていなければ実行できない」 命令間の依存:「実行されるプログラム側の問題」 先行制約:命令間の先行関係の制約 制御依存 (control dependence) 「分岐命令があると,後の命令は先に実行できない」 データ依存 (data dependence) 「2つの命令が同一のロケーションを定義/参照していると, 後の命令は先に実行できない」 パイプライン・ハザードと同じ だが 「どの命令にインターロックかけるか?」より,簡潔 5 Advanced Computer Architecture 6 データ依存 後続命令 Read Read 先 行 命 令 Write Ip Ip Is Is time time 入力依存 (input) Write time 逆依存 (anti) Ip Ip Is Is フロー依存 (flow) time 出力依存 (output) Advanced Computer Architecture 真のデータ依存,偽のデータ依存 フロー依存:真の (true) データ依存 データの授受のため 先行制約を生じる 入力依存 一般に,複数の読み出しがあるため 先行制約を生じない 逆依存,出力依存:偽の (false) データ依存 ロケーションの再利用のため 原理的には,先行制約を生じない リネーミングにより解消可能 7 Advanced Computer Architecture 8 データ依存の具体例 ld r1 = *($sp) フロー依存 sla r2 = r1 << 1 逆依存 sla r1 = r1 << 2 add r4 = r1 + r2 Advanced Computer Architecture 9 データ依存の具体例 ld r1 = *($sp) sla r2 = r1 << 1 sla r1 = r1 << 2 add r4 = r1 + r2 Advanced Computer Architecture 10 データ依存の具体例 ld r1 = sla r2 = *($sp) r1 << 1 逆依存 sla r1 r3 = r1 << 2 add r4 = r1 + r2 r3 Advanced Computer Architecture 11 リネーミングの真髄 データの寿命 r1 r2 r3 r4 ロケーション (レジスタ番号) ld r1 = *($sp) sla r2 = r1 << 1 sla r3 r1 = r1 << 2 定義 add r4 = r1 + r2 r3 参照 cycle 要は,「1つのデータに1つのロケーション」 Advanced Computer Architecture 12 リネーミングの真髄 データの寿命 r1 r2 r3 r4 ロケーション (レジスタ番号) ld r1 = *($sp) sla r2 = r1 << 1 sla r3 = r1 << 2 定義 add r4 = r3 + r2 参照 cycle 要は,「1つのデータに1つのロケーション」 Advanced Computer Architecture レジスタ・リネーミングとフロー依存 各命令のデスティネーションに割り当てるとき, レジスタは「空 (empty)」にしておく 命令が実行され,結果が書かれたら, レジスタは「一杯 (full)」 になる フロー依存による先行制約を満たす = 依存元の命令が実行されたら,依存先の命令を実行する ソースが full になったら,実行する 13 Advanced Computer Architecture 14 レジスタ・リネーミングとフロー依存 ld r1 = *($sp) sla r2 = r1 << 1 sla r3 = r1 << 2 add r4 = r3 + r2 r1 r2 r3 r4 r31 Advanced Computer Architecture リネーミングの問題 r1 を r3 にリネーム コンパイラならできるが, HW が r3 をどうやって見つけるのか? 「1つのデータに1つのロケーション」が理想だが… ロケーションが無限に必要! 15 Advanced Computer Architecture 1. レジスタ・リネーミングの実際 2015/9/30 Advanced Computer Architecture 17 論理レジスタ,物理レジスタ 論理レジスタ (logical register) 命令のフィールドで指定する r0 ~ r31 「データ・フローを表現するための名前」 必ずしも,物理的に存在している必要はない 高級言語で言えば「変数」 物理レジスタ (physical register) 「データの物理的な格納場所」 高級言語で言えば「物理メモリ(のロケーション)」 op 31 Rs 25 Rt 20 Rd 15 shamt func 10 0 Advanced Computer Architecture 18 データ依存の具体例 ld r1 = *($sp) フロー依存 sla r2 = r1 << 1 逆依存 sla r1 = r1 << 2 add r4 = r1 + r2 Advanced Computer Architecture 物理レジスタの管理 空き物理 Reg のプール 1. 割り当て (allocation): 空き物理 Reg をプールから取得 デスティネーションに割り当てる 論理→物理マッピングを確立 2. 解決 (resolution): ソースの論理 Reg にマップされている物理 Reg を見つける 3. 解放 (free): 不要になった物理 Reg をプールに返す 19 Advanced Computer Architecture 20 レジスタ・リネーミング ― 割り当て と 解決 RFRF 命令 キャッシュ フェッチ Fetch リネーム 命令 ウィンドウ ロジック リネーム Rename ディスパッチ Dispatch スケジュール Schedule 演算器 発行 Issue 実行 Exec 書戻 WB Advanced Computer Architecture 21 レジスタ・リネーミング― 割り当て と 解決 命令は,リネーム・ロジックを In-Order に通過する プログラム・オーダが分かる ld 物理 Reg プール データ依存が分かる r1 p11 = *($sp) sla r2 p12 = r1 << 1 p11 sla r3 p13 = r1 << 2 p11 add r4 p14 = r3 + r2 p13 p12 Reg マップ テーブル p0 p11 p12 p13 p14 p10 p11 p12 p13 p14 r1 r2 r3 r4 r31 p63 Advanced Computer Architecture 22 マシン・ステート 論理→物理の変換: プロセッサの HW が透過的に行う プログラム(命令)から観測できるのは,論理 Reg のみ 物理 Reg を(指定して)アクセスすることは(通常の方法では) できない 「計算機の状態 (machine state)」は,論理 Reg の集合 (+α) Advanced Computer Architecture レジスタ・リネーミング ― 解放 後で… 23 Advanced Computer Architecture 1. 前回までの復習 分岐予測 2015/9/30 Advanced Computer Architecture 25 投機のフェーズ 1. 予測 (prediction) 2. 実行 (execution) 3. 確認 (verification, confirmation) 4. キャンセル,回復,再実行 (cancellation, recovery, re-execution) cycle A 1. 予測 3. 確認 2. 実行 B 4. 再実行 Advanced Computer Architecture 26 分岐予測 cycle 3. 確認 add r5 = r4 + r3 IF OR EX MEM WB be IF OR EX MEM WB r1 == r2 add r8 = r6 + r7 IF OR EX MEM WB PC 予測 add r8 = r8 1. + 1 IF OR EX MEM WB 2. フェッチ sub r9 = r6 - r7 IF OR EX MEM WB ld IF OR EX MEM WB r8 = *(r9) Advanced Computer Architecture 27 分岐予測 cycle 3. 確認 add r5 = r4 + r3 IF OR EX MEM WB be IF OR EX MEM WB r1 == r2, L0 L0: ld add r8 = *(r6) r6 + r7 PC add r9 r8 = r8 1. + 1 sla << 1 予測 IF OR IF OR EX MEM WB IF OR IF OR EX MEM WB 2. フェッチ add sub r9 = r9 r6 + - 1 r7 ld r8 = r9 *(r9) sub - 1 4. 再フェッチ IF IF OR EX M IF IF OR EX M Advanced Computer Architecture 28 分岐予測 cycle add r5 = r4 + r3 IF OR EX MEM WB be IF OR EX MEM WB L0: ld r1 == r2, L0 r8 = *(r6) sla r9 = r8 << 1 IF OR IF OR EX MEM WB IF OR IF OR EX MEM WB add r9 = r9 + 1 IF IF OR EX M sub r8 = r9 - 1 IF IF OR EX M ミス・ペナルティ (= H, M = 0) Advanced Computer Architecture 投機の効果 「毎回かかるレイテンシを,ミス時のペナルティに」 (予測ミスによるレイテンシの増加)= (予測率) ×(予測ミス率) ×(ミス・ペナルティ) 予測ミス率が十分小さければ (ex. 1%), ミス・ペナルティは1~2サイクル長くなってもよい 29 Advanced Computer Architecture 30 分岐予測とフロントエンド/バックエンド RFRF 命令 キャッシュ フェッチ Fetch リネーム 命令 ウィンドウ ロジック リネーム Rename フロントエンド front-end ディスパッチ Dispatch スケジュール Schedule 演算器 発行 Issue 実行 Exec バックエンド back-end 書戻 WB Advanced Computer Architecture 分岐予測とフロントエンド/バックエンド フロントエンド 分岐予測に基づいて自律的に,命令を命令ウィンドウに詰める バックエンド 命令ウィンドウ内から発行された命令を,実際に実行する 分岐予測の結果を確かめる BE ⇒ FE のインタラクション 分岐予測ミスのみ 31 Advanced Computer Architecture 4.レジスタ・リネーミングと分岐予測 2015/9/30 Advanced Computer Architecture 分岐予測ミス時の回復 予測した分岐命令の,プログラム・オーダ上で下流の命令: 投機的に実行された命令 予測がミスであった場合, 投機的に実行された命令の実行を取り消す,具体的には, デスティネーション・レジスタ(論理)の内容を元に戻す 書き潰すと OUT! 投機的に実行した命令は, マシン・ステートを不可逆的に更新してはいけない 33 Advanced Computer Architecture 34 分岐予測 cycle ld r1 = *(r2) IF N D bz r1, L0 IF N D li r1 = 0 add r9 = r6 + 1 S I R EX S MEM I R W EX IF N D S I R EX W IF N D S I R EX W W sub r9 = r6 - r7 IF N D S I R EX W ld IF N D S I R EX W r8 = *(r9) Advanced Computer Architecture 論理 Reg の可逆的な更新 Reg リネーミング 各命令のデスティネーションに1つずつ物理 Reg を割り当てる すべての命令の結果が保存してある 書き潰される心配はない 問題は,物理 Reg プールの構造 通常時: 必要な物理 Reg をどうやってとっておくか 必要なくなった物理 Reg をどう解放するか 要/不要をどうやって判断するか ミス時: どうやって元に戻すか 35 Advanced Computer Architecture 36 論理 Reg の可逆的な更新 DB,FS のリカバリに類似 基本は,チェックポインティング(に類似) チェックポイント (CP) = 分岐命令 分岐命令の実行 = 予測の確認 ヒット ⇒ コミットメント (commitment) ミス ⇒ 回復 ただし,対象は fault ではなく,予測ミス Advanced Computer Architecture 37 チェックポインティング exec CP CP CP CP CP program order commit cycle Advanced Computer Architecture 2つの方法 1. ロギング 論理 Reg の更新ログを保存 2. バックアップ 分岐命令 (= CP) ごとに,論理 Reg のイメージをバックアップ 38 Advanced Computer Architecture 論理 Reg ファイル 1. ロギング r1 r2 r3 r4 r31 ld sla sla add r1 r2 r3 r4 = = = = *($sp) r1 << 1 r1 << 2 r3 + r2 r1 r2 r1 r4 リオーダ・バッファ 39 Advanced Computer Architecture 40 2. バックアップ p0 r1 r2 r3 r4 p11 p12 p13 p14 p11 p12 p13 p14 r31 Reg マップ・テーブル p63 物理 Reg ファイル Advanced Computer Architecture 正確な割り込み 例外 (exception) トラップ (trap) 割り込み (interruption) 正確な割り込み (precise interruption) 41
© Copyright 2024 ExpyDoc