32
07. 値値値 値値 値値

07. 値予測

Embed Size (px)

DESCRIPTION

07. 値予測. 五島 正裕. 内容. キャッシュの復習 値予測. キャッシュの復習. キャッシュとは. キャッシュ: 本体の内容の一部を,より小容量ゆえに高速なメモリにコピー 参照の局所性 (locality of reference) を利用して,高速化を図る 一部をコピー ⇒ 連想メモリ (associative memory). 連想メモリ. 表 (table) , メモリ: key と value のペア,タプル ( tuple ) の集合 非連想表,メモリ ∀ key に対して,タプルがある 連想表,メモリ - PowerPoint PPT Presentation

Citation preview

Page 1: 07.  値予測

07. 値予測

五島 正裕

Page 2: 07.  値予測

内容

1. キャッシュの復習

2. 値予測

Page 3: 07.  値予測

キャッシュの復習

Page 4: 07.  値予測

キャッシュとは

キャッシュ: 本体の内容の一部を,より小容量ゆえに高速なメモリにコピー 参照の局所性 (locality of reference) を利用して,高速化を図

一部をコピー ⇒ 連想メモリ (associative memory)

Page 5: 07.  値予測

連想メモリ

表 (table) ,メモリ: key と value のペア,タプル (tuple) の集合

非連想表,メモリ ∀key に対して,タプルがある

連想表,メモリ ∀key に対して,タプルがあるとは限らない

ex.) 半分とか, 1/10 とか

Page 6: 07.  値予測

ハッシュ表

ハッシュ表 (hash table) ソフトウェアで連想表と言えば… ただし通常(一部ではなく)全体が入っている

Page 7: 07.  値予測

keykey

hashfunctionhash

function

index

ハッシュ表 (chained hash table)

keykey

valuevaluekeykey

valuevalue

int hash(int key) { return 7 & (key >> 0) ^ (key >> 3) ^ (key >> 6) ^ /* ... */ ;}

keykey

valuevalue

Page 8: 07.  値予測

hashfunctionhash

function

index

ハッシュ表 (配列)

key v

int hash(int key) { return 7 & key;}key

value key v valuekey v value key v valuekey v value key v valuekey v value key v valuekey v value key v valuekey v value key v valuekey v value key v valuekey v value key v value

way #0 way #1

Page 9: 07.  値予測

hashfunctionhash

function

index

ハッシュ表 (配列,最適化)

tag

int hash(int key) { return 7 & key;}key

v value tag v valuetag v value tag v valuetag v value tag v valuetag v value tag v valuetag v value tag v valuetag v value tag v valuetag v value tag v valuetag v value tag v value

Page 10: 07.  値予測

キャッシュの構成

address

value

valuetag valid

selector

Page 11: 07.  値予測

マッピング

direct map 2-way set-associative

address

: cache line

set#0

way#0

memorycache

full associative

0 1 2 f

01234567

89abcdef

0123

4567

89ab

cdef

way#1

set#1

set#2

set#3

Page 12: 07.  値予測

BBBB

1. 予測1. 予測

投機のフェーズ

1. 予測 (prediction)

2. 実行 (execution)

3. 確認 (verification, confirmation)

4. キャンセル,回復,再実行 (cancellation, recovery, re-execution)

cycle

AA

2. 実行2. 実行

3. 確認3. 確認

4. 再実行4. 再実行

Page 13: 07.  値予測

分岐予測

cycle

be r1 == r2, L0

add r5 = r4 + r3

r8 = r6 + r7add

r8 = r8 + 1add

IFIF

IFIF

IFIF

IFIF

IFIF

IFIF

OROR

OROR

r9 = r6 - r7sub

r8 = *(r9)ld

OROR

OROR

IFIF

IFIF

EXEX

EXEX

OROR

OROR

IFIF

IFIF

MEMMEM

MEMMEM

EXEX

EXEX

OROR

OROR

1. PC 予測2. フェッチ1. PC 予測2. フェッチ

3. 確認3. 確認

WBWB

WBWB

EXEX

EXEX

MEMMEM

MEMMEM

WBWB

WBWB

MEMMEM

MEMMEM

WBWB

WBWB

Page 14: 07.  値予測

IFIF

IFIF

OROR

OROR

IFIF

IFIF

分岐予測

cycle

be r1 == r2, L0

add r5 = r4 + r3

IFIF

IFIF

IFIF

IFIF

OROR

OROR

r8 = r6 + r7add

r8 = r8 + 1add

r9 = r6 - r7sub

r8 = *(r9)ld

EXEX

EXEX

OROR

OROR

IFIF

IFIF

MEMMEM

MEMMEM

IFIF

IFIF

WBWB

WBWB

OROR

OROR

IFIF

IFIF

3. 確認3. 確認

4. 再フェッチ4. 再フェッチ

EXEX

EXEX

OROR

OROR

EXEX

EXEX

MEMMEM

MEMMEM

WBWB

WBWB

MEMMEM

MEMMEM

r8 = *(r6)ld

r9 = r9 + 1add

r9 = r8 << 1sla

r8 = r9 - 1sub

L0:

1. PC 予測2. フェッチ1. PC 予測2. フェッチ

Page 15: 07.  値予測

IFIF

IFIF

OROR

OROR

IFIF

IFIF

分岐予測

cycle

be r1 == r2, L0

add r5 = r4 + r3

IFIF

IFIF

OROR

OROR EXEX

EXEX MEMMEM

MEMMEM

IFIF

IFIF

WBWB

WBWB

OROR

OROR

IFIF

IFIF

EXEX

EXEX

OROR

OROR

EXEX

EXEX

MEMMEM

MEMMEM

WBWB

WBWB

MEMMEM

MEMMEM

ミス ペナルティ ・ (= H, M = 0)

r8 = *(r6)ld

r9 = r9 + 1add

r9 = r8 << 1sla

r8 = r9 - 1sub

L0:

Page 16: 07.  値予測

値予測

Page 17: 07.  値予測

値予測

値予測 (value prediction) : 投機の一種 個々の命令の結果を予測

先行制約の緩和 分岐予測:分岐命令の結果を予測

制御依存による先行制約を緩和 値予測:すべての命令の結果を予測

データ依存(フロー依存)による先行制約の緩和

Page 18: 07.  値予測

値予測するには

値予測するには:

1. どう予測するか?

2. 予測するとどうなるか?

3. 予測ミスしたらどうするか?

Page 19: 07.  値予測

1. どう予測するか?

やっぱり,履歴 (history) 分岐履歴: PHT (pattern history table) 値 履 歴 : VHT (value history table)

予測手法: Last-Value Stride Context-Base Hybrid etc.

Page 20: 07.  値予測

キャッシュの構成

address

value

valuetag valid

selectorselector

Page 21: 07.  値予測

Last-Value + Stride 値予測器

キャッシュの value のフィールド: Last-Value Stride

予測値は, Last-Value + Stride 確信度カウンタ (confidence counter)

ヒット:インクリメント ミ ス :デクリメント or クリア 閾値以上(最大値)なら予測

Page 22: 07.  値予測

スーパスカラ プロセッサの基本構造・

22

Advanced Computer Architecture

発行Issue

ディスパッチDispatch

フェッチFetch

実行Exec

書戻WB

リネームRename

スケジュールSchedule

レジスタ読出Reg Read

レジスタ・ファイル

命令ウィンドウ

リネーム

ロジック

命令キャッシュ

演算器

フロントエンドFront-end

バックエンドBack-end

Page 23: 07.  値予測

予測する

PC (アドレス)で予測表を牽く 命令フェッチと同時に予測値が分かる

依存する命令: ずっと以前にソースの値が決まっていたかのように見える

Page 24: 07.  値予測

値予測

cycle

II OROR EXEX WBWB

II OROR EXEX WBWB

II OROR EXEX WBWB

II OROR EXEX WBWB

Page 25: 07.  値予測

II OROR EXEX

II OROR EXEX VRFYVRFY

WBWB

2. 予測するとどうなるか?

cycle

II OROR EXEX

II OROR EXEX VRFYVRFY

II OROR EXEX

II OROR EXEX VRFYVRFY

WBWB

VRFYVRFY

予測できたかどうか(ヒットしたかどうかではなく)

Page 26: 07.  値予測

BBBB

1. 予測1. 予測

投機のフェーズ

1. 予測 (prediction)

2. 実行 (execution)

3. 確認 (verification, confirmation)

4. キャンセル,回復,再実行 (cancellation, recovery, re-execution)

cycle

AA

2. 実行2. 実行

3. 確認3. 確認

4. 再実行4. 再実行

Page 27: 07.  値予測

2. 予測するとどうなるか?

ソース(依存元の命令の結果)が予測できた命令: ディスパッチ後,直ちに実行可能 あたかも,フロー依存がなくなったかのうよう

実行命令数は減らない! ミスの分だけ増える

残る制約は,資源制約のみ

Page 28: 07.  値予測

3. 予測ミスしたらどうするか?

依存する命令をやり直す ただし,依存する命令は:

分岐予測:下流の命令すべて フラッシュ

値 予 測 :フロー依存関係にある命令 フラッシュ(下流の命令すべて)

– 予測ヒットの命令も,予測しなかった命令もやり直し– 無駄が多い!

選択的無効化– ちょっと難しい

Page 29: 07.  値予測

値予測の効果

高い予測ヒット率 予測ヒット率: 20 ~ 80% 半定数 (semi-constant ) が多い?

ex) コマンド・ライン引数

低い性能向上 IPC の向上:-数 % ~十数 % HW 量には見合いにくい

理由: 予測できる命令はクリティカル・パス上にない? 半定数なら,そう

Page 30: 07.  値予測

今日のまとめ

Page 31: 07.  値予測

値予測 (value prediction)

値予測: 投機の一種 個々の命令の結果を予測

先行制約の緩和 分岐予測:分岐命令の結果を予測

制御依存による先行制約を緩和 値 予 測 :すべての命令の結果を予測

データ依存(フロー依存)による先行制約の緩和

Page 32: 07.  値予測

今後の予定

メモリ・ディスアンビギュエーション デバイスの微細化への対応

演算器クラスタリング 0 次キャッシュ レイテンシ予測

マルチスレッド・プロセッサ SIMD 命令