FPGAによるメニーコアシミュレータScalableCoreシステムの正当性検証

Post on 31-May-2015

939 views 0 download

description

2010-01-18 リコンフィギュラブルシステム研究会@慶応大学日吉

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