ppt - 早稲田大学

Download Report

Transcript ppt - 早稲田大学

Itanium2プロセッサにおける
キャッシュヒント自動付加手法
早稲田大学大学院 理工学研究科 情報・ネットワーク専攻
稲垣 良一
上田 和紀
キャッシュヒント
研究の背景と目的
プロセッサとメモリの速度差は拡大
メモリアクセスコストの相対的な増加
取り込むキャッシュ階層、LRUの更新・・・
Itanium のキャッシュヒント
メモリアクセス命令に付加
ロード・ストアに応じて全4種類
.nta ヒント (Non-Temporal locality in All levels)
一般的な対処方法
キャッシュの
有効活用
メモリアクセス
遅延の隠蔽
キャッシュの詳細な制御
データをL2キャッシュだけに配置
L2キャッシュのLRUを更新しない
Itanium2 のキャッシュヒント
 キャッシュの有効活用手法の一つ
・・・データをキャッシュに最も残さないヒント
⇒1度使うだけで再利用しないメモリアクセス
に対して有効
 多段キャッシュの有効活用
 プログラムの振舞いに影響を与えない
 既存のコンパイラはキャッシュヒントを使用
したコードを生成しない!
 Intel Compiler, GCC
通常のストア命令に
よるキャッシュの変化
.nta ヒントを付加した
ストア命令による
キャッシュの変化
既存のコンパイラを利用したキャッシュヒントの自動付加
Source Program
Binary Program
Program
Binary
(C, Fortran, etc…)
Compiler/Assembler/Linker
①
③
Assembly Program
Assembly Program
(annotated Cachehint)
②
Cachehint Annotation Unit
(CHSU-core)
・・・
CacheHint Supply Utility
(CHSU)
従来のコード生成
・・・ 提案する手法
1.ソースプログラムに対して、コンパイラ
からアセンブリプログラムを生成
2.アセンブリプログラムを解析し、然る
べきメモリアクセス命令にキャッシュヒ
ント(本研究では.ntaヒント)を付加
3.キャッシュヒントが付加されたアセンブ
リプログラムをアセンブル・リンク
特徴
1.自動実行
2.プログラミング言語非依存
→アセンブリプログラムを生成できるコンパイ
ラがあれば本手法は使用可能
CHSUの設計
アセンブリプログラムの解析
Block
Block
3階層のデータ構造に分類
Block
Block
Block
Block
Block が保持する情報
・ラベル名
・アセンブリプログラム原文
・Block 中で使用されている命令の種類、数 ・分岐命令の分岐先ラベル
Procedure 外のディレクティブなどは Block として
保持するが、解析時は無視する
キャッシュヒント付加方針
.nta ヒン
ト・・・
一度使うだけで再利用しない
メモリアクセスに有効
方針:プログラムの時間局所性に注目
①局所性が高い部分(例:forループ)のメモリ
アクセス命令について、次のように仮定
ストア命令
ロード命令
同じメモリアドレスに対して、データを
何度もストアすることはない
⇒再利用しないメモリアクセス
同じメモリアドレスからデータを何度も
ロードすることはない
しかし、同じキャッシュライン上にある
別のアドレスからデータがロードされる
可能性はある
⇒キャッシュラインが再利用される
=再利用されるメモリアクセス
②局所性が低い部分のメモリアクセス命令
については再利用されないと仮定

以上の仮定より、プログラムの局所性
と .nta ヒント付加の関係はストア・ロード
命令でそれぞれ次のようになる
局所性が高い部分
局所性が低い部分
ストア命令
○
○
ロード命令
×
○
○・・・付加
×・・・付加しない
Procedure
Block
 Program – プログラム全体
 Procedure – プロシージャ(関数)
 Block – アセンブリプログラム中のラベルで
区切られるプログラム部分

Program
Procedure
Block
Block
解析後のアセンブリプログラムのデータ構造
.nta ヒントの付加

Procedure 単位で処理
各 Block が保持している分岐命令の分岐先
ラベルの情報を使用
 キャッシュヒントの付加は Block 単位

① プログラム中のループ構造から

自Blockへの分岐を持つBlock
・ループ構造そのもの
・for文, while文がアセンブリプログラム
になった形であると考えられる
L10:
…
br L10:
Block の局所性が高いと判断
→ ストア命令に .nta ヒント付加

② プロシージャ・リターン命令から
最後に実行されるBlock
繰り返し実行される可能性は
…
br.ret
少なく、局所性が低いと判断
→ストア命令・ロード命令に .nta ヒント付加


{
.mmi
(p16) lfetch.nt1
[r34]
(p18) stfd
[r9]=f61,64
(p16) add
r45=64,r46;;
}
{
.mmi
{
.mmi
(p18) stfd
[r8]=f68,64
(p16)
lfetch.nt1
(p18) stfd
[r3]=f60,64
(p18)
stfd.nta
(p16) add
r32=128,r34
(p16) add
}
}
{
.mmi
(p18) stfd.nta
キャッシュヒント
(p18) stfd.nta
付加の例
(p16) add
}
[r34]
[r9]=f61,64
r45=64,r46;;
[r8]=f68,64
[r3]=f60,64
r32=128,r34
実装と評価
FFTE 4.0
実装・評価環境
(Intel Compiler 8.1)
 Java による実装
1次元FFTを実行
 J2SE SDK 1.4.2_06
 付加するキャッシュヒント、データサイズを変
化させて性能を測定
 キャッシュヒントが付加されてない場合のプロ
グラムとの性能を比較
 評価環境・・・SGI Altix350
 Intel Itanium2 Processor 1.4GHz
L1: 16K, L2: 256K, L3: 3M
 SGI Advanced Linux Environment
 Intel Compiler 8.1, GCC 3.2.3
15%性能向上
120
アセンブリプログラム生成に使用したコンパイラ
性能向上率 (%)
115
110
105
FFTE 4.0
100
95
(GCC 3.2.3)
90
14
15
16
17
18
19
20
21
22
23
FFT データ数 (2^m)
Itanium2 L3上限
Store Hint
Load Hint
1次元FFTを実行
Store & Load Hint
110
N=217
L2 cache hit
L3 cache hit
IPC
Total stalls
Original
0.981
0.401
1.703
0.625
Store & Load Hint
0.982
0.551
1.754
0.605
L3 キャッシュ
ヒット率 15%向
上
 L3 キャッシュヒット率の向上、IPC の向上
 Total stalls (全実行時間に占めるストール時
間の割合) の減少
ATLAS 3.6.0
(Intel Compiler 8.1)
行列積関数 (dgemm)
について計測
MFLOPS ベースで
1%~2%の性能向
上
106
性能向上率 (%)
プロセッサイベントの計測 (pfmon)
108
104
102
100
98
96
94
92
90
14
15
16
17
18
19
20
21
22
23
FFT データ数 (2^m)
Store Hint
Load Hint
Store & Load Hint
GCC を使用した場合でも性能向上
⇒コンパイラに依存しない性能向上を実証
まとめ
 提案する手法により、既存のコンパイ
ラを使用したキャッシュヒントの自動
付加が可能になった
 汎用性の高い方法
 L3キャッシュのヒット率向上
今後の課題
 性能評価の充実
 キャッシュヒント付加方針の検討
 バイナリプログラムへの直接適用