富士通研究所は,フリーのPCエミュレータ「QEMU」(ホームページ)を利用して,プロセサの評価環境,およびマルチプロセスに向けたリモート・デバグ・システムを開発した。それぞれに関して,「DAシンポジウム2011」(情報処理学会 システムLSI設計技術研究会が8月31日と9月1日に岐阜県で開催)で発表した。

 DAシンポジウムは,企業の設計技術者の集会としてスタートしたと聞いているが,最近は大学からの発表が多い。こうした中で,富士通研や富士通(Tech-On!関連記事1),NEC(同2)はこのシンポジムでの発表を続けている。以下では,富士通研究所のQEMUを利用したソフトウェア開発環境に関する発表2件を紹介する。

QEMUを利用

写真1●静的なスケジューリングと動的適応をQEMUに導入 筆者が撮影。スクリーンは富士通研のデータ。
写真1●静的なスケジューリングと動的適応をQEMUに導入
筆者が撮影。スクリーンは富士通研のデータ。
[画像のクリックで拡大表示]

 1件目は,富士通研のDavid Thach氏の講演で,タイトルは「Fast Cycle Estimation Methodology for Instruction-Level Emulator」(講演番号:4B-2)である。同氏は,QEMUを利用して作成したプロセサの評価環境に関して発表した。プロセサの評価環境はこれまでにも多数開発されているが,一般に,命令セット・レベルといった上流で設計モデリングを行った場合,その実行時間やプロセサの各部分の状態情報は誤差が大きい。

 例えば,プロセサでは,レジスタ・ハザードやキャッシュ・ミス,分岐ミス,スーパースカラー実行ミスなど,スケジューリングに依存する問題が発生する。しかし,この発生の頻度を命令セット・レベルで正確に知ることは難しく,一般には,その発生頻度を確率的に与えることによって,これらの問題発生を扱うことが多い。

 一方,RTL(register transfer level)やゲート・レベルのネットリストを使った下流での評価を行えば,RTLシミュレータやFPGAプロトタイピングによって,クロック・レベル・タイミングでの詳細で正確な評価が可能である。しかし,設計がRTLやゲート・レベルのネットリストになってしまうと,プロセサの設計の変更はほぼ不可能である。せっかく評価結果が得られても,その評価結果を生かす改良を行うことは現実的には不可能となる。こうなると,次の設計の際に生かす程度の利用法しかない。

 今回,Thach氏は,この設計レベルと解析精度のトレード・オフの問題に取り組んだ。そして,命令セット・レベルの設計抽象度を持った設計記述に対して,クロック・レベル精度の評価を可能とするシステムを構築し,その評価に関して,DAシンポ 2011で発表した。このシステムは,QEMUをベースに構築した。

 QEMUはWindowsやLinuxなどを動かすことを目的に開発されており,AndroidのSDKなどにも利用されている命令レベルのプロセサ・シミュレータ/エミュレータである。QEMUを使って,ターゲット・プロセサの機能などを追加すれば,OS上の動作での(トイ・プログラムではなく)命令レベルのプロセサの評価が可能であるが,通常ではクロック・レベル精度の評価は難しい。

クロッ・クレベル精度での評価を可能に

写真2●静的スケジューリング 筆者が撮影。スクリーンは富士通研のデータ。
写真2●静的なスケジューリング
筆者が撮影。スクリーンは富士通研のデータ。
[画像のクリックで拡大表示]
写真3●動的適応 筆者が撮影。スクリーンは富士通研のデータ。
写真3●動的適応
筆者が撮影。スクリーンは富士通研のデータ。
[画像のクリックで拡大表示]

 今回,富士通研では,静的なスケジューリングと動的適応をQEMUに導入すること でクロッ・クレベル精度での評価を可能にしたという(写真1)。QEMUでは,ターゲットのコードはTiny Code Generatorを使ってQEMUのホスト・システム(PC)が理解できる詳細なコードに翻訳されて,ホスト・システム上の記憶領域に置かれる。すなわち,翻訳されたコードがホストのCPU上(すなわちPCのマイクロプロセサ)で実行される。

 このシステム中でクロック数を計測する最も簡単な方法では,ある実行単位ごとにクロック数を計算して合算する。しかし,これではホスト・システムに依存したクロック数を計算してしまう。そこで,富士通研は,ある演算が実行されたときにベスト・ケースのスケジューリング結果をあらかじめ取得しておき,そのスケジューリング結果を使って,ある処理が何サイクルになるかを決定するようにした。同社はこれを静的スケジューリングと呼ぶ(写真2)。

 ただし,この静的スケジューリングのみでは,キャッシュ・ミスや分岐ミスの影響を検討することができない。そこで,キャッシュ・ミスや分岐ミスがホスト・マシンで発生した際に,そのミスによるペナルティを実測値で置き換える動的適応技術(写真3)を導入した。

 QEMUで実装されている英ARM Ltd.のCortex-A8(L1とL2キャッシュを持つ)を題材にして,提案システムの結果と,ARMが提供する実機を使ったクロック数評価システムの結果とを比較した。静的スケジューリングのみでは,実機と77%程度の誤差があるが,静的スケジューリングと動的適応を組み合わせると41%の誤差まで小さくできたという。今後はさらに20%程度まで誤差を小さくする予定だとした。

 ESL(electronic system level)に近いレベルでクロック数の推定ができるのはアーキテクチャ探索には非常に有利であると考えられる。現在は誤差が大きいが,だいたいの傾向がつかめれば,相対的評価には利用可能であると考える。