スライド 1

メモリ投機を支援する
CMPキャッシュコヒーレンスプロトコルの検討
東京大学大学院 情報理工学系研究科 坂井修一研究室
豊島 隆志 田代 大輔 バルリ ニコ デムス 坂井修一
発表の流れ
 背景
 スレッド投機実行モデル
 キャッシュコヒーレンスプロトコル



メモリ投機
コンシステンシ
プロトコル
 評価・結果
 まとめ
背景
 Instruction Level Parallelism -ILP- の限界
 Thread Level Parallelism -TLP- の探求

資源は潤沢になりつつある


SMP, CMP, SMT, etc…
過去の資産から少ない労力でTLPを抽出したい

ソースには手を加えない
スレッド投機実行
 コンパイラ、ハードウェアによる実現

バイナリには手を加えない
 ランタイム環境、ハードウェアによる実現
発表の流れ
 背景
 スレッド投機実行モデル
 キャッシュコヒーレンスプロトコル



メモリ投機
コンシステンシ
プロトコル
 評価・結果
 まとめ
スレッド投機実行~構成~
Sequential
program
L1 ICache
Thread
Predictor
Compiler
binary
execution
Decode/
Rename
Rename
Map
L1 ICache
Decode/
Rename
Rename
Map
Instruction Queue
Instruction Queue
Func. Func. Func. Func.
Unit Unit Unit Unit
Func. Func. Func. Func.
Unit Unit Unit Unit
Register File
Register File
Reg. Comm. IF
Thread
Validation
Unit
binary
L1 DCache
with Spec. Support
L1 DCache
with Spec. Support
L2
Cache
スレッド投機実行~構成~
Sequential
program
L1 ICache
Thread
Predictor
Compiler
binary
execution
Decode/
Rename
Rename
Map
L1 ICache
Decode/
Rename
Rename
Map
Instruction Queue
Instruction Queue
Func. Func. Func. Func.
Unit Unit Unit Unit
Func. Func. Func. Func.
Unit Unit Unit Unit
Register File
Register File
Reg. Comm. IF
Thread
Validation
Unit
binary
L1 DCache
with Spec. Support
L1 DCache
with Spec. Support
L2
Cache
スレッド投機実行~スレッド分割~
 コンパイラにより静的に分割

データ依存・制御依存


レジスタデータ依存



先行→後続方向のみ許す
静的に解析
レジスタ通信命令により解決
メモリデータ依存

投機
キャッシュ
コヒーレンスプロトコル
スレッド投機実行~構成~
Sequential
program
L1 ICache
Thread
Predictor
Compiler
binary
execution
Decode/
Rename
Rename
Map
L1 ICache
Decode/
Rename
Rename
Map
Instruction Queue
Instruction Queue
Func. Func. Func. Func.
Unit Unit Unit Unit
Func. Func. Func. Func.
Unit Unit Unit Unit
Register File
Register File
Reg. Comm. IF
Thread
Validation
Unit
binary
L1 DCache
with Spec. Support
L1 DCache
with Spec. Support
L2
Cache
スレッド投機実行~スレッド割り当て~
 スレッド予測器による動的割り当て
 制御依存は投機により処理
 ラウンドロビン方式
 スレッドの破棄
 制御依存予測の失敗
 スレッドの再実行
 メモリ投機の失敗
スレッド投機実行~構成~
Sequential
program
L1 ICache
Thread
Predictor
Compiler
binary
execution
Decode/
Rename
Rename
Map
L1 ICache
Decode/
Rename
Rename
Map
Instruction Queue
Instruction Queue
Func. Func. Func. Func.
Unit Unit Unit Unit
Func. Func. Func. Func.
Unit Unit Unit Unit
Register File
Register File
Reg. Comm. IF
Thread
Validation
Unit
binary
L1 DCache
with Spec. Support
L1 DCache
with Spec. Support
L2
Cache
スレッド投機実行~レジスタ同期~
 プロセッサコア
 レジスタ同期命令
 同期用ネットワーク
スレッド投機実行~構成~
Sequential
program
L1 ICache
Thread
Predictor
Compiler
binary
execution
Decode/
Rename
Rename
Map
L1 ICache
Decode/
Rename
Rename
Map
Instruction Queue
Instruction Queue
Func. Func. Func. Func.
Unit Unit Unit Unit
Func. Func. Func. Func.
Unit Unit Unit Unit
Register File
Register File
Reg. Comm. IF
Thread
Validation
Unit
binary
L1 DCache
with Spec. Support
L1 DCache
with Spec. Support
L2
Cache
スレッド投機実行~メモリ投機~
 一次データキャッシュ
 各プロセッサ毎に個別
 メモリ投機の支援
 ロード・ストア
 投機ロード・投機ストア
 巻き戻し

コンシステンシの確保

バージョン管理
発表の流れ
 背景
 スレッド投機実行モデル
 キャッシュコヒーレンスプロトコル



メモリ投機
コンシステンシ
プロトコル
 評価・結果
 まとめ
メモリ投機支援
 ロード・ストア
 コンシステンシがとれるよう注意する
 投機ロード
 非投機状態に移行するまで投機ロードを記録
 投機ロード後にストアされたら投機ミスを検出
 投機ストア
 投機ストアは2次キャッシュ以降に伝えない

非投機状態になるまでフラッシュできない
 巻き戻し
 キャッシュを無効化するだけで良い
コンシステンシの確保
 スレッドの境界をまたいで・・・

競合するロードがストアを追い越さない


投機ロードミスの検出でフォロー
競合するストアがロードを追い越さない

ストアの伝送(無効化・更新)に工夫が必要
 本来の時系列を遡って伝送しない

競合するストア同士で追い越しが起きない

ストアの伝送(無効化・更新)に工夫が必要
 ストアの発行元を記録し、正しくバージョン管理する
ストアの伝送先
競合するストアがロードを追い越さない
本
来
の
ス
レ
ッ
ド
実
行
順
序
load from X
store to X
store to X
load from X
投
機
実
行
store to X
load from X
store to X
load from X
ストアの遅延伝送
本
来
の
ス
レ
ッ
ド
実
行
順
序
store to X
直前のスレッド完了時に
遅延伝送(無効化・更新)
する必要がある
store to X
load from X
load from X
投
機
実
行
load from X
store to X
store to X
load from X
無効なストア伝送
競合するストア同士で追い越しが起きない
本
来
の
ス
レ
ッ
ド
実
行
順
序
ストア元のスレッドを
記憶・比較
することで対処
load from X
store to X
store to X
load from X
投
機
実
行
store to X
load from X
store to X
load from X
プロトコル
 無効化方式(Invalidate-based)



投機ロードはワード単位で記録
遅延無効化(ワード単位/ライン単位)
ブロードキャスト(有/無)
 更新方式(Update-based)



投機ロードはワード単位で記録
遅延無効化(ワード単位/ライン単位)
ブロードキャスト(有/無)
ブロードキャスト
 あるプロセッサがアクセスしたメモリは、近い将来に別の
プロセッサもアクセスする可能性が高い、という性質を利
用した一種のプリフェッチ
 リード・ブロードキャスト

ある一次キャッシュがリードミスした際、同じラインを無効状
態として保持しているキャッシュは同時に更新する
 ライト・ブロードキャスト

ある一次キャッシュがライトミスした際、同じラインを無効状
態として保持しているキャッシュは同時に更新する(更新方
式でも無効状態が存在し得るため)
更新 vs ブロードキャスト
 どちらも、無効化された値をアクセス前に有効に戻す事
でキャッシュミスを減らす手法
 スレッド投機実行では、ライト以外の要因でもキャッシュ
が無効になり得、更新のみではカバーできない


スレッドの破棄
遅延無効化
 更新とブロードキャストでは、有効に戻すタイミングが異
なる


早過ぎると・・・有効に戻す事のできる対象範囲が減少
遅すぎると・・・投機ミス、キャッシュミスを招く
キャッシュディレクトリ
無効化方式
Line
Tag
Conditions
State
2bit
…
Word 7
Condition
Obsolete
Speculative
1bit
1bit
Data
64bit
Loaded
Stored
1bit
1bit
Word 0
Conditions
…
Data
…
64bit
Loaded
Stored
1bit
1bit
更新方式
Line
State
Tag
Conditions
Invalid
Shared
Modified
Obsolete
1bit
1bit
1bit
1bit
投機ミス判定のための追加情報
…
Word 7
Data
64bit
Conditions
Store
Loaded
4bit
1bit
Word 0
…
Data
…
64bit
Conditions
Store
Loaded
4bit
1bit
コンシステンシ確保のための追加情報
状態遷移図
無効化方式
更新方式
Input/Output
Input/Output
PrRd/BusRd
PrRd/BusRd
PrRd/BusRd
PrSquash/-
Invalid
BusInv/PrSquash/- PrRd/BusRd
PrCommit/-
PrCommit/
BusCommit
PrCommit/BusCommit
PrWr/-
Modified
Clean
PrCommit/BusCommit,BusFlush
Clean
PrSquash/PrCommit/
BusCommit,BusFlush
PrCommit/
BusCommit
Shared
BusRd/-
BusRd/Forward
BusRd/Forward
BusUpd/PrSquash/PrCommit/BusCommit
PrWr/-
BusInv/PrSquash/PrCommit/BusFlush
Invalid
BusUpd/PrSquash/PrCommit/BusCommit,BusFlush
PrCommit/BusFlush
PrRd/BusRd
PrWr/BusRd,BusInv
Modified
PrWr/BusRd
PrWr/BusRd,BusInv
Shared
Clean
PrWr/BusUpd
BusRd/Forward
BusRd/Forward
PrCommit/BusCommit
PrWr/BusUpd
PrCommit/
BusFlush,BusCommit
Shared
Modified
PrRd/BusRd,BusUpd
発表の流れ
 背景
 スレッド投機実行モデル
 キャッシュコヒーレンスプロトコル



メモリ投機
コンシステンシ
プロトコル
 評価・結果
 まとめ
評価
 評価環境
 サイクルベース・シミュレータ

スーパースカラプロセッサ
 アウトオブオーダ実行
 分岐予測

スレッド投機実行
 スレッド予測器
 レジスタ同期
 メモリ投機

SPEC CINT95

専用の最適化コンパイラにより生成
評価
 パラメータ
パラメータ
値
プロセッサユニット数
4ユニット
パイプライン段数
7段
フェッチ・発行・リタイヤ幅
4命令
物理レジスタ数
128レジスタ
機能ユニット
ALU×2
ロード・ストア×2
リオーダバッファ
64エントリ
発行キュー
20エントリ
ロード・ストアキュー
20エントリ
BTB
1024エントリ
Bimodalスレッド予測器
4096エントリ
1次命令キャッシュ
16KB 64Bライン
2-way セットアソシアティブ
アクセスレイテンシ 1サイクル
1次データキャッシュ
64KB 64Bライン
2-way セットアソシアティブ
アクセスレイテンシ 2サイクル
2次キャッシュ
理想化(常にヒット)
アクセスレイテンシ 16サイクル
無効化レイテンシ 3サイクル
更新レイテンシ 5サイクル
0
099.go
124.m88ksim
126.gcc
129.compress
130.li
132.ijpeg
134.perl
147.vortex
AVG
inv
inv_robr
upd
upd_rwbr
inv
inv_robr
upd
upd_rwbr
70
inv
inv_robr
upd
upd_rwbr
inv
inv_robr
upd
upd_rwbr
inv
inv_robr
upd
upd_rwbr
inv
inv_robr
upd
upd_rwbr
inv
inv_robr
upd
upd_rwbr
inv
inv_robr
upd
upd_rwbr
inv
inv_robr
upd
upd_rwbr
キャッシュミス率 [%]
結果
ブロードキャストの効果
80
Hit by broadcast rate
Miss rate
60
50
40
30
20
10
0
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
サイクルあたりの投機ミス数
結果
投機ミス
0.018
0.016
0.014
0.012
0.01
0.008
0.006
0.004
0.002
099.go
124.m88ksim
126.gcc
129.compress
130.li
132.ijpeg
134.perl
147.vortex
AVG
0
099.go
124.m88ksim
126.gcc
129.compress
130.li
132.ijpeg
134.perl
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
upd_rwbr
upd
inv_robr
inv
upd_rwbr
upd
相対実行サイクル
結果
相対実行サイクル
2.5
2
0.05差
1.5
1
0.5
147.vortex
AVG
発表の流れ
 背景
 スレッド投機実行モデル
 キャッシュコヒーレンスプロトコル



メモリ投機
コンシステンシ
プロトコル
 評価・結果
 まとめ
まとめ
 メモリ投機の可能な各種キャッシュコヒーレンスプロトコ
ルを設計、シミュレータ上に実装し、性能を比較評価した
 スレッド投機実行時のキャッシュミスが、更新方式、ブ
ロードキャスト方式によって、どの程度軽減されているか
調べた
 更新方式とブロードキャストの組み合わせが性能はもっ
とも高い


どちらか1つを採用するなら性能は僅差で更新方式が勝る
設計コストやバスのトラフィックを考えるとブロードキャスト
を選択するメリットも大きい