第 5 章 性能評価シミュレータとバイナリ変換技術
5.4. 性能評価シミュレータの課題と ESPRIT/ SIM の目標
N
Translator Translated
code in CCD?
Check PC ≦ max Lookup CCD by PC
Add(replace)to CTD
Interpreter PC in CTD?
++ counter > threshold
run_loop
Branch to CCE Y
N N
Y
Y
CC: code translation cache CCD: code cache directory CCE: code cache entry CTD: counter directory PC: program counter
branch taken?
N
Y CCD ⇔ CTD
Direct branch (Uni-processor option)
図36 動的バイナリ変換の処理フロー図
シミュレータの速度性能の向上のために,解析機能別に複数のシミュレータコアを搭載 して目的に応じて切り替える複合型を採用するのは一般的である.ESPRIT/sim も,同様 に解析用シミュレータのほかに,高速命令インタプリタと動的バイナリ変換を組み合わせ て使用できる.それらの高速なシミュレータを使用して解析対象のポイントまでのセット アップを行い,そのポイント以降は解析用シミュレータなどを用いてキャッシュシミュ レーション解析を行うなどの切替えを行う.
5.4.2. 拡張性と保守性
異なる命令セットアーキテクチャ(ISA)のプロセッサが混載可能なシミュレータでは,
ISA 依存の機能とプロセッサ依存の仕様†28の組合せが膨大となる.そのため,シミュレー タの拡張性の維持と保守が一層困難となるという課題がある.
この課題に対し,ESPRIT/sim は記述言語を C++に替えてクラスと名前空間を使って拡 張性と移植性を改善した.図35(79ページ)に示すようにISAごとに基本クラスisaの派 生クラスとしてisa_*を用意する.すべてのプロセッサは,基本クラスprocessor_element と派生クラスisa_*の更なる派生クラスとして実装され,仮想関数を用いた統一手順にて呼 出しが行われる.プロセッサのリソースであるレジスタは processor_element のメンバに 持ち,キャッシュメモリはクラスcacheに持つ.
このような構造と統一した呼出し手順の採用により,ESPRIT/sim では派生モデルの追 加と保守が容易になり [35],利点となる.また,InsFncはクラス化すると宣言やデコード 表の記述が煩雑になるためクラス化せずに,名前空間を用いて命令処理関数名の重複を許 している.そのため,複数の ISA 間の命令の名前の区別も不要となり開発と保守が容易化 できる.クラス化と名前空間の採用により拡張性と保守性が向上する反面,シミュレータ のコンパイル時に定数やアドレスが定まらないことが原因となり,ISAを固定した C 言語 による記述方式に比べて性能が1~3割低下することが移植経験から分かっておりそれが短 所となる [35].しかし,動的バイナリ変換を使用するとホストコードの生成時にアドレス などを計算してホストコードに反映できるため,それらの短所も克服できる.
5.4.3. シミュレータの検証コスト
コンピュータメーカや半導体メーカは,製品のアーキテクチャに対応した診断プログラ ムやテストセットを豊富に持つ.それに対し,市販マイクロプロセッサのユーザである組 込み機器の製造販売企業が,シミュレータを開発するときは,開発と検証のコストが問題 となる.
命令セットシミュレータの設計は,マイクロプロセッサのマニュアルを見て行うのが一 般的である.このため,まず命令仕様の理解に誤りが発生する可能性がある.次に実装時 にもミスが発生する.C/C++言語で記述されたインタプリタはケアレスミスが少ないのに 対し,バイナリ変換ではバグの発生が増えることが開発の経験上分かっている.更にホス トの命令仕様の理解誤りのバグも加わる.またバイナリ変換では,メモリ破壊など潜在的
なバグがあるとほかの条件が変わったときにそれが顕在化することがある.このようにバ イナリ変換方式を採用するとバグが増えるため,検証コストが課題となる.
検証には,まず,プログラムの挙動と期待値が分かっているテストセットを使用した機 能劣化試験が必要である.次に,バイナリ変換処理の複雑性に対応して増加するようなバ グをなくすため,より高度な試験が必要となりこのコストが上昇する.
ESPRIT/sim では,検証コストを下げつつ検証カバレッジを向上させるため,バイナリ
変換対象のレガシー命令間の組合せへの依存性を排除し,コード変換キャッシュの履歴へ の依存性も軽減する.また,各種のISAに共通のC言語で記述したテストセット [35]を用 意し,それを用いて試験を行っている.これは,同一の試験ソースコードを C コンパイラ でコンパイルして共通に適用できるため,試験データの作成と試験データ自身の検証の共 通化が図れる,試験工数と検証品質の確保に役立つ.それに加えて,アプリケーション実 行動作をインタプリタの結果と比較する機能を併用し,そのテストセットを補完†29してい る.このような方法で品質を確保できるのも,複雑性の軽減によるところが大きい.
ESPRIT/sim が採用した“バイナリ変換の簡易化”の短所は,簡易化による性能劣化で
あり,目標に対してどこまで性能向上ができるかが重要となる.
†28 キャッシュメモリの構成や容量などが典型的な例である.
†29C言語で記述したテストセットは各種ISAごとの違いもカバーするようなデータとなっているが,レジ スタや条件コードの組合せ,アドレスのオフセット範囲,制御命令が弱い部分である.その弱点はイン ラインアセブルによるISA固有テストの追加で対応するが,網羅性はないがプログラム実行で検出する と効率はよい.