少しは組込み的な
アーキテクチャシミュレーション
―色々やってわかったこと―
中島 浩
(京都大学)
目次
はじめに
忘れっぽくパターンにハマるパイプライン
割り込みは思ったほどは悪させず
リアルタイム業界の迷信と風説を打破
強力なパワーが潜む再利用
ハードウェアの性格を利用した最適化に挑戦
計算オーダ低減も可能な夢の最適化を探求
おわりに
はじめに が自慢話ですみません (1/6)
シミュレータ研究 @TUT の成果
対象/手法
MP
OoO 再利用
時分割並列
ISS 命令
キャッシュ
IDA キャッシュ
分岐予測
サイクル
論文
J2+C2
J1+C1
J1+C1+A1
J1+C1+A1
性能
当社x6.6@16p
SSx9.7
SSx9.4@16p
SSx34
SSx14
J1+C1
当社x1000000
J1+1stEMB 当社x173
J1+C1
当社x10000
MP: Multiprocessor Simulation, OoO: Out-of-Order Simulation
ISS: Instruction Set Simulation, IDA: Interruption Delay Analysis
はじめに
が自慢話ですみません
(2/6)
Multiprocessor シミュレータ Shaman
F/E Node
F/E Node
F/E Node
F/E Node
P
P
P
P
CCF
CCF
S/W
DSM
CCF
CCF
CT
CT
B/E Node
CT
CT
Network
Filtering Cache
Cache/Memory 間の通信が
生じないアクセス(狭義の
ヒット)を除去
ノード間通信激減
Memory
はじめに が自慢話ですみません (3/6)
再利用による ooo-sim 高速化 BurstScalar
for (i=0;i<n;i++)
{ ... }
i=0
i=1
i=2
i=3
i=4
i=5
ループ先頭のパイプライン
状態を保存・比較
i=6
i=7
計算省略
状態・cacheアクセス・
分岐予測結果が一致
次状態へ直接遷移
i=8
i=9
はじめに が自慢話ですみません (4/6)
時間分割並列 ooo-sim
差分が ooo-sim に
影響なし整合
命令・cache・分岐予測
の in-order sim により
マシン状態を近似
warm-up
=?
はじめに が自慢話ですみません (5/6)
in-order sim のワークロード最適化
WL binary
自動変換
最適化コンパイル Optimized C function
...
BB_00001234() {
0x00001234:
cadr_t nPC; reg_t r3,r4;
add r3,r1,r2
r3=regs[2]+regs[1];
addi r3,r3,$5
r3=regs[3]=r3+5;
C function for BB
lw
r4,$8(r5) BB_00001234() {
r4=regs[4]=
bne r3,r4,$5
memw[regs[5]+8];
cadr_t PC,nPC;
0x00001244:
nPC=0x1244;
PC=0x1234; nPC=PC+4;
...
if (r3!=r4) nPC=0x1258;
regs[3]=regs[2]+regs[1];
return(nPC);
PC=0x1238; nPC=PC+4;
}
regs[3]=regs[3]+5;
PC=0x123C; nPC=PC+4;
regs[4]=memw[regs[5]+8];
PC=0x1240; nPC=PC+4;
if (regs[3]!=regs[4])
nPC=PC+4+(5<<2);
return(nPC);
}
はじめに が自慢話ですみません (6/6)
最悪割込み遅延解析
cache/予測ミス最悪値の解析 O(N2F)O(NF)
4 way set
a
b
c
d
2-bit counter
T
T N T N T
互いに干渉しない
T
割込み
c
b
b
実行サイクル最悪値の解析 O(N2)O(N logN)
=
計算省略
忘れっぽくパターンにハマる
パイプライン (1/5)
どれほど忘れっぽいか
時間分割並列 ooo-sim
<< 1000 inst
=
最悪割込み遅延解析
=
10 inst
忘れっぽくパターンにハマる
パイプライン (2/5)
なぜ忘れっぽいか
長遅延命令 ( cache miss, etc.)
過去に依存しない
★
★
★
★
分岐予測ミス
過去に依存しない
★
★
★
忘れっぽくパターンにハマる
パイプライン (3/5)
どれほどハマるか
BurstScalar の再利用状況 @ SPEC CPU95
2.75
再利用率=86.7%~99.99%
再利用回数/パターン=48~273,000
最悪割込み遅延での pipeline パターン数
1
2.25
1.75
1.25
#active intervals/thread
2
3
4
5
[x 106inst]
忘れっぽくパターンにハマる
パイプライン (4/5)
なぜハマるか
パイプラインは忘れっぽい
過去への依存≪現在の入力への依存
現在の入力=実行命令列+cache 等の振舞
入力系列は繰り返す
入力系列はパターンにハマる
パイプラインがパターンにハマる
よって桶屋が儲かる
忘れっぽくパターンにハマる
パイプライン (5/5)
健忘性・偏執性につけこめるか
トランジスタ削減 ... ま、無理でしょう
実行サイクル削減 ... ま、無理でしょう
消費電力削減
... もしかしたらできるかも
パイプライン挙動は短期間の履歴で予測可能
(かもしれない)
予測に基づき投入資源量の調節 (電源 on/off 等)
が可能 (かもしれない)
ハードウェア機構での予測・調節が難しければ
詳細なシミュレーションで解析しておけばよい
(きっとそうに違いない!)
割り込みは思ったほどは悪させず
(1/4)
リアルタイム業界の迷信
cache/bpred/pipeline は性能予測性が悪い
実行命令数で近似ってわけにはいかんわな
これら定跡が役に立つのは局所性のおかげ
確かにそうです、はい
割込み/preemption は局所性を破壊
まさに御意
割込みで定跡機構の性能は致命的に悪化
定跡機構はリアルタイムシステムに不適
おいおい、ほんとかぁ?
割り込みは思ったほどは悪させず
(2/4)
実際の最悪割込み遅延
cache miss ≦ 103 高々WSS/ライン長
分岐予測ミス ≦ 104 不幸な最悪値の存在
サイクル数 ≦ 105
10μsec @ 1GHz
80000
案外平気じゃん
60000
40000
20000
perl
vortex
compre
li
ijpeg
go
m88ksi
gcc
apsi
fpppp
wave5
applu
turb3d
su2cor
hydro2
mgrid
0
tomcatv
swim
delay in cycle
100000
割り込みは思ったほどは悪させず
(3/4)
リアルタイム業界の風説
cache/bpred/pipeline は性能予測性が悪い
実行命令数で近似ってわけにはいかんわな
特に割込み遅延の性能予測は難しい
う~ん、確かにそうかもしんない
60000
[cycle]
こんなとんでもない
奴もあるしね
compress:
int. delay vs int. point
40000
20000
0
0
1
2
3
4
[x 106 inst]
割り込みは思ったほどは悪させず
(4/4)
リアルタイム業界の風説
cache/bpred/pipeline は性能予測性が悪い
実行命令数で近似ってわけにはいかんわな
特に割込み遅延の性能予測は難しい
う~ん、確かにそうかもしんない
性能予測ができないので定跡機構は使えない
いやいや、難しいのとできないのとは違う
cache : 200K acc/sec @ F=2
1sec @ 1GIPS
2day (seq)
分岐予測 : 5K branch/sec @ F=2
5h (par)
サイクル数 : 5K inst/sec @ F=1
実用的
50K inst/sec @ F=1 & P=16
強力なパワーが潜む再利用 (1/3)
高速化の秘訣
=やんなくてもいい (かもしれない)
計算 (通信) を省略して同一結果を得る
まさに
再利用
少し
再利用
まあ
再利用
Shaman
...
BurstScalar ...
並列 ooo-sim ...
WL 最適化 ...
C/B WCID ...
WCID
...
ヒット確定の cache access
一度やった inst sched
過去側の ooo-sim
命令フェッチ・デコード
因果地平越えのコスト計算
隣接割込み点の ooo-sim
適用性大
効果大
(~数桁)
適用性小
効果小
(~数倍)
強力なパワーが潜む再利用 (2/3)
再利用型プログラム vs 自動再利用
再利用型プログラム
比較対象
プログラムの意味で
定まるデータ集合
e.g. a[i] = a’[(i+c)%n]
比較方法
プログラムの意味で
定まる一致条件
e.g. x = x’ + c
再利用範囲 プログラムの意味で
定まる実行区間
e.g.ループの途中まで
投機的に
自動再利用
参照する全レジスタと
(同じアドレスの) メモリ
e.g. a[i] = a’[i]
単純な一致
e.g. x = x’
特定の命令列
e.g. ループ全体
強力なパワーが潜む再利用 (3/3)
自動再利用の限界を打破するには...
そもそも自動は無理なのであきらめて...
再利用型プログラムのサポート役に徹する
計算状態の保存・比較 (・GC) が面倒
状態保存・比較機構/ライブラリ
再利用アルゴリズムの検証が困難
(効果がでかすぎると単純検証すらやってられない)
半自動検証・変換
c.f. 四半世紀前に聞いた話
N-queen 自動変換
N ! の解生成&検証生成&検証を融合普通の奴
おわりに
(1/2)
役に立つかどうかわかんない知見
が竜頭蛇尾ですみません
パイプライン:健忘性・偏執性
割込み遅延:正当な評価、予測可能性
再利用:潜在的有効性
きっと役に立つ知見
あなたのマシン/プログラムの挙動を詳細に
観測してみましょう
きっと「へぇ~」っと思うことがあるはず
「へぇ~」が「おぉ~」になるかも
おわりに が竜頭蛇尾ですみません (2/2)
へぇ~
ほぉ~
© Copyright 2026 ExpyDoc