キャッシュ・ミス頻発命令を考慮したメモリ・ システ

キャッシュ・ミス頻発命令を考慮
したメモリ・システムの高性能化
三輪英樹
九州大学 大学院システム情報科学府 情報理学専攻
堂後靖博
福岡大学 大学院工学研究科 電子情報工学専攻
Victor Mauro Goulart Ferreira
九州大学 大学院システム情報科学府 情報理学専攻
井上弘士,村上和彰
九州大学 大学院システム情報科学研究院 情報理学部門
2004/12/2
デザインガイア ARC 研究会
1
発表手順
• 研究背景
• ロード対象データの再計算による
実行サイクル削減手法
• 本手法により性能向上を得るための条件
• 予備評価実験および考察
• まとめ
2004/12/2
デザインガイア ARC 研究会
2
研究背景
• キャッシュ・ミス頻発ロード命令
– Delinquent ロード命令「DL 命令」
• DL 命令に着目したキャッシュ・プリフェッチ
– ロード対象アドレスを,別スレッドにて計算.
– 既存研究: DDMT (Sohi@Wisconsin),
Pre-Computation (J.P.Shen@Intel)
– 主記憶へ先見的にアクセスし,レイテンシを隠
蔽.
• DL 命令に着目したレイテンシ削減手法
– 本発表にて提案.
2004/12/2
デザインガイア ARC 研究会
3
提案手法
• データを主記憶からロードするのではなく
再計算 (Re-Computation; RC).
– DL 命令を再計算 (RC) コードで置換し,
実行サイクル数を削減する.
2004/12/2
デザインガイア ARC 研究会
4
DL 命令対象データの再計算 (RC) による
実行サイクル数削減手法
プログラムコード
本手法適用コード
(静的/動的に生成)
c = a + b;
z = x + c;
2004/12/2
値cはキャッシュ
メモリになく,
主記憶から読み
込まれると仮定
c = a + b;
(Re-Computation)
...
...
値cは主記憶に
保存される
RC コード
値cを再計算!

ロード時の
主記憶への
アクセスが
削減できる!
c = a + b;
z = x + c;
値 a,b は
キャッシュメモリに
存在すると仮定
5
RC コードの例
プログラムコード アセンブリコード
c = a + b;
Load a
Load b
Add c, a, b
Store c
値cを
再利用
2004/12/2
Load c
Load x
Add z, x, c
Store z
RC コード
Load a
Load b
Add c, a,b
‘Load c’
をRCコード
で置換!
デザインガイア ARC 研究会
Load a
Load b
Add c, a, b
Store c
...
...
...
z = x + c;
本手法適用コード
[RCコード]
Load x
Add z, x, c
Store z
6
RC コードの生成方法
ソースコード
…
00409588 l.d
00409590 l.d
004095a0 neg.d
004095a0 mul.d
004095a8 l.d
004095b0 mul.d
CDFG
$f2
$f0
$f2,$f2
$f2,$f2,$f0
$f0
$f2,$f2,$f0
$f2,10b34594
00402280 l.d
…
10b34594
CDFG
生成
同一
アドレス
Load
Load
Store
DL命令
DL 命令
2004/12/2
Load
…
004095e0 s.d
…
Load
デザインガイア ARC 研究会
7
本手法により
性能向上を得るためには?
1. DL 命令によるキャッシュ・ミスの絶対回数が
多いこと.
2. 多数の DL 命令が RC コードで置換可能で
あること.
3. 少なくとも RC コードの実行サイクル数が,
主記憶へのアクセスサイクル数よりも小さく
なること.
– RC コードのクリティカルパスが短いこと.
– RC コードに含まれるロード命令は,すべて
キャッシュ・ヒットすること.
2004/12/2
デザインガイア ARC 研究会
8
45.3%
60%
24.3%
7.9%
2.6%
bzip2
vortex
parser
gcc
mcf
4.3%
gzip
vpr_p
vpr_r
-1.5%
5.2%
13.0%
1.8%
mesa
art
ammp
1.7%
20%
9
デザインガイア ARC 研究会
2004/12/2
ベンチマーク
26.2%
-20%
equake
0%
23.7%
40%
本手法適用時
実行サイクル数削減率 [%]
本手法適用時の
実行サイクル数削減率
予備評価実験
• 予備評価実験の主旨
– ベンチマークプログラムを利用し,
本手法を定量的に評価する.
– 本手法の実現方法に関係なく,
本手法による最大性能向上を評価する.
2004/12/2
デザインガイア ARC 研究会
10
評価環境
• シミュレータ: SimpleScalar 3.0d
• ベンチマーク: SPEC CPU 2000
– 入力データ: Reference
• ベンチマークのコマンドラインは,DL 命令による
キャッシュ・ミス回数が多い設定を利用.
– バイナリ
• MIRV Compiler (ミシガン大学) を利用してコンパイ
ル.
• mesa, art, equake, ammp
• gzip, vpr, gcc, mcf, parser, vortex, bzip2
– 20億命令実行後の2億命令が評価対象
2004/12/2
デザインガイア ARC 研究会
11
主なシミュレータの設定
• 命令発行: アウト・オブ・オーダ
• キャッシュ・メモリ容量
– L1D: 32KB (64B/エントリ, 2 ウェイ)
– L1I: 32KB (64B/エントリ, 1 ウェイ)
– L2: 2MB (64B/エントリ, 4 ウェイ)
• アクセスレイテンシ
– L1: 1 サイクル
– L2: 16 サイクル
– 主記憶: 250 サイクル
2004/12/2
デザインガイア ARC 研究会
12
本手法により
性能向上を得るためには?
1. DL 命令によるキャッシュ・ミスの絶対回数
が多いこと.
2. 多数の DL 命令が RC コードで置換可能で
あること.
3. 少なくとも RC コードの実行サイクル数が,
主記憶へのアクセスサイクル数よりも小さく
なること.
2004/12/2
デザインガイア ARC 研究会
13
全DL命令のキャッシュ・ヒット時
100%
80%
60%
40%
20%
bzip2
vortex
parser
mcf
gcc
vpr_r
vpr_p
gzip
ammp
equake
art
2004/12/2
0%
mesa
実行サイクル数削減率 [%]
DL 命令が全てキャッシュ・ヒットした
場合の実行サイクル数削減率
ベンチマーク
デザインガイア ARC 研究会
14
本手法により
性能向上を得るためには?
1. DL 命令によるキャッシュ・ミスの絶対回数
が多いこと.
2. 多数の DL 命令が RC コードで置換可能
であること.
3. 少なくとも RC コードの実行サイクル数が,
主記憶へのアクセスサイクル数よりも小さく
なること.
2004/12/2
デザインガイア ARC 研究会
15
RCコードで置換できたDL命令の割合
RCコードで置換できたDL命令の割合
RCコードで置換できた
DL命令の割合 [%]
100%
80%
60%
40%
20%
0%
bzip2
vortex
parser
デザインガイア ARC 研究会
mcf
gcc
vpr_r
vpr_p
gzip
ammp
equake
art
mesa
2004/12/2
ベンチマーク
16
本手法により
性能向上を得るためには?
1. DL 命令によるキャッシュ・ミスの絶対回数
が多いこと.
2. 多数の DL 命令が RC コードで置換可能で
あること.
3. 少なくとも RC コードの実行サイクル数が,
主記憶へのアクセスサイクル数よりも小さく
なること.
2004/12/2
デザインガイア ARC 研究会
17
RCコード平均実行サイクル数
RCコード平均実行サイクル数
[クロックサイクル]
200
RCコード平均実行サイクル数
150
100
0
bzip2
vortex
デザインガイア ARC 研究会
parser
ベンチマーク
mcf
gcc
vpr_r
vpr_p
gzip
ammp
equake
art
mesa
2004/12/2
50
18
80%
2.6%
7.9%
24.3%
4.3%
-1.5%
-20%
5.2%
13.0%
26.2%
1.8%
0%
bzip2
vortex
parser
mcf
gcc
vpr_r
vpr_p
gzip
ammp
ベンチマーク
equake
art
mesa
19
デザインガイア ARC 研究会
2004/12/2
1.7%
20%
23.7%
40%
本手法適用時
全DL命令のキャッシュ・ヒット時
100%
45.3%
60%
実行サイクル数削減率 [%]
実行サイクル数削減率
考察
• 効果があまり出ないベンチマーク
– DL 命令によるキャッシュ・ミスの絶対回数が少な
いベンチマーク: mesa,vpr_p,gcc,vortex
– RC コード置換可能 DL 命令数が少ないベンチ
マーク: art, vpr_r
– RC コードサイズが比較的大きいベンチマーク:
ammp
• 効果が出るベンチマーク
– 上記のどれにも該当しない: mcf
2004/12/2
デザインガイア ARC 研究会
20
まとめ (1/2)
• メモリ・ウォール問題への対策として,再計算
に基づくメモリ・システム高性能化手法を提案
した.
• 予備評価結果より,実行サイクル数を削減す
ることができる可能性があることを示した.
2004/12/2
デザインガイア ARC 研究会
21
まとめ (2/2)
• 以下の点を中心に研究を進める必要がある.
– RC コード生成方法の確立.
– RC コード内のロード命令のキャッシュ・ヒット
状況の調査.
– RC の適用によるキャッシュ・ヒット状況の変化の
調査.
2004/12/2
デザインガイア ARC 研究会
22
終了
ご静聴ありがとうございました
2004/12/2
デザインガイア ARC 研究会
23
評価における仮定
• DL 命令は,L2 キャッシュ・ミスを頻発させる 上位
16 個 (命令アドレス) のロード命令とする.
• RC コード生成時に必要なコントールフローはトレー
スデータから 1 パスを抽出する.
• RC コード中のロード命令は,全て L1 ヒット.
• RC コードを生成できた場合でも,命令数が主記憶
へのアクセスサイクル数より多ければ,RC コードは
生成できなかったとする.
• キャッシュのヒット状況の変化は考慮しない.
2004/12/2
デザインガイア ARC 研究会
24
本評価における RC コード
実行サイクル数の評価方法
全 RC コード
1. RCコードをグループに分類
グループA
代表RCコードA
実行サイクル数A
グループB
代表RCコードB
実行サイクル数B
…
…
…
2. 各グループごとに
代表コードを生成
2004/12/2
3. 実行サイクル数を求め,
各グループの代表値とする
デザインガイア ARC 研究会
25
本評価におけるRCコードの生成方法
• RC コードを生成するためには,コントロール
フローおよびデータフローが必要.
• コントロールフロー
– トレースデータを利用し 1 つのパスのみを抽出.
• データフロー
– アセンブリコードにおいてレジスタの依存関係を
追跡することで抽出.
2004/12/2
デザインガイア ARC 研究会
26
top8
100%
top16
top32
top64
80%
60%
40%
20%
0%
bzip2
vortex
parser
mcf
gcc
vpr
gzip
equake
art
mesa
Percentages of matched
DL instructions [%]
異なる入力を使用した場合のDL命令
の一致状況 (smallinput v.s. train)
Benchmark programs
2004/12/2
デザインガイア ARC 研究会
27
top8
100%
top16
top32
top64
80%
60%
40%
20%
0%
bzip2
vortex
parser
mcf
gcc
vpr
gzip
equake
art
mesa
Percentages of matched
DL instructions [%]
異なる入力を使用した場合のDL命令
の一致状況 (smallinput v.s. ref)
Benchmark programs
2004/12/2
デザインガイア ARC 研究会
28
実行サイクル数削減率
• 実行サイクル数削減率
(Corg - Cccc ) / Corg ×100[%]
– Cccc : 本手法適用後実行サイクル数
– Corg : 本手法適用前実行サイクル数
2004/12/2
デザインガイア ARC 研究会
29
本手法適用後実行サイクル数
• Cccc = Cideal + Crc + Cnorc
– Cccc : 本手法適用後実行サイクル数
– Cideal : DL 命令による L2 ミス・ぺナルティを 0 と
した場合
– Crc : RC コードの実行サイクル数
– Cnorc : RC コードで置換できなかった DL 命令の
実行サイクル数
2004/12/2
デザインガイア ARC 研究会
30
RC コードの総実行サイクル数
• Crc = CPI ·∑idldpc∑krccg Irccg(i,k) · Nrccg(i,k)
– CPI : Clock cycles per instruction
– Irccg(i,k) : ある DL 命令のインスタンス i に対する
RC コードのうち,ストア命令(のアドレス) k に対
応する RC コード命令数
– Nrccg(i,k) : ある DL 命令のインスタンス i のうち,
RC コードを生成することができた回数
2004/12/2
デザインガイア ARC 研究会
31
DL 命令の総実行サイクル数
• Cnorc = (Corg - Cideal ) / Ndl2miss · Nnorc
– Corg : 本手法適用前の実行サイクル数
– Ndl2miss : DL 命令による DL2 ミス回数の総数
– Nnorc : RC コードが生成できない (サイズオーバ
を含む) 判断された DL 命令数
2004/12/2
デザインガイア ARC 研究会
32
シミュレータの設定 (1/2)
• 命令発行: アウトオーダ • メモリ
– L1D: 32KB (64B/e,2w)
• 分岐予測: gshare, 2K
– L1I: 32KB (64B/e,1w)
• 命令デコード幅,命令
– L2: 2MB (64B/e, 4w)
発行幅:8命令/サイクル
• ヒットレイテンシ
• IFQ: 8エントリ
– L1: 1 サイクル
• LSQ: 32エントリ
– L2: 16 サイクル
• RUU: 64エントリ
– 主記憶: 250 サイクル
• メモリバンド幅: 8B
• ITLB,DTLB:1Mエントリ
• メモリポート: 2
2004/12/2
デザインガイア ARC 研究会
33
シミュレータの設定 (2/2)
• 整数演算器
• 浮動小数点除算器
(装置数,実行レイテンシ,
発行レイテンシ)
– ALU: 4, 1, 1
– 乗算器: 1, 3, 1
– 除算器: 1, 20, 19
2004/12/2
(装置数,実行レイテンシ,
発行レイテンシ)
– ALU: 4, 2, 1
– 乗算器: 1, 4, 1
– 除算器: 1, 12, 12
– 開平演算器: 1,24, 24
デザインガイア ARC 研究会
34
CCC の実装方法の分類
RCコード実行場所
実行前
RCコード
生成方法
実行中
2004/12/2
同一スレッド
別スレッド
コンパイル時
CCC
静的
マルチスレッド
CCC
動的CCC
動的
マルチスレッド
CCC
デザインガイア ARC 研究会
35
研究背景 (1/3)
• マイクロプロセッサおよび主記憶 (DRAM) の
動作周波数は毎年向上.
• しかし,年次動作周波数向上率はマイクロ
プロセッサのほうが高い.
– マイクロプロセッサ側から見れば,主記憶は
毎年遅くなっている!
– 計算よりもデータのロードが圧倒的に遅い.
– 「メモリ・ウォール問題」
2004/12/2
デザインガイア ARC 研究会
36
研究背景 (2/3)
• メモリ・ウォール問題の代表的な対策技術
– キャッシュ・メモリの搭載
• 多層化
– キャッシュ・プリフェッチ
• ストライドプリフェッチ
• キャッシュ・ミス頻発ロード命令に着目したプリフェッチ
• キャッシュ・ミス頻発ロード命令
– Delinquent ロード 命令: 「DL 命令」
2004/12/2
デザインガイア ARC 研究会
37
提案手法
値を参照するのではなく,計算で求める
Computing Centric Computation (CCC)

• DL 命令の対策に,CCC の概念を利用.
– データを主記憶からロードするのではなく再計算
(Re-Computation; RC).
– DL 命令を再計算 (RC) コードで置換し,
実行サイクル数を削減する手法を提案.
2004/12/2
デザインガイア ARC 研究会
38
全L2ミス中のDL命令の割合
top1
top2
top3
top4-16
80%
60%
40%
20%
bzip2
vortex
デザインガイア ARC 研究会
parser
ベンチマーク
mcf
gcc
vpr_r
vpr_p
gzip
ammp
equake
art
2004/12/2
0%
mesa
全L2キャッシュ・ミス回数に占める
DL 命令によるミス回数の割合 [%]
100%
39