高性能コンピューティング論2 第5回 Out-of-Order実行機構

Slides:



Advertisements
Similar presentations
CPU設計と パイプライン.
Advertisements

計算機システムⅡ 命令レベル並列処理とアウトオブオーダ処理
07. 値予測 五島 正裕.
07. 値予測 五島 正裕.
記 憶 管 理(1) オペレーティングシステム 第9回.
計算機システムⅡ 主記憶装置とALU,レジスタの制御
高性能コンピューティング学講座 三輪 忍 高性能コンピューティング論2 高性能コンピューティング論2 第4回 投機 高性能コンピューティング学講座 三輪 忍
CPU実験 第1回中間発表 4班 瀬沼、高橋、津田、富山、張本.
情報システム基盤学基礎1 コンピュータアーキテクチャ編 第2回 命令
オリジナルなCPUの開発 指導教授:笠原 宏 05IE063 戸塚 雄太 05IE074 橋本 将平 05IE089 牧野 政道
App. A アセンブラ、リンカ、 SPIMシミュレータ
2006年度 計算機システム演習 第4回 2005年5月19日.
計算機システムⅡ 命令セットアーキテクチャ
プロセッサ設計教育のための 命令セット・スーパースカラシミュレータの試作と評価
高性能コンピューティング論2 第1回 ガイダンス
Ibaraki Univ. Dept of Electrical & Electronic Eng.
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
Ibaraki Univ. Dept of Electrical & Electronic Eng.
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
基本情報技術概論(第8回) 埼玉大学 理工学研究科 堀山 貴史
7. 順序回路 五島 正裕.
8. 順序回路の簡単化,機能的な順序回路 五島 正裕.
第7回 2006/6/12.
計算機入門I ハードウェア(1) 計算機のハードウェア構成 ~計算機のハードウェアとは何か~
6. 順序回路の基礎 五島 正裕.
Advanced Computer Architecture
・ディジタル回路とクロック ・プロセッサアーキテクチャ ・例外処理 ・パイプライン ・ハザード
プロジェクト実習 LSIの設計と実現 パイプライン実行とハザード.
アドバンスト コンピュータ アーキテクチャ RISC と 命令パイプライン
非レイテンシ指向 レジスタ・キャッシュ・システム
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
11. マルチスレッド・プロセッサ 五島 正裕.
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
ディジタル回路 6. 順序回路の実現 五島 正裕.
10. マルチスレッド・プロセッサ 五島 正裕.
Advanced Computer Architecture
Advanced Computer Architecture
TA 高田正法 B10 CPUを作る 3日目 SPIMの改造 TA 高田正法
第6回 6/4/2011 状態遷移回路とシングルサイクルCPU設計
Advanced Computer Architecture
オペレーティングシステムJ/K (仮想記憶管理)
メモリ投機を支援する CMPキャッシュコヒーレンスプロトコルの検討
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
計算機構成 第4回 アキュムレータマシン テキスト第3章
VLSI設計論第3回 順序回路の記述と論理合成
08. メモリ非曖昧化 五島 正裕.
フロントエンドとバックエンドのインターフェース
Ibaraki Univ. Dept of Electrical & Electronic Eng.
情報とコンピュータ 静岡大学工学部 安藤和敏
コンピュータアーキテクチャ 第 10 回.
09. メモリ・ディスアンビギュエーション 五島 正裕.
JAVAバイトコードにおける データ依存解析手法の提案と実装
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
Ibaraki Univ. Dept of Electrical & Electronic Eng.
コンピュータアーキテクチャ 第 10 回.
コンピュータアーキテクチャ 第 4 回.
コンピュータアーキテクチャ 第 3 回.
コンピュータアーキテクチャ 第 2 回.
コンピュータアーキテクチャ 第 5 回.
8. 順序回路の実現 五島 正裕.
コンピュータアーキテクチャ 第 4 回.
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
コンピュータアーキテクチャ 第 3 回.
ディジタル回路 8. 機能的な順序回路 五島 正裕.
コンピュータ工学基礎 マルチサイクル化とパイプライン化 テキスト9章 115~124
Ibaraki Univ. Dept of Electrical & Electronic Eng.
情報システム基盤学基礎1 コンピュータアーキテクチャ編
情報システム基盤学基礎1 コンピュータアーキテクチャ編
Presentation transcript:

高性能コンピューティング論2 第5回 Out-of-Order実行機構 高性能コンピューティング学講座 三輪 忍 miwa@is.uec.ac.jp

本日の講義内容 Out-of-Order スーパスカラプロセッサの基本構造の復習 レジスタリネーミングの実際 命令スケジューリングの実際 高性能コンピューティング論2 本日の講義内容 Out-of-Order スーパスカラプロセッサの基本構造の復習 レジスタリネーミングの実際 命令スケジューリングの実際 正確な例外

Out-of-Orderスーパスカラ プロセッサの基本構造の復習 高性能コンピューティング論2 Out-of-Orderスーパスカラ プロセッサの基本構造の復習

スーパスカラ・プロセッサの基本構造 レジスタ・ファイル 命令キュー 演算器 フロントエンド Front-end バックエンド 高性能コンピューティング論2 スーパスカラ・プロセッサの基本構造 レジスタ・ファイル 命令 キャッシュ 命令キュー リネーム ロジック 演算器 フェッチ Fetch リネーム Rename ディスパッチ Dispatch スケジュール Schedule 発行 Issue レジスタ読出 Reg Read 実行 Exec 書戻 WB フロントエンド Front-end バックエンド Back-end ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

命令スケジューリング add r4 = r1 + r2 add r5 = r4 + r3 add r8 = r6 + r7 add 高性能コンピューティング論2 命令スケジューリング 命令スケジューリング 命令キューの中から実行可能な命令を発見 実行可能 = 制約(次スライド)を満たす 実行可能な命令の中から次に実行すべき命令を選択 バックエンド: スケジュールされた命令を実際に実行 命令ウィンドウ  (スケジューリング・ウィンドウ): スケジュール対象の命令の集合 命令キュー内の全命令 フロントエンド: 命令ウィンドウを下流に拡大 add r4 = r1 + r2 add r5 = r4 + r3 add r8 = r6 + r7 命令ウィンドウ add r8 = r8 + 1 sub r5 = r5 – r8 bz r5

命令スケジューリングの制約 計算資源 :「実行するハードウエア側の問題」 「演算器など,計算資源が空いていなければ実行できない」 高性能コンピューティング論2 命令スケジューリングの制約 計算資源 :「実行するハードウエア側の問題」 「演算器など,計算資源が空いていなければ実行できない」 命令間の依存:「実行されるプログラム側の問題」 先行制約:命令間の先行関係の制約 制御依存 (control dependence) 「分岐命令があると,後の命令は先に実行できない」 データ依存 (data dependence) 「2つの命令が同一のロケーションを定義/参照していると,  後の命令は先に実行できない」 パイプライン・ハザードと同じ だが 「どの命令にインターロックかけるか?」より,簡潔 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

データ依存 入力依存 (input) 逆依存 (anti) フロー依存 (flow) 出力依存 (output) Ip Ip Is Is 高性能コンピューティング論2 データ依存 後 続 命 令 Read Write 先行命令 入力依存 (input) 逆依存 (anti) フロー依存 (flow) 出力依存 (output) Ip Ip Is Is time time Ip Ip Is Is time time ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

真のデータ依存,偽のデータ依存 フロー依存:真の (true) データ依存 入力依存 逆依存,出力依存:偽の (false) データ依存 高性能コンピューティング論2 真のデータ依存,偽のデータ依存 フロー依存:真の (true) データ依存 データの授受のため 先行制約を生じる 入力依存 一般に,複数の読み出しがあるため 先行制約を生じない 逆依存,出力依存:偽の (false) データ依存 ロケーションの再利用のため 原理的には,先行制約を生じない リネーミングにより解消 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

データ依存の具体例 ld r1 = *($sp) sla r2 = r1 << 1 sla r1 = r1 << 2 高性能コンピューティング論2 データ依存の具体例 ld r1 = *($sp) フロー依存 sla r2 = r1 << 1 逆依存 sla r1 = r1 << 2 add r4 = r1 + r2 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

データ依存の具体例 ld r1 = *($sp) sla r1 << 1 = r2 sla r1 << 2 = 高性能コンピューティング論2 データ依存の具体例 ld r1 = *($sp) sla r1 << 1 = r2 sla r1 << 2 = add r4 = r1 + r2 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

データ依存の具体例 ld r1 = *($sp) sla r2 = r1 << 1 sla r3 r1 = r1 高性能コンピューティング論2 データ依存の具体例 ld r1 = *($sp) sla r2 = r1 << 1 逆依存 sla r3 r1 = r1 << 2 add r4 = r3 r1 + r2 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

リネーミングの真髄 要は,「1つのデータに1つのロケーション」 データの寿命 r1 r2 r3 r4 ld r1 = *($sp) sla 高性能コンピューティング論2 リネーミングの真髄 データの寿命 r1 r2 r3 r4 ロケーション (レジスタ番号) ld r1 = *($sp) sla r1 << 1 = r2 sla r3 r1 = r1 << 2 定義 add r4 = r3 r1 + r2 参照 time 要は,「1つのデータに1つのロケーション」 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

リネーミングの真髄 要は,「1つのデータに1つのロケーション」 データの寿命 r1 r2 r3 r4 ld r1 = *($sp) sla 高性能コンピューティング論2 リネーミングの真髄 データの寿命 r1 r2 r3 r4 ロケーション (レジスタ番号) ld r1 = *($sp) sla r1 << 1 = r2 sla r1 << 2 = r3 定義 add r2 = r4 + r3 参照 time 要は,「1つのデータに1つのロケーション」 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

リネーミングの問題 r1 を r3 にリネーム 「1つのデータに1つのロケーション」が理想だが… コンパイラならできるが, 高性能コンピューティング論2 リネーミングの問題 r1 を r3 にリネーム コンパイラならできるが, HW が r3 をどうやって見つけるのか? 「1つのデータに1つのロケーション」が理想だが… ロケーションが無限に必要! ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「Out-of-Order実行機構」より

高性能コンピューティング論2 レジスタリネーミングの実際

論理レジスタと物理レジスタ op Rs Rt Rd shamt func 論理レジスタ (logical register) 高性能コンピューティング論2 論理レジスタと物理レジスタ 論理レジスタ (logical register) 命令のフィールドで指定する r0 ~ r31 「データ・フロー(命令間のデータ授受関係)を表現するための名前」 コンパイラが管理 物理レジスタ (physical register) 「データの物理的な格納場所」 = レジスタ・ファイル ハードウェアが管理 レジスタリネーミングを行わないプロセッサは,論理レジスタ = 物理レジスタ op Rs Rt Rd shamt func 31 25 20 15 10 レジスタ・ファイル 命令キュー リネーム ロジック 命令 キャッシュ 演算器

物理レジスタの管理 レジスタマップ表 フリーリスト 割り当て (allocation): 解決 (resolution): 高性能コンピューティング論2 物理レジスタの管理 論理 Reg マップ 表 r1 P31 レジスタマップ表 論理 Reg と物理 Reg の対応を記録 フリーリスト 空き物理 Reg 番号のプール 割り当て (allocation): 空き物理 Reg 番号をプールから取得 デスティネーションに割り当てる 論理→物理マッピングを確立 解決 (resolution): マップ表を参照し,ソースの論理 Reg にマップされている物理 Reg を発見 解放 (free): 不要になった物理 Reg をプールに返す r2 P31 P5 P62 P18 head フリー リスト

物理レジスタの管理 レジスタマップ表 フリーリスト 割り当て (allocation): 解決 (resolution): 高性能コンピューティング論2 物理レジスタの管理 論理 Reg マップ 表 r1 P31 レジスタマップ表 論理 Reg と物理 Reg の対応を記録 フリーリスト 空き物理 Reg 番号のプール 割り当て (allocation): 空き物理 Reg 番号をプールから取得 デスティネーションに割り当てる 論理→物理マッピングを確立 解決 (resolution): マップ表を参照し,ソースの論理 Reg にマップされている物理 Reg を発見 解放 (free): 不要になった物理 Reg をプールに返す r2 P5 P5 P62 P18 head フリー リスト

物理レジスタの管理 レジスタマップ表 フリーリスト 割り当て (allocation): 解決 (resolution): 高性能コンピューティング論2 物理レジスタの管理 論理 Reg マップ 表 r1 P31 レジスタマップ表 論理 Reg と物理 Reg の対応を記録 フリーリスト 空き物理 Reg 番号のプール 割り当て (allocation): 空き物理 Reg 番号をプールから取得 デスティネーションに割り当てる 論理→物理マッピングを確立 解決 (resolution): マップ表を参照し,ソースの論理 Reg にマップされている物理 Reg を発見 解放 (free): 不要になった物理 Reg をプールに返す r2 P5 P62 P18 head フリー リスト P5

スーパスカラ・プロセッサの基本構造 レジスタ・ファイル 命令キュー 演算器 フロントエンド Front-end バックエンド 高性能コンピューティング論2 スーパスカラ・プロセッサの基本構造 レジスタ・ファイル 命令 キャッシュ 命令キュー リネーム ロジック 演算器 フェッチ Fetch リネーム Rename ディスパッチ Dispatch スケジュール Schedule 発行 Issue レジスタ読出 Reg Read 実行 Exec 書戻 WB フロントエンド Front-end バックエンド Back-end ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「スーパスカラ・プロセッサの基礎」より

スーパスカラ・プロセッサの基本構造 物理レジスタ・ファイル 命令キュー 演算器 フロントエンド Front-end バックエンド 高性能コンピューティング論2 スーパスカラ・プロセッサの基本構造 物理レジスタ・ファイル 命令 キャッシュ 命令キュー マップ表 演算器 フリーリスト フェッチ Fetch リネーム Rename ディスパッチ Dispatch スケジュール Schedule 発行 Issue レジスタ読出 Reg Read 実行 Exec 書戻 WB フロントエンド Front-end バックエンド Back-end

レジスタ・リネーミング― 割り当て と 解決 マップ表 物理レジスタ ファイル r1 p11 p13 ld r1 = *($sp) r2 高性能コンピューティング論2 レジスタ・リネーミング― 割り当て と 解決 命令は,リネーム・ロジックを In-Order に通過する プログラム・オーダが分かる データ依存が分かる マップ表 物理レジスタ ファイル r1 p11 p13 ld r1 = *($sp) r2 p12 p0 1000 p11 r3 sla r2 = r1 << 1 r4 p14 p12 p11 p10 320 p11 (empty) sla r1 = r1 << 2 p13 p11 r31 p12 (empty) p13 (empty) add r4 = r1 + r2 フリーリスト p14 p13 p12 p14 (empty) p11 p12 p13 p63 (empty) p14 p63

レジスタ・リネーミング ― 解放 理想的な解放タイミング 普通は保守的に解放 最後のレジスタ参照が完了した時 検出が困難 高性能コンピューティング論2 レジスタ・リネーミング ― 解放 理想的な解放タイミング 最後のレジスタ参照が完了した時 検出が困難 普通は保守的に解放 同一の論理レジスタを上書きする命令がプロセッサから追い出された時 この先,当該物理レジスタを参照する命令は絶対に出現しない cycle ld r1 = *($sp) OR EX MEM WB p11 sla r2 = r1 << 1 OR EX MEM WB p12 p11 sla r1 = r1 << 2 OR EX MEM WB p13 p11 保守的な 解放タイミング 理想的な解放タイミング

レジスタ・リネーミング― 解放 マップ表 物理レジスタ ファイル r1 p11 p13 ld r1 = *($sp) r2 p12 p0 高性能コンピューティング論2 レジスタ・リネーミング― 解放 物理レジスタ番号をフリーリストに返却 物理レジスタを空の状態に変更 マップ表 物理レジスタ ファイル r1 p11 p13 ld r1 = *($sp) r2 p12 p0 1000 p11 r3 sla r2 = r1 << 1 r4 p14 p12 p11 p10 320 p11 4 (empty) sla r1 = r1 << 2 p13 p11 r31 p12 8 p13 16 add r4 = r1 + r2 フリーリスト p14 p13 p12 p14 24 p63 p63 (empty) p11

静的命令 と 動的命令 静的命令 動的命令 例えば短いループ メモリ上にある命令 PCと 1対1 に対応 フェッチされて処理中の命令 高性能コンピューティング論2 静的命令 と 動的命令 静的命令 メモリ上にある命令 PCと 1対1 に対応 動的命令 フェッチされて処理中の命令 In-Flight な命令 例えば短いループ 同じ PC の命令が複数存在 0x00500000: 0x00500004: 0x00500008: 0x0050000C: 0x00500010: 0x00500014: 0x00500018: set r1 = 0; # s = 0; set r2 = 1; # i = 1; set r3 = 11; LOOP: beq r2 == r3, EXIT; add r1 = r1 + r2; add r2 = r2 + 1; b LOOP; EXIT:

タグ 物理レジスタ:命令ごとに1つずつ割り当てられる 物理レジスタ番号 = タグ 同一視してよい: 高性能コンピューティング論2 タグ 物理レジスタ:命令ごとに1つずつ割り当てられる 同一視してよい: 動的命令 と それに割り当てられた物理レジスタ そこに書かれる結果 物理レジスタ番号 = タグ プロセッサ上の,動的命令 = データ(結果)を一意に識別する識別子 ※ 五島正裕,「アドバンストコンピュータアーキテクチャ」,講義資料「Out-of-Order実行機構」より

投機ミス時のレジスタの回復処理 投機ミスした場合, 投機的に実行された命令 ex) 予測した分岐命令の,プログラム・オーダ上で下流の命令 高性能コンピューティング論2 投機ミス時のレジスタの回復処理 投機的に実行された命令 ex) 予測した分岐命令の,プログラム・オーダ上で下流の命令 投機ミスした場合, 投機的に実行された命令の実行を取り消す  デスティネーション・レジスタ(論理)の内容を元に戻す  レジスタ・マッピングと物理レジスタの内容を元に戻す

レジスタの回復処理 マップ表 物理レジスタ ファイル r1 p11 p13 be r3 = r31 , LABEL r2 p12 p0 r3 高性能コンピューティング論2 レジスタの回復処理 レジスタ・マッピングを投機を行う前の状態に戻す 投機的に割り当てた物理レジスタを空の状態に戻す マップ表 物理レジスタ ファイル r1 p11 p13 be r3 = r31 , LABEL r2 p12 p0 1000 r3 p10 ld r1 = *($sp) r4 p14 p11 p10 320 sla r2 = r1 << 1 p11 (empty) 4 p12 p11 r31 p0 p12 8 (empty) sla r1 = r1 << 2 p13 (empty) 16 フリーリスト p13 p11 p14 24 (empty) add r4 = r1 + r2 p12 p11 p13 p14 p63 p14 p13 p12 p63 (empty)

高性能コンピューティング論2 命令スケジューリングの実際

命令スケジューリング 2つのステップ ウェイクアップ セレクト 命令キューの中から実行可能な命令を発見 高性能コンピューティング論2 命令スケジューリング 2つのステップ ウェイクアップ 命令キューの中から実行可能な命令を発見 実行可能な命令 = フロー依存による先行制約を満たす命令 セレクト ウェイクアップされた命令の中から次に実行する命令を選択 資源制約を考慮 セレクト回路 ウェイク アップ 回路 命令キュー

ウェイクアップ dtag (destination tag) stag (source tag) rdy (ready bit) 高性能コンピューティング論2 ウェイクアップ = = = = dtag stag rdy stag rdy dtag (destination tag) デスティネーション・オペランド のタグ stag (source tag) ソース・オペランドのタグ rdy (ready bit) タグが利用可能か否か? = = = = = = = = セレクト回路 = = = =

ウェイクアップ ld *($sp) = p11 p11 1 1 sla p11 << 1 = p12 p12 p11 1 sla 高性能コンピューティング論2 ウェイクアップ = = = = ld *($sp) = p11 p11 1 1 = = = = sla p11 << 1 = p12 p12 p11 1 = = = = セレクト回路 sla p11 << 2 = p13 p13 p11 1 = = = = add p12 = p14 + p13 p14 p13 p12

ウェイクアップ ld *($sp) = p11 p11 1 1 sla p11 << 1 = p12 p12 p11 1 1 高性能コンピューティング論2 ウェイクアップ = = = = ld *($sp) = p11 p11 1 1 = = = = sla p11 << 1 = p12 p12 p11 1 1 = = = = セレクト回路 sla p11 << 2 = p13 p13 p11 1 1 = = = = add p12 = p14 + p13 p14 p13 p12

ウェイクアップ ld *($sp) = p11 p11 1 1 sla p11 << 1 = p12 p12 p11 1 1 高性能コンピューティング論2 ウェイクアップ = = = = ld *($sp) = p11 p11 1 1 = = = = sla p11 << 1 = p12 p12 p11 1 1 = = = = セレクト回路 sla p11 << 2 = p13 p13 p11 1 1 = = = = add p12 = p14 + p13 p14 p13 1 p12 1

セレクト レディな命令の中から発行する命令を選択 選択の戦略 資源制約を満たす命令(must) 一般には,古い命令 高性能コンピューティング論2 セレクト レディな命令の中から発行する命令を選択 選択の戦略 資源制約を満たす命令(must) 例) 整数乗算器を使用中ならば,整数乗算命令は発行不可 一般には,古い命令 = プログラム・オーダ上で上流の命令 命令が古いほど,その命令に依存する命令が命令ウインドウ内に存在する可能性が高い 依存元の命令が発行されないと,依存先の命令はいつまでも発行できない

高性能コンピューティング論2 正確な例外

割り込み 割り込み 外部から,プログラムとは非同期に 内部から,プログラムの実行によって 高性能コンピューティング論2 割り込み 割り込み 外部から,プログラムとは非同期に (いわゆる,狭義の)割り込み (interruption) 内部から,プログラムの実行によって 例外 (exception) TLBミス division by zero parity error SEGV etc. トラップ (trap) トラップ命令の実行 システム・コール

正確な割り込み (precise interruption) 高性能コンピューティング論2 正確な割り込み (precise interruption) 正確な割り込み (precise interruption) 割り込み(exception,trap)に対して,In-Order State を回復 In-Order State: 割り込みを発生させた命令より前の命令の結果はすべて反映されている 割り込みを発生させた命令以降の命令の結果はまったく反映されていない 例) ロード命令が TLB ミスした場合,ロード命令の直前の命令まで In-Order 実行ならば簡単 割り込みが発生した命令以降の命令 = 命令パイプライン上で割り込みを    発生させた命令よりも上流の命令 上記の命令をすべてキャンセル Out-of-Order 実行では? I0 I1 I2 I3 I4 I5 I6 I7 I8 I9

正確な割り込み と 投機ミス 投機ミス時も In-Order State (とほぼ同じ状態)を回復 高性能コンピューティング論2 正確な割り込み と 投機ミス 投機ミス時も In-Order State (とほぼ同じ状態)を回復 例) 分岐予測ミスした命令以前の命令の結果をすべて反映   分岐予測ミスした命令よりも後の命令の結果をすべて破棄 投機ミスへの対応の応用で正確な割り込みも実現可能 割り込みの頻度は低い 投機ミスの方が高速に処理する必要がある

リオーダ・バッファ 論理レジスタ・ファイル リオーダ・バッファ コミット In-Order State (マシン・ステート)を保持 高性能コンピューティング論2 リオーダ・バッファ 論理レジスタ・ファイル In-Order State (マシン・ステート)を保持 リオーダ・バッファ Out-of-Order State を保持 コミット リオーダ・バッファ内の情報を用いて,論理レジスタ・ファイルを更新 In-Order に更新 不可逆的更新(巻き戻し不可)

リオーダ・バッファ(通常時) 論理 Reg ファイル r1 r2 r3 高性能コンピューティング論2 論理 Reg ファイル リオーダ・バッファ(通常時) r1 r2 r3 ディスパッチ時にリオーダ・バッファのエントリを In-Order に割り当て Out-of-Order 実行された結果を In-Order に 論理 Reg に反映 論理 Reg に反映されるとエントリを解放 r4 r31 コミット ld r1 = *($sp) 論理Reg Reg値 p11 p11 r1 sla r2 = r1 << 1 p12 r2 p12 p11 p13 r1 sla r1 = r1 << 2 (be) p13 p11 p14 r4 be r1 = r2 , LABEL add r4 = r1 + r2 p14 p13 p12 リオーダ・バッファ

リオーダ・バッファ(投機ミス時) 論理 Reg ファイル r1 r2 r3 投機ミスした命令よりも下流のエントリをすべて解放 r4 r31 高性能コンピューティング論2 論理 Reg ファイル リオーダ・バッファ(投機ミス時) r1 r2 r3 投機ミスした命令よりも下流のエントリをすべて解放 r4 r31 コミット ld r1 = *($sp) 論理Reg Reg値 p11 sla r2 = r1 << 1 p12 p11 sla r1 = r1 << 2 (be) p13 p11 p14 r4 解放 be r1 = r2 , LABEL add r4 = r1 + r2 p14 p13 p12 リオーダ・バッファ

リオーダ・バッファ(割り込み時) 論理 Reg ファイル r1 r2 r3 割り込みを発生させた命令以降のエントリを解放 r4 r31 高性能コンピューティング論2 論理 Reg ファイル リオーダ・バッファ(割り込み時) r1 r2 r3 割り込みを発生させた命令以降のエントリを解放 r4 r31 コミット ld r1 = *($sp) 論理Reg Reg値 p11 div r2 = r1 / r31 p12 r2 解放 p12 p11 p13 r1 sla r1 = r1 << 2 (be) p13 p11 p14 r4 be r1 = r2 , LABEL add r4 = r1 + r2 p14 p13 p12 リオーダ・バッファ

高性能コンピューティング論2 本日のまとめ

まとめ Out-of-Order スーパスカラプロセッサの基本構造の復習 レジスタリネーミングの実際 命令スケジューリングの実際 正確な例外 高性能コンピューティング論2 まとめ Out-of-Order スーパスカラプロセッサの基本構造の復習 レジスタリネーミングの実際 命令スケジューリングの実際 正確な例外

高性能コンピューティング論2 次回 11/26(木) 10:40~ 19日は調布祭のため休講 「分岐予測,プリフェッチ」について解説