OpenMPハードウェア動作合成システム: コードジェネ

OpenMPハードウェア動作合成システムの検証(Ⅰ)
高性能計算研究室
4回生 金森 央樹
2008/2/6
1
研究背景と目的
 背景
LSI開発の大規模化・期間の短縮
動作合成における並列処理記述の課題
OpenMPを用いたハードウェア動作合成システム
 目的
本システムを用いて生成した回路と手書きにより生成した回路
との比較と評価
素数判定プログラム、ラプラシアンフィルタ
本システムの改良方法と検討
2
OpenMPを用いた動作合成システム
ハードウェア
制約
トランスレータ
OpenMP構文を
利用した動作合成
OpenMP
プログラム
(動作記述)
OpenMP
コンパイラ
並列動作HW
中間表現
マルチスレッド
プログラム
コード
ジェネレータ
SMP環境
(PCクラスタ)
シミュレーション
並列動作
ハードウェア
ハードウェア合成
逐次プログラムから
の段階的な設計
並列アルゴリズム
並列効果
早期に並列化手法の検討
検証時間の短縮
アルゴリズム評価
3
素数判定とラプラシアンフィルタ
 素数判定
素数であるか判定したい対象値を決め、2から対象値まで順番に除算を
繰り返し、対象値以外で余剰がなければ素数ではないと判断する。コード
ジェネレータが余剰に対応していないため、減算を繰り返すことで代用した。
HDL記述・・・手書き約40行
システム約140行
 ラプラシアンフィルタ
エッジ検出の一つで画像に対し二次微分を行うことで、色の輝度、変化を
強調しエッジを検出する。画像データを保存するため、メモリを使用。
ラプラシアンフィルタ
変換
HDL記述・・・手書き約260行
1
1
1
-8 1
1
1
システム約1050行
1
1
4
HDL記述~素数判定~
assign ADD1_RESULT = ADD1_A + ADD1_B;
assign ADD1_A = (CurrentState==P_STATE13) ?
i : i;
assign ADD1_B = (CurrentState==P_STATE13) ?
32'd1 : i;
case(CurrentState)
P_INIT : oEND <= 1'b0;
P_END : oEND <= 1'b1;
P_STATE7 : ans <= ConstNum6;
P_STATE9 : i <= iDATAstart;
P_STATE13 : i <= ADD1_RESULT;
P_STATE14 : m <= iDATA;
P_STATE16 : REG16 <= SUB1_RESULT;
P_STATE17 : m <= REG16;
~~~~略
システムの生成回路
if(i==0&&m==0)begin
i <= iDATAfor;
m <= iDATA;
end else if(i==iDATAend)begin
oEND <=1'b1;
end else begin
if(m>i)begin
m <= m-i;
end else if(m==i) begin
ans<=1;
oEND <=1'b1;
end else begin
m <= iDATA;
i <= i+1;
end
end
手書きの生成回路
相違点・・・状態遷移方法(case文、if文)
演算の表記方法、演算器部の有無
5
HDL記述~ラプラシアンフィルタ~
oADDR・・・アクセスするメモリのアドレス
P_STATE45_ARRAY_R0
P_STATE45_ARRAY_R1
P_STATE45_ARRAY_R2
P_STATE45_ARRAY_R3
: REG45_R0 <= ADD1_RESULT;
: REG45_R1 <= MUL1_RESULT;
: REG45_R2 <= ADD1_RESULT;
: begin
oADDR <= REG45_R2;
32’d3:begin
oADDR <= address + i +(j-1)*width;
手書きの生成回路
システムの生成回路
相違点・・・演算の表記方法、演算器部の有無
6
素数判定~シミュレーション時間~
void main(void){
int
iDATA,i,m,ans;
ans=0;
#pragmaomp parallel for
for(i=2;i<iDATA/2;i++){
for(m=iDATA;m>=i;m=m-i){}
if(m==0) ans=1;
}
}
OpenMPを用いた素数判定プログラム
1
2
SMP環境
実行時間[ms]
19.4(1.0)
11.5(0.6)
4
8.2(0.4)
ノード数
ノード数 回路シミュレーション時間[s]
1
手書き
20.4(1.0)
システム
70.5(1.0)
2
21.0(1.0)
78.4(1.1)
4
21.8(1.1)
99.2(1.4)
• SMP環境での実行時間は、回路シミュレーション時間
より約千倍高速
7
素数判定~論理合成~
ノード数 最大動作周波数[MHz]
動作クロック数[Mclocks]
スライス数[slices]
1
手書き
162
システム
188
手書き
1.06(1.0)
システム
手書き
システム
3.35(1.0) 129(1.0)
148(1.0)
2
162
188
0.98(0.9)
3.02(0.9)
272(2.1)
282(1.9)
4
161
188
0.90(0.8)
2.75(0.8)
589(4.5)
434(2.9)
• 動作周波数・・・システム>手書き。
ー1状態1演算により、クロックの周期が小さくなったため
• 動作クロック数・・・システムは手書きの約3倍
ー1状態で実行する演算量の違い
• スライス数・・・あまり大きな差無し
8
ラプラシアンフィルタ
~シミュレーション時間&論理合成~
1
2
SMP環境
実行時間[ms]
40.4(1.0)
22.5(0.6)
4
14.6(0.4)
ノード数
ノード数 最大動作周波数[MHz]
1
手書き
104
2
4
システム
ノード数 回路シミュレーション時間[s]
1
手書き
1828(1.0)
システム
13018(1.0)
2
1251(0.7)
11449(0.9)
4
1809(1.0)
10741(0.8)
動作クロック数[Mclocks]
スライス数[kslices]
70
手書き
21.9(1.0)
システム
手書き
システム
110.8(1.0) 0.64(1.0) 2.44(1.0)
106
70
10.9(0.5)
55.4(0.5)
1.22(2.0)
4.83(2.0)
97
70
10.9(0.5)
27.7(0.3)
2.32(3.6)
9.48(3.9)
• SMP環境での実行時間は、回路シミュレーション時間の約30万~70万倍高速
• 動作クロック数・・・クロック減少比は、ノードが増えるほどシステムが優秀
• スライス数・・・システムではノード数に比例し回路規模が増加
9
考察と改良案
実行クロック数・・・システム側は1状態1演算で処理しているので、1クロックでの
仕事量が少なく、手書きよりもクロック数がかかる。
スライス数・・・演算器部、状態遷移に必要なレジスタや配線が生成されるため、
システム側が大きくなる。
A<=A+Bの演算回路
Aレジスタ
Aレジスタ
+
値保持
レジスタ
+
Bレジスタ
Bレジスタ
CLK
CLK
システム改良前(現在)の生成回路
改良案の生成回路
レジスタ、配線の減少による、回路規模の縮小化
演算にかかるクロック数の減少による、回路全体の速度向上
10
まとめと課題
 まとめ
・素数判定プログラムでのシステムの評価
→1状態1演算により、動作周波数においてシステム>手書き
・ラプラシアンフィルタでのシステムの評価
→理想的な速度向上比
→ノード数に比例して回路面積の増加
・考察
・システム改良案・・・演算結果を保持するレジスタを必要とせず、1クロック
で演算、代入を実行できる回路の自動生成
→回路の面積縮小化と速度向上
 今後の課題
・考察で提案した改良案の実現
・クロックサイクル数と動作周波数とのトレードオフ
11