ppt - 早稲田大学

Download Report

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