FPGAによるメニーコアシミュレータScalableCoreシステムの正当性検証
-
Upload
shinya-takamaeda-yamazaki -
Category
Documents
-
view
939 -
download
0
description
Transcript of FPGAによるメニーコアシミュレータScalableCoreシステムの正当性検証
FPGAによるメニーコアシミュレータ ScalableCoreシステムの正当性検証
◎高前田 伸也,笹河 良介,吉瀬 謙二 東京工業大学 大学院情報理工学研究科
2011-01-18 リコンフィギュラブルシステム研究会@日吉
はじめに
n FPGAベースシミュレータ ScalableCoreシステムと ソフトウェアシミュレータ SimMcの動作比較 l RTLとソフトウェアシミュレータは 振る舞いが一致
l 実機とサイクル数を比較 • ソフトウェアによる同期を 入れた場合,最大2%程度の差異
• ハードウェアによる同期を 入れた場合,完全に一致
2
SimMc ScalableCore
system (RTL)
ScalableCore system
(SW sync)
ScalableCore system
(HW sync)
≒ 98%
Same Behavior
メニーコアプロセッサの登場です!
3
Intel Single Chip Cloud Computer 48 cores (x86)
TILERA TILE-Gx100 100 cores (MIPS)
M-Core/SimMc 1.1 [植原ら, IEICEシステム開発論文特集号2010] n 2Dメッシュネットワークにより接続されたNode
l 計算ノードにはコア,ノードメモリ, INCC(ネットワークインターフェース),ルータ
4
MemoryNode(0,0)
PathNode(1,0)
PathNode(2,0)
PathNode(0,1)
PathNode(0,2)
PathNode(0,N)
Comp.Node(1,1)
Comp.Node(2,1)
Comp.Node(1,2)
Comp.Node(2,2)
Comp.Node(M,1)
Comp.Node(M,2)
Comp.Node(1,N)
Comp.Node(2,N)
Comp.Node(M,N)
Many-core processor chip
Off chip main memory
PathNode(M,0)
Core
INCCNodeMemory
Router
Comp. Node(X,Y)
Y-
Y+
X+X-
Pagebuffer
INCC
Router
Mem. Node(0,0)
Y+
X+
Off chip main memory
Router
Path Node(X,Y)
Y-
Y+
X+X-
(b)
(c)
(a)
何で評価するのか? n 柔軟性 vs. 速度
l 大きいベンチマークを高速に走らせたい・・・よね?
5
Difficulty to construct
Rea
lity
ソフトウェア シミュレーション
FPGA シミュレーション
実チップ 制作
より実チップに近い構成を 高速にシミュレーション
ハードウェア制約のない理想的な構成を
手軽に実現 リアルだが高価
多数のFPGAを用いた評価環境ScalableCoreシステム [坂口ら,RECONF2010-09] [高前田ら,IPSJ-ACS32]
n 1つのコアを1つのFPGAにマウント→つなげる!! l 各FPGAに独立した…
• コンフィギュレーションROM • クロックオシレータ • SRAM
6
ScalableCore Unit (FPGA) シミュレーション対象の構成要素
Simulation Display: シミュレーション情報を表示
M-Core on ScalableCoreシステム n M-Coreのサイクルアキューレートな シミュレーション環境 l 各UnitにM-Coreの計算ノードを1つ実装
• MIPSコア,メモリ,ルータ,ネットワークインターフェース l スケーラブルなシミュレーション速度
• 64ノードシミュレーションで14.2倍高速
7
プログラムローダ
疑問点 n ソフトウェアシミュレータとScalableCoreシステム どの程度の同じ挙動をするのか? l サイクルレベルで同じ?それともわずかに異なる? l 心配な要素
• FPGA間同期 – 異なるクロックドメイン・隣接するFPGA間のみ同期
• ターゲットの1サイクルとFPGA上の1サイクルの違い – FPGA上の複数サイクルがターゲットの1サイクルに
8
0
3 4
2
1
Sending to Unit 0 Sending to Unit 1 Sending to Unit 2 Sending to Unit 3
Receiving from Unit 0 Receiving from Unit 1
Receiving from Unit 2 Receiving from Unit 3
Sending to Unit 0 Sending to Unit 1 Sending to Unit 2 Sending to Unit 3
Receiving from Unit 0 Receiving from Unit 1
Receiving from Unit 2 Receiving from Unit 3
Cycle 1 Cycle 2
この発表の目標
n ScalableCoreシステムの振る舞いの正しさを検証する l ScalableCoreシステムとソフトウェアシミュレータSimMc, 2つの振る舞いを比較
n 2段階の比較・検討 l ScalableCoreシステム RTL vs. SimMc (1)
• サイクルレベルで各状態を比較 l ScalableCoreシステム 実機 vs. SimMc
• シミュレーション実行サイクル数を比較 • プログラムの実行開始・完了に同期を挿入
– ソフトウェアによる同期 (2) – ハードウェアによる同期 (3)
9
ScalableCoreシステム RTL vs. SimMc n ターゲットプロセッサの構成: M-Core
l ノード数: 最大4×4の16ノード l コア: MIPS32 1命令/1サイクル・シングルサイクル l ローカルメモリ: 512KB・4ポート (IF,MA,INCC-R, INCC-W) l ルータ: 仮想チャネル無し・8ビット幅・入力バッファ4エントリ スイッチアロケーションは固定された優先度に従う
10
MemoryNode(0,0)
PathNode(1,0)
PathNode(2,0)
PathNode(0,1)
PathNode(0,2)
PathNode(0,N)
Comp.Node(1,1)
Comp.Node(2,1)
Comp.Node(1,2)
Comp.Node(2,2)
Comp.Node(M,1)
Comp.Node(M,2)
Comp.Node(1,N)
Comp.Node(2,N)
Comp.Node(M,N)
Many-core processor chip
Off chip main memory
PathNode(M,0)
Core
INCCNodeMemory
Router
Comp. Node(X,Y)
Y-
Y+
X+X-
Pagebuffer
INCC
Router
Mem. Node(0,0)
Y+
X+
Off chip main memory
Router
Path Node(X,Y)
Y-
Y+
X+X-
(b)
(c)
(a)
RTL vs. SimMc: 実験環境
n RTL: Icarus Verilog 0.9.3 n SimMc: 1.0 (ルータ幅 8ビット)
n 各項目をファイルに出力し,grep & diffで比較 l コアID l サイクル番号 l 実行命令 l プログラムカウンタ l INCC(ネットワークインターフェース)の入出力
11
RTL vs. SimMc: 検証ベンチマーク
n 7つの検証 l 単一ノード上でのプログラム実行 l 1対1通信 l 1対全通信 l 全対1通信 (Small) l 全対1通信 (Large) l 全対全通信 l Equation Solver Kernel
• 2次元配列の各要素について,4近傍と自身との平均値を新しい 自身の値として採用することを繰り返す
12
RTL vs. SimMc: 検証結果
n 検証の各段階でSimMcのバグを発見・修正 l 信号の更新のタイミングが(想定と)違う
• 1つのforループの中で解放と割り当てを同時に行ったり
n 修正の結果すべてのベンチマークで 毎サイクルの各状態が両者で一致 l プロセッサコアの振る舞い l ネットワークに起因するメモリ状態の変化タイミング l ネットワーク内の調停
13
ScalableCoreシステム実機 vs. SimMc n 各ノードの起動タイミングが異なる
l SimMcでは全ノードがいっせいのせいでスタート l ScalableCoreではNode(0,1)が先に起動 他を後から起こす → SimMcと挙動が異なる
• プログラムロードなどの初期設定
n 2つの方法 l ソフトウェアによる同期
• DMA転送でフラグの配布 & フラグのスヌーピング l ハードウェアによる同期
• 実行開始時刻の設定と自律的な起動
14
各ノードのプログラム実行開始を同期したい
ソフトウェアによる同期 n DMA転送による フラグの配布と フラグのスヌーピング l Node(0,1)が send_startflag()で 全員にフラグを設定
l その他のNodeは start_flagが 0でなくなるまで待機
15
volatile static int start_flag = 0; volatile int end_flag [RANKY_MAX][RANKX_MAX]; void send_startflag(int rank) { int rank_x, rank_y; rank_x = getidx(rank); rank_y = getidy(rank);
int dst,x,y; for(y=1;y<=max_rank_y;y++){ for(x=1;x<=max_rank_x;x++){ end_flag[y-1][x-1] = 0; } } for(x=1;x<=rank_x;x++){ for(y=1;y<=rank_y;y++){ if(x==1 && y==1) continue; setidxy(&dst, x, y); MC_dma_put_4b(dst, (int *)&start_flag, 1);
} } } void wait_startflag() { while(!start_flag); }
ハードウェアによる同期
16
Node (0,1)
Node (0,2)
Node (0,3)
Node (1,1)
Node (2,1)
Node (3,1)
Node (1,2)
Node (2,2)
Node (3,2)
Node (1,3)
Node (2,3)
Node (3,3)
計算ノード全員の 起動タイミングを 確実に揃えるために Node(0,*)を追加
Node(1,1)~ Node(RX,RY)が
全員同じタイミングで起動する
Node(0,1)が その他全員の
タイミングを設定
起動タイミングは (512KB転送時間)×(ノード数) をベースに,大きめに設定
起動タイミングの設定と自律的なスタート n 仮想サイクル8で3人が同時に起動する場合
17
time
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4 5 6 7 8 9 10 11
0 1 2 3 4 5 6 7 8 9 10 11
Node 0
Node 1
Node 2
起動タイミング設定待ち 起動待ち 起動完了
検証の構成 n ノード数
l 10×1,5×2,3×3,2×2
n ベンチマーク: 4種 l do nothing
• 何もしないプログラム l bottom-right to Node(1,1)
• 右下のノードから左上のノードへの1回のDMA転送 l mm_canon
• 行列積 (行列サイズ: 60, 120, 180) l random traffic
• ランダム通信
18
SW sync: シミュレーションサイクル数の比較
n 3×3構成のランダム通信で2%程度の誤差 l SimMcで739472サイクル l ScalableCoreシステムで754695サイクル l 約15000サイクルの差異
• バタフライ効果
19
!"#! $#% &#& %#% !"#! $#% &#& %#%'()*(+,-*. !/0 !$1 !$$ !"% !/0 !$1 !$$ !"%
2(++(345-.,+)+()6('78!9!: %!/ %!/ %!& !$1 %!0 %!0 %!& !1"33;<=*(*>)1" 4 4 &$1?!! 1/0&"/ 4 4 &$1?!! 1/0&"033;<=*(*>)!%" 4 4 %&%@%@! /?!&%&1 4 4 %&%@%0? /?!&%&133;<=*(*>)!0" 4 4 ?&$?@"1 !$/&@&%% 4 4 ?&$?@"1 !$/&@&&05=*'(3)+5=AA-< !!011%% 0$?@!? ?&@/?% 100/%& !!0"!?% 01$$!1 ?$/1@$ 100/%1
B-3C< B<=D=2D7E(57)8B(A+F=57)BG*<:HIID-<=+-(*
!"#! $#% &#& %#%"J"""K "J"""K "J"""K "J"""K!J01@K !J01@K "J"""K %J$1/K4 4 "J"""K "J""!K4 4 "J"""K "J"""K4 4 "J"""K "J"""K
4"J$//K "J001K %J"$@K "J"""K
L-AA757*+-=D)M=+7
HW sync: シミュレーションサイクル数の比較
n すべての構成でシミュレーションサイクル数が一致
20
!"#! $#% &#& %#% !"#! $#% &#& %#%'()*(+,-*. &$ &$ &$ &$ &$ &$ &$ &$
/(++(012-.,+)+()3('45!6!7 !"$ !"! !"! 89 !"$ !"! !"! 8900:;<*(*=)>" 1 1 &$>$&! >?@%&& 1 1 &$>$&! >?@%&&00:;<*(*=)!%" 1 1 %&%8!"9 ?9!&!$9 1 1 %&%8!"9 ?9!&!$900:;<*(*=)!@" 1 1 9&$99&? !$?&8%?9 1 1 9&$99&? !$?&8%?92<*'(0)+2<AA-; !!8!@%% @98?@" 9?!8&? >@@&$& !!8!@%% @98?@" 9?!8&? >@@&$&
B-0C; B;<D</D4E(24)5F<2'G<24)BH*;7IJJD-;<+-(*
!"#! $#% &#& %#%"K"""L "K"""L "K"""L "K"""L"K"""L "K"""L "K"""L "K"""L1 1 "K"""L "K"""L1 1 "K"""L "K"""L1 1 "K"""L "K"""L
"K"""L "K"""L "K"""L "K"""L
M-AA424*+-<D)N<+4
まとめ n ScalableCoreシステムとSimMcの動作比較
l ScalableCoreシステム RTL vs. SimMc l ScalableCoreシステム 実機 vs. SimMc
• with SW synchronization • with HW synchronization
n RTLとソフトウェアシミュレータは振る舞いが一致 n 実機とサイクル数を比較
l ソフトウェアによる同期を 入れた場合,最大2%程度
l ハードウェアによる同期を 入れた場合,完全に一致
21
SimMc ScalableCore
system (RTL)
ScalableCore system
(SW sync)
ScalableCore system
(HW sync)
≒ 98%
Same Behavior