富士通研究所は3月13日、携帯電話や電子機器のCPUなどで広く使われているARMコアを利用したシステムを対象に、シミュレーション実行時にハードウェア上での動作を実時間精度で忠実に再現(サイクル動作)できる、超高速シミュレーション技術を開発したことを発表した。同技術の詳細は、3月12日からドイツ・ドレスデンで開催される国際会議「DATE 2012(Design, Automation & Test In Europe)」にて発表された。

ARMコアを用いたシステムの開発は近年、飛躍的に複雑になっており、システムの動作が設計通りであるかの事前検証や、OSやアプリケーションなどのソフトウェア開発において、より高速かつ、よりハードウェアに忠実で精度の高いシミュレーションの技術が求められている。

今回、シミュレーションの高速実行基盤であるJITコンパイル方式をベースにサイクル動作シミュレーションを低負荷でおこなう技術を開発することにより、標準PC上の環境でOSを含むARMマルチコアシステムのサイクル動作シミュレーションを従来比100倍高速となる100MHz以上で行うことが可能になった。ハードウェア上での実時間動作との誤差も約±5%であり、精度の高いシミュレーションを高速に実行できる。

具体的には、ハード上での実時間レベルの動作を忠実かつ高速に再現するために、従来のJITコンパイル方式に最適に適合する実時間計算アルゴリズムを開発した。

従来のJITコンパイル方式の処理の流れでは、ARMの実行プログラムはベーシックコードと呼ばれるブロック単位でパソコン上のx86の実行プログラムに翻訳され、実行プロセスにてそのプログラムが実行される。ここでx86の実行プログラムはメモリにキャッシュされ、その後、キャッシュにヒットする限りは翻訳プロセスを繰り返さずに実行プロセスのみで再実行が可能となる。JITコンパイル方式では機能レベルのコードに限定されるため、命令当たりのコード数が少なく負荷も軽くなる。また一般的にキャッシュのヒット率が高いため高速な実行が可能となる。

図1 一般的なJITコンパイル処理の流れ

JITコンパイル方式に今回の実時間計算アルゴリズムを融合させる場合、単純にサイクル動作のコードを生成すると、機能レベルのコードに限定されるJITコンパイル方式に比べて、時間情報を含むため、命令当たりのコード数が機能コードだけの場合に比べて数百倍となり、実行スピードも数百倍遅くなる。

そこで今回、実時間計算を、(1)予測に基づく静的な時間解析、(2)静的解析に基づく単純な時間加算、(3)予測ミス時の動的な時間補正とに分離し、それぞれをJITコンパイルの翻訳プロセスと実行プロセスに適切に割り振ることにより、この問題を解決した。翻訳部分がキャッシュに見つかり、かつ、(1)の静的な時間解析時に設定したどのタイミングで命令が実行されるかの予測が成立する限りは、(2)の時間の差分を単純に加減算する軽い処理のみが繰り返されるため、高速な実時間計算が可能となる。

(1)の予測が成立しなかった場合は、(3)の時間解析が実行され時間補正が行われる。そして、未翻訳部分を検出した場合は、翻訳プロセスにて新たな翻訳処理として(1)の時間解析処理が行われる。(1)、(3)の処理は時間解析のため処理が重くなるが、全体を通して数%程度しか参照されないため、結果として実行遅延を低く抑えることが可能となった。

図2 今回の実時間動作シミュレーション込みのJITコンパイル処理の流れ

また、ARMコアはマルチコア化が急速に進んでおり、サイクル動作シミュレーション技術もマルチコアに対応する。今回のサイクル精度のJITコンパイル技術は各コアでそれぞれ別々に実時間計算を行うことができるため、各コアの負荷が均等になるような負荷分散が可能となり、マルチコアでも速度劣化の少ない高速なサイクル動作シミュレーションを実現できる。

今回開発した技術により、広く普及が進むARMコアを採用したシステムの開発期間をスピードアップすることが可能となり、多様な機器やシステム開発への応用が期待される。

今後については、シミュレーションのさらなる高速化・高精度化と、対応するARMコア種の拡大を進めており、ARMコアを利用したより幅広いシステムの開発へも応用していく予定。