第 8 章 ESPRIT/SIM のマルチプロセッサ対応のシミュレーション速度性能評価
8.3. 同種マルチプロセッサのシミュレーション速度性能
8.3.1.命令実行のシミュレーションの速度性能
表29に命令シミュレーション速度性能を示す.そのグラフは図48(126ページ)の左側
に示す.速度性能はレガシー1命令を実行するのに掛かったホストのクロックサイクル数を CPI として示している.評価したCPU数は1,2,4,8,16個である.表の列“1”から
“16”はCPU数を示し,各セルはCPI値を示す.“ss”の列はsim-fastのユニプロセッサ 動作時のCPIを示している.列 “speed up”はsim-fastのCPI値を1-CPU動作時のCPI で割ったもので,sim-fastに対して何倍速いかを比で示している.CPIは値が小さいほど,
“speed up”は値が大きいほど性能向上効果が大きい.グラフの線が水平であれば,CPU が増えてもオーバヘッドがないことを意味し,傾きが大きいとオーバヘッドが多いことを 示す.CPU数が増えても傾きはわずかであり処理時間はほぼ比例の範囲に留まっている.
16-CPU構成でも1-CPU構成の76~80%の速度性能を実現しているためオーバヘッドが少
ないといえる.なお,ユニプロセッサ構成のsim-fastと比べると1-CPUは8~14倍,2~
16-CPUは6~12倍の速度性能を示している.
表29 SPLASH-2の命令シミュレーション速度性能(CPI)
CPU counts 1 2 4 8 16 ss speed up FFT 1M points 5.7 6.6 6.7 7.0 7.5 78 14x LUC (cont.blk) 1024x1024 6.4 7.3 7.5 7.7 8.1 71 11x LUN (noncont.blk) 1024x1024 6.3 7.3 7.6 7.5 8.1 71 11x
RADIX key=10,000,000 7.6 8.5 8.7 9.0 9.5 61 8x
8.3.2. キャッシュシミュレーションの速度性能
表30と図48の右側にキャッシュシミュレーションの速度性能を示す.評価したCPU数
は1,2,4,8,16個である.表の列“1”から“16”はCPU数を示し,各セルはCPI値
を示す.“ss”の列はsim-cacheのユニプロセッサ動作時のCPIを示す.列“speed up”は sim-cacheのCPI値を1-CPU時のCPI値で割ったもので,sim-cacheに対する速度性能比 を示す.この値が大きいほど性能向上率が高いことを示している.16-CPU構成でも1-CPU
構成の 72~90%の速度性能を実現し,これもオーバヘッドが少ないといえる.なお,ユニ
プロセッサ構成の sim-cacheと比べると1-CPUでは 10~19 倍,2~16-CPUでも8~17 倍の性能を示している.
このように,キャッシュシミュレーションを行ってもバイナリ変換コアの 26~80%(平
均52%)の速度性能を達成しており,バイナリ変換の効果は大きいといえる.
表30 SPLASH-2のキャッシュシミュレーション速度性能(CPI)
CPU counts 1 2 4 8 16 ss speed up FFT 1M points 11.3 12.5 12.5 13.3 15.1 185 16x LUC (cont.blk) 1024x1024 10.6 11.6 11.8 12.7 14.7 197 19x LUN (noncont.blk) 1024x1024 21.0 21.6 21.2 21.5 23.4 200 10x
RADIX key=10,000,000 11.1 12.1 12.4 13.2 15.8 153 14x
01 23 45 67 89 10
0 4 8 12 16
CPU counts
CPI
FFTLUC LUNRADIX
0 5 10 15 20 25
0 4 8 12 16
CPU counts
CP I
FFTLUC LUNRADIX
図48 SPLASH-2のシミュレーション速度性能(CPI)
8.3.3. キャッシュシミュレーションの高速化手法の効果
次に図49を用いてキャッシュシミュレーションの高速化の効果を述べる.ここでは,CPU
数が4のときの速度性能をMIPS値で示す.この評価は次の4種類のモデルを使い速度性 能を求めている.このグラフに比較のためにsim-cacheの性能も載せている.
NF: C++にて記述したキャッシュモデルをバイナリコードから単純に呼ぶもの CF: C++記述内でフィルタを掛けるもの
BF: バイナリコード内でフィルタを掛けるもの(表30の測定条件)
BF-NC: CPU間のキャッシュコヒーレンシーをチェックしないもの(参考用)
C++記述のキャッシュモデルは本来は低速であるが,グラフに示すようにフィルタの併用に
より性能低下を緩和し,3~4倍に性能を高めていることが分かる.
10 9 9 12
43 38 34
63 61
48
89 157
88 164 150
72 148
93
163 171
0 50 100 150 200
FFT LUC LUN RADIX
MIPS
sim-cac NF CF BF BF-NC
図49 キャッシュシミュレーション速度(CPU数=4)
8.3.4. CPU間のスイッチ間隔に関する評価
マルチプロセッサでは6.8.1で提案したシミュレーション対象の CPU を切り替える方式 を採っており,そのシミュレーションをスイッチする間隔について評価した.スイッチ間 隔Nの単位は命令数であり,本節までの評価結果はNを既定値の100に設定したときの値 である.一般に間隔を短くすると精度は向上し性能は低下する.図50にNを変えたときの キャッシュシミュレーションの速度性能を示す.N=1000のときの速度性能を100%として,
N を小さくしたときの速度の低下の様子を示すために速度性能を相対値で表している.図
51には,N を変えたときのデータキャッシュのアクセス数の誤差率を左側のグラフに,ミ
ス回数の誤差率を右側のグラフに,ともに単位は百分率を用いて示す.なお,この評価で はN=1のときの値を正しいものとしてそれらとの差を誤差と定義している.
Nを変えて評価した結果,Nが3200以下ならば命令数の誤差では0.1%未満,キャッシュ アクセス回数では 0.03%,ミス回数でも 0.5%未満の誤差に収まることが分かった.また,
図50に示すようにN≧50であればスイッチ間隔1000と同様な性能が得られる.このこと
から,SPLASH-2では1000≧ N≧50となるようにNを選べば,精度と性能の両方を満足
できるシミュレーションができ,また6.8.1で提案したCPU間のスイッチによるマルチプロ セッサシミュレーションの手法が有効であるといえる.
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
1 10 100 1000
switch interval
Simulation speed
FFT RADIX LUC LUN
図50 スイッチ間隔によるシミュレーション速度性能
-0.020%
-0.015%
-0.010%
-0.005%
0.000%
0.005%
0.010%
0.015%
0.020%
1 10 100 1000 10000
N RADIX-d FFT-d LUC-d LUN-d
-0.500%
-0.400%
-0.300%
-0.200%
-0.100%
0.000%
0.100%
0.200%
0.300%
0.400%
0.500%
1 10 100 1000 10000
N
error
RADIX-m FFT-m LUC-m LUN-m
図51 スイッチ間隔によるデータキャッシュアクセス回数とミス回数の誤差率