Transcript ppt - 早稲田大学
キャッシュヒント自動付加を用いた
ソフトウェア高速化
早稲田大学 理工学研究科 情報・ネットワーク専攻
稲垣 良一
上田 和紀
FIT2005
研究の背景と目的
プロセッサとメモリの速度差の拡大
一般的な対処方法
メモリアクセス遅延の隠蔽
キャッシュの有効活用
メモリアクセスコストの
相対的な増加
キャッシュヒント
(Itanium)
適切に使用することでキャッシュの有効活用
既存のコンパイラはキャッシュヒントを使用したメモリ
アクセス命令を生成しない
研究の目的
①コンパイル時のキャッシュヒント自動付加
②キャッシュヒント付加によるソフトウェア高速化
FIT2005
発表の流れ
背景と目的
キャッシュヒント
キャッシュヒント自動付加手法 - CHSU
評価・まとめ
FIT2005
キャッシュヒント
データを配置するキャッシュ階層を制御
取り込むキャッシュ階層、 LRU の更新、etc…
データの局所性を意識したキャッシュの有効活用
Itanium プロセッサのキャッシュヒント
メモリアクセス命令にヒントを付加する形式で表現
ストア・ロード命令に応じて4種類
例) ld4.nt1, st8.nta
.nta ヒント
データをキャッシュに最も残さないヒント
データを L2 キャッシュだけに配置
LRU を更新しない
⇒一度使うだけで再利用しないメモリアクセスに有効
FIT2005
キャッシュヒント
通常のストア命令によるキャッシュの変化
.nta ヒントを付加したストア命令によるキャッシュの変化
cf. ストリーミングストア (Pentium3~)
FIT2005
キャッシュヒントとコンパイラ
現状
既存のコンパイラはキャッシュヒントを
使用したコードを生成していない!
GCC, Intel Compiler
#pragma memref_control (Intel Compiler 9 ~)
関連研究
Beyls (Gent Univ) ら
K.Beyls
and E.D'Hollander. Compile-Time Cache Hint Generation for
EPIC Architectures, In Proc. EPIC2, pp.19--29, Nov 2002.
Reuse Distance に基づいてキャッシュヒントを選択
Open Research Compiler
FIT2005
背景と目的
キャッシュヒント
キャッシュヒント自動付加手法 - CHSU
評価・まとめ
FIT2005
キャッシュヒントの自動付加手法
Source Program
(C, C++, Fortran, etc…)
Binary Program
Compiler/Assembler/Linker
Assembly Program
Assembly Program
(annotated Cachehint)
Cachehint Annotation Unit
(CHSU-core)
CacheHint Supply Utility (CHSU)
・・・ 従来のコード生成
・・・ 提案する手法
FIT2005
本手法の特徴
1. プログラミング言語に依存しない
アセンブリプログラムを生成できるコンパイラが必要
使用するコンパイラも選択可能
2. 透過性
既存のコンパイラのラッパーとして動作
$ icc –O3 –o foo foo.c
Intel Compiler の場合
$ chsu –O3 –o foo foo.c
本手法の場合
既存のコンパイラの最適化機能 + キャッシュヒント付加
3. ヒントの自動付加
ヒントを付加すべきメモリアクセス命令を自動的に選択
FIT2005
CHSUの設計・実装
Java で実装
Source Program
フロントエンド
CHSU-core
Compiler/Assembler/Linker
Assembly Program
フロントエンド
Binary Program
Assembly Program
(annotated Cachehint)
Cachehint Annotation Unit
(CHSU-core)
コマンドラインの解析
設定ファイルの解析
コンパイラ、アセンブラの起動
アセンブリプログラムを CHSU-core に渡す
FIT2005
CHSUの設計・実装
CHSU-core
Source Program
アセンブリプログラムの
解析
キャッシュヒントの付加
キャッシュヒント付加済
プログラムの出力
Binary Program
FIT2005
Compiler/Assembler/Linker
Assembly Program
Assembly Program
(annotated Cachehint)
Cachehint Annotation Unit
(CHSU-core)
アセンブリプログラムの解析
3階層のデータ構造に分類
Program - プログラム
Procedure - プロシージャ
Block – アセンブリプログラム中
のラベルで区切られる部分
Block 単位で保持する情報
プログラム原文、命令の種類・数、
分岐先、etc…
以降の解析は Procedure 単位
で行う
FIT2005
Block
Program
Block
Procedure
Block
Block
Block
Block
Block
Block
Block
Procedure
キャッシュヒントの付加方針
本研究では .nta ヒントを付加
.nta ヒント・・・1度使うだけで再利用しないメモリアクセスに有効
方針・・・プログラムの局所性に注目
多くのメモリアクセスがループ等の局所性の高い部分
で実行されている
1.局所性が高い部分
2.局所性が低い部分
3.(どちらでもない部分)
FIT2005
それぞれの部分について、
メモリアクセスの再利用性
を仮定し、ヒントの付加方
針を導く
キャッシュヒントの付加方針
(cont’d)
局所性に応じた仮定
局所性が高い部分について
ストア命令
同じメモリアドレスにデータを何度もストアすることはない
⇒再利用しないメモリアクセスと仮定
ロード命令
同じデータを何度もロードすることはないが、同じキャッシュライン
上の別のメモリアドレスからデータがロードされる可能性はある
⇒キャッシュラインは再利用される
⇒再利用されるメモリアクセスと仮定
局所性が低い部分について
実行回数が他の部分に比べて相対的に少ない
⇒再利用しないメモリアクセスであると仮定
FIT2005
キャッシュヒントの付加方針
(cont’d)
プログラムの局所性と.nta ヒント付加の関係
局所性の高い部分
局所性の低い部分
それ以外
ストア命令
○
○
×
ロード命令
×
○
×
どちらにも該当しなければ、ヒントは付加しない
この方針に基づいてアセンブリプログラムから
局所性が高い部分
局所性が低い部分
を見つける
FIT2005
.nta ヒントの付加
Procedure 単位で処理
Block 単位で CFG を構築
局所性の高い部分
自Blockへの分岐を持つBlock
ループ構造そのもの
Block の局所性が高いと判断
→ ストア命令に .nta ヒントを付加
局所性の低い部分
実行回数が少ない Block
CFG から判断
Block の局所性が低いと判断
→ ストア・ロード命令に .nta ヒントを付加
FIT2005
label_a:
…
br label_p
…
label_q:
…
br.ret
label_b:
…
label_r:
br label_b
…
背景と目的
キャッシュヒント
キャッシュヒント自動付加手法 - CHSU
評価・まとめ
FIT2005
評価
評価環境 – SGI Altix 350
Itanium2 1.4GHz
L1D:16KB, L2:256KB, L3:3MB
使用コンパイラ
Intel Compiler 8.1, GCC 3.2.3
CHSU を使用してキャッシュヒントを付加、性能比較
FFTE 4.0
FFT ライブラリ、キャッシュ内での高速な動作
ATLAS 3.6.0
自動チューニング機構を持つ数値計算ライブラリ
NAS Parallel Benchmark
並列計算機用のベンチマーク集
FIT2005
評価(1) – FFTE 4.0
1次元FFT
データサイズを変化させて性能を測定
キャッシュヒントの有無による性能を比較
15%性能向上
性能向上率 (%)
120
115
110
105
100
95
90
14
Itanium2 L3上限
15
16
20
19
18
17
FFTデータ数 (2^m)
Intel Compiler 8.1
FIT2005
21
GCC 3.2.3
22
23
評価(1) – FFTE 4.0
N=217
Original
w/Cache Hint
L2 cache hit
0.981
0.982
L3 cache hit
0.401
0.551
IPC
1.703
1.754
Total stalls
0.625
0.605
プロセッサイベントの計測
15%
結果から
Original
w/Cache Hint
L2 cache hit
0.979
0.979
L3 cache hit
0.331
0.337
IPC
1.541
1.570
Total stalls
0.668
0.662
FIT2005
L3 キャッシュのヒット率向上
N=217の場合で15%
N=220
perfmon 使用
IPC の向上
Total stalls (全実行時間に
占めるプロセッサストールの
割合)の減少
評価(2) – ATLAS 3.6.0
行列積計算
データサイズを変化させて性能を測定
MFLOP ベースで
1%~2% の性能向
上
FIT2005
評価(3) – NPB 3.2
NAS Parallel Benchmark 3.2
今回使用したのは逐次実行版 (NPB-SER)
Class W, Class A の二種類について評価
120
性能向上率(%)
110
100
90
80
70
EP
MG
CG
FT
Class W
FIT2005
IS
Class A
LU
SP
BT
まとめ
既存のコンパイラを使用して、コンパイル時に
キャッシュヒントを付加する手法を提案した
高い汎用性
L3 キャッシュのヒット率向上 → 全体性能向上
今後の課題
性能評価の充実
キャッシュヒント付加方針の検討
バイナリプログラムに対するキャッシュヒント付加
CHSU 公開中
http://www.ueda.info.waseda.ac.jp/~inagaki/chsu/
FIT2005