FPGAソフトコアCPUにおける最適化を検証するMAX 10 FPGAで学ぶFPGA開発入門(14)(5/7 ページ)

» 2016年09月16日 12時00分 公開
[大原 雄介ITmedia]

 さてプログラムの説明はこのあたりにして、ビルドして動かしてみたい。ビルドのためにはまずdhry.hをプロジェクトに追加(Photo05)し、さらにEclipseからBSP Editorを呼び出して(Photo06)、sys_clk_timerにTimer_1msが指定されている事を確認しておく(Photo07)。このあたりの話は以前こちらで説明した通りだ。

photo Photo05:dhry.hをドラッグ&ドロップでEclipseのNEEK_Dhryにコピーするとこのダイアログが出てくるので、"Copy files"を選ぶとプロジェクトフォルダにコピーされ、プロジェクトにも追加される
photo Photo06:これはNEEK_Dhryを右クリックして呼び出す形
photo Photo07:なぜか筆者がビルドしたときは自動的に指定されていたが、されない場合もあるので注意

 さて、ここまで完了したらビルドして実行する。ちなみにNUMBER_OF_RUNSにリスト通りの数値(100万)を指定すると30分以上帰ってこないので、まずデバッグがてらこれを10000に書き換えて実行してみる。結果はPhoto08の様に、1万回で2006〜2007msという結果になった。

 前にも書いた通り、VAX 11/780の数字が1757.0 Dhrystone/secで、今回はおおむね4982.6 Dhrystone/secだから2.84 DMIPSという計算になる。MAX10 Evaluation Boardで試した時には3.34 DMIPSという数値だったが、今回は1ms毎に(Alarm_Int()内で)IORD_ALTERA_AVALON_PIO_DATA()を呼び出してキー押下を確認しているので、このオーバーヘッドの分遅くなったと思えば、まぁ納得できる数字である。

NIOS IIにおける最適化の効果

 さて今回の本題はここから。以前こちらで紹介したが、NIOS IIを使う場合、OptimizingをOffにする事が推奨というか指示されている。理由は“compiler optimization may cause some problems while running the program”ということであるが、これをOffにしていたらそれは性能が出ないのも当然である(Photo09)。

photo Photo08:右のNios II Consoleを参照。1万回のループなので2秒ごとに結果出力となっている

 ではこれをOnにするとどうなるか?

関連キーワード

アルテラ | FPGA関連 | FPGA


Copyright © ITmedia, Inc. All Rights Reserved.