return 7 & key
Download
Report
Transcript return 7 & key
07. 値予測
五島 正裕
内容
1. キャッシュの復習
2. 値予測
キャッシュの復習
キャッシュとは
キャッシュ:
本体の内容の一部を,より小容量ゆえに高速なメモリにコピー
参照の局所性 (locality of reference) を利用して,高速化を図る
一部をコピー ⇒ 連想メモリ (associative memory)
連想メモリ
表 (table),メモリ:
key と value のペア,タプル (tuple) の集合
非連想表,メモリ
∀key
に対して,タプルがある
連想表,メモリ
∀key
に対して,タプルがあるとは限らない
ex.) 半分とか,1/10 とか
ハッシュ表
ハッシュ表 (hash table)
ソフトウェアで連想表と言えば…
ただし通常(一部ではなく)全体が入っている
ハッシュ表 (chained hash table)
key
hash
function
index
int hash(int key) {
return 7 &
(key >> 0) ^
(key >> 3) ^
(key >> 6) ^
/* ... */ ;
}
key
value
key
value
key
value
ハッシュ表 (配列)
int hash(int key) {
return 7 & key;
}
key
hash
function
index
key
key
key
key
key
key
key
key
v
v
v
v
v
v
v
v
value
value
value
value
value
value
value
value
way #0
key
key
key
key
key
key
key
key
v
v
v
v
v
v
v
v
value
value
value
value
value
value
value
value
way #1
ハッシュ表 (配列,最適化)
int hash(int key) {
return 7 & key;
}
key
hash
function
index
tag
tag
tag
tag
tag
tag
tag
tag
v
v
v
v
v
v
v
v
value
value
value
value
value
value
value
value
tag
tag
tag
tag
tag
tag
tag
tag
v
v
v
v
v
v
v
v
value
value
value
value
value
value
value
value
キャッシュの構成
address
tag
value
valid
selector
value
マッピング
0
1
2
3
4
5
6
7
address
direct map
: cache line
cache
8
9
a
b
c
d
e
f
memory
0
1
2
3
way#0
4
5
6
7
8
9
a
b
c
d
e
f
set#0
set#1
set#2
set#3
way#1
2-way set-associative
full associative
0
1
2
f
投機のフェーズ
1. 予測 (prediction)
2. 実行 (execution)
3. 確認 (verification, confirmation)
4. キャンセル,回復,再実行 (cancellation, recovery, re-execution)
cycle
A
1. 予測
3. 確認
2. 実行
B 4. 再実行
分岐予測
cycle
3. 確認
add r5 = r4 + r3
IF
OR
EX
MEM WB
be
IF
OR
EX
MEM WB
r1 == r2, L0
PC 予測
add r8 = r8 1.
+ 1
2. フェッチ
sub r9 = r6 - r7
ld
r8 = *(r9)
IF
OR
EX
MEM WB
IF
OR
EX
MEM WB
IF
OR
EX
MEM WB
IF
OR
EX
MEM WB
分岐予測
cycle
3. 確認
add r5 = r4 + r3
IF
OR
EX
MEM WB
be
IF
OR
EX
MEM WB
L0: ld
r1 == r2, L0
r8 = *(r6)
PC
add r9
r8 = r8 1.
+ 1
sla
<<
1 予測
2. フェッチ
add
sub r9 = r9
r6 +
- 1
r7
ld
r8 = *(r9)
IF
OR
IF
OR
EX
MEM WB
IF
OR
IF
OR
EX
MEM WB
4. 再フェッチ
IF
IF
OR
EX
M
IF
IF
OR
EX
M
分岐予測
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
add r9 = r9 + 1
IF
OR
IF
OR
EX
MEM WB
IF
OR
IF
OR
EX
MEM WB
IF
IF
OR
EX
M
IF
IF
OR
EX
M
ミス・ペナルティ (= H, M = 0)
値予測
値予測
値予測 (value prediction):
投機の一種
個々の命令の結果を予測
先行制約の緩和
分岐予測:分岐命令の結果を予測
制御依存による先行制約を緩和
値予測:すべての命令の結果を予測
データ依存(フロー依存)による先行制約の緩和
値予測するには
値予測するには:
1.
どう予測するか?
2.
予測するとどうなるか?
3.
予測ミスしたらどうするか?
1. どう予測するか?
やっぱり,履歴 (history)
分岐履歴:PHT (pattern history table)
値 履 歴 :VHT (value history table)
予測手法:
Last-Value
Stride
Context-Base
Hybrid
etc.
キャッシュの構成
address
tag
value
valid
selector
value
Last-Value + Stride 値予測器
キャッシュの value のフィールド:
Last-Value
Stride
予測値は,Last-Value + Stride
確信度カウンタ (confidence counter)
ヒット:インクリメント
ミ ス :デクリメント or クリア
閾値以上(最大値)なら予測
Advanced Computer Architecture
22
スーパスカラ・プロセッサの基本構造
レジスタ・ファイル
命令
キャッ
シュ
リネーム
ロジック
命令
ウィンドウ
フェッチ
Fetch
リネーム
Rename
ディスパッチ スケジュール
Dispatch
Schedule
フロントエンド
Front-end
演算器
発行
Issue
レジスタ読出
Reg Read
実行
Exec
バックエンド
Back-end
書戻
WB
予測する
PC (アドレス)で予測表を牽く
命令フェッチと同時に予測値が分かる
依存する命令:
ずっと以前にソースの値が決まっていたかのように見える
値予測
cycle
I OR
EX
I OR
WB
EX
I OR
WB
EX
I OR
WB
EX
WB
2. 予測するとどうなるか?
予測できたかどうか
(ヒットしたかどうかではなく)
I
OR
I OR
cycle
EX
VRFY
I OR
EX
VRFY
EX
WB
I OR
EX
I OR
EX
VRFY
I OR
WB
EX
VRFY
投機のフェーズ
1. 予測 (prediction)
2. 実行 (execution)
3. 確認 (verification, confirmation)
4. キャンセル,回復,再実行 (cancellation, recovery, re-execution)
cycle
A
1. 予測
3. 確認
2. 実行
B 4. 再実行
2. 予測するとどうなるか?
ソース(依存元の命令の結果)が予測できた命令:
ディスパッチ後,直ちに実行可能
あたかも,フロー依存がなくなったかのうよう
実行命令数は減らない!
ミスの分だけ増える
残る制約は,資源制約のみ
3. 予測ミスしたらどうするか?
依存する命令をやり直す
ただし,依存する命令は:
分岐予測:下流の命令すべて
フラッシュ
値 予 測 :フロー依存関係にある命令
フラッシュ(下流の命令すべて)
– 予測ヒットの命令も,予測しなかった命令もやり直し
– 無駄が多い!
選択的無効化
– ちょっと難しい
値予測の効果
高い予測ヒット率
予測ヒット率:20~80%
半定数 (semi-constant) が多い?
ex) コマンド・ライン引数
低い性能向上
IPC の向上:-数%~十数%
HW 量には見合いにくい
理由:
予測できる命令はクリティカル・パス上にない?
半定数なら,そう
今日のまとめ
値予測 (value prediction)
値予測:
投機の一種
個々の命令の結果を予測
先行制約の緩和
分岐予測:分岐命令の結果を予測
制御依存による先行制約を緩和
値 予 測 :すべての命令の結果を予測
データ依存(フロー依存)による先行制約の緩和
今後の予定
メモリ・ディスアンビギュエーション
デバイスの微細化への対応
演算器クラスタリング
0次キャッシュ
レイテンシ予測
マルチスレッド・プロセッサ
SIMD 命令