(57)【要約】      （修正有）【課題】プロセッサのメモリアクセスの向上を実現し、より高性能なエミュレーションを実現する。【解決手段】複数のプロセッサコア（１１，２１）のうちの一つが、ターゲットシステムにおける命令コードをエミュレートするメインプロセッサ（１１）として割り付けられ、メインプロセッサ（１１）には、命令コードをエミュレートする第１のソフトウェアモジュールが実装され、メインプロセッサ（１１）以外のプロセッサコアのうちの一つが、メインプロセッサ（１１）が実行予定の命令コードを、メインプロセッサ（１１）の実行に先立って共有キャッシュメモリ（２）にプリフェッチするサブプロセッサ（２１）として割り付けられ、サブプロセッサ（２１）には、命令コードをプリフェッチする第２のソフトウェアモジュールが実装されている、ことを特徴とする。【選択図】図１
2006268487.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアと、当該複数のプロセッサコアによって共有される共有キャッシュメモリとを有するコンピュータシステムであって、他のコンピュータシステムであるターゲットシステムのエミュレーションを実行するエミュレーション装置において、
前記複数のプロセッサコアのうちの一つが、前記ターゲットシステムにおける命令コードをエミュレートするメインプロセッサとして割り付けられ、
前記メインプロセッサには、前記命令コードをエミュレートする第１のソフトウェアモジュールが実装され、
前記メインプロセッサ以外のプロセッサコアのうちの一つが、前記メインプロセッサが実行予定の前記命令コードを、前記メインプロセッサの実行に先立って前記共有キャッシュメモリにプリフェッチするサブプロセッサとして割り付けられ、
前記サブプロセッサには、前記命令コードをプリフェッチする第２のソフトウェアモジュールが実装されている
ことを特徴とするエミュレーション装置。
【請求項２】
複数のプロセッサコアと、当該複数のプロセッサコアによって共有される共有キャッシュメモリとを有するコンピュータシステムであって、他のコンピュータシステムであるターゲットシステムのエミュレーションを実行するエミュレーション装置におけるエミュレーション方法において、
前記エミュレーション装置は、
前記複数のプロセッサコアのうちの一つが、前記ターゲットシステムにおける命令コードをエミュレートするメインプロセッサとして割り付けられ、
前記メインプロセッサには、前記命令コードをエミュレートする第１のソフトウェアモジュールが実装され、
前記メインプロセッサ以外のプロセッサコアのうちの一つが、前記メインプロセッサが実行予定の前記命令コードを、前記メインプロセッサの実行に先立って前記共有キャッシュメモリにプリフェッチするサブプロセッサとして割り付けられ、
前記サブプロセッサには、前記命令コードをプリフェッチする第２のソフトウェアモジュールが実装されていて、
前記エミュレーション方法は、
前記メインプロセッサの実行前に前記サブプロセッサが前記命令コードのオペコードを取り出す工程を有することを特徴とするエミュレーション方法。
【請求項３】
請求項２に記載されたエミュレーション方法において、
前記サブプロセッサは、前記取り出したオペコードに対応する前記命令語のオペランドを読み出し前記共有キャッシュメモリにプリフェッチする工程を有することを特徴とするエミュレーション方法。
【請求項４】
請求項２に記載されたエミュレーション方法において、
前記取り出したオペコードが条件分岐命令を意味するとき、前記サブプロセッサは、当該条件分岐命令の次の前記命令コードのアドレスを計算し、当該計算したアドレスの前記命令コードの前記オペコードを読み込む工程を有することを特徴とするエミュレーション方法。
【請求項５】
請求項４に記載されたエミュレーション方法において、
前記メインプロセッサは前記条件分岐命令の実行を開始し、分岐が発生したとき、前記メインプロセッサは前記サブプロセッサに対して分岐が発生したことを通知する工程を有することを特徴とするエミュレーション方法。
【請求項６】
請求項５に記載されたエミュレーション方法において、
前記通知を受信したとき、前記サブプロセッサは前記メインプロセッサの命令カウンタの値を取り出し、当該値を当該サブプロセッサの命令カウンタに設定する工程を有することを特徴とするエミュレーション方法。
【請求項７】
請求項２に記載されたエミュレーション方法において、
前記抽出したオペコードが無条件分岐命令を意味するとき、当該無条件分岐命令の分岐先のアドレスを計算し、当該計算したアドレスの前記命令コードのオペコードを取り出す工程を有することを特徴とするエミュレーション方法。
【請求項８】
複数のプロセッサコアと、当該複数のプロセッサコアによって共有される共有キャッシュメモリとを有するコンピュータシステムであって、他のコンピュータシステムであるターゲットシステムのエミュレーションを実行するエミュレーション装置に含まれるコンピュータにおいて、
前記エミュレーション装置は、
前記複数のプロセッサコアのうちの一つが、前記ターゲットシステムにおける命令コードをエミュレートするメインプロセッサとして割り付けられ、
前記メインプロセッサには、前記命令コードをエミュレートする第１のソフトウェアモジュールが実装され、
前記メインプロセッサ以外のプロセッサコアのうちの一つが、前記メインプロセッサが実行予定の前記命令コードを、前記メインプロセッサの実行に先立って前記共有キャッシュメモリにプリフェッチするサブプロセッサとして割り付けられ、
前記サブプロセッサには、前記命令コードをプリフェッチする第２のソフトウェアモジュールが実装されていて、
前記エミュレーションプログラムは、
前記メインプロセッサの実行前に前記サブプロセッサが前記命令コードのオペコードを取り出す工程を有することを特徴とするエミュレーションプログラム。
【請求項９】
請求項８に記載されたエミュレーションプログラムにおいて、
前記サブプロセッサは、前記取り出したオペコードに対応する前記命令語のオペランドを読み出し前記共有キャッシュメモリにプリフェッチする工程を有することを特徴とするエミュレーションプログラム。
【請求項１０】
請求項８に記載されたエミュレーションプログラムにおいて、
前記取り出したオペコードが条件分岐命令を意味するとき、前記サブプロセッサは、当該条件分岐命令の次の前記命令コードのアドレスを計算し、当該計算したアドレスの前記命令コードの前記オペコードを読み込む工程を有することを特徴とするエミュレーションプログラム。
【請求項１１】
請求項１０に記載されたエミュレーションプログラムにおいて、
前記メインプロセッサは前記条件分岐命令の実行を開始し、分岐が発生したとき、前記メインプロセッサは前記サブプロセッサに対して分岐が発生したことを通知する工程を有することを特徴とするエミュレーションプログラム。
【請求項１２】
請求項１１に記載されたエミュレーションプログラムにおいて、
前記通知を受信したとき、前記サブプロセッサは前記メインプロセッサの命令カウンタの値を取り出し、当該値を当該サブプロセッサの命令カウンタに設定する工程を有することを特徴とするエミュレーションプログラム。
【請求項１３】
請求項８に記載されたエミュレーションプログラムにおいて、
前記抽出したオペコードが無条件分岐命令を意味するとき、当該無条件分岐命令の分岐先のアドレスを計算し、当該計算したアドレスの前記命令コードのオペコードを取り出す工程を有することを特徴とするエミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エミュレーション装置及びエミュレーション方法、並びに、エミュレーションプログラムに関し、特に、複数のプロセッサコアが一つのキャッシュメモリを共有する構成のコンピュータシステムにおいて、任意の命令セットアーキテクチャをもつ他のコンピュータシステムであるターゲットシステムのエミュレーションを行うエミュレーション装置等であって、前記複数のプロセッサコアのうち一つを用いて前記共有されたキャッシュメモリへのプリフェッチを行うことにより、エミュレーションの実行速度を向上させたエミュレーション装置等の技術分野に関する。
【背景技術】
【０００２】
エミュレーション装置は、ある任意の命令セットアーキテクチャをもつターゲットシステムの命令コードを、異なる命令セットアーキテクチャのコンピュータシステム（プラットフォームシステム）の上で実行する装置であって、より具体的には、プラットフォームシステムのメモリ上にアロケートされた特定のメモリ領域をターゲットシステムの主記憶領域として割り付け、そこに格納されたターゲットシステムの命令コードを逐次的に取り出しながら実行していくエミュレーションソフトウェアを実行する装置である。
【０００３】
このエミュレーションソフトウェアは個々のプロセッサに割り付けられて、各々が１個のプロセッサをエミュレートする。ターゲットシステムがマルチプロセッサシステムであれば、ターゲットシステムのプロセッサ数と同数のプロセッサ数を備えたプラットフォームシステムを用いて、複数のプロセッサ上で個々にエミュレーションソフトウェアを動作させる事で、ターゲットシステムのマルチプロセッサ化を実現する。
【０００４】
ターゲットシステムのエミュレーション処理の高速化には、高速プロセッサの採用に基づくハード面の向上の他に、エミュレーションソフトウエアの性能向上というアプローチが考えられる。
【０００５】
今日のコンピュータシステムにおいては、ソフトウエアの実行時間の多くの部分がメモリアクセスに費やされており、従って、プロセッサの演算速度向上というハード面での対策を行っても、メモリアクセスのレイテンシ（アクセス応答時間速度）が改善されなければ、エミュレーション速度の大幅な向上は期待できない。
【０００６】
一方、近年のコンピュータシステムにおいては、処理速度の処理能力の向上、システムの性能向上の要求に応じて、ホスト当たりのプロセッサ数を増やすことで高速化を図る、高マルチプロセッサ化という流れもある。
【０００７】
しかしながら、エミュレーション装置が、ターゲットシステムのプロセッサ数を超える数のプロセッサを有しても、余分なプロセッサは有効に活用できないという問題もある。
【０００８】
従来においても、このようなプロセッサのメモリアクセス時間が制約になってエミュレーション速度が向上しない点に着目した技術があった（例えば、下記特許文献１参照）。
【特許文献１】特開２００１−３０６３３４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記特許文献においては、エミュレーション中に次のターゲット命令コードを先行してロードし、ターゲットプログラムのエミュレーション速度の向上を図っている。
【００１０】
しかしながら、上記特許文献では、エミュレーション装置が複数のプロセッサを有した構成、複数のプロセッサがキャッシュメモリを共有している構成、エミュレーションを実行するメインプロセッサのエミュレーションに先行してサブプロセッサが共有キャッシュメモリに命令語をプリフェッチする構成は開示されていない。
【００１１】
本願の課題とするところは、エミュレーション、複数のプロセッサを有するエミュレーション装置においてシステムにおいて、プロセッサのメモリアクセスの向上を実現したエミュレーション装置及びエミュレーション方法、並びに、エミュレーションプログラムの提供が挙げられる。
【００１２】
また、エミュレーション装置としてのプラットフォームシステムのプロセッサ数がターゲットシステムのプロセッサ数を超えたとき、超えた分のプロセッサを有効利用して、より高性能なエミュレーションを実現したエミュレーション装置及びエミュレーション方法、並びに、エミュレーションプログラムの提供が挙げられる。
【課題を解決するための手段】
【００１３】
以下、本願について説明する。なお、本願の理解を容易にするために添付図面の参照符号を括弧書きにて付記するが、それにより本願が図示の形態に限定されるものではない。
【００１４】
上記課題を解決するために、第１の発明は、複数のプロセッサコア（１１，２１）と、複数のプロセッサコア（１１，２１）によって共有される共有キャッシュメモリ（２）とを有するコンピュータシステム（１）であって、他のコンピュータシステムであるターゲットシステムのエミュレーションを実行するエミュレーション装置（１）において、複数のプロセッサコア（１１，２１）のうちの一つが、ターゲットシステムにおける命令コードをエミュレートするメインプロセッサ（１１）として割り付けられ、メインプロセッサ（１１）には、命令コードをエミュレートする第１のソフトウェアモジュールが実装され、メインプロセッサ（１１）以外のプロセッサコアのうちの一つが、メインプロセッサ（１１）が実行予定の命令コードを、メインプロセッサ（１１）の実行に先立って共有キャッシュメモリ（２）にプリフェッチするサブプロセッサ（２１）として割り付けられ、サブプロセッサ（２１）には、命令コードをプリフェッチする第２のソフトウェアモジュールが実装されている、ことを特徴とする。
【００１５】
上記課題を解決するために、第２の発明は、複数のプロセッサコア（１１，２１）と、複数のプロセッサコア（１１，２１）によって共有される共有キャッシュメモリ（２）とを有するコンピュータシステム（１）であって、他のコンピュータシステムであるターゲットシステムのエミュレーションを実行するエミュレーション装置（１）におけるエミュレーション方法において、エミュレーション装置（１）は、複数のプロセッサコア（１１，２１）のうちの一つが、ターゲットシステムにおける命令コードをエミュレートするメインプロセッサ（１１）として割り付けられ、メインプロセッサ（１１）に命令コードをエミュレートする第１のソフトウェアモジュールが実装され、メインプロセッサ（１１）以外のプロセッサコアのうちの一つが、メインプロセッサ（１１）が実行予定の命令コードを、メインプロセッサ（１１）の実行に先立って共有キャッシュメモリ（２）にプリフェッチするサブプロセッサ（２１）として割り付けられ、サブプロセッサ（２１）に命令コードをプリフェッチする第２のソフトウェアモジュールが実装されていて、エミュレーション方法は、メインプロセッサ（１１）の実行前にサブプロセッサ（２１）が命令コードのオペコードを取り出す工程を有することを特徴とする。
【００１６】
第３の発明は、第２の発明において、サブプロセッサ（２１）は、取り出したオペコードに対応する命令語のオペランドを読み出し共有キャッシュメモリ（２）にプリフェッチする工程を有することを特徴とする。
【００１７】
第４の発明は、第２の発明において、取り出したオペコードが条件分岐命令を意味するとき、サブプロセッサ（２１）は、条件分岐命令の次の命令コードのアドレスを計算し、計算したアドレスの命令コードのオペコードを読み込む工程を有することを特徴とする。
【００１８】
第５の発明は、第４の発明において、メインプロセッサ（１１）は条件分岐命令の実行を開始し、分岐が発生したとき、メインプロセッサ（１１）はサブプロセッサ（２１）に対して分岐が発生したことを通知する工程を有することを特徴とする。
【００１９】
第６の発明は、第５の発明において、通知を受信したとき、サブプロセッサ（２１）はメインプロセッサ（１１）の命令カウンタ（ＩＣ１）の値を取り出し、その値をサブプロセッサ（２１）の命令カウンタ（ＩＣ２）に設定する工程を有することを特徴とする。
【００２０】
第７の発明は、第２の発明において、抽出したオペコードが無条件分岐命令を意味するとき、無条件分岐命令の分岐先のアドレスを計算し、計算したアドレスの命令コードのオペコードを取り出す工程を有することを特徴とする。
【００２１】
上記課題を解決するために、第８の発明は、複数のプロセッサコア（１１，２１）と、複数のプロセッサコア（１１，２１）によって共有される共有キャッシュメモリ（２）とを有するコンピュータシステム（１）であって、他のコンピュータシステムであるターゲットシステムのエミュレーションを実行するエミュレーション装置（１）に含まれるコンピュータにおいて、エミュレーション装置（１）は、複数のプロセッサコア（１１，２１）のうちの一つが、ターゲットシステムにおける命令コードをエミュレートするメインプロセッサ（１１）として割り付けられ、メインプロセッサ（１１）に命令コードをエミュレートする第１のソフトウェアモジュールが実装され、メインプロセッサ（１１）以外のプロセッサコアのうちの一つが、メインプロセッサ（１１）が実行予定の命令コードを、メインプロセッサ（１１）の実行に先立って共有キャッシュメモリ（２）にプリフェッチするサブプロセッサ（２１）として割り付けられ、サブプロセッサ（２１）に命令コードをプリフェッチする第２のソフトウェアモジュールが実装されていて、エミュレーションプログラムは、メインプロセッサ（１１）の実行前にサブプロセッサ（２１）が命令コードのオペコードを取り出す工程を有することを特徴とする。
【００２２】
第９の発明は、第８の発明において、サブプロセッサ（２１）は、取り出したオペコードに対応する命令語のオペランドを読み出し共有キャッシュメモリ（２）にプリフェッチする工程を有することを特徴とする。
【００２３】
第１０の発明は、第８の発明において、取り出したオペコードが条件分岐命令を意味するとき、サブプロセッサ（２１）は、条件分岐命令の次の命令コードのアドレスを計算し、計算したアドレスの命令コードのオペコードを読み込む工程を有することを特徴とする。
【００２４】
第１１の発明は、第１０の発明において、メインプロセッサ（１１）は条件分岐命令の実行を開始し、分岐が発生したとき、メインプロセッサ（１１）はサブプロセッサ（２１）に対して分岐が発生したことを通知する工程を有することを特徴とする。
【００２５】
第１２の発明は、第１１の発明において、通知を受信したとき、サブプロセッサ（２１）はメインプロセッサ（１１）の命令カウンタ（ＩＣ１）の値を取り出し、その値をサブプロセッサの命令カウンタ（ＩＣ２）に設定する工程を有することを特徴とする。
【００２６】
第１３の発明は、第８の発明において、抽出したオペコードが無条件分岐命令を意味するとき、無条件分岐命令の分岐先のアドレスを計算し、計算したアドレスの命令コードのオペコードを取り出す工程を有することを特徴とする。
【発明の効果】
【００２７】
サブプロセッサがターゲットシステムの命令コードを共有キャッシュメモリへプリフェッチすることにより、メインプロセッサのエミュレーション時のメモリアクセスのレイテンシの短縮が可能となり、メインプロセッサで実行されるエミュレーションソフトウェアの実行速度を向上させることができる。
【００２８】
エミュレーション装置としてのプラットフォームシステムのプロセッサ数がターゲットシステムのプロセッサ数を超えたとき、メインプロセッサの性能を高めるために、超えた分のプロセッサの一部をサブプロセッサとして有効利用するので、高マルチプロセッサシステムをプラットフォームに採用したとき、より高性能なエミュレーションシステムを実現できる。
【発明を実施するための最良の形態】
【００２９】
以下、本願発明を実施するための最良の形態を図面を用いて説明する。
【００３０】
図１は、本願発明に係るエミュレーション装置としてのプラットフォームシステムのプロセッサ部を示すブロック図である。本実施の形態では、１つのプロセッサ１の上に二つのプロセッサコア１１と２１とが実装され、それぞれのプロセッサコア１１，２１はプロセッサ固有の一次キャッシュメモリ（Ｌ１）１２と２２とを有し、更に一次キャッシュメモリ１２，２２を介して共通の二次キャッシュメモリ（Ｌ２）２に接続されている。そして、このような構造を有するプロセッサ１が、バス（ＦＳＢ：Front Side Bus）３に接続され、バス３を介してメモリ（図示省略）や入出力装置（図示省略）に接続される構成となっていて、他のコンピュータシステムであるターゲットシステムのエミュレーションを実行する。
【００３１】
そして、プロセッサコア１１は、ターゲットシステムにおける命令コードをエミュレートするメインプロセッサとして割り付けられ、命令コードをエミュレートする第１のソフトウェアモジュールとしてのエミュレーションソフトウエア（ソフトウエアモジュール）が実装されている。
【００３２】
プロセッサコア２１は、前記メインプロセッサとして機能するプロセッサコア１１にてエミュレートされるターゲットシステムの命令コードのオペコード又はオペランドを二次キャッシュメモリ２にプリフェッチするサブプロセッサとして割り付けられ、オペコード又はオペランドをプリフェッチする第２のソフトウェアモジュールとしてのソフトウエアモジュールが実装されている。
【００３３】
ここで、プロセッサ１は、例えばＬＳＩ（Large Scale Integration：大規模集積回路）で構成され、本願に係るコンピュータシステム又はエミュレーション装置に該当する。
【００３４】
プロセッサコア１１，２１は、例えばＬＳＩ内部のＣＰＵ（Central Processing Unit：中央処理装置）で構成され、本願に係るプロセッサに該当する。このうち、メインプロセッサとして機能するプロセッサコア１１は本願に係るメインプロセッサに該当し、サブプロセッサとして機能するプロセッサコア２１は本願に係るサブプロセッサに該当する。
【００３５】
プロセッサコア１１，２１は各々内部に命令カウンタＩＣ１，ＩＣ２を有している。いずれの命令カウンタＩＣ１，ＩＣ２も本願に係る命令カウンタに該当する。
【００３６】
一次キャッシュメモリ１２，２２は、例えばＬＳＩ内部のメモリ部分、特にＣＰＵの一次キャッシュメモリ部分で構成される。
【００３７】
二次キャッシュメモリ２は、例えば、ＬＳＩ内部の二次キャッシュメモリ部分で構成され、本願発明に係る共有キャッシュメモリに該当する。
【００３８】
以上のような構成を有するプラットフォームシステムの動作を図２を参照しながら以下に説明する。
【００３９】
図２は、ターゲットシステムの命令のうち、一例としてロード命令の場合のプロセッサコア１１の動作を説明する図である。このロード命令は、メモリ（図示省略）上に図３で示す形式で格納されている。
【００４０】
図３中、ＯＰはオペコード、ＧＲ１は汎用レジスタ番号、ＢＲ１はベースレジスタ番号、Ｄはアドレスのオフセットを記述するフィールドである。このロード命令の例の場合、オペコードＯＰに対して、ＧＲ１及びＢＲ１、Ｄがオペランドを構成している。ロード命令においては、ターゲットシステムはＢＲ１に格納された値とＤで指定されたオフセット値とを加算したアドレスからデータを取り出し、ＧＲ１に格納する動作を行う。
【００４１】
第１のソフトウェアモジュールとしてのエミュレーションソフトウエアが実行されると、メモリ（図示省略）に格納されているターゲットシステムのプログラム（フローチャート）をステップ毎に初めから順に参照し実行する。
【００４２】
まず、参照したステップの命令語のオペコード部分を読み出しロード命令であることが判明すると、エミュレーションソフトウエアの中のロード命令を担当する第１のソフトウェアモジュールとしてのソフトウェアモジュールに分岐する。
【００４３】
そして、プロセッサ１は図２に示すフローチャートを先頭から実行する。
【００４４】
命令語の後半部分（オぺランド）を取り出す（ステップＳ１０１）。ターゲットシステムのアーキテクチャは複数の命令語長をサポートしているため、エミュレーションソフトウエアでは処理の最初の時点では最低限の長さのデータ（オペコード部分）のみ取り出し、各命令毎のフローに分岐した後に残りの部分（オペランド部分）を取り出すようにしているためである。
【００４５】
例えば、このロード命令の例ではフローの先頭に分岐する前にオペコード部分の８ビット分のみ取り出しておき、分岐後にオペランドを取り出すようにしている。
【００４６】
続いて、取り出したオぺランドからレジスタ番号を読み取り、ベースレジスタＢＲ１の値を取り出し（ステップＳ１０２）、オフセットＤの値を加算してデータが格納されたメモリ（図示省略）のアドレスを算出する（ステップＳ１０３）。さらに、そのアドレスを用いてメモリ（図示省略）からデータを取り出し（ステップＳ１０４）、取り出したデータの値を汎用レジスタＧＲ１へ格納する（ステップＳ１０５）。格納が終わったら、命令カウンタＩＣ１をターゲットシステム上の次命令が格納されたアドレスを指すよう更新し（ステップＳ１０６）、さらにそのアドレスから次命令のオペコード部分を取り出して（ステップＳ１０７）、一連のロード命令の実行が完了する。
【００４７】
この後、フローの最後に取り出した次命令のオペコードを参照し、次命令のエミュレーションを実行するソフトウェアモジュールへと分岐する。
【００４８】
１．命令語（オペコード）のプリフェッチ
次に、オペコードのプリフェッチ動作を実行するサブプロセッサとしてのプロセッサコア２１の動作を説明する。
【００４９】
図４を参照してターゲットシステムの命令語のオペコードをプリフェッチするための第２のソフトウェアモジュールとしてのソフトウェアモジュールの動作を説明する。図２と共通する部分（ステップＳ１０７）には同一符号を付し、それらの説明は省略する。オペランドの取り出し（ステップＳ１０１）から結果の格納（ステップＳ１０５）までの工程を欠いており、且つ、次命令アドレスの更新対象である命令カウンタがプロセッサコア１１の命令カウンタＩＣ１ではなくプロセッサコア２１の命令カウンタＩＣ２である点（ステップＳ２０６）が図２との相違である。
【００５０】
図４に示したフローは図２のロード命令のフローに対応するものである。プロセッサコア２１上にはターゲットシステム上の各命令に対応した同様のソフトウェアモジュールが実装されている。また、ターゲットシステムのレジスタへ格納された値はメモリ（図示省略）上に置かれ、プロセッサコア１１とプロセッサコア２１のいずれからも同じ値が参照できるが、命令カウンタ（ＩＣ１，ＩＣ２）のみ、プロセッサコア１１とプロセッサコア２１とで個々に持っている。
【００５１】
まず、オペコードの取出しから、各モジュールへの分岐まで（図４のフローへ移入するまで）はプロセッサコア１１のフローと同様に動作する。
【００５２】
その後、プロセッサコア２１では命令の実行本体部分（図２に示すフローのステップＳ１０１〜Ｓ１０５の工程）を省略して、すぐに次命令アドレスを算出し命令カウンタＩＣ２に格納し（ステップＳ２０６）、次命令のオペコードの取出しを行って（ステップＳ１０７）、動作を完了する。
【００５３】
以上に説明したように、プロセッサコア２１にて実行される第２のソフトウェアモジュールとしてのソフトウェアモジュールは、プロセッサコア１１で実行される命令語を簡略化して実行するから、プロセッサコア１１に先行してプロセッサコア２１が命令語を実行することになる。これにより、ターゲットシステムの命令語を二次キャッシュメモリ２へプリフェッチする効果が得られる。よって、エミュレーション時のプロセッサコア１１のメモリアクセスのレイテンシを短縮することが可能となるため、プロセッサコア１１で実行されるエミュレーションソフトウェアの実行速度を向上させることができる。
【００５４】
尚、プロセッサコア２１の動作はプロセッサコア１１のエミュレート動作と同期せず、独立して実行される。
【００５５】
２．オペランドのプリフェッチ
次に、オペランドのプリフェッチを行う場合のフローを図５を用いて説明する。
【００５６】
図５は、プロセッサコア２１が行うオペランドのプリフェッチを行う第２のソフトウェアモジュールとしてのソフトウェアモジュールを説明する図である。図２と共通する部分には同一符号を付し、それらの説明は省略する。メモリから取り出したデータをレジスタに実際に格納するかどうか（ステップＳ３０４）が図２との相違である。
【００５７】
フローに移入するまでのオペコード取り出しとモジュールへの分岐はこれまで説明した図２、図３のフローと同様である。
【００５８】
続いて、命令語のオペランドを取り出し（ステップＳ１０１）、取り出したオペランドからレジスタ番号を読み取り、ベースレジスタＢＲ１の値を取り出し（ステップＳ１０２）、オフセットＤの値を加算してデータが格納されたメモリのアドレスを算出する（ステップＳ１０３）。
【００５９】
その後、そのアドレスを用いてメモリから二次キャッシュメモリ２へのプリフェッチを行う（ステップＳ３０４）。この操作は、プロセッサに専用のプリフェッチ命令が実装されていればそれを利用しても良いし、単に任意のワークレジスタにデータを取り出すだけでも良い。
【００６０】
それに続くステップで次命令アドレスを算出し命令カウンタＩＣ２に格納し（ステップＳ２０６）、次命令のオペコード取出しを行って（ステップＳ１０７）個々での動作を完了する。
【００６１】
以上に説明したように、プロセッサコア２１にて実行される第２のソフトウェアモジュールとしてのソフトウェアモジュールは、プロセッサコア１１で実行される命令語を簡略化して実行するから、プロセッサコア１１に先行してプロセッサコア２１がオペランドのプリフェッチを実行することになる。これにより、ターゲットシステムのオペランドを二次キャッシュメモリ２へプリフェッチする効果が得られる。よって、エミュレーション時のプロセッサコア１１のメモリアクセスのレイテンシを短縮することが可能となるため、プロセッサコア１１で実行されるエミュレーションソフトウェアの実行速度を向上させることができる。
【００６２】
尚、オペランドのプリフェッチでは、プロセッサコア２１のエミュレーションはプロセッサコア１１の場合と異なり、ターゲットシステムの命令語を必ずしも忠実に再現する必要はない。プロセッサコア１１のエミュレーションで実行される、例えば例外検出機能などの一部の機能の省略が可能である。
【００６３】
また、命令語のプリフェッチの場合と同様、プロセッサコア２１の動作はプロセッサコア１１とは同期せず、独立して実行される。
【００６４】
３．条件分岐命令の場合
オペコード及びオペランドのプリフェッチは上記の説明により実行可能であるが、上記の説明だけでは実施できない条件分岐命令の場合のプリフェッチの扱いについて以下に説明する。
【００６５】
条件分岐命令の動作を図６乃至図８に示すフローを参照しながら説明する。図２及び図４と共通する部分には同一符号を付し、それらの説明は省略する。
【００６６】
まずプロセッサコア１１の第１のソフトウェアモジュールとしてのエミュレーションソフトウエアのフローを図６を参照して説明する。
【００６７】
条件分岐命令のモジュールに移入してくるまでのオペコード取り出し、分岐動作はこれまでに説明したように実行され、条件分岐命令の実行を開始する。まず、フローの先頭で命令語のオペランドを取り出し（ステップＳ１０１）、分岐条件の判定を行う（ステップＳ４０２）。この判定の方法は、ターゲットシステムのアーキテクチャに依存して幾つかの方法が考えられるが、例えば特定の汎用レジスタの偶数・奇数（最下位ビットが０か１かで判定する）や、正・負（最上位ビットが０か１かで判定する）、あるいはコンディションコードなどと呼ばれる特殊な専用レジスタに格納された値を用いる方法などがある。これらのいずれを使用するかが、ステップＳ４０１で取り出した命令語の中の一部のフィールドにて指示されている。
【００６８】
この判定の結果、分岐ＧＯの場合（ステップＳ４０２：ＧＯ）、分岐先アドレスの計算を開始する。まず命令語に記述されたレジスタ番号からベースレジスタＢＲ１の値を取り出し（ステップＳ４０３）、オフセットＤを加えて分岐先アドレスを生成する（ステップＳ４０４）。最後に、その分岐先アドレスを次命令のアドレスとして命令カウンタＩＣ１に格納する（ステップＳ４０５）。この後、ステップＳ４０６にて、プロセッサコア１１はプロセッサコア２１に対し、「分岐ＧＯ割り込み」を送信する。この割り込みは、プロセッサコア２１に対しターゲットシステム上の命令シーケンスにおいて分岐が発生したことを通知するために用いている。なお、プロセッサの割り込み機能を用いた実装のほか、メモリ上にフラグを書き込む方法など、プロセッサ間で通信できるものであればどのような実装形態であっても構わない。
【００６９】
一方、ステップＳ４０２の判定の結果、分岐ＮＯＧＯの場合（ステップＳ４０２：ＮＯＧＯ）、ステップＳ４０８にて条件分岐命令の後続命令のアドレスを計算し、命令カウンタＩＣ１に格納する（ステップＳ４０８）。
【００７０】
そして最後に、分岐ＧＯ、分岐ＮＯＧＯのいずれの場合も、命令カウンタＩＣ１で指し示すアドレスから次命令のオペコードを取り出し（ステップＳ１０７）、条件分岐命令の実行を完了する。
【００７１】
一方、この条件分岐命令に対応するプロセッサコア２１の第２のソフトウェアモジュールとしてのエミュレーションソフトウエアのフローを図７に示す。
【００７２】
まず、プロセッサコア２１においてもこれまでの説明と同様、条件分岐命令のモジュールに移入してくる。プロセッサコア２１ではモジュール中分岐判定などの動作を省略して、単純に条件分岐命令の次命令のアドレスを計算し、命令カウンタＩＣ２に格納し（ステップＳ５０８）、次命令のオペコードを取り出して（ステップＳ１０７）条件分岐命令の実行を完了する。
【００７３】
このように条件分岐命令の場合に分岐ＮＯＧＯと仮定してプリフェッチを先行させるフローとしているのは、プロセッサコア２１では常に分岐ＮＯＧＯとして動作することにより、動作を簡略化してプロセッサコア２１の条件分岐命令の処理時間をプロセッサコア１１の条件分岐命令の処理時間より短くするためである。前述したようにプロセッサコア２１の動作は必ずしもターゲットシステムの命令を忠実に再現する必要は無いため、この様な簡略化を行うことが出来る。
【００７４】
図８に、分岐ＧＯへ分岐したとき（図６のステップＳ４０２：分岐ＧＯ）のプロセッサコア２１で実行される第２のソフトウェアモジュールとしてのソフトウェアモジュールである。このフローは、図６にてプロセッサコア１１から送信された割り込みを受信した際にプロセッサコア２１で実行される。
【００７５】
プロセッサコア１１からの割り込み通信によって図８のフローに移入してきたプロセッサコア２１は、まずプロセッサコア１１の命令カウンタＩＣ１の値を取り出し（ステップＳ６０１）、その値をプロセッサコア２１の命令カウンタＩＣ２に設定する（ステップＳ６０２）。そして最後に命令カウンタＩＣ２に設定されたアドレスから次命令のオペコードを取り出し（ステップＳ１０７）、モジュールの実行を完了する。
【００７６】
ここで、プロセッサコア１１からの通信が割り込みを用いて行われているので、このソフトウエアモジュールは割り込みハンドラ中に実装されている。
【００７７】
なお、メモリにフラグを書き込むなどの方法でプロセッサコア１１からの通信がされる場合は、プロセッサコア２１はある命令語のソフトウエアモジュールの実行から次の命令語のソフトウエアモジュールの実行に移る間、すなわちターゲットシステムの命令語の実行終了毎にフラグが書き込まれたメモリを参照し、通信を受け取っていた場合にこの分岐ＧＯのソフトウエアモジュールへ分岐するなどの方法を採ることになる。
【００７８】
以上に説明したように、条件分岐命令の場合は、分岐ＮＯＧＯと仮定してプリフェッチを先行させ、プロセッサコア１１がそれとは異なる方向（分岐ＧＯ）へ分岐した場合には、プロセッサコア２１へそれを通知することによって、プロセッサコア２１のプリフェッチをプロセッサコア１１の命令シーケンス上に補正することで、プリフェッチ動作を継続させることが可能になる。
【００７９】
尚、分岐ＧＯと仮定してプリフェッチを行うフローも考えられるが、この場合は図６のステップＳ４０６で示した割り込みの送信を分岐ＮＯＧＯの場合に行うよう、プロセッサコア１１側のフローを変更する必要がある。
【００８０】
４．無条件分岐命令の場合
無条件分岐命令の場合は、常に分岐先が分かっているので、ロード命令のフローと同様の考えでプロセッサコア２１も常にＧＯ側のアドレスを生成して分岐する。
【００８１】
上記実施の形態は以下の効果を有する。
【００８２】
以上に説明したように、本発明のプロセッサコア２１にて実行されるエミュレーションソフトウェアは、プロセッサコア１１で実行される命令語を簡略化して実行するものであり、条件分岐命令以外の命令が並んだ命令語を実行する場合には、処理が簡略化されているプロセッサコア２１がプロセッサコア１１に先行して命令語を実行することが期待される。これにより、ターゲットシステムのオペコード又はオペランドを二次キャッシュメモリ２へプリフェッチする効果が得られる。条件分岐命令の場合には、プロセッサコア２１では分岐ＮＯＧＯ（または分岐ＧＯ）を一旦仮定してプリフェッチを先行させ、プロセッサコア１１がそれとは異なる方向へ分岐した場合にプロセッサコア２１へそれを通知することで、プロセッサコア２１のプリフェッチをプロセッサコア１１の命令シーケンス上に補正することで、プリフェッチ動作を継続させることが可能になる。これにより、プロセッサコア１１のエミュレーション時のメモリアクセスのレイテンシを短縮することが可能となり、プロセッサコア１１で実行されるエミュレーションソフトウェアの実行速度を向上させることができる。
【００８３】
その理由は、プラットフォームシステムのプロセッサ数がターゲットシステムのプロセッサ数を超えるとき、ターゲットシステムのプロセッサ数を超えた数のプラットフォームシステムのプロセッサがプロセッサコア２１として、プラットフォームシステムのプロセッサコア１１の性能を高めるために有効利用することができる。よって、より高性能なエミュレーションシステムを実現できる。
【００８４】
なお、本願の実施形態は上記に限定されるものではなく、例えば以下のように変形してもよい。
【００８５】
上記実施形態では、ターゲットシステムとしてＣＩＳＣアーキテクチャの計算機システムを想定しており、図３に図示した以外にも例えば図９のような形式（レジスタ間の演算命令などに利用される）や、図１０のような形式（二つのアドレス指定フィールドを持ち、メモリ間演算命令などに利用される）など、長さの異なる多くの命令形式をサポートしている。これに限定されるわけではなく、より単純なＲＩＳＣアーキテクチャの計算機システムをターゲットシステムとしても構わない。なお、図９に示す形式の場合、ＯＰがオペコードを形成し、ＧＲ１とＧＲ２がオペランドを形成する。図１０に示す形式の場合、ＯＰがオペコードを形成、ＧＲ１，ＢＲ１，Ｄ１，０，ＢＲ２，Ｄ２がオペランドを形成する。
【００８６】
図２又は図４乃至図８に示したのはメインプロセッサとして機能するプロセッサコア１１又はサブプロセッサとして機能するプロセッサコア２１で実行されるエミュレーションソフトウェアのうち、ターゲットシステムの１命令をエミュレートするためのフロー（ソフトウェアモジュール）であって、ターゲットシステムのアーキテクチャにて定義されている個々の命令毎に同様なフローに従ったソフトウェアモジュールが存在し、これらの集合体によってエミュレーションソフトウェアが構成されている。
【００８７】
また、図２又は図４乃至図８に示したフローチャートに対応するプログラムをフレキシブルディスク又はハードディスク等の情報記録媒体に記録しておき、又は当該プログラムをインターネット等のネットワークを介して配信して記録しておき、これを上記プラットフォームシステムとして機能するエミュレーション装置に備えられている汎用のマイクロコンピュータ等により読み出して実行させることにより、当該各マイクロコンピュータ等を上記エミュレーション装置として機能させることも可能である。
【産業上の利用可能性】
【００８８】
本発明によれば、複数のプロセッサが一つのキャッシュメモリを共有するハードウェア構造をとるコンピュータシステム上に実装されるエミュレーション装置に適用できる。
【図面の簡単な説明】
【００８９】
【図１】図１は、本願発明に係るエミュレーション装置としてのプラットフォームシステムのプロセッサ部を示すブロック図である。
【図２】図２は、ターゲットシステムの命令の一例として、ロード命令の場合のプロセッサコア１１の動作を説明する図である。
【図３】図３は、ロード命令が格納されているときの形式を示す図である。
【図４】図４は、ターゲットシステムの命令の一例として、ロード命令の場合のプロセッサコア２１のオペコードのプリフェッチ動作を説明する図である。
【図５】図５は、ターゲットシステムの命令の一例として、ロード命令の場合のプロセッサコア２１のオペランドのプリフェッチ動作を説明する図である。
【図６】図６は、条件分岐命令の場合のプロセッサコア１１の動作を説明する図である。
【図７】図７は、条件分岐命令の場合のプロセッサコア２１の動作を説明する図である。
【図８】図８は、図６のステップＳ４０２において分岐ＧＯへ分岐したときのプロセッサコア２１の動作を説明する図である。
【図９】図９は、ターゲットシステムの命令が格納されているときの他の形式を示す図である。
【図１０】図１０は、ターゲットシステムの命令が格納されているときの他の形式を示す図である。
【符号の説明】
【００９０】
１：プロセッサ
２：二次キャッシュメモリ（Ｌ２）
３：バス（ＦＳＢ：Front Side Bus）
１１，２１：プロセッサコア
１２，２２：一次キャッシュメモリ（Ｌ１）
ＩＣ１，ＩＣ２：命令カウンタ
【図１】
2006268487.tif 000003
【図２】
2006268487.tif 000004
【図３】
2006268487.tif 000005
【図４】
2006268487.tif 000006
【図５】
2006268487.tif 000007
【図６】
2006268487.tif 000008
【図７】
2006268487.tif 000009
【図８】
2006268487.tif 000010
【図９】
2006268487.tif 000011
【図１０】
2006268487.tif 000012