待機ラインへの 参照密度に基づく低リーク・キャッシ

待機ラインへの参照密度に基づく
低リーク・キャッシュの動的制御
福岡大学
◎小宮礼子
九州大学
井上弘士 村上和彰
2005/08/03
1
発表手順
1.はじめに
2.キャッシュ・リーク削減手法の問題点
3.待機状態ラインへの参照密度解析
4.性能低下抑制を目的とした動的制御方式の提案
5.評価
6.おわりに
2005/08/03
2
はじめに
プロセッサの消費電力
=リーク消費電力+動的消費電力
StrongARM SA-110
*2
70%
プロセッサ中のリーク電力の割合*1
Power: 43 %
キャッシュ・メモリのリーク消費電力削減が必要!!
*1 Fred Pollack (Intel Fellow): New Microarchitecture Challenges in the Coming Generations of CMOS Process Technologies [Micro32]
*2 プロセス:0.35μm, I-cache:16KB, D-cache:16KB, 1998
2005/08/03
3
キャッシュ・リーク削減手法
低リークキャッシュ
従来キャッシュ
待機状態
活性状態
活性状態のライン(活性ライン) : 高リーク ☹ , 高速アクセス ☺
待機状態のライン(待機ライン) : 低リーク ☺, 低速アクセス ☹
ラインの状態を動的に切替える
待機ライン数が増加
→リーク削減
待機ラインへのアクセス →性能低下
2005/08/03
4
Cache Decay:
状態破壊に基づくリーク削減方式
アクセス
アクセス
アクセス
アクセス
活性ライン→待機ライン(供給電圧0V)
非アクセスサイクル数 ≧ 閾値
(閾値:decay interval)
アクセス
活性
ミス
待機ライン→活性ライン
アクセス発生時
待機
待機ライン参照 ⇒ 必ずキャッシュ・ミスになる
•従来キャッシュにおいても発生するミス
•Cache Decayにより新たに発生したミス (=「増加ミス」)
「増加ミス」の発生に伴い性能低下
2005/08/03
S.Kaxiras, Z.Hu, and M.Martonosi, “Cache Decay: Exploiting Generational Behavior to Reduce Cache
Leakage Power,” Proc. of the 28th Int. Symp. on Computer Architecture, pp.240-251, June 2001.
5
低リーク・キャッシュの性能低下を
改善するには?
方法1.キャッシュ・ミス時のミス・ペナルティの削減
L2以下の記憶階層ではキャッシュ・サイズは増加傾向
→ミス・ペナルティの削減は困難
方法2.「増加ミス」回数の削減
低リーク・キャッシュを動的に制御し,「増加ミス」を削減
評価結果:
Cache decay
提案方式
2005/08/03
リーク削減率:92.7%, 性能低下:15.1%
リーク削減率:90.6%, 性能低下:5.0%
6
Cache Decayにおける「増加ミス」の
解析
Increased-Miss-Density (IMD)とは?
ライン毎「増加ミス」回数の多寡を示す指標
ライン iにおける「増加ミス」
回数
IMDi 
全ラインにおける「増 加ミス」回数の平均
1以上⇒平均以上の「増加ミス」が発生
IMDiが高いライン = 性能低下を引き起こすライン
2005/08/03
7
IMD
f183.equake
1
i175.vpr
1
2004/12/02
L1キャッシュライン・インデックス
解析結果
1 ≦ IMDi < 2
IMDi < 1
2 ≦ IMDi < 4
高密度ラインにおける
「増加ミス」が占める割合
高密度ラインが占める割合
100%
90%
7.7%のラインが71%の「増加ミス」を発生
80%
70%
60%
50%
40%
30%
20%
10%
0%
一部のラインが「増加ミス」を頻発!
Average
i197.parser
i175.vpr
f183.equake
f179.art
Average
i197.parser
i175.vpr
f183.equake
f179.art
ラインの割合
「増加ミス」の割合
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
2005/08/03
4 ≦ IMDi
9
新しい低リーク・キャッシュ動的制御
方式の提案
「増加ミス」を頻発するラインを常に活性ラインで動作
常活性ライン
「増加ミス」頻発
活性
常に活性ライン
待機
常活性ライン数
メリット
デメリット
多い
性能低下改善
リーク削減効果減
少ない
リーク削減効果維持 性能低下改善できず
10
IMDiに基づく動的常活性ライン
決定方法
IMDi 
ラインiにおける「増加ミス」
回数
全ラインにおける「増
加ミス」回数の平均 ≧ 閾値
ならば 常活性ライン
ラインiにおける「増加ミス」回数 ≧ 全ラインにおける「増加ミス」回数の平均×閾値
<例>キャッシュ・ライン数 = 1024 (=210)
閾値 = 2 (=21)
総「増加ミス」回数
平均「増加ミス」回数
10bit右シフト
ラインiにおける「増加ミス」回数
≧?
yes
2005/08/03
no
常活性ライン
1bit左シフト
平均「増加ミス」回数×閾値
Cache Decay
11
内部構造
「増加ミス」カウンタ
常活性フラグ
Decayフラグ
非アクセスカウンタ
Voltage Control
tag
状態破棄
・・
・
≧?
・・
・
≧?
0
1
2
1023
Vdd / 0
シフタ
総「増加ミス」カウンタ
2005/08/03
・・
・
data
decay interval
12
内部構造
「増加ミス」カウンタ
常活性フラグ
Decayフラグ
非アクセスカウンタ
Voltage Control
tag
・・
・
状態破棄
1
・・
・
1
≧?
≧?
0
1
2
1023
Vdd / 0
シフタ
総「増加ミス」カウンタ
2005/08/03
・・
・
data
decay interval
13
評価環境
評価対象
Cache Decay
閾値x:IMDiがx以上のラインを常活性ラインにしたキャッシュ
x = 1, 2, 4
評価環境
シミュレータ:
SimpleScalar 3.0d
命令発行:in-order
データL1キャッシュ (32KB, 連想度32)
対象アプリケーション
SPEC CPU 2000ベンチマークセット
(fp 4個,int 6個)
評価項目
実行時間増加率
リーク消費エネルギー削減率
14
2005/08/03
10
5
5.0%
0
70
50
40
Average
15.1%
80
i197.parser
20
100
i175.vpr
性能改善
閾値4
f183.equake
閾値2
f177.mesa
25
リーク消費エネルギー削減率 (%) _
閾値1
Average
i197.parser
i175.vpr
15
f183.equake
f177.mesa
実行時間増加率 (%) _
評価結果
Cache Decay
92.7%
90
90.6%
60
リーク削減効果維持
30
20
10
0
15
2005/08/03
10
5
0
30
20
Average
15
i256.bzip2
20
i197.parser
性能改善
閾値4
f183.equake
閾値2
f177.mesa
25
リーク消費エネルギー削減率 (%) _
閾値1
Average
i256.bzip2
i197.parser
f183.equake
f177.mesa
実行時間増加率 (%) _
評価結果
Cache Decay
100
90
80
70
60
50
40
リーク削減効果減
10
0
16
まとめ
低リーク・キャッシュの性能低下抑制方式を提案:
「増加ミス」の発生密度が高いラインを動的に検出し,
常活性ラインにすることで性能を改善
結果
リーク削減効果を維持したまま性能を改善できた
最善ケース(f183.equake 閾値4)の場合:
Cache Decay
リーク削減率:92.7%, 性能低下:15.1%
提案方式
リーク削減率:90.6%, 性能低下:5.0%
今後の課題
動的消費エネルギーを含めた総合評価
2005/08/03
17
2005/08/03
18
2005/08/03
19
待機ラインの実現方式
回路
電源電圧供給停止
状態破棄 (Gated-Vdd)
リーク削減効果大
低電源電圧化
(DVS)
状態保存
高閾値電圧化
(VT-CMOS)
記憶していた
情報
再参照時の
ペナルティ
失う
キャッシュ・ミスと同等
保存
活性ラインへの切替え
(一般に1clock cycle)
性能低下小
改善できれば,性能低下小かつリーク削減効果大!
2005/08/03
20
Average
i256.bzip2
i197.parser
i181.mcf
i176.gcc
i175.vpr
i164.gzip
f188.ammp
f183.equake
2005/08/03
f179.art
f177.mesa
実行時間増加率 (%)
_
Cache decayではどれだけ
性能が低下するか?
25
20
15
10
5
0
21
2005/08/03
Average
i256.bzip2
i197.parser
2
i181.mcf
2.5
i176.gcc
i175.vpr
i164.gzip
f188.ammp
3.5
f183.equake
4
f179.art
f177.mesa
DL1ミス回数 (本来のDL1ミス回数で正規化) _
「増加ミス」が性能低下に
どれだけ影響しているか?
4.5
「増加ミス」回数が多いほど性能も低下!
3
増加ミス
1.5
1
0.5
0
22
IMD
i181.mcf
1
2005/08/03
23
2005/08/03
Average
i256.bzip2
1≦IMD<2
i197.parser
i181.mcf
2≦IMD<4
i176.gcc
i175.vpr
i164.gzip
4≦IMD
f188.ammp
f183.equake
f179.art
f177.mesa
ラインの割合
高密度ラインが占める割合
IMD<1
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
benchmark program
24
高密度ラインにおける「増加ミス」が
占める割合
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
2005/08/03
2≦IMD<4
1≦IMD<2
IMD<1
benchmark program
一部のラインが「増加ミス」を頻発!
Average
i256.bzip2
i197.parser
i181.mcf
i176.gcc
i175.vpr
i164.gzip
f188.ammp
f183.equake
f179.art
7.7%のラインが71%の「増加ミス」を発生
f177.mesa
「増加ミス」の割合
4≦IMD
25
どのようにして常活性ラインを
動的に決定するか?
待機 カウンタ
フラグ
Voltage Control
tag
状態破棄
・・
・
data
・・
・
≧?
0
1
2
1023
Vdd / 0
decay interval
2005/08/03
26
どのようにして常活性ラインを
動的に決定するか?
待機 カウンタ
フラグ
Voltage Control
tag
状態破棄
非アクセスサイクル数をカウント
待機カウンタ≧decay interval
⇒待機フラグ=1
2005/08/03
・・
・
data
・・
・
1
≧?
0
1
2
1023
Vdd / 0
decay interval
27
どのようにして常活性ラインを
動的に決定するか?
常活性 カウンタ
フラグ
待機 カウンタ
フラグ
Voltage Control
tag
状態破棄
・・
・
≧?
globalカウンタ
2005/08/03
・・
・
data
・・
・
≧?
0
1
2
1023
Vdd / 0
decay interval
28
どのようにして常活性ラインを
動的に決定するか?
常活性 カウンタ
フラグ
待機 カウンタ
フラグ
Voltage Control
tag
状態破棄
・・
・
・・
・
0
1
2
1023
1
Vdd / 0
Cache decay時の「増加ミス」回数をカウント
≧?
≧?
全「増加ミス」回数をカウント
globalカウンタ
2005/08/03
・・
・
data
decay interval
29
IMD ≧閾値 ならば 常活性ライン
どのようにして常活性ラインを
ラインiにおける「増加ミス」
回数
IMD 
動的に決定するか?
全ラインにおける「増
加ミス」回数の平均
i
i
ラインiにおける「増加ミス」回数 ≧
常活性 カウンタ 待機 カウンタ
フラグ
全ラインにおける「増加ミス」回数の平均×閾値
フラグ
Voltage Control
tag
状態破棄
・・
・
・・
・
1
≧?
globalカウンタ
2005/08/03
・・
・
data
≧?
0
1
2
1023
Vdd / 0
decay interval
30
IMD ≧閾値 ならば 常活性ライン
どのようにして常活性ラインを
ラインiにおける「増加ミス」
回数
IMD 
動的に決定するか?
全ラインにおける「増
加ミス」回数の平均
i
i
ラインiにおける「増加ミス」回数 ≧
常活性 カウンタ 待機 カウンタ
フラグ
全ラインにおける「増加ミス」回数の平均×閾値
フラグ
Voltage Control
tag
状態破棄
・・
・
・・
・
1
≧?
globalカウンタ
2005/08/03
・・
・
data
≧?
0
1
2
1023
Vdd / 0
ライン数:2x, 閾値:2yの場合,
globalカウンタの値を
(x-y)ビット右にシフト
decay interval
例)ライン数1024 = 210, 閾値2 = 21
⇒9ビット右シフト
31
IMD ≧閾値 ならば 常活性ライン
どのようにして常活性ラインを
ラインiにおける「増加ミス」
回数
IMD 
動的に決定するか?
全ラインにおける「増
加ミス」回数の平均
i
i
ラインiにおける「増加ミス」回数 ≧
常活性 カウンタ 待機 カウンタ
フラグ
全ラインにおける「増加ミス」回数の平均×閾値
フラグ
Voltage Control
tag
・・
・
状態破棄
1
1
≧?
globalカウンタ
2005/08/03
・・
・
data
・・
・
0
1
2
1023
Vdd / 0
常活性カウンタ≧シフトした値
≧?
⇒常活性フラグ=1
decay interval
32
どのようにして常活性ラインを
動的に決定するか?
常活性 カウンタ
フラグ
待機 カウンタ
フラグ
Voltage Control
tag
・・
・
状態破棄
1
・・
・
1
≧?
globalカウンタ
2005/08/03
・・
・
data
常活性 待機 状態破棄
フラグ ≧?フラグ
信号
0
0
0(活性)
0
1
0 (活性)
1
0
0 (活性)
0
1
2
1023
Vdd / 0
1decay1interval
1 (破棄)
33
どのようにして常活性ラインを
動的に決定するか?
常活性 カウンタ
フラグ
待機 カウンタ
フラグ
tag
Voltage Control
常活性フラグ=1 ならば 常に活性ライン
・・
・
状態破棄
1
・・
・
1
≧?
globalカウンタ
2005/08/03
・・
・
data
常活性 待機 状態破棄
フラグ ≧?フラグ
信号
0
0
0(活性)
0
1
0 (活性)
1
0
0 (活性)
0
1
2
1023
Vdd / 0
1decay1interval
1 (破棄)
34
どのようにして常活性ラインを
動的に決定するか?
常活性 カウンタ
フラグ
待機 カウンタ
フラグ
Voltage Control
tag
data
0
1
常活性フラグ=0 ならば Cache decayと同様に動作 2
・・
・・
・・
状態破棄
・
・
・
1023
1
1
≧?
globalカウンタ
2005/08/03
常活性 待機 状態破棄
フラグ ≧?フラグ
信号
0
0
0(活性)
0
1
0 (活性)
1
0
0 (活性)
Vdd / 0
1decay1interval
1 (破棄)
35
0
Average
i256.bzip2
i197.parser
閾値4
i181.mcf
i176.gcc
閾値2
i175.vpr
i164.gzip
閾値1
f188.ammp
15
f183.equake
2005/08/03
20
f179.art
f177.mesa
実行時間増加率 (%) _
どれだけ性能低下を改善したか?①
Cache decay
25
性能改善
15.1%
10
5.0%
5
36
0
Average
i256.bzip2
i197.parser
閾値4
i181.mcf
i176.gcc
閾値2
i175.vpr
90
i164.gzip
閾値1
f188.ammp
80
f183.equake
2005/08/03
50
f179.art
f177.mesa
リーク消費エネルギー削減率 (%) _
リーク消費エネルギー削減効果は
維持できたか? ①
Cache decay
100
92.7%
90.6%
70
60
リーク削減効果維持
40
30
20
10
37
何故f183.equakeはリーク削減効果を
維持したまま性能を改善したか?
Cache decay
4≦IMD
2≦IMD<4
1≦IMD<2
IMD<1
100%
90%
80%
70%
60%
少数ラインが「増加ミス」を頻発
50%
→一部のラインのみ常活性ラインになるため,
40%
30%
リークは増加せず,性能を改善する
20%
10%
0%
2005/08/03
lineの割合
高密度ラインが
占める割合
「増加ミス」回数の割合
高密度ラインにおける
「増加ミス」数が占める割合
38
0
Average
i256.bzip2
i197.parser
閾値4
i181.mcf
15
i176.gcc
閾値2
i175.vpr
i164.gzip
閾値1
f188.ammp
f183.equake
2005/08/03
f179.art
f177.mesa
実行時間増加率 (%) _
どれだけ性能低下を改善したか?②
Cache decay
25
20
閾値に反比例して性能改善
10
5
39
0
Average
i256.bzip2
i197.parser
閾値4
i181.mcf
i176.gcc
閾値2
i175.vpr
50
i164.gzip
閾値1
f188.ammp
f183.equake
2005/08/03
f179.art
f177.mesa
リーク消費エネルギー削減率 (%) _
リーク消費エネルギー削減効果は
維持できたか? ②
Cache decay
100
90
80
70
60
閾値に反比例してリーク削減効果低下
40
30
20
10
40
何故i256.bizp2では性能改善に伴い
リーク削減効果が低下するか?
Cache decay
4≦IMD
2≦IMD<4
1≦IMD<2
IMD<1
100%
90%
「増加ミス」密度が高いライン数が多い
80%
70%
→常活性ライン数が増えるため,リーク削減効果減
60%
50%
そのラインでの「増加ミス」回数は多い
40%
30%
→性能は改善
20%
10%
0%
2005/08/03
lineの割合
高密度ラインが
占める割合
「増加ミス」回数の割合
高密度ラインにおける
「増加ミス」数が占める割合
41
0
Average
i256.bzip2
i197.parser
閾値4
i181.mcf
10
i176.gcc
閾値2
i175.vpr
i164.gzip
閾値1
f188.ammp
f183.equake
2005/08/03
f179.art
f177.mesa
実行時間増加率 (%) _
どれだけ性能低下を改善したか?③
Cache decay
25
20
15
性能改善せず
5
42
0
Average
i256.bzip2
i197.parser
閾値4
i181.mcf
70
i176.gcc
閾値2
i175.vpr
i164.gzip
閾値1
f188.ammp
f183.equake
2005/08/03
f179.art
f177.mesa
リーク消費エネルギー削減率 (%) _
リーク消費エネルギー削減効果は
維持できたか? ③
Cache decay
100
90
80
リーク削減効果変わらず
60
50
40
30
20
10
43
i181.mcf(閾値2,4)は何故性能もリークも
変化しないか?
4≦IMD
2≦IMD<4
1≦IMD<2
IMD<1
100%
90%
80%
70%
常活性ラインになるラインがない
→Cache decayと同じ動作をする
60%
50%
40%
30%
20%
10%
0%
lineの割合
2005/08/03
「増加ミス」回数の割合
44
0
Average
i256.bzip2
i197.parser
閾値4
i181.mcf
i176.gcc
閾値2
i175.vpr
5
i164.gzip
閾値1
f188.ammp
f183.equake
2005/08/03
f179.art
f177.mesa
実行時間増加率 (%) _
どれだけ性能低下を改善したか?④
Cache decay
25
20
15
10
元々性能が低下していない
45
0
Average
i256.bzip2
i197.parser
閾値4
i181.mcf
10
i176.gcc
閾値2
i175.vpr
20
i164.gzip
閾値1
f188.ammp
f183.equake
2005/08/03
f179.art
f177.mesa
リーク消費エネルギー削減率 (%) _
リーク消費エネルギー削減効果は
維持できたか? ④
Cache decay
100
90
80
70
60
50
40
30
リーク削減効果低下
理由:無駄に常活性ラインに切替わる
46