(57)【特許請求の範囲】
【請求項１】
命令をそれぞれ実行する複数の命令実行部と、前記複数の命令実行部がそれぞれ実行する第１の命令セットとは異なる第２の命令セットに含まれる模擬対象命令を前記第１の命令セットに含まれる命令に変換するとともに、変換した命令を前記複数の命令実行部に投入する模擬動作を制御する制御部と、前記複数の命令実行部それぞれからアクセスされる記憶部とを有する情報処理装置において、
前記複数の命令実行部の各々は、
前記制御部から投入された命令のうち、前記記憶部に対する書き込みアクセスを行う書き込みアクセス命令または前記記憶部に対する読み出しアクセスを行う読み出しアクセス命令を実行し、他の命令実行部と命令を並列に実行する並列実行期間内に、実行した前記書き込みアクセス命令に基づく前記記憶部へのデータの書き込みを保留するアクセス処理部と、
前記並列実行期間内に実行された前記書き込みアクセス命令と前記読み出しアクセス命令とを含むメモリアクセス命令の実行履歴を保持する履歴保持部とを有し、
前記制御部は、
前記並列実行期間後に、前記実行履歴に基づき、メモリアクセス命令のアドレスが競合した前記複数の命令実行部のいずれか１つを選択し、選択した命令実行部が前記並列実行期間内に実行した書き込み命令に基づき、選択した前記命令実行部による前記記憶部へのデータの書き込みを完了させるとともに、次の並列実行期間に実行させる命令を選択した前記命令実行部に対して投入し、
選択しなかった他の命令実行部に、前記並列実行期間内に実行した命令を前記次の並列実行期間に再実行させることを特徴とする情報処理装置。
【請求項２】
前記複数の命令実行部の各々は、命令の再実行が判定された回数を保持する不採用数保持部を有し、
前記制御部は、
前記並列実行期間後に、メモリアクセス命令のアドレスが競合した命令実行部のうち、不採用数保持部に保持された回数が他より多い命令実行部を選択し、選択した命令実行部の不採用数保持部が保持する回数を初期値にリセットし、前記他の命令実行部の不採用数保持部が保持する回数を更新することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記制御部は、メモリアクセス命令のアドレスが競合した複数の命令実行部の前記不採用数保持部に保持された回数が互いに同じ場合、予め設定された優先順に基づいて、メモリアクセス命令のアドレスが競合した複数の命令実行部のいずれか１つを選択することを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記制御部は、前記並列実行期間後に、前記履歴保持部に保持された実行履歴に基づいて、メモリアクセス命令のアドレスが競合しない命令実行部に、保留した前記記憶部へのデータの書き込みを実行させるとともに次の並列実行期間に実行させる命令を投入することを特徴とする請求項１ないし請求項３のいずれか１項記載の情報処理装置。
【請求項５】
前記複数の命令実行部の各々は、前記並列実行期間の開始時における命令実行部の状態を保持する状態保持部を有し、
前記制御部は、前記並列実行期間後に、命令の再実行が判定された命令実行部の状態を前記状態保持部に保持された状態に戻すことを特徴とする請求項１ないし請求項４のいずれか１項記載の情報処理装置。
【請求項６】
前記制御部は、前記並列実行期間に、前記複数の命令実行部のそれぞれに互いに等しい数の命令を実行させることを特徴とする請求項１ないし請求項５のいずれか１項記載の情報処理装置。
【請求項７】
前記アクセス処理部は、前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスが読み出しアクセス命令に含まれる読み出しアドレスとして前記履歴保持部に保持されている場合、前記履歴保持部に保持されている読み出しアクセス命令を示す情報を書き込みアクセス命令を示す情報に変更し、書き込みアクセス命令に含まれる書き込みデータを前記履歴保持部に格納することを特徴とする請求項１ないし請求項６のいずれか１項記載の情報処理装置。
【請求項８】
前記アクセス処理部は、前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスが、他の書き込みアクセス命令に含まれる書き込みアドレスとして前記履歴保持部に保持されている場合、前記履歴保持部に保持された書き込みデータを書き込みアクセス命令に含まれる書き込みデータで書き替えることを特徴とする請求項１ないし請求項７のいずれか１項記載の情報処理装置。
【請求項９】
前記アクセス処理部は、前記並列実行期間内に実行する読み出しアクセス命令に含まれる読み出しアドレスが、書き込みアクセス命令に含まれる書き込みアドレスとして前記履歴保持部に保持されている場合、前記履歴保持部に保持された書き込みデータを読み出しアクセス命令に対する読み出しデータとして読み出すことを特徴とする請求項１ないし請求項８のいずれか１項記載の情報処理装置。
【請求項１０】
前記制御部は、前記複数の命令実行部のいずれかが実行した書き込みアクセス命令に含まれるアドレスが、前記複数の命令実行部のいずれか以外の他の命令実行部が実行した、書き込みアクセス命令に含まれるアドレスまたは読み出しアクセス命令に含まれるアドレスと一致する場合、前記複数の命令実行部のいずれかを、命令実行部でメモリアクセス命令のアドレスが競合が発生した命令実行部であると判定することを特徴とする請求項１ないし請求項９のいずれか１項記載の情報処理装置。
【請求項１１】
前記アクセス処理部と前記記憶部との間で入出力されるデータのビット幅は、メモリアクセス命令のオペランドデータのビット幅より大きく、
前記アクセス処理部は、前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスが読み出しアクセス命令に含まれる読み出しアドレスとして前記履歴保持部に保持されている場合、前記履歴保持部に保持されている読み出しアクセス命令を示す情報を書き込みアクセス命令を示す情報に書き替え、書き込みアクセス命令に含まれる書き込みアドレスを用いて前記記憶部からデータを読み出し、読み出したデータに書き込みアクセス命令に含まれる書き込みデータをマージし、マージしたデータを前記履歴保持部に格納することを特徴とする請求項１ないし請求項７のいずれか１項記載の情報処理装置。
【請求項１２】
前記アクセス処理部は、前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスが前記履歴保持部に保持されていない場合、書き込みアクセス命令を示す情報を前記履歴保持部に格納し、書き込みアクセス命令に含まれるアクセスアドレスを用いて前記記憶部からデータを読み出し、読み出したデータに書き込みアクセス命令に含まれる書き込みデータをマージし、マージしたデータを前記履歴保持部に格納することを特徴とする請求項１１記載の情報処理装置。
【請求項１３】
命令をそれぞれ実行する複数の命令実行部と、前記複数の命令実行部がそれぞれ実行する第１の命令セットとは異なる第２の命令セットに含まれる模擬対象命令を前記第１の命令セットに含まれる命令に変換するとともに、変換した命令を前記複数の命令実行部に投入する模擬動作を制御する制御部と、前記複数の命令実行部それぞれからアクセスされる記憶部とを有する情報処理装置の制御方法において、
前記複数の命令実行部の各々が有するアクセス処理部が、
前記制御部から投入された命令のうち、前記記憶部に対する書き込みアクセスを行う書き込みアクセス命令または前記記憶部に対する読み出しアクセスを行う読み出しアクセス命令を実行し、
他の命令実行部と命令を並列に実行する並列実行期間内に、実行した前記書き込みアクセス命令に基づく前記記憶部へのデータの書き込みを保留し、
前記複数の命令実行部の各々が有する履歴保持部が、前記並列実行期間内に実行された前記書き込みアクセス命令と前記読み出しアクセス命令とを含むメモリアクセス命令の実行履歴を保持し、
前記制御部が、
前記並列実行期間後に、前記実行履歴に基づき、メモリアクセス命令のアドレスが競合した前記複数の命令実行部のいずれか１つを選択し、
選択した命令実行部が前記並列実行期間内に実行した書き込み命令に基づき、選択した前記命令実行部による前記記憶部へのデータの書き込みを完了させるとともに、次の並列実行期間に実行させる命令を選択した前記命令実行部に対して投入し、
選択しなかった他の命令実行部に、前記並列実行期間内に実行した命令を前記次の並列実行期間に再実行させることを特徴とする情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および情報処理装置の制御方法に関する。
【背景技術】
【０００２】
情報処理装置では、複数のプロセッサを並列に動作させることで、単一のプロセッサを動作させる場合に比べて、処理効率は向上する。この種の情報処理装置において、共有メモリにアクセスした複数のプロセッサの履歴を記録し、プログラムの再開時に、履歴に合わせて各プロセッサによる共有メモリへのアクセスを待機させることで、プログラムの再現性は確保される（例えば、特許文献１参照）。また、複数のプロセッサが共有メモリにアクセスする順番を記録し、プログラムの再開時に、記録された順番で共有メモリへのアクセスを許可することで、プログラムの再現性は確保される（例えば、特許文献２参照）。
【０００３】
命令の処理と、命令の処理と非同期に実行されるデータ転送処理とを並列に実行する場合、データの転送期間を所定数のタームに分割し、ターム毎に命令の処理とデータ転送処理との同期を取ることで、プログラムの再現性は確保される（例えば、特許文献３参照）。また、同期命令と非同期命令との実行を模擬するシミュレータにおいて、非同期命令によるデータ転送を、予め設定された条件である所定数の同期命令が実行される間に実行することで、非同期命令の実行の再現性は確保される（例えば、特許文献４参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平７−１３８０５号公報
【特許文献２】特開平７−１３９４３号公報
【特許文献３】特開２００７−３３４３９２号公報
【特許文献４】特開平４−２７７８４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、プログラムを実行するプロセッサの動作を模倣するエミュレータは、デバッグの対象となるプログラムに含まれる命令を複数のプロセッサで並列に実行することで、プログラムを逐次処理する場合に比べて高速なエミュレーションを実行することができる。この種のエミュレータでは、実行するプログラムの再現性を確保することが、プログラムを効率よくデバッグするために重要である。
【０００６】
しかしながら、エミュレータにおいて、デバッグの対象となるプログラムに含まれる命令を複数のプロセッサで並列に実行する場合、複数のプロセッサが実行する命令の実行順序は、プログラムの実行毎に変わるおそれがある。命令の実行順序が一定でない場合、プログラムの実行中に、不具合が現れる場合と不具合が現れない場合とが発生するため、命令の実行順序が一定の場合に比べて、デバッグ効率は低下する。
【０００７】
１つの側面では、本件開示の情報処理装置および情報処理装置の制御方法は、プログラムに含まれる命令を複数の命令実行部で並列に実行する場合に、命令の実行順序が変わることを抑止し、プログラムのデバッグ効率を向上することを目的とする。
【課題を解決するための手段】
【０００８】
一つの観点によれば、命令をそれぞれ実行する複数の命令実行部と、複数の命令実行部がそれぞれ実行する第１の命令セットとは異なる第２の命令セットに含まれる模擬対象命令を第１の命令セットに含まれる命令に変換するとともに、変換した命令を複数の命令実行部に投入する模擬動作を制御する制御部と、複数の命令実行部それぞれからアクセスされる記憶部とを有する情報処理装置において、複数の命令実行部の各々は、制御部から投入された命令のうち、記憶部に対する書き込みアクセスを行う書き込みアクセス命令または記憶部に対する読み出しアクセスを行う読み出しアクセス命令を実行し、他の命令実行部と命令を並列に実行する並列実行期間内に、実行した書き込みアクセス命令に基づく記憶部へのデータの書き込みを保留するアクセス処理部と、並列実行期間内に実行された書き込みアクセス命令と読み出しアクセス命令とを含むメモリアクセス命令の実行履歴を保持する履歴保持部とを有し、制御部は、並列実行期間後に、実行履歴に基づき、メモリアクセス命令のアドレスが競合した複数の命令実行部のいずれか１つを選択し、選択した命令実行部が並列実行期間内に実行した書き込み命令に基づき、選択した命令実行部による記憶部へのデータの書き込みを完了させるとともに、次の並列実行期間に実行させる命令を選択した命令実行部に対して投入し、選択しなかった他の命令実行部に、並列実行期間内に実行した命令を次の並列実行期間に再実行させる。
【０００９】
別の観点によれば、命令をそれぞれ実行する複数の命令実行部と、複数の命令実行部がそれぞれ実行する第１の命令セットとは異なる第２の命令セットに含まれる模擬対象命令を第１の命令セットに含まれる命令に変換するとともに、変換した命令を複数の命令実行部に投入する模擬動作を制御する制御部と、複数の命令実行部それぞれからアクセスされる記憶部とを有する情報処理装置の制御方法において、複数の命令実行部の各々が有するアクセス処理部が、制御部から投入された命令のうち、記憶部に対する書き込みアクセスを行う書き込みアクセス命令または記憶部に対する読み出しアクセスを行う読み出しアクセス命令を実行し、他の命令実行部と命令を並列に実行する並列実行期間内に、実行した書き込みアクセス命令に基づく記憶部へのデータの書き込みを保留し、複数の命令実行部の各々が有する履歴保持部が、並列実行期間内に実行された書き込みアクセス命令と読み出しアクセス命令とを含むメモリアクセス命令の実行履歴を保持し、制御部が、並列実行期間後に、実行履歴に基づき、メモリアクセス命令のアドレスが競合した複数の命令実行部のいずれか１つを選択し、選択した命令実行部が並列実行期間内に実行した書き込み命令に基づき、選択した命令実行部による記憶部へのデータの書き込みを完了させるとともに、次の並列実行期間に実行させる命令を選択した命令実行部に対して投入し、選択しなかった他の命令実行部に、並列実行期間内に実行した命令を次の並列実行期間に再実行させる。
【発明の効果】
【００１０】
本件開示の情報処理装置および情報処理装置の制御方法は、プログラムに含まれる命令を複数の命令実行部で並列に実行する場合に、命令の実行順序が変わることを抑止することができ、プログラムのデバッグ効率を向上することができる。
【図面の簡単な説明】
【００１１】
【図１】情報処理装置および情報処理装置の制御方法の一実施形態を示す図である。
【図２】図１に示す情報処理装置の動作の一例を示す図である。
【図３】情報処理装置および情報処理装置の制御方法の別の実施形態を示す図である。
【図４】図３に示す書き込み履歴保持部およびアクセス履歴保持部の一例を示す図である。
【図５】図３に示すアクセス処理部の動作の一例を示す図である。
【図６】図３に示すエミュレーション制御部の動作の一例を示す図である。
【図７】図３に示す情報処理装置の動作の一例を示す図である。
【図８】図７に示す情報処理装置の動作において、不採用数保持部、状態一時保持部および状態保持部が保持する情報の変化の一例を示す図である。
【図９】情報処理装置および情報処理装置の制御方法の別の実施形態を示す図である。
【図１０】図９に示す書き込み履歴保持部およびアクセス履歴保持部の一例を示す図である。
【図１１】図９に示すアクセス処理部の動作の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を用いて実施形態を説明する。
【００１３】
図１は、情報処理装置および情報処理装置の制御方法の一実施形態を示す。図１に示す情報処理装置ＩＰＥ１は、命令をそれぞれ実行する複数の命令実行部１（１−１、１−２）と、命令実行部１−１、１−２による命令の実行を制御する制御部２と、命令実行部１−１、１−２により共通にアクセスされる記憶部３とを有する。例えば、命令実行部１は、プロセッサコアであり、記憶部３は、バスを介して命令実行部１に接続された主記憶装置である。制御部２は、命令実行部１−１、１−２がそれぞれ実行する第１の命令セットとは異なる第２の命令セットに含まれる模擬対象命令を受け、受けた模擬対象命令を第１の命令セットに含まれる命令に変換する。例えば、第２の命令セットに含まれる命令は、開発中の他のプロセッサで実行される命令である。そして、制御部２は、変換した命令を命令実行部１−１、１−２に投入することで、第２の命令セットに含まれる命令であって、情報処理装置ＩＰＥ１で模擬的に実行される模擬対象命令を命令実行部１−１、１−２に実行させる模擬動作を制御する。すなわち、情報処理装置ＩＰＥ１は、プログラムを実行する他のプロセッサの動作を模倣するエミュレータとして機能し、プログラムのデバッグに使用される。なお、命令実行部１の数は、図１に示す例に限定されず、２つより多くてもよい。
【００１４】
各命令実行部１は、履歴保持部４（４−１、４−２）およびアクセス処理部５（５−１、５−２）を有する。履歴保持部４には、図２に示す並列実行期間に各命令実行部１が実行するメモリアクセス命令（書き込みアクセス命令または読み出しアクセス命令）の実行履歴を保持する。履歴保持部４への実行履歴の格納は、履歴保持部４を含む命令実行部１により実行される。並列実行期間は、複数の命令実行部１が、第２の命令セットに含まれる命令により記述されたデバッグの対象のプログラム（模擬対象プログラム）に対応する第１の命令セットに含まれる命令を並列に実行する期間である。
【００１５】
アクセス処理部５は、制御部２から投入された命令のうち、記憶部３に対する書き込みアクセスを行う書き込みアクセス命令または記憶部３に対する読み出しアクセスを行う読み出しアクセス命令を実行することで、記憶部３にアクセスする。但し、アクセス処理部５は、並列実行期間に、書き込みアクセス命令に基づく記憶部３へのデータの書き込みを保留し、保留した書き込みアクセス命令を示す情報を履歴保持部４に格納する。
【００１６】
制御部２は、並列実行期間後の判定期間に、履歴保持部４に保持された実行履歴に基づき、並列実行期間に複数の命令実行部１が実行したメモリアクセス命令のアドレスが競合するか否かを判定する。メモリアクセス命令のアドレスが競合する場合、制御部２は、メモリアクセス命令のアドレスが競合した命令実行部１のいずれか１つを所定の規則に基づいて選択する。さらに、制御部２は、メモリアクセス命令が競合しない命令実行部１を選択する。以下では、メモリアクセス命令のアドレスの競合は、メモリアクセス命令の競合とも称される。
【００１７】
例えば、５つの命令実行部１のうち、２つの命令実行部１でメモリアクセス要求が競合し、残りの３つのメモリ実行部１ではメモリアクセス要求が競合しないとする。この場合、制御部２は、メモリアクセス要求が競合する２つの命令実行部１のいずれか１つを選択するとともに、残りの３つの命令実行部１を選択する。
【００１８】
制御部２は、選択した命令実行部１に、書き込みを保留したデータの記憶部３への書き込みを完了させ、次の並列実行期間に実行させる新たな命令を、選択した命令実行部１に投入する。また、制御部２は、メモリアクセス命令が競合する命令実行部１のうち、選択しなかった他の命令実行部１に、並列実行期間に実行した命令を、次の並列実行期間で再実行させる。すなわち、選択しなかった他の命令実行部１が並列実行期間に実行した命令は保留される。
【００１９】
図２は、図１に示す情報処理装置ＩＰＥ１の動作の一例を示す。すなわち、図２は、情報処理装置ＩＰＥ１の制御方法の一例を示す。図１に示す制御部２は、並列実行期間の処理と判定期間の処理とを繰り返し実行し、並列実行期間を開始する前に、各命令実行部１に命令を投入する。例えば、命令実行部１−１、１−２に投入される命令の数（すなわち、命令実行部１−１、１−２が並列実行期間に実行する命令数）は、互いに同じである。
【００２０】
図２に示す例では、制御部２は、命令実行部１−１に書き込みアクセス命令Ｗ１と読み出しアクセス命令Ｒ１、Ｒ３、Ｒ４を投入し、命令実行部１−２に書き込みアクセス命令Ｗ２と読み出しアクセス命令Ｒ１、Ｒ２、Ｒ５を投入する。書き込みアクセス命令Ｗの末尾の数字は、書き込みアドレスを示し、読み出しアクセス命令Ｒの末尾の数字は、読み出しアドレスを示す。書き込みアクセス命令Ｗに続く括弧内の符号は、書き込みデータを示し、読み出しアクセス命令Ｒに続く括弧内の符号は、読み出しデータを示す。
【００２１】
アクセス処理部５−１、５−２に接続される矢印は、データまたは情報の流れを示す。但し、記憶部３に接続される破線の矢印は、メモリアクセス命令に基づく記憶部３へのアクセスが保留または省略されることを示す。なお、実際の動作では、制御部２は、命令実行部１にメモリアクセス命令以外の演算命令等も投入するが、図２では、説明を分かりやすくするために、メモリアクセス命令Ｗ、Ｒのみを示す。
【００２２】
並列実行期間において、命令実行部１−１は、書き込みアクセス命令Ｗ１に基づく記憶部３へのデータＤｘの書き込みを保留し、書き込みアクセス命令Ｗ１を示す情報を履歴保持部４−１に格納する（図２（ａ））。書き込みアクセス命令Ｗ１を示す情報は、書き込みアドレスおよび書き込みデータＤｘを含む。並列実行期間に、共有資源である記憶部３へのデータの書き込みを保留することで、１つの命令実行部１の動作が他の命令実行部１の動作に影響を与えることを抑止することができる。
【００２３】
命令実行部１−１が次に実行する読み出しアクセス命令Ｒ１に含まれる読み出しアドレスは、書き込みアクセス命令Ｗ１に含まれる書き込みアドレスと同じである。この場合、命令実行部１−１は、読み出しアクセス命令Ｒ１に基づいて記憶部３をアクセスする代わりに、履歴保持部４−１からデータＤｘを読み出す（図２（ｂ））。そして、命令実行部１−１は、読み出しアクセス命令Ｒ１を示す情報を履歴保持部４−１に格納する（図２（ｃ））。読み出しアクセス命令Ｒ１を示す情報は、読み出しアドレスを含む。
【００２４】
命令実行部１−１が実行する読み出しアクセス命令Ｒ３、Ｒ４に含まれる読み出しアドレスは、履歴保持部４−１に保持された書き込みアクセス命令Ｗ１に含まれる書き込みアドレスと異なる。このため、命令実行部１−１は、読み出しアクセス命令Ｒ３、Ｒ４のそれぞれに基づいて記憶部３にアクセスし、記憶部３からデータＤ３、Ｄ４を読み出す（図２（ｄ））。また、命令実行部１−１は、読み出しアクセス命令Ｒ３、Ｒ４を示す情報を履歴保持部４−１に格納する（図２（ｅ））。
【００２５】
一方、命令実行部１−２は、書き込みアクセス命令Ｗ２に基づく記憶部３へのデータＤｙの書き込みを保留し、書き込みアクセス命令Ｗ２を示す情報を履歴保持部４−２に格納する（図２（ｆ））。命令実行部１−２が次に実行する読み出しアクセス命令Ｒ１に含まれる読み出しアドレスは、履歴保持部４−２に保持された書き込みアクセス命令Ｗ２に含まれる書き込みアドレスと異なる。このため、命令実行部１−２は、読み出しアクセス命令Ｒ１に基づいて記憶部３にアクセスし、記憶部３からデータＤ１（期待値）を読み出す（図２（ｇ））。そして、命令実行部１−２は、読み出しアクセス命令Ｒ１を示す情報を履歴保持部４−２に格納する（図２（ｈ））。
【００２６】
命令実行部１−２が実行する読み出しアクセス命令Ｒ２に含まれる読み出しアドレスは、書き込みアクセス命令Ｗ２に含まれる書き込みアドレスと同じである。このため、命令実行部１−２は、読み出しアクセス命令Ｒ２に基づいて記憶部３をアクセスする代わりに、履歴保持部４−２からデータＤｙを読み出す（図２（ｉ））。そして、命令実行部１−２は、読み出しアクセス命令Ｒ２を示す情報を履歴保持部４−２に格納する（図２（ｊ））。
【００２７】
命令実行部１−２が実行する読み出しアクセス命令Ｒ５に含まれる読み出しアドレスは、履歴保持部４−２に保持された書き込みアクセス命令Ｗ１に含まれる書き込みアドレスと異なる。このため、命令実行部１−２は、読み出しアクセス命令Ｒ５に基づいて記憶部３にアクセスし、記憶部３からデータＤ５を読み出す（図２（ｋ））。また、命令実行部１−２は、読み出しアクセス命令Ｒ５を示す情報を履歴保持部４−２に格納する（図２（ｌ））。そして、並列実行期間が終了する。
【００２８】
次に、判定期間において、制御部２は、履歴保持部４−１、４−２に保持された情報に基づいて、命令実行部１−１、１−２によりそれぞれ実行された命令のうち、互いに競合する命令の有無を判定する。例えば、制御部２は、互いに同じ書き込みアドレスを含む書き込みアクセス命令を実行した複数の命令実行部１を「競合あり」と判定する。また、制御部２は、他の命令実行部１が実行した書き込みアクセス命令に含まれる書き込みアドレスと同じ読み出しアドレスを含む読み出しアクセス命令を実行した命令実行部１を「競合あり」と判定する。
【００２９】
図２に示す例では、制御部２は、書き込みアクセス命令Ｗ１を実行した命令実行部１−１と、読み出しアクセス命令Ｒ１を実行した命令実行部１−２とが互いに競合すると判定する。制御部２は、所定の規則に基づいて、並列実行期間に命令実行部１−１が実行した命令を採用することを決定し、並列実行期間に命令実行部１−２が実行した命令を保留することを決定する。すなわち、制御部２は、所定の規則に基づいて、互いに競合する複数の命令実行部１のいずれか１つを選択する。
【００３０】
例えば、制御部２は、互いに競合する複数の命令実行部１のうち、命令の実行が保留された並列実行期間の数が他より多い命令実行部１を選択する。また、互いに競合する複数の命令実行部１において過去に命令の実行が保留された並列実行期間の数が互いに同じ場合、制御部２は、ラウンドロビン等の再現性のあるアービター論理を用いて、選択する命令実行部１を決定する。なお、制御部２は、保留された並列実行期間の数を用いることなく、命令が互いに競合する複数の命令実行部１のうちの１つを、ラウンドロビン等の再現性のあるアービター論理を用いて選択してもよい。
【００３１】
そして、制御部２は、選択した命令実行部１−１が保留したデータＤｘの記憶部３への書き込みを実行するため、判定期間に、命令実行部１−１に書き込みアクセス命令Ｗ１を実行させる（図２（ｍ））。実行した命令が保留される命令実行部１−２は、命令が実行されなかったものとして扱われ、命令の実行結果および履歴保持部４−２に保持された情報は破棄される。これにより、命令実行部１−２の状態は、並列実行期間を開始する前の状態に戻る。
【００３２】
この後、制御部２は、命令実行部１−１に、次の並列実行期間に実行させる書き込みアクセス命令Ｗ６と読み出しアクセス命令Ｒ７、Ｒ８、Ｒ９とを投入し、命令実行部１−２に、並列実行期間に実行した命令の次の並列実行期間での再実行を指示する。そして、次の並列実行期間に、命令実行部１−１は、書き込みアクセス命令Ｗ６と読み出しアクセス命令Ｒ７、Ｒ８、Ｒ９とを実行する（図２（ｎ））。命令実行部１−２は、書き込みアクセス命令Ｗ２と読み出しアクセス命令Ｒ１、Ｒ２、Ｒ５とを再び実行する（図２（ｏ））。なお、互いに競合する命令実行部１が存在しない場合、制御部２は、全ての命令実行部１に新たな命令を投入する。互いに競合しない複数の命令実行部１が存在する場合、デバッグの対象のプログラムに含まれる命令は、複数の命令実行部１で実行される。これにより、プログラムの実行効率を、プログラムを単一の命令実行部１で実行する場合に比べて向上することができる。
【００３３】
図２に示す「次の並列実行期間」において、命令実行部１−２が実行する読み出しアクセス命令Ｒ１に含まれる読み出しアドレスは、履歴保持部４−２に保持された書き込みアクセス命令Ｗ２に含まれる書き込みアドレスと異なる。このため、命令実行部１−２は、読み出しアクセス命令Ｒ１に基づいて記憶部３にアクセスし、１つ前の並列実行期間に命令実行部１−１が記憶部３に書き込んだデータＤｘ（期待値Ｄ１と異なる）を記憶部３から読み出す（図２（ｐ））。すなわち、情報処理装置ＩＰＥ１は、プログラムの不具合を検出する。なお、正常なプログラムでは、命令実行部１間で排他処理が実行されるため、記憶部３から期待値と異なるデータが読み出されることはないが、図２に示す動作は、プログラムのデバッグ中に実行されるため、プログラムに不具合が含まれる。
【００３４】
このように、図１および図２に示す実施形態では、競合する複数の命令実行部１のいずれか１つを所定の規則に基づいて選択することで、各並列実行期間において、命令の実行が採用される命令実行部１を常に同じにすることができる。これにより、プログラムに含まれる命令の実行順序を常に同じにすることができ、プログラムの再現性を確保することができる。さらに、命令実行部１−１、１−２が並列実行期間に実行する命令数は、互いに同じであるため、並列実行期間に実行される命令数を、デバッグの対象のプログラムが実行される動作環境に依らず一定にすることができる。この結果、デバッグの対象のプログラムが実行される動作環境に依らず、プログラムの再現性を確保することができる。
【００３５】
図２に示す例では、制御部２は、判定期間に常に同じ規則に基づいて、競合する複数の命令実行部１のいずれか１つを選択する。このため、デバッグの対象のプログラムが複数回実行される場合にも、命令実行部１−２は、命令実行部１−１が実行する書き込みアクセス命令Ｗ１より常に後に読み出しアクセス命令Ｒ１を実行する。プログラムを実行する毎に、命令実行部１−２は、期待値Ｄ１と異なるデータＤｘを記憶部３から読み出すため、情報処理装置ＩＰＥ１は、プログラムを実行する毎にプログラムの不具合を検出することができる。すなわち、図１および図２に示す実施形態では、プログラムに含まれる命令を複数の命令実行部１で並列に実行する場合に、命令の実行順序が変わることを抑止することができ、プログラムのデバッグ効率を向上することができる。
【００３６】
これに対して、複数の命令実行部１が、投入された命令を互いに並列かつ独立に実行する場合、命令の実行順序は、プログラムを実行する毎に変化するおそれがある。例えば、命令実行部１−１が実行する書き込みアクセス命令Ｗ１（Ｄｘ）と命令実行部１−２が実行する読み出しアクセス命令Ｒ１の順序は、プログラムの実行時の命令実行部１−１、１−２の状態に応じて入れ替わるおそれがある。
【００３７】
図２に示すように、命令実行部１−１が実行する書き込みアクセス命令Ｗ１（Ｄｘ）より後に命令実行部１−２が読み出しアクセス命令Ｒ１を実行した場合、記憶部３から期待値Ｄｘが読み出され、プログラムの不具合が検出される。一方、命令実行部１−１が実行する書き込みアクセス命令Ｗ１（Ｄｘ）より前に命令実行部１−２が読み出しアクセス命令Ｒ１を実行した場合、記憶部３から期待値Ｄ１が読み出され、プログラムの不具合は検出されない。プログラムを実行する毎に、プログラムの不具合が検出される場合とプログラムの不具合が検出されない場合とが発生することで、不具合の原因がプログラムのどこにあるのかを突き止め難くなり、プログラムのデバッグ効率は、図２の動作に比べて低下する。
【００３８】
図３は、情報処理装置および情報処理装置の制御方法の別の実施形態を示す。図３に示す情報処理装置ＩＰＥ２は、プロセッサコア等の複数のコア１００（１００−１、１００−２、...、１００−ｎ）、エミュレーション制御部２００および主記憶装置３００を有する。コア１００は、命令を実行する命令実行部の一例であり、エミュレーション制御部２００は、複数のコア１００による命令の実行を制御する制御部の一例であり、主記憶装置３００は、複数のコア１００によりアクセスされる記憶部の一例である。
【００３９】
複数のコア１００およびエミュレーション制御部２００は、１つのチップ内に搭載されてもよい。情報処理装置ＩＰＥ２は、例えば、プログラムを実行する他のプロセッサの動作または他の情報処理装置の動作を模倣するエミュレータとして機能し、プログラムのデバッグに使用される。
【００４０】
エミュレーション制御部２００は、例えば、開発中の他のプロセッサで使用される命令セットに含まれる命令で記述されたプログラムを受け、受けたプログラムに含まれる命令をコア１００で使用される命令セットに含まれる命令に変換する。すなわち、コア１００が使用する命令セットアーキテクチャ（instruction set architecture；ＩＳＡ）は、他のプロセッサが使用する命令セットアーキテクチャと異なる。他のプロセッサで使用される命令セットに含まれる命令は、情報処理装置ＩＰＥ２で模擬的に実行される模擬対象命令の一例である。エミュレーション制御部２００は、模擬対象命令をコア１００に投入して実行させる模擬動作を制御する。
【００４１】
エミュレーション制御部２００は、複数のコア１００のうちエミュレーションを実行するコア１００に、デバッグ対象のプログラムに含まれる模擬対象命令であってコア１００用に変換した命令を分配し、複数のコア１００に命令を並列に実行させる機能を有する。また、エミュレーション制御部２００は、並列実行期間と判定期間とを交互に切り替えながら、エミュレーションを実行するコア１００の動作を制御する機能を有する。例えば、エミュレーション制御部２００の機能は、複数のコア１００の動作を制御するシステムコントローラにより実現される。
【００４２】
エミュレーション制御部２００は、エミュレーションを実行する複数のコア１００に投入した命令（コア１００用に変換された命令）を、並列実行期間に複数のコア１００に並列に実行させる。特に断らない限り以下で説明する”命令”は、コア１００用に変換された命令を示す。並列実行期間では、各コア１００は、実行した命令の履歴を保持するとともに、書き込みアクセス命令に含まれる書き込みデータを主記憶装置３００に書き込むことを保留する。次に、エミュレーション制御部２００は、判定期間において、各コア１００が保持している履歴に基づいて、複数のコア１００間での書き込みアクセス命令に対する競合を判定する。なお、並列実行期間に並列に動作させる複数のコア１００の数は、エミュレーションの実行前に指定される。
【００４３】
エミュレーション制御部２００は、書き込みアクセス命令に対して競合するコア１００の１つを、保留した書き込みアクセス命令を実行させるコアとして採用し（採用コア）、書き込みアクセス命令に対して競合する残りのコア１００を不採用とする（保留コア）。すなわち、エミュレーション制御部２００は、保留した書き込みアクセス命令を実行させるコア１００の１つを選択する。エミュレーション制御部２００は、採用コア１００に、保留した書き込みアクセス命令を実行させ、書き込みデータを主記憶装置３００に書き込ませるとともに、保留コア１００の状態を、命令を実行する前の状態に戻す処理を保留コア１００に実行させる。保留コア１００が並列実行期間に実行した命令はキャンセルされる。
【００４４】
また、エミュレーション制御部２００は、書き込みアクセス命令に対して競合しないコア１００（非競合コア１００）を、命令を実行するコアとして採用する（採用コア）。エミュレーション制御部２００は、非競合コア１００が、他のコア１００と競合しない書き込みアクセス命令を保留している場合、非競合コア１００に、保留した書き込みアクセス命令を実行させ、書き込みデータを主記憶装置３００に書き込ませる。
【００４５】
エミュレーション制御部２００は、採用コア１００および非競合コア１００に対して、次の並列実行期間で実行する新たな命令を投入し、保留コア１００に対して、前回の並列実行期間で実行した命令の再実行を指示する。そして、エミュレーション制御部２００は、並列実行期間によるコア１００の制御と、判定期間によるコア１００の制御とを繰り返し実行する。なお、各並列実行期間において、複数のコア１００にそれぞれ実行させる命令の数は、互いに同じである。エミュレーション制御部２００の動作の例は、図６から図８で説明される。
【００４６】
複数のコア１００は、互いに同一または同様の構成を有する。各コア１００は、エミュレーション実行部１０、状態管理部２０、メモリアクセス管理部３０および不採用数保持部４０を有する。
【００４７】
エミュレーション実行部１０は、演算に使用するデータおよび演算結果を保持するレジスタの値等、エミュレーションの実行に使用される情報を逐次保持する状態一時保持部１２を有する。エミュレーション実行部１０は、エミュレーション制御部２００から投入されるデバッグ対象のプログラムの一部に含まれる命令を実行するとともに、プログラムの実行により変化するコア１００内のレジスタの値等の情報を状態一時保持部１２に逐次保持する。なお、状態一時保持部１２は、コア１００内のレジスタ等、プログラムの実行により変化する情報を保持する要素を含んでもよい。
【００４８】
エミュレーション実行部１０は、実行する命令がメモリアクセス命令の場合、メモリアクセス命令をメモリアクセス管理部３０に転送する。メモリアクセス命令は、主記憶装置３００にデータを書き込む書き込みアクセス命令または主記憶装置３００からデータを読み出す読み出しアクセス命令である。メモリアクセス命令が読み出しアクセス命令の場合、エミュレーション実行部１０は、読み出しアクセス命令に対応する読み出しデータをメモリアクセス管理部３０から受信する。
【００４９】
状態管理部２０は、状態一時保持部１２が保持する情報が退避される状態保持部２２を有する。エミュレーション実行部１０は、後述する並列実行期間に実行した命令群が、エミュレーションの実行結果として選択される場合、状態一時保持部１２に保持されている情報を状態保持部２２に退避する。また、エミュレーション実行部１０は、並列実行期間に実行した命令群が、エミュレーションの実行結果として選択されない場合、状態保持部２２に保持されている情報を状態一時保持部１２に復帰する。これにより、エミュレーション実行部１０は、並列実行期間に実行した命令群が選択されない場合に、並列実行期間に実行した命令群によるデータ処理と同じデータ処理を、次の並列実行期間に実行することができる。
【００５０】
メモリアクセス管理部３０は、アクセス処理部３２、書き込み履歴保持部３４およびアクセス履歴保持部３６を有し、バスＢＵＳを介して主記憶装置３００に接続される。アクセス処理部３２は、並列実行期間にエミュレーション実行部１０から書き込みアクセス命令を受信した場合、書き込みアクセス命令に含まれる情報を書き込み履歴保持部３４およびアクセス履歴保持部３６に格納する。但し、アクセス履歴保持部３６が書き込みアクセス命令に含まれる情報を保持している場合、アクセス処理部３２は、書き込みアクセス命令に含まれる情報をアクセス履歴保持部３６に格納しない。書き込み履歴保持部３４およびアクセス履歴保持部３６は、並列実行期間に複数のコア１００により実行されるメモリアクセス命令の履歴が格納される履歴保持部の一例である。
【００５１】
また、アクセス処理部３２は、並列実行期間にエミュレーション実行部１０から読み出しアクセス命令を受信した場合、主記憶装置３００または書き込み履歴保持部３４からデータを読み出す。アクセス処理部３２は、主記憶装置３００または書き込み履歴保持部３４から読み出したデータをエミュレーション実行部１０に出力する。なお、アクセス処理部３２は、主記憶装置３００からデータを読み出す場合、読み出しアクセス命令に含まれる情報をアクセス履歴保持部３６に格納する。書き込み履歴保持部３４およびアクセス履歴保持部３６の例は、図４に示される。アクセス処理部３２の動作の例は、図５で説明される。
【００５２】
書き込みアクセス命令に含まれる書き込みデータのビット数は、書き込みアクセス命令に基づいてアクセス処理部３２が主記憶装置３００に書き込むデータのビット数と等しい。また、読み出しアクセス命令に基づいてアクセス処理部３２がエミュレーション実行部１０に出力する読み出しデータのビット数は、アクセス処理部３２が主記憶装置３００から読み出すデータのビット数と等しい。例えば、エミュレーション実行部１０とアクセス処理部３２との間で授受されるデータおよびアクセス処理部３２と主記憶装置３００との間で授受されるデータは、ともに８ビット（１バイト）である。
【００５３】
不採用数保持部４０は、並列実行期間に実行した命令群が、エミュレーションの実行結果として連続して選択されなかった数（以下、未採用数と称される）を保持するカウンタを有する。エミュレーション実行部１０は、並列実行期間に実行した命令群をエミュレーションの実行結果として選択した場合、不採用数保持部４０のカウンタの値を初期値にリセットする。エミュレーション実行部１０は、並列実行期間に実行した命令群をエミュレーションの実行結果として選択しなかった場合、不採用数保持部４０のカウンタの値を更新（例えば、”１”増加）する。
【００５４】
図４は、図３に示す書き込み履歴保持部３４およびアクセス履歴保持部３６の一例を示す。書き込み履歴保持部３４は、書き込みアクセス命令に含まれる書き込みアドレスと書き込みデータとの組を格納する複数のエントリを有する。アクセス履歴保持部３６は、アクセスアドレスと、メモリアクセス命令が書き込みアクセス命令または読み出しアクセス命令のいずれであるかを示すアクセス種別を格納する複数のエントリを有する。アクセスアドレスは、書き込みアクセス命令に含まれる書き込みアドレスまたは読み出しアクセス命令に含まれる読み出しアドレスである。
【００５５】
なお、図３に示すメモリアクセス管理部３０は、書き込み履歴保持部３４およびアクセス履歴保持部３６を１つにまとめた履歴保持部を有してもよい。この場合、履歴保持部の各エントリは、アクセスアドレス、アクセス種別および書き込みデータを格納する領域を有する。アクセス種別の領域に読み出しアクセス命令を示す情報が格納される場合、書き込みデータの領域は空白となる。
【００５６】
図５は、図３に示すアクセス処理部３２の動作の一例を示す。すなわち、図５は、情報処理装置の制御方法の一例を示す。図５に示す動作は、後述する並列実行期間の各々において、アクセス処理部３２が、エミュレーション実行部１０からメモリアクセス命令を受信したことに基づいて開始される。
【００５７】
まず、ステップＳ１０において、アクセス処理部３２は、エミュレーション実行部１０から受信したメモリアクセス命令が読み出しアクセス命令の場合、動作をステップＳ１２に移行する。アクセス処理部３２は、エミュレーション実行部１０から受信したメモリアクセス命令が書き込みアクセス命令の場合、動作をステップＳ２２に移行する。
【００５８】
ステップＳ１２において、アクセス処理部３２は、読み出しアクセス命令に含まれる読み出しアドレスがアクセス履歴保持部３６に保持された書き込みアドレスのいずれかと一致する場合、動作をステップＳ２０に移行する。すなわち、アクセス処理部３２は、読み出しアドレスと同じ書き込みアドレスを含む書き込みアクセス命令が並列実行期間に既に実行された場合、動作をステップＳ２０に移行する。アクセス処理部３２は、読み出しアクセス命令に含まれる読み出しアドレスが、アクセス履歴保持部３６に保持された書き込みアドレスのいずれとも一致しない場合、動作をステップＳ１４に移行する。
【００５９】
ステップＳ１４において、アクセス処理部３２は、読み出しアクセス命令に含まれる読み出しアドレスが、アクセス履歴保持部３６に保持された読み出しアドレスのいずれかと一致する場合、動作をステップＳ１８に移行する。すなわち、アクセス処理部３２は、並列実行期間において、読み出しアクセス命令に含まれる読み出しアドレスが、アクセス履歴保持部３６に既に保持された場合、ステップＳ１６の動作を省略するために動作をステップＳ１８に移行する。アクセス処理部３２は、読み出しアクセス命令に含まれる読み出しアドレスが、アクセス履歴保持部３６に保持された読み出しアドレスのいずれとも一致しない場合、動作をステップＳ１６に移行する。すなわち、アクセス処理部３２は、読み出しアクセス命令の履歴が、並列実行期間にアクセス履歴保持部３６に保持されていない場合、アクセス履歴をアクセス履歴保持部３６に格納するために動作をステップＳ１６に移行する。
【００６０】
ステップＳ１６において、アクセス処理部３２は、エミュレーション実行部１０から受信した読み出しアクセス命令に含まれる読み出しアドレスと読み出しアクセス命令を示すアクセス種別とを、アクセス履歴保持部３６内の空いているエントリに格納する。ステップＳ１６の後、動作はステップＳ１８に移行される。
【００６１】
ステップＳ１８において、アクセス処理部３２は、エミュレーション実行部１０から受信した読み出しアクセス命令に基づいて、主記憶装置３００にアクセスし、主記憶装置３００からデータを読み出す。アクセス処理部３２は、主記憶装置３００から読み出したデータをエミュレーション実行部１０に転送し、動作を終了する。
【００６２】
ステップＳ２０において、アクセス処理部３２は、書き込み履歴保持部３４を参照し、読み出しアクセス命令に含まれる読み出しアドレスと同じ値の書き込みアドレスを保持するエントリから書き込みデータを読み出す。すなわち、読み出しアクセス命令に含まれる読み出しアドレスと同じ書き込みアドレスを含む書き込みアクセス命令が並列実行期間に既に実行された場合、アクセス処理部３２は、主記憶装置３００ではなく、書き込み履歴保持部３４からデータを読み出す。そして、アクセス処理部３２は、アクセス履歴保持部３６読み出したデータを、読み出しアクセス命令に対応する読み出しデータとしてエミュレーション実行部１０に転送し、動作を終了する。
【００６３】
一方、ステップＳ２２において、アクセス処理部３２は、書き込みアクセス命令に含まれる書き込みアドレスが、アクセス履歴保持部３６に保持された書き込みアドレスのいずれかと一致する場合、動作をステップＳ３０に移行する。すなわち、アクセス処理部３２は、今回の書き込みアドレスと同じ書き込みアドレスを含む書き込みアクセス命令が並列実行期間に既に実行された場合、書き込み履歴保持部３４内の書き込みデータを更新するために、動作をステップＳ３０に移行する。アクセス処理部３２は、書き込みアクセス命令に含まれる書き込みアドレスが、アクセス履歴保持部３６に保持された書き込みアドレスのいずれとも一致しない場合、動作をステップＳ２４に移行する。すなわち、アクセス処理部３２は、書き込みアクセス命令に含まれる書き込みアドレスが、並列実行期間にアクセスアドレスとしてアクセス履歴保持部３６に保持されていない場合、動作をステップＳ２４に移行する。
【００６４】
ステップＳ２４において、アクセス処理部３２は、書き込みアクセス命令に含まれる書き込みアドレスが、アクセス履歴保持部３６に保持された読み出しアドレスのいずれかと一致する場合、動作をステップＳ２６に移行する。すなわち、アクセス処理部３２は、書き込みアクセス命令に含まれる書き込みアドレスと同じ読み出しアドレスを含む読み出しアクセス命令が並列実行期間に既に実行された場合、動作をステップＳ２６に移行する。アクセス処理部３２は、書き込みアクセス命令に含まれる書き込みアドレスが、アクセス履歴保持部３６に保持されたアクセスアドレスのいずれとも一致しない場合、動作をステップＳ２８に移行する。
【００６５】
ステップＳ２６において、アクセス処理部３２は、アクセス履歴保持部３６において、書き込みアクセス命令に含まれる書き込みアドレスと同じアドレスを保持するエントリのアクセス種別を読み出しアクセスから書き込みアクセスからに変更する。ステップＳ２６の後、動作はステップＳ３０に移行される。
【００６６】
ステップＳ２８において、アクセス処理部３２は、エミュレーション実行部１０から受信した書き込みアクセス命令に含まれる書き込みアドレスと書き込みアクセス命令を示すアクセス種別とを、アクセス履歴保持部３６内の空いているエントリに格納する。ステップＳ２８の後、動作はステップＳ３０に移行される。
【００６７】
ステップＳ３０において、アクセス処理部３２は、書き込みアクセス命令に含まれる書き込みアドレスと書き込みデータとを書き込み履歴保持部３４に書き込み、動作を終了する。
【００６８】
図６は、図３に示すエミュレーション制御部２００の動作の一例を示す。すなわち、図６は、情報処理装置の制御方法の一例を示す。図６に示す動作は、並列実行期間後の判定期間に実行される。
【００６９】
まず、ステップＳ４０において、エミュレーション制御部２００は、コア１００の番号Ｉ（以下、コア番号Ｉと称される）を”１”に設定する。例えば、４つのコア１００がエミュレーションに使用される場合、コア番号Ｉは、”１”から”４”であり、”４”が最大値Ｉｍａｘである。
【００７０】
次に、ステップＳ４２において、エミュレーション制御部２００は、コア番号Ｉで識別されるコア１００におけるアクセス履歴保持部３６のエントリ番号ｎを”１”に設定する。例えば、各コア１００のアクセス履歴保持部３６が１００個のエントリを有する場合、エントリ番号ｎは、”１”から”１００”である。なお、アクセス履歴保持部３６のエントリの数は、並列実行期間にエントリの全てが使用されない数に設定される。換言すれば、並列実行期間で実行されるメモリアクセス命令の数は、アクセス履歴保持部３６のエントリの数より少なく設定される。また、アクセス履歴保持部３６に格納されるアクセス履歴は、エントリ番号ｎの小さい順に格納される。
【００７１】
次に、ステップＳ４４において、エミュレーション制御部２００は、アクセス履歴保持部３６のエントリｎに保持されている情報を読み出す。次に、ステップＳ４６において、エミュレーション制御部２００は、エントリｎにアクセス履歴が格納されている場合、動作をステップＳ４８に移行する。また、エミュレーション制御部２００は、エントリｎにアクセス履歴が格納されていない場合、アクセス履歴保持部３６の全てのエントリｎから情報を読み出したと判断し、動作をステップＳ５６に移行する。
【００７２】
ステップＳ４８において、エミュレーション制御部２００は、エントリｎに格納されたアクセス種別が書き込みアクセス命令を示す場合、他のコア１００が実行した命令との競合を判定するため、動作をステップＳ５０に移行する。また、エミュレーション制御部２００は、エントリｎに格納されたアクセス種別が書き込みアクセス命令を示さない場合（すなわち、読み出しアクセス命令を示す）、他のコア１００が実行した命令との競合が発生しないため、動作をステップＳ５４に移行する。
【００７３】
ステップＳ５０において、エミュレーション制御部２００は、エミュレーションに使用される他のコア１００のアクセス履歴保持部３６の全てのエントリを検索し、動作をステップＳ５２に移行する。ステップＳ５２において、エミュレーション制御部２００は、ステップＳ５０で検索したエントリに、書き込みアクセス命令に含まれる書き込みアドレスと同一のアクセスアドレスを保持するエントリがあるか否かを判定する。ステップＳ５０で検索したエントリのいずれかが、書き込みアクセス命令に含まれる書き込みアドレスと同一のアクセスアドレスを保持する場合、書き込みアクセス命令と競合する命令が他のコア１００で実行されたことを示す。この場合、エミュレーション制御部２００は、動作をステップＳ５８に移行する。一方、ステップＳ５０で検索したエントリのいずれも、書き込みアクセス命令に含まれる書き込みアドレスと同一のアクセスアドレスを保持しない場合、書き込みアクセス命令と競合する命令は他のコア１００で実行されていないことを示す。この場合、エミュレーション制御部２００は、動作をステップＳ５４に移行する。
【００７４】
ステップＳ５４において、エミュレーション制御部２００は、アクセス履歴保持部３６の次のエントリに保持されている情報を読み出すために、エントリ番号ｎを”１”増加し、動作をステップＳ４４に戻す。
【００７５】
ステップＳ５６において、エミュレーション制御部２００は、ステップＳ４４からステップＳ５４のループにおいて、書き込みアクセス命令と競合する命令が他のコア１００で実行されていないため、”競合なし”と判定し、動作をステップＳ６０に移行する。ステップＳ５８において、エミュレーション制御部２００は、ステップＳ４４からステップＳ５４のループにおいて、書き込みアクセス命令と競合する命令が他のコア１００で実行されたため、”競合あり”と判定し、動作をステップＳ６０に移行する。
【００７６】
ステップＳ６０において、エミュレーション制御部２００は、コア番号Ｉが最大値Ｉｍａｘである場合、動作を終了し、コア番号Ｉが最大値Ｉｍａｘに到達していない場合、動作をステップＳ６２に移行する。すなわち、エミュレーション制御部２００は、エミュレーションに使用される全てのコア１００について、書き込みアクセス命令との競合の判定を完了した場合、動作を終了する。一方、エミュレーション制御部２００は、書き込みアクセス命令との競合の判定が完了していないコア１００がある場合、動作をステップＳ６２に移行する。ステップＳ６２において、エミュレーション制御部２００は、次のコア１００が実行した書き込みアクセス命令と、他のコア１００が実行したメモリアクセス命令との競合を判定するために、コア番号Ｉを”１”増加し、動作をステップＳ４２に戻す。
【００７７】
以上の動作により、着目するコア１００が実行した書き込みアクセス命令に含まれる書き込みアドレスと同じアドレスの書き込みアクセス命令または読み出しアクセス命令を実行した他のコア１００がある場合、”競合あり”と判定される。また、着目するコア１００が実行した書き込みアクセス命令に含まれる書き込みアドレスと同じアドレスの書き込みアクセス命令または読み出しアクセス命令を実行した他のコア１００がない場合、”競合なし”と判定される。さらに、着目するコア１００が書き込みアクセス命令を実行していない場合、”競合なし”と判定される。
【００７８】
図７は、図３に示す情報処理装置ＩＰＥ２の動作の一例を示す。すなわち、図７は、情報処理装置ＩＰＥ２の制御方法の一例を示す。図７に示す例では、エミュレーション制御部２００は、デバッグの対象となるプログラムを並列に実行するために、プログラムに含まれる命令を４つのコア１００−１、１００−２、１００−３、１００−４に分配する。エミュレーション制御部２００は、並列実行期間と判定期間とを交互に切り替え、デバッグの対象となるプログラムを実行する。
【００７９】
エミュレーション制御部２００は、各並列実行期間において、各コア１００に所定数の命令（図７の例では、４つ）を実行させる。図７に示す命令において、符号Ｒは、読み出しアクセス命令を示し、符号Ｒの右側の数字は、読み出しアドレスを示す。符号Ｗは、書き込みアクセス命令を示し、符号Ｗの右側の２つ数字のそれぞれは、書き込みアドレスと書き込みデータとを示す。なお、実際の動作では、エミュレーション制御部２００は、コア１００にメモリアクセス命令以外の演算命令等も投入するが、図７では、説明を分かりやすくするために、メモリアクセス命令Ｗ、Ｒのみを示す。
【００８０】
並列実行期間（１）においてコア１００−１が実行する”Ｒ  １００”では、主記憶装置３００が保持するデータが読み出され、”Ｒ  １００”を示す情報は、アクセス履歴保持部３６に格納される。コア１００−１が実行する”Ｗ  １２０  １０”では、”Ｗ  １２０”を示す情報は、アクセス履歴保持部３６に格納され、１２０  １０”を示す情報は、書き込み履歴保持部３４に格納される。すなわち、”Ｗ  １２０  １０”による主記憶装置３００へのデータ”１０”の書き込みは保留される。書き込み履歴保持部３４により、主記憶装置３００への書き込みが保留されたデータを失うことなく保持することができる。換言すれば、主記憶装置３００への書き込みが保留されたデータを書き込み履歴保持部３４から読み出すことで、プログラムに含まれる命令を各コア１００に分配して実行する場合にも、各コア１００は、並列処理期間に誤動作することなく命令を順次実行できる。
【００８１】
並列実行期間（１）においてコア１００−１が実行する”Ｒ  １３０”では、主記憶装置３００が保持するデータが読み出され、”Ｒ  １３０”を示す情報は、アクセス履歴保持部３６に格納される。コア１００−１が実行する”Ｒ  １２０”では、アクセス履歴保持部３６に保持された”Ｗ  １２０”に基づいて、書き込み履歴保持部３４に保持されたデータ”１０”が読み出される。これにより、”Ｗ  １２０  １０”によるデータ”１０”の主記憶装置３００への書き込みが保留される場合にも、”Ｒ  １２０”による読み出しデータを正しく読み出すことができる。
【００８２】
並列実行期間（１）においてコア１００−２が実行する”Ｒ  ２００”に基づいてアクセス履歴保持部３６に格納された情報は、その後実行される”Ｗ  ２００  ２２”に基づいて”Ｗ  ２００”に変更される。コア１００−２は、”Ｗ  ２００  ２２”に基づいて主記憶装置３００にデータ”２２”を書き込む代わりに、書き込み履歴保持部３４にデータ”２２”を格納する。これにより、コア１００−２は、アドレス”２００”に対する読み出しアクセス命令を再び実行する場合、主記憶装置３００にアクセスすることなく、書き込み履歴保持部３４から正しいデータ”２２”を読み出すことができる。
【００８３】
並列実行期間（１）においてコア１００−４が実行する”Ｗ  １１０  ４１”に基づいて書き込み履歴保持部３４に格納された書き込みデータ”４１”は、その後実行される”Ｗ  １１０  ４２”に基づいて”４２”に変更される。これにより、主記憶装置３００への書き込みが保留され、その後に、例えば”Ｒ  １１０”が実行される場合にも、”Ｒ  １１０”による読み出しデータを正しく読み出すことができる。
【００８４】
また、並列実行期間（１）においてコア１００−４が実行する”Ｒ  １５０”では、主記憶装置３００が保持するデータが読み出され、”Ｒ  １５０”を示す情報は、アクセス履歴保持部３６に格納される。その後、コア１００−４が再び実行する”Ｒ  １５０”では、主記憶装置３００が保持するデータが読み出される。”Ｒ  １５０”を示す情報は、２つ前の”Ｒ  １５０”によりアクセス履歴保持部３６に既に保持されているため、アクセス履歴保持部３６に格納されない。
【００８５】
並列実行期間（１）では、コア１００−２による”Ｗ  １１０  ２１”、コア１００−３による”Ｗ  １１０  ３１”、およびコア１００−４による”Ｗ  １１０  ４１”、”Ｗ  １１０  ４２”が互いに競合する。また、並列実行期間（１）では、コア１００−１による”Ｗ  １２０  １０”およびコア１００−３による”Ｗ  １２０  ３２”が互いに競合する。コア１００−１、１００−２、１００−３、１００−４が並列実行期間（１）に実行した命令の競合の有無は、判定期間（１）に判定される。
【００８６】
そして、判定期間（１）において、エミュレーション制御部２００は、競合する４つのコア１００−１、１００−２、１００−３、１００−４の不採用数保持部４０に保持された値が最も大きいコア１００−３を、命令を実行する採用コアとして選択する。なお、エミュレーション制御部２００は、不採用数保持部４０に保持された値を用いることなく、命令が互いに競合する複数のコア１００のうちの１つを、ラウンドロビン等の再現性のあるアービター論理を用いて選択してもよい。この場合、各コア１００は、不採用数保持部４０を持たない。
【００８７】
不採用数保持部４０に保持された値は、図８に示される。エミュレーション制御部２００は、採用コア１００−３に、並列実行期間（１）で実行した読み出しアクセス命令”Ｒ  １４０”を除く書き込みアクセス命令”Ｗ  １１０  ３１”、”Ｗ  １２０  ３２、”Ｗ  １３０  ３３”を実行させる。エミュレーション制御部２００は、採用コア１００−３に、並列実行期間（２）に実行させる新たな命令を投入する。複数のコア１００が並列実行期間（１）に実行した命令が競合する場合、命令が競合する複数のコア１００のいずれか１つを選択することで、プログラムが繰り返し実行される場合にも、命令の実行順序を常に一定にすることができる。
【００８８】
また、エミュレーション制御部２００は、他のコア（保留コア）１００−１、１００−２、１００−４による命令の実行を保留する。すなわち、保留コア１００−１、１００−２、１００−４が並列実行期間（１）に主記憶装置３００または書き込み履歴保持部３４から読み出したデータは破棄される。
【００８９】
次に、並列実行期間（２）において、エミュレーション制御部２００は、保留コア１００−１、１００−２、１００−４に並列実行期間（１）と同じ命令を実行させる。エミュレーション制御部２００は、判定期間（１）において命令の実行が採用された採用コア１００−３に新たな命令を実行させる。なお、エミュレーション制御部２００は、書き込み履歴保持部３４およびアクセス履歴保持部３６に格納された情報を、各並列実行期間が開始される前に消去する。
【００９０】
並列実行期間（２）では、コア１００−２による”Ｗ  １１０  ２１”、コア１００−３による”Ｗ  １１０  ３４”、およびコア１００−４による”Ｗ  １１０  ４１”、”Ｗ  １１０  ４２”が互いに競合する。コア１００−１が実行した命令は、他のコア１００−２、１００−３、１００−４が実行した命令と競合しない。コア１００−１、１００−２、１００−３、１００−４が並列実行期間（２）に実行した命令の競合の有無は、判定期間（２）に判定される。
【００９１】
判定期間（２）において、競合する３つのコア１００−２、１００−３、１００−４のうち、コア１００−２、１００−４の不採用数保持部４０に保持された未採用数が、互いに同じであるとする。なお、コア１００−３の不採用数保持部４０に保持された未採用数は、判定期間（１）によるコア１００−３の採用により、判定期間（１）に初期値”０”にリセット済みである。エミュレーション制御部２００は、コア１００−２、１００−４の不採用数保持部４０に保持された未採用数が互いに同じ場合、コア番号が小さいコア１００−２を、命令を実行する採用コアとして選択する。エミュレーション制御部２００は、コア１００−３、１００−４を、命令の実行を保留する保留コアとして扱う。保留コア１００−３、１００−４が並列実行期間（２）に主記憶装置３００または書き込み履歴保持部３４から読み出したデータは破棄される。なお、競合する複数のコア１００の不採用数保持部４０に保持された値が互いに同じ場合、ラウンドロビン等の再現性のあるアービター論理を用いて、命令を実行するコアを選択してもよい。
【００９２】
エミュレーション制御部２００は、採用コア１００−２に、並列実行期間（２）で実行した読み出しアクセス命令”Ｒ  ２００”、”Ｒ  １３０”を除く書き込みアクセス命令”Ｗ  １１０  ２１”、”Ｗ  ２００  ２２”を実行させる。
【００９３】
また、エミュレーション制御部２００は、命令が競合しない非競合コア１００−１に、並列実行期間（２）で実行した読み出しアクセス命令”Ｒ  １００”、”Ｒ  １３０”、”Ｒ  １２０”を除く書き込みアクセス命令”Ｗ  １２０  １０”を実行させる。すなわち、他のコア１００と競合しない命令を並列実行期間に実行したコア１００は、無条件に命令を実行する非競合コアとして選択される。他のコア１００と競合しない命令を並列実行期間に実行したコア１００を選択することで、並列処理期間に命令を実行した複数のコア１００を採用することができ、命令を単一のコア１００で実行する場合に比べて、命令の実行効率を向上することができる。
【００９４】
エミュレーション制御部２００は、採用コア１００および非競合コア１００に対して、次の並列実行期間において新たな命令を与え、保留コア１００に対して、次の並列実行期間において、前回の並列実行期間と同じ命令を実行させる。
【００９５】
図８は、図７に示す情報処理装置ＩＰＥ２の動作において、不採用数保持部４０、状態一時保持部１２および状態保持部２２が保持する情報の変化の一例を示す。すなわち、図８は、情報処理装置の制御方法の一例を示す。
【００９６】
並列実行期間（１）では、コア１００−１の不採用数保持部４０は”３”を保持し、コア１００−２の不採用数保持部４０は”２”を保持し、コア１００−３の不採用数保持部４０は”５”を保持し、コア１００−４の不採用数保持部４０は”２”を保持する。コア１００−１の状態一時保持部１２および状態保持部２２は、情報ＩＮＦ１１を保持し、コア１００−２の状態一時保持部１２および状態保持部２２は、情報ＩＮＦ２１を保持する。コア１００−３の状態一時保持部１２および状態保持部２２は、情報ＩＮＦ３１を保持し、コア１００−４の状態一時保持部１２および状態保持部２２は、情報ＩＮＦ４１を保持する。
【００９７】
各コア１００−１、１００−２、１００−３、１００−４の状態一時保持部１２に保持される情報は、命令が実行される毎に、実行した命令に基づいて変化する。例えば、コア１００−１では、４つの命令の実行により、状態一時保持部１２に保持される情報は、情報ＩＮＦ１１から情報ＩＮＦ１２、ＩＮＦ１３、ＩＮＦ１４、ＩＮＦ１５に順次変化する。
【００９８】
判定期間（１）において、命令の実行が採用されたコア１００−３は、エミュレーション制御部２００からの指示に基づいて、状態一時保持部１２が保持する情報ＩＮＦ３５を状態保持部２２に待避する（図８（ａ））。コア１００−３の状態保持部２２が並列実行期間（１）の前に保持した情報ＩＮＦ３１は、情報ＩＮＦ３５に変更される。これにより、コア１００−３の状態は、次の判定期間（２）において命令の実行が保留された場合に、状態保持部２２に保持された情報ＩＮＦ３５に基づいて、並列実行期間（２）の開始時の状態に復帰することができる。
【００９９】
命令の実行が保留されたコア１００−１は、エミュレーション制御部２００からの指示に基づいて、状態保持部２２が保持する情報ＩＮＦ１１を状態一時保持部１２に戻す。コア１００−１の状態一時保持部１２が並列実行期間（１）の終了時に保持していた情報ＩＮＦ１５は、情報ＩＮＦ１１に変更される（図８（ｂ））。命令の実行が保留された他のコア１００−２、１００−４においても、状態保持部２２が保持する情報が、状態一時保持部１２に戻される（図８（ｃ）、（ｄ））。これにより、コア１００−１、１００−２、１００−４は、並列実行期間（２）を、並列実行期間（１）の開始時の状態から開始することができる。すなわち、命令の実行が保留された保留コア１００は、前回の並列実行期間で実行した命令によるデータ処理と同じデータ処理を実行することができる。
【０１００】
判定期間（１）では、命令の実行が採用されたコア１００−３の不採用数保持部４０は、エミュレーション制御部２００からの指示に基づいて、初期値”０”にリセットされる（図８（ｅ））。命令の実行が保留されたコア１００−１、１００−２、１００−４の不採用数保持部４０は、エミュレーション制御部２００からの指示に基づいて、保持している値を”１”増加する（図８（ｆ）、（ｇ）、（ｈ））。各コア１００に不採用数保持部４０を設けることで、命令が競合する複数のコア１００が存在する場合に、命令の実行を採用する採用コア１００を簡易な論理で選択することができる。
【０１０１】
並列実行期間（２）では、図７で説明したように、エミュレーション制御部２００は、命令の実行が保留されたコア１００−１、１００−２、１００−４に並列実行期間（１）と同じ命令を実行させる。また、エミュレーション制御部２００は、判定期間（１）において命令の実行が採用されたコア１００−３に新たな命令を実行させる。
【０１０２】
判定期間（２）において、命令が互いに競合するコア１００−２、１００−４の不採用数保持部４０に保持された値”３”が互いに同じであるため、エミュレーション制御部２００は、コア番号が小さいコア１００−２を、命令を実行する採用コアとして選択する。複数の不採用数保持部４０が互いに同じ値を保持する場合、予め設定された優先順に基づいて命令を実行するコア１００の１つを選択することで、命令が互いに競合する複数のコア１００が採用コアとして選択されることを抑止することができる。これにより、デバッグの対象となるプログラムを並列に実行する場合にも、プログラムの再現性を確保することができる。
【０１０３】
エミュレーション制御部２００は、命令が競合しないコア１００−１を、命令を実行するコアとして選択する。エミュレーション制御部２００は、命令の実行を採用したコア１００−１、１００−２の不採用数保持部４０を”０”にリセットする（図８（ｉ）、（ｊ））。また、エミュレーション制御部２００は、命令の実行を保留したコア１００−３、１００−４の不採用数保持部４０保持している値を”１”増加する（図８（ｋ）、（ｌ））。
【０１０４】
また、判定期間（２）では、判定期間（１）と同様に、命令の実行が採用されたコア１００−１、１００−２は、状態一時保持部１２が保持する情報ＩＮＦ１５、ＩＮＦ２５を状態保持部２２に待避する（図８（ｍ）、（ｎ））。命令の実行が保留されたコア１００−３、１００−４は、状態保持部２２が保持する情報ＩＮＦ３５、ＩＮＦ４１を状態一時保持部１２に戻す（図８（ｏ）、（ｐ））。そして、並列実行期間（３）では、命令の実行が採用されたコア１００−１、１００−２は、新たな命令を実行し、命令の実行が保留されたコア１００−３、１００−４は、並列実行期間（２）と同じ命令を再度実行する。
【０１０５】
なお、デバッグの対象のプログラムが繰り返し実行される場合にも、各並列実行期間において、コア１００が実行する命令数は互いに同じ数に設定され、判定期間のそれぞれにおいて、命令の実行が採用されるコア１００は同じである。すなわち、デバッグの対象のプログラムが繰り返し実行される場合にも、図７および図８に示す動作は再現される。したがって、プログラムに含まれる命令の実行順序を常に同じにすることができ、プログラムの再現性を確保することができる。
【０１０６】
以上、図３から図８に示す実施形態においても、図１および図２に示す実施形態と同様の効果を得ることができる。すなわち、プログラムに含まれる命令を複数のコア１００で並列に実行する場合に、命令の実行順序が変わることを抑止することができ、プログラムのデバッグ効率を向上することができる。
【０１０７】
さらに、図３から図１１に示す実施形態では、各コア１００に不採用数保持部４０を設けることで、複数のコア１００が並列実行期間に実行した命令が競合する場合にも、実行した命令を採用するコア１００のいずれか１つを選択することができる。これにより、プログラムが繰り返し実行される場合にも、命令の実行順序を常に一定にすることができる。また、複数の不採用数保持部４０が互いに同じ値を保持する場合、予め設定された優先順に基づいて命令を実行するコア１００の１つを選択することで、命令が互いに競合する複数のコア１００が採用コアとして選択されることを抑止することができる。この結果、デバッグの対象となるプログラムを並列に実行する場合にも、プログラムの再現性を確保することができる。
【０１０８】
他のコア１００と競合しない命令を並列実行期間に実行したコア１００を無条件に選択することで、並列処理期間に命令を実行した複数のコア１００を採用することができ、命令を単一のコア１００で実行する場合に比べて、命令の実行効率を向上することができる。
【０１０９】
各コア１００に状態保持部２２を設けることで、命令の実行が保留される保留コア１００は、前回の並列実行期間の状態と同じ状態で、前回の並列実行期間に実行した命令によるデータ処理と同じデータ処理を、次の並列実行期間に実行することができる。
【０１１０】
アクセス履歴保持部３６に格納された読み出しアクセス命令を示す情報を、書き込みアクセス命令に基づいて変更することで、読み出しアクセス命令を再び実行する場合、主記憶装置３００にアクセスすることを抑止することができる。そして、書き込み履歴保持部３４から正しいデータを読み出すことができる。
【０１１１】
書き込みアクセス命令が実行される場合、アクセス処理部３２は、アクセス履歴保持部３６に書き込みアクセス命令の情報を格納し、書き込み履歴保持部３４に書き込みデータを格納する。また、アクセス履歴保持部３６に保持された読み出しアドレスと同じアドレスを含む書き込みアクセス命令が実行される場合、アクセス処理部３２は、アクセス履歴保持部３６に保持されたアドレスを変更し、書き込み履歴保持部３４に書き込みデータを格納する。これにより、その後の同じアドレスを含む読み出しアクセス命令が実行される場合にも、主記憶装置３００にアクセスすることなく、書き込み履歴保持部３４から正しいデータを読み出すことができる。すなわち、デバッグの対象のプログラムに含まれる命令を複数のコア１００に分配して実行する場合にも、各コア１００は、並列処理期間に誤動作することなく命令を順次実行できる。
【０１１２】
図９は、情報処理装置および情報処理装置の制御方法の別の実施形態を示す。図３に示した実施形態で説明した要素と同一または同様の要素については、同一の符号を付し、これ等については、詳細な説明は省略する。
【０１１３】
図９に示す情報処理装置ＩＰＥ３は、プロセッサコア等の複数のコア１００Ａ（１００Ａ−１、１００Ａ−２、...、１００Ａ−ｎ）、エミュレーション制御部２００および主記憶装置３００を有する。複数のコア１００Ａおよびエミュレーション制御部２００は、１つのチップ内に搭載されてもよい。情報処理装置ＩＰＥ３は、例えば、開発中のプロセッサの動作または他の情報処理装置の動作を模倣するエミュレータとして動作し、プログラムのデバッグに使用される。
【０１１４】
複数のコア１００Ａは、互いに同一または同様の構成を有する。各コア１００Ａは、エミュレーション実行部１０、状態管理部２０、メモリアクセス管理部３０Ａおよび不採用数保持部４０を有する。エミュレーション実行部１０、状態管理部２０および不採用数保持部４０は、図３に示すエミュレーション実行部１０、状態管理部２０および不採用数保持部４０と同一または同様の機能を有する。メモリアクセス管理部３０Ａは、アクセス処理部３２Ａ、書き込み履歴保持部３４Ａおよびアクセス履歴保持部３６Ａを有し、バスＢＵＳを介して主記憶装置３００に接続される。
【０１１５】
図９に示す情報処理装置ＩＰＥ３では、アクセス処理部３２Ａと主記憶装置３００との間で入出力されるデータのビット幅は、メモリアクセス命令のオペランドデータのビット幅より大きい。例えば、アクセス処理部３２Ａは、書き込みアクセス命令に含まれる書き込みデータ（オペランドデータ）のビット幅の大きいビット幅を有するデータを主記憶装置３００に書き込む。このため、アクセス処理部３２Ａは、書き込みアクセス命令に基づいて、主記憶装置３００からデータを読み出し、読み出したデータに書き込みデータをマージし、マージしたデータを主記憶装置３００に書き込む機能を有する。但し、マージしたデータの主記憶装置３００への書き込みは、図７に示した判定期間に実行される。
【０１１６】
なお、アクセス処理部３２Ａと主記憶装置３００との間で入出力されるデータのビット幅は、メモリモジュール等の主記憶装置３００の電気的仕様により異なる場合がある。また、図９では、各コア１００と主記憶装置３００との間にキャッシュメモリが配置されてもよい。この場合、各コア１００は、キャッシュメモリからデータを読み出し、キャッシュメモリにデータを書き込む。
【０１１７】
また、アクセス処理部３２Ａは、読み出しアクセス命令により読み出す読み出しデータ（オペランドデータ）のビット数より多いビット数のデータを主記憶装置３００から読み出す。このため、アクセス処理部３２Ａは、主記憶装置３００から読み出したデータの中から、読み出しアクセス命令に含まれる読み出しアドレスに対応するデータを選択し、選択したデータをエミュレーション実行部１０に出力する機能を有する。
【０１１８】
例えば、エミュレーション実行部１０とアクセス処理部３２Ａとの間で授受されるデータは、８ビット（１バイト）であり、アクセス処理部３２Ａと主記憶装置３００との間で授受されるデータは、１２８ビット（１６バイト）である。アクセス処理部３２Ａの機能は、データのマージ機能およびデータの選択機能を除き、図３に示すアクセス処理部３２の機能と同様である。アクセス処理部３２Ａの動作の例は、図１１に示される。書き込み履歴保持部３４Ａおよびアクセス履歴保持部３６Ａの例は、図１０に示される。なお、ラウンドロビン等の再現性のあるアービター論理を用いて、競合する複数のコア１００から命令の実行を採用するコア１００を決定する場合、各コア１００は、不採用数保持部４０を持たない。
【０１１９】
図１０は、図９に示す書き込み履歴保持部３４Ａおよびアクセス履歴保持部３６Ａの一例を示す。書き込み履歴保持部３４Ａは、書き込みアクセス命令に含まれる書き込みアドレスの下位４ビットを”０”にマスクしたアドレスと１バイトの書き込みデータを含む１６バイトのデータ群との組を格納する複数のエントリを有する。データ群は、書き込みアドレスの下位４ビットをマスクしたアドレス範囲に割り当てられた記憶領域に書き込まれるデータを含む。
【０１２０】
例えば、書き込みアドレスが１６進数で”１０１”の場合、１６進数で”１００”の書き込みアドレスと、１６進数で”１００”から”１０Ｆ”のアドレスに対応する１６バイトのデータ群とがエントリに格納される。同様に、エントリに格納される書き込みアドレスが１６進数で”１２５”の場合、１６進数で”１２０”の書き込みアドレスと、１６進数で”１２０”から”１２Ｆ”のアドレスに対応する１６バイトのデータ群とがエントリに格納される。エントリに格納される書き込みアドレスが１６進数で”２００”の場合、１６進数で”２００”の書き込みアドレスと、１６進数で”２００”から”２０Ｆ”のアドレスに対応する１６バイトのデータ群とがエントリに格納される。
【０１２１】
このため、図９に示すアクセス処理部３２Ａは、並列実行期間に書き込みアクセス命令を実行する場合、図１０に網掛けで示す書き込みデータの書き込みアドレスの下位４ビットを”０”にマスクしたアドレスを主記憶装置３００に出力する。そして、アクセス処理部３２Ａは、主記憶装置３００から１６バイトのデータを読み出し、読み出したデータに書き込みデータをマージした後、書き込み履歴保持部３４Ａのエントリに格納する。
【０１２２】
アクセス履歴保持部３６Ａは、アクセスアドレスの下位４ビットを”０”にマスクしたアドレスと、メモリアクセス命令が書き込みアクセス命令または読み出しアクセス命令のいずれであるかを示すアクセス種別を格納する複数のエントリを有する。
【０１２３】
図１１は、図９に示すアクセス処理部３２Ａの動作の一例を示す。図５と同一または同様の動作については、詳細な説明は省略する。図９に示す情報処理装置ＩＰＥ３は、下位４ビットをマスクしたアドレスを書き込み履歴保持部３４またはアクセス履歴保持部３６Ａに格納する点と、１６バイトのデータを書き込み履歴保持部３４に格納する点とを除き、図７および図８と同様に動作する。
【０１２４】
ステップＳ１０からステップＳ２０までの読み出しアクセス命令に対する動作は、図５に示すステップＳ１０からステップＳ２０までの動作と同様である。但し、ステップＳ１２およびステップＳ１４において、アクセス処理部３２Ａは、アドレスの下位４ビットを”０”にマスクした値を用いて判定を実行する。また、ステップＳ１６において、アクセス処理部３２Ａは、読み出しアドレスの下位４ビットを”０”にマスクした値を、アクセス履歴保持部３６Ａに格納する。ステップＳ１８において、アクセス処理部３２Ａは、主記憶装置３００から読み出した１６バイトのデータのうち、読み出しアドレスに対応する１バイトをエミュレーション実行部１０に転送する。
【０１２５】
ステップＳ２２およびステップＳ２４におけるアクセス処理部３２Ａの動作は、アドレスの下位４ビットを”０”にマスクした値を用いて判定を実行することを除き、図５に示すステップＳ２２およびステップＳ２４の動作と同様である。
【０１２６】
すなわち、ステップＳ２４において、書き込みアドレスの下位４ビットを”０”にマスクした値が、アクセス履歴保持部３６Ａに保持された読み出しアドレス（アクセスアドレス）のいずれかと一致する場合、ステップＳ２６の動作が実行される。ステップＳ２６の動作は、図５に示すステップＳ２６の動作と同様である。ステップＳ２６の後、動作はステップＳ２９に移行される。一方、ステップＳ２４において、書き込みアドレスの下位４ビットを”０”にマスクした値が、アクセス履歴保持部３６Ａに保持された読み出しアドレス（アクセスアドレス）のいずれとも一致しない場合、ステップＳ２８の動作が実行される。
【０１２７】
ステップＳ２８において、アクセス処理部３２Ａは、書き込みアドレスの下位４ビットを”０”にマスクした値と、書き込みアクセス命令を示すアクセス種別とを、アクセス履歴保持部３６Ａ内の空いているエントリに格納する。ステップＳ２８の後、動作はステップＳ２９に移行される。
【０１２８】
ステップＳ２９において、アクセス処理部３２Ａは、書き込みアドレスの下位４ビットを”０”にマスクしたアドレスを含む読み出しアクセス命令を主記憶装置３００に出力し、主記憶装置３００から１６バイトのデータを読み出す。アクセス処理部３２Ａは、主記憶装置３００から読み出した１６バイトのデータに書き込みデータをマージし、動作をステップＳ３０に移行する。
【０１２９】
ステップＳ３０において、アクセス処理部３２Ａは、書き込みアドレスの下位４ビットを”０”にマスクしたアドレスと、書き込みデータまたは書き込みデータをマージした１６バイトのデータとを書き込み履歴保持部３４Ａに書き込み、動作を終了する。
【０１３０】
すなわち、ステップＳ２４において、書き込みアドレスの下位４ビットを”０”にマスクした値が、アクセス履歴保持部３６Ａに保持された読み出しアドレスのいずれかと一致する場合、主記憶装置３００から読み出されたデータに書き込みデータがマージされる。そして、マージされたデータが書き込み履歴保持部３４に格納される。また、ステップＳ２４において、書き込みアドレスの下位４ビットを”０”にマスクした値が、アクセス履歴保持部３６Ａに保持された読み出しアドレスのいずれとも一致しない場合、アクセス履歴保持部３６Ａに書き込み履歴が格納される。そして、主記憶装置３００から読み出されたデータに書き込みデータがマージされ、マージされたデータが書き込み履歴保持部３４に格納される。
【０１３１】
これにより、アクセス処理部３２Ａと記憶部３００との間で入出力されるデータのビット幅が、メモリアクセス命令のオペランドデータのビット幅より大きい場合にも、図７および図８に示す動作を実現することができる。例えば、アクセス履歴保持部３６Ａに格納された読み出しアクセス命令を示す情報を、書き込みアクセス命令に基づいて変更することで、読み出しアクセス命令を再び実行する場合、主記憶装置３００にアクセスすることを抑止することができる。
【０１３２】
以上、図９から図１１に示す実施形態では、アクセス処理部３２Ａと記憶部３００との間で入出力されるデータのビット幅が、メモリアクセス命令のオペランドデータのビット幅より大きい場合にも、図１から図８に示す実施形態と同様の効果を得ることができる。
【０１３３】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
命令をそれぞれ実行する複数の命令実行部と、前記複数の命令実行部がそれぞれ実行する第１の命令セットとは異なる第２の命令セットに含まれる模擬対象命令を前記第１の命令セットに含まれる命令に変換するとともに、変換した命令を前記複数の命令実行部に投入する模擬動作を制御する制御部と、前記複数の命令実行部それぞれからアクセスされる記憶部とを有する情報処理装置において、
前記複数の命令実行部の各々は、
前記制御部から投入された命令のうち、前記記憶部に対する書き込みアクセスを行う書き込みアクセス命令または前記記憶部に対する読み出しアクセスを行う読み出しアクセス命令を実行し、他の命令実行部と命令を並列に実行する並列実行期間内に、実行した前記書き込みアクセス命令に基づく前記記憶部へのデータの書き込みを保留するアクセス処理部と、
前記並列実行期間内に実行された前記書き込みアクセス命令と前記読み出しアクセス命令とを含むメモリアクセス命令の実行履歴を保持する履歴保持部とを有し、
前記制御部は、
前記並列実行期間後に、前記実行履歴に基づき、メモリアクセス命令のアドレスが競合した前記複数の命令実行部のいずれか１つを選択し、選択した命令実行部が前記並列実行期間内に実行した書き込み命令に基づき、選択した前記命令実行部による前記記憶部へのデータの書き込みを完了させるとともに、次の並列実行期間に実行させる命令を選択した前記命令実行部に対して投入し、
選択しなかった他の命令実行部に、前記並列実行期間内に実行した命令を前記次の並列実行期間に再実行させることを特徴とする情報処理装置。
（付記２）
前記複数の命令実行部の各々は、命令の再実行が判定された回数を保持する不採用数保持部を有し、
前記制御部は、
前記並列実行期間後に、メモリアクセス命令のアドレスが競合した命令実行部のうち、不採用数保持部に保持された回数が他より多い命令実行部を選択し、選択した命令実行部の不採用数保持部が保持する回数を初期値にリセットし、前記他の命令実行部の不採用数保持部が保持する回数を更新することを特徴とする付記１記載の情報処理装置。
（付記３）
前記制御部は、メモリアクセス命令のアドレスが競合した複数の命令実行部の前記不採用数保持部に保持された回数が互いに同じ場合、予め設定された優先順に基づいて、メモリアクセス命令のアドレスが競合した複数の命令実行部のいずれか１つを選択することを特徴とする付記２記載の情報処理装置。
（付記４）
前記制御部は、前記並列実行期間後に、前記履歴保持部に保持された実行履歴に基づいて、メモリアクセス命令のアドレスが競合しない命令実行部に、保留した前記記憶部へのデータの書き込みを実行させるとともに次の並列実行期間に実行させる命令を投入することを特徴とする付記１ないし付記３のいずれか１項記載の情報処理装置。
（付記５）
前記複数の命令実行部の各々は、前記並列実行期間の開始時における命令実行部の状態を保持する状態保持部を有し、
前記制御部は、前記並列実行期間後に、命令の再実行が判定された命令実行部の状態を前記状態保持部に保持された状態に戻すことを特徴とする付記１ないし付記４のいずれか１項記載の情報処理装置。
（付記６）
前記制御部は、前記並列実行期間内に、前記複数の命令実行部のそれぞれに互いに等しい数の命令を実行させることを特徴とする付記１ないし付記５のいずれか１項記載の情報処理装置。
（付記７）
前記アクセス処理部は、前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスが読み出しアクセス命令に含まれる読み出しアドレスとして前記履歴保持部に保持されている場合、前記履歴保持部に保持されている読み出しアクセス命令を示す情報を書き込みアクセス命令を示す情報に変更し、書き込みアクセス命令に含まれる書き込みデータを前記履歴保持部に格納することを特徴とする付記１ないし付記６のいずれか１項記載の情報処理装置。
（付記８）
前記アクセス処理部は、前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスが、他の書き込みアクセス命令に含まれる書き込みアドレスとして前記履歴保持部に保持されている場合、前記履歴保持部に保持された書き込みデータを書き込みアクセス命令に含まれる書き込みデータで書き替えることを特徴とする付記１ないし付記７のいずれか１項記載の情報処理装置。
（付記９）
前記アクセス処理部は、前記並列実行期間内に実行する読み出しアクセス命令に含まれる読み出しアドレスが、書き込みアクセス命令に含まれる書き込みアドレスとして前記履歴保持部に保持されている場合、前記履歴保持部に保持された書き込みデータを読み出しアクセス命令に対する読み出しデータとして読み出すことを特徴とする付記１ないし付記８のいずれか１項記載の情報処理装置。
（付記１０）
前記制御部は、前記複数の命令実行部のいずれかが実行した書き込みアクセス命令に含まれるアドレスが、前記複数の命令実行部のいずれか以外の他の命令実行部が実行した、書き込みアクセス命令に含まれるアドレスまたは読み出しアクセス命令に含まれるアドレスと一致する場合、前記複数の命令実行部のいずれかを、命令実行部でメモリアクセス命令のアドレスが競合が発生した命令実行部であると判定することを特徴とする付記１ないし付記９のいずれか１項記載の情報処理装置。
（付記１１）
前記アクセス処理部と前記記憶部との間で入出力されるデータのビット幅は、メモリアクセス命令のオペランドデータのビット幅より大きく、
前記アクセス処理部は、前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスが読み出しアクセス命令に含まれる読み出しアドレスとして前記履歴保持部に保持されている場合、前記履歴保持部に保持されている読み出しアクセス命令を示す情報を書き込みアクセス命令を示す情報に書き替え、書き込みアクセス命令に含まれる書き込みアドレスを用いて前記記憶部からデータを読み出し、読み出したデータに書き込みアクセス命令に含まれる書き込みデータをマージし、マージしたデータを前記履歴保持部に格納することを特徴とする付記１ないし付記７のいずれか１項記載の情報処理装置。
（付記１２）
前記アクセス処理部は、前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスが前記履歴保持部に保持されていない場合、書き込みアクセス命令を示す情報を前記履歴保持部に格納し、書き込みアクセス命令に含まれるアクセスアドレスを用いて前記記憶部からデータを読み出し、読み出したデータに書き込みアクセス命令に含まれる書き込みデータをマージし、マージしたデータを前記履歴保持部に格納することを特徴とする付記１１記載の情報処理装置。
（付記１３）
前記アクセス処理部は、前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスが前記履歴保持部に保持されていない場合、書き込みアクセス命令を示す情報と書き込みアクセス命令に含まれる書き込みデータとを前記履歴保持部に格納することを特徴とする付記１ないし付記１２のいずれか１項記載の情報処理装置。
（付記１４）
前記アクセス処理部は、前記並列実行期間内に実行する読み出しアクセス命令に含まれるアクセスアドレスが、他の読み出しアクセス命令に含まれるアクセスアドレスとして前記履歴保持部に保持されている場合、読み出しアクセス命令に基づいて前記記憶部からデータを読み出すことを特徴とする付記１ないし付記１３のいずれか１項記載の情報処理装置。
（付記１５）
前記アクセス処理部は、前記並列実行期間内に実行する読み出しアクセス命令に含まれるアクセスアドレスが前記履歴保持部に保持されていない場合、読み出しアクセス命令を示す情報と読み出しアクセス命令に含まれるアクセスアドレスとを前記履歴保持部に格納するとともに、読み出しアクセス命令に基づいて前記記憶部からデータを読み出すことを特徴とする付記１ないし付記１４のいずれか１項記載の情報処理装置。
（付記１６）
前記履歴保持部は、
前記並列実行期間内に実行する書き込みアクセス命令に含まれる書き込みアドレスと書き込みデータとを保持する書き込み履歴保持部と、
前記並列実行期間内に実行するメモリアクセス命令の種別とメモリアクセス命令に含まれるアクセスアドレスとを保持するアクセス履歴保持部を有することを特徴とする付記１ないし付記１５のいずれか１項記載の情報処理装置。
（付記１７）
命令をそれぞれ実行する複数の命令実行部と、前記複数の命令実行部がそれぞれ実行する第１の命令セットとは異なる第２の命令セットに含まれる模擬対象命令を前記第１の命令セットに含まれる命令に変換するとともに、変換した命令を前記複数の命令実行部に投入する模擬動作を制御する制御部と、前記複数の命令実行部それぞれからアクセスされる記憶部とを有する情報処理装置の制御方法において、
前記複数の命令実行部の各々が有するアクセス処理部が、
前記制御部から投入された命令のうち、前記記憶部に対する書き込みアクセスを行う書き込みアクセス命令または前記記憶部に対する読み出しアクセスを行う読み出しアクセス命令を実行し、
他の命令実行部と命令を並列に実行する並列実行期間内に、実行した前記書き込みアクセス命令に基づく前記記憶部へのデータの書き込みを保留し、
前記複数の命令実行部の各々が有する履歴保持部が、前記並列実行期間内に実行された前記書き込みアクセス命令と前記読み出しアクセス命令とを含むメモリアクセス命令の実行履歴を保持し、
前記制御部が、
前記並列実行期間後に、前記実行履歴に基づき、メモリアクセス命令のアドレスが競合した前記複数の命令実行部のいずれか１つを選択し、
選択した命令実行部が前記並列実行期間内に実行した書き込み命令に基づき、選択した前記命令実行部による前記記憶部へのデータの書き込みを完了させるとともに、次の並列実行期間に実行させる命令を選択した前記命令実行部に対して投入し、
選択しなかった他の命令実行部に、前記並列実行期間内に実行した命令を前記次の並列実行期間に再実行させることを特徴とする情報処理装置の制御方法。
【０１３４】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１３５】
１（１−１、１−２）…命令実行部；２…制御部；３…記憶部；４（４−１、４−２）…履歴保持部；５（５−１、５−２）…アクセス処理部；１０…エミュレーション実行部；１２…状態一時保持部；２０…状態管理部；２２…状態保持部；３０、３０Ａ…メモリアクセス管理部；３２、３２Ａ…アクセス処理部；３４、３４Ａ…書き込み履歴保持部；３６、３６Ａ…アクセス履歴保持部；４０…不採用数保持部；１００（１００−１、１００−２、...、１００−ｎ）、１００Ａ（１００Ａ−１、１００Ａ−２、...、１００Ａ−ｎ）…コア；２００…エミュレーション制御部；３００…主記憶装置；ＩＰＥ１、ＩＰＥ２、ＩＰＥ３…情報処理装置
【図１】
0006481549.tif 000002
【図２】
0006481549.tif 000003
【図３】
0006481549.tif 000004
【図４】
0006481549.tif 000005
【図５】
0006481549.tif 000006
【図６】
0006481549.tif 000007
【図７】
0006481549.tif 000008
【図８】
0006481549.tif 000009
【図９】
0006481549.tif 000010
【図１０】
0006481549.tif 000011
【図１１】
0006481549.tif 000012