マイクロアーキテクチャシミュレーションは、コンピュータアーキテクチャの研究およびコンピュータ科学教育において重要な技術です。これは、マイクロプロセッサとその構成要素(ALU、キャッシュメモリ、制御ユニット、データパスなど)の設計と動作をモデル化するためのツールです。シミュレーションにより、研究者は設計空間を探索できるだけでなく、新しいマイクロアーキテクチャ機能の性能と効率を評価することもできます。例えば、分岐予測器、リオーダーバッファ、トレースキャッシュといったいくつかのマイクロアーキテクチャ構成要素は、現代のマイクロプロセッサで一般的に使用されるようになるまでに、数多くのシミュレーションサイクルを経てきました。さらに、シミュレーションは、教育者が実践的な経験を通してコンピュータ構成とアーキテクチャのコースを教えることも可能にします。
コンピュータハードウェアのシステムレベルシミュレーションについては、フルシステムシミュレーションを参照してください。
マイクロアーキテクチャシミュレーションは、入力の種類と詳細度に応じて複数のカテゴリに分類できます。具体的には、入力は実際のマイクロプロセッサ上でプログラムを実行した際に収集されたトレース(いわゆるトレース駆動型シミュレーション)またはプログラム自体(いわゆる実行駆動型シミュレーション)のいずれかになります。
トレース駆動シミュレーション[ 1 ]は、入力としてファイルから固定されたトレースレコードのシーケンスを読み込みます。これらのトレースレコードは通常、メモリ参照、分岐結果、特定のマシン命令などを表します。トレース駆動シミュレーションは比較的高速で結果の再現性が高いことが知られていますが、非常に大きなストレージスペースも必要とします。一方、実行駆動シミュレーション[ 2 ]はプログラムを読み込み、実行時にマシン命令の実行をシミュレートします。プログラムファイルは通常、トレースファイルよりも数桁小さいサイズです。しかし、実行駆動シミュレーションは、各命令を1つずつ処理し、関連するマイクロアーキテクチャコンポーネントのすべてのステータスを更新する必要があるため、トレース駆動シミュレーションよりもはるかに低速です。したがって、シミュレーションの入力タイプの選択は、スペースと時間のトレードオフになります。特に、高精度のシミュレーションのための非常に詳細なトレースは非常に大きなストレージスペースを必要としますが、非常に高精度の実行駆動シミュレーションでは、プログラム内のすべての命令を実行するのに非常に長い時間がかかります。
入力タイプ以外にも、シミュレーションの詳細度によって分類することもできます。特に、マイクロプロセッサがプログラムをサイクル単位で実行する様子をシミュレートするソフトウェアはサイクル精度シミュレータと呼ばれ、命令セットシミュレータは命令スケジューラの視点からマイクロプロセッサ上でのプログラムの実行をモデル化するとともに、命令実行のタイミングを大まかにしか示しません。コンピュータアーキテクチャの実践的な授業では、ほとんどの授業で命令セットシミュレータが教材として採用されていますが、サイクル精度シミュレータは複雑さとリソース消費の両面から、主に研究プロジェクトで使用されています。
マイクロアーキテクチャシミュレータは、さまざまな目的で活用されています。これにより、研究者は高価で時間のかかる実際のマイクロプロセッサチップを製造することなく、アイデアを評価することができます。例えば、数千個のコアと複数のキャッシュメモリレベルを持つマイクロプロセッサをシミュレートする場合、プロトタイプチップの製造と比較すると、コストは非常に低くなります。また、研究者は、シミュレータ内で異なるキャッシュモデルを使用して、キャッシュ階層のさまざまな構成を試すことができ、何か異なることをテストするたびに新しいチップを製造する必要がありません。
マイクロアーキテクチャシミュレータのもう1つの用途は教育です。[ 3 ]コンピュータアーキテクチャのコースでは、学生はさまざまなマイクロプロセッサの機能とそのアーキテクチャを学ぶため、マイクロアーキテクチャシミュレータは、学期を通してさまざまな機能やアーキテクチャをモデル化して実験するのに理想的です。たとえば、学生は学期の初めに、単純なマイクロプロセッサ設計をモデル化したマイクロアーキテクチャシミュレータから始めることができます。学期が進むにつれて、命令パイプライン、レジスタリネーミング、予約ステーション、アウトオブオーダー実行、スコアボードなどの追加機能をモデル化して、教室で紹介されるにつれてシミュレータに追加できます。マイクロアーキテクチャシミュレータは、最小限のコストで再構成とテストの柔軟性を提供します。