1 / 31

08. メモリ非曖昧化

08. メモリ非曖昧化. 五島 正裕. 内容. データ依存 メモリ非曖昧化 ストア・セット・メモリ依存予測器. データ依存. データ依存. 制御駆動型 (control-driven) (⇔ データ駆動, data-driven ) 命令間のデータの授受は, プログラム・オーダ上で,先行 / 後続の関係にある 2 命令が, 同一のロケーションを参照する ことで表現 ロケーション:レジスタ と メモリ. Write. add. r4 =. r1 + r2. add. r5 =. r4 + r3. Read. データ依存. I p.

sera
Download Presentation

08. メモリ非曖昧化

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 08. メモリ非曖昧化 五島 正裕

  2. 内容 • データ依存 • メモリ非曖昧化 • ストア・セット・メモリ依存予測器

  3. データ依存

  4. データ依存 • 制御駆動型 (control-driven) (⇔ データ駆動,data-driven) • 命令間のデータの授受は, • プログラム・オーダ上で,先行/後続の関係にある2命令が, • 同一のロケーションを参照する ことで表現 • ロケーション:レジスタ と メモリ Write add r4 = r1 + r2 add r5 = r4 + r3 Read

  5. データ依存 Ip Ip Is Is time time Ip Ip Is Is time time

  6. ロード/ストア命令 • ロード命令 • r[Rt] = *(r[Rs] + immediate); • ストア命令 • *(r[Rs] + immediate) = r[Rt]; op Rs Rt immediate 31 25 20 15 0

  7. レジスタとメモリの違い • レジスタ番号 • 静的 • (実行の度に)変わらない • フロントエンド(デコード・ステージ)で分かる • メモリのアドレス • 動的 • 実行の度に変わり得る • バックエンド(アドレス計算(実行)ステージ)で初めて分かる:「曖昧」

  8. メモリの曖昧性による偽の依存 • 偽の依存: • 先行するストアのアドレスが計算されるまで, 後続のロード/ストアは 原則 実行できない • 「計算したら違ってた」

  9. コード例 f (double* a, double* b, double* x, double* y) { *x = *a * *a; *y = *b * *b; } x == b ? ld r1 = *(sp + 0) // a ld r1 = *r1 ld r2 = *(sp + 16) // x mul r1 = r1 * r1 st *r2 = r1 ld r3 = *(sp + 8) // b ld r3 = *r3 ld r4 = *(sp + 24) // y mul r3 = r3 * r3 st *r4 = r3 ret

  10. 解決法 • 防止(予防,prevention): • ロード/ストアは in-order で • 発見 & 回復 (detection & recovery): • 依存なしと予測して out-of-order で • メモリ・オーダ違反 (memory-order violation) を発見 • 0~7% のロードがメモリ・オーダ違反 ⇒ ペナルティ • 理想 (ideal, oracle): • IPC 最大2倍

  11. IPC 2倍の理由 • 「計算のかたまりがオーバラップする」 • 「計算のかたまりは,ロードではじまり,ストアで終わる」 • 「真のメモリ・データ依存がクリティカルになるようなコードは,  最適化されてない?」 • 目標: • ロードを,特に早期に実行したい • (ストアは,そんなでもない) • コンパイラより上手にできる

  12. オーバラップ実行 ILP (Inst Level Parallelism) ILP ld ld ld st st ld st st

  13. メモリ非曖昧化 (memory disambiguation)

  14. メモリ・ディスアンビギュエーション • ディスアンビギュエーション (disambiguation): • 「非曖昧化」,「曖昧性除去(解消)」 • 分離 (split) ロード/ストア • アドレス予測 • アドレス一致/不一致予測

  15. ロード/ストア命令 • 通常のロード/ストア命令: • アドレス計算部 • メモリ・アクセス部 • ロード命令 : r[Rt] = *(r[Rs] + immediate); • ストア命令: *(r[Rs] + immediate) = r[Rt]; op Rs Rt immediate 31 25 20 15 0

  16. 分離ロード/ストア • 通常のロード/ストア命令: • アドレス計算部 • メモリ・アクセス部 • 分離ロード/ストア: • ディスパッチ時に分離,以降 2つの命令としてスケジューリング • 効果: • ストア・バリューがなくても,アドレス計算が開始できる • バリューより,アドレスが早く決まることが多い • ロードは変わらない • バリューに相当するソース・オペランドがないから

  17. ロード/ストア命令 • 普通の ISA のロード/ストア命令: • 非分離 (non-split) を想定 • 理由: • パイプライン・マシンで,ALU でアドレス計算をすることを想定 • コード効率の改善(命令の圧縮) • 非 RISC 的?

  18. add ld 2 1 2 3 1 8 IF 100 PC IR 0 Rs 200 100 ID Rt 104 Reg File EX 208 1000 MEM DR MDR MA MD Main Memory WB

  19. アドレス予測 • ロード/ストアのアドレスを予測 • 単純にロードを早期実行する効果 • 非曖昧化の効果 • 値予測の一種 • だが,値予測より歴史が古い • メモリ・アクセスがストライドであることは容易に想像できる

  20. ハードウェア • 今までの方法: • 分離ロード/ストア • アドレス予測 • 実際にアドレスの一致検出を行う • スケジューリングのために,比較器のマトリクス(行列)が必要! • 比較器数 ≒ ½ ×(ウィンドウ・サイズ)2 • もう1つの方法: • アドレス一致/不一致予測

  21. 比較器のマトリクス 0 1 2 old effective address L/S V 0 1 2 3 new

  22. ストア・セット・メモリ依存予測器

  23. ストア・セット • あるロードのストア・セットとは: • そのロードが依存したことがあるストアの集合 • 計算の方法:recovery-based • 最初「依存していない」としておいて, • オーダ違反 (memory-order violation) を検出して,追加 • 利用の方法: • ロードは,そのストア・セット内のストアに依存すると予測

  24. 予測器の実装 • 原理的には: • ストア・セット内のすべてのストアが実行された後でロードを実行 • 実装上の制限: • ストア・セット内のストアは in-order で実行 • In-order チェイン: • ストア → ストア → … → ストア → ロード

  25. S S L 構造と動作 SSID Table Last Fetched Store Table SSID X S1 SSID X S2 S2 S1 X L SSID X PC of Fetched Instructions SSID : Store Set ID

  26. Recovery-Based • ストア・セットの計算の方法:recovery-based • 最初「依存していない」としておいて, • オーダ違反 (memory-order violation) を検出して,追加 • Violation の検出: • 比較器数 ≒(ウィンドウ・サイズ)×(発行幅) • 「教訓」: • 厳密にやるより,いい加減にやったほうがうまくいく(こともある)

  27. 比較器のアレイ old effective address L/S V 0 1 2 3 new

  28. 今日のまとめ

  29. メモリ・データ依存 • データ依存: • レジスタ • メモリ • メモリのデータ依存: • 動的 • アドレス計算しないと分からない:「曖昧」

  30. メモリ参照の曖昧性による偽の依存 • ストアのアドレスが決まるまで,後続のロード/ストアは実行できない • 保守的 (conservative) な方法: • ロード/ストアは in-order で • ロードは,特に早期に実行したい • 「計算のかたまりは,ロードではじまり,ストアで終わる」 • ストアは,そんなでもない • 真のメモリ・データ依存がクリティカルであるようなプログラムは, 最適化されてない?

  31. ディスアンビギュエーション • ディスアンビギュエーション(非曖昧化,曖昧性除去,解消) • 分離ロード/ストア • アドレス予測 • アドレス一致/不一致予測 • ストア・セット依存予測器

More Related