(57)【要約】  シミュレーション装置（１００）において、模擬部（１０１）は、複数のコアの中からコアを１つずつ繰り返し選択し、選択したコアにおける命令の実行を模擬する。管理部（１０３）は、模擬部（１０１）により模擬された命令の実行に合わせて、模擬部（１０１）により選択されたコアにおける時間の進行を模擬し、模擬の結果に応じて、模擬部（１０１）により選択されたコアの時間情報を更新する。中断部（２０２）は、模擬部（１０１）により共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、時間情報が示す複数のコアにおける時間の進行度が同じになるまで、模擬部（１０１）により選択されたコアにおける命令の実行の模擬を中断して別のコアにおける命令の実行を模擬するよう模擬部（１０１）を制御する。
2017158786.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの命令を個別に実行する複数の要素と前記複数の要素からアクセスされる共有リソースとを有するシステムの並列処理の動作を模擬するシミュレーション装置であって、
前記複数の要素の中から要素を１つずつ繰り返し選択し、選択した要素における命令の実行を模擬する模擬部と、
前記模擬部により模擬された命令の実行に合わせて、前記模擬部により選択された要素における時間の進行を模擬し、模擬の結果に応じて、メモリに格納され前記複数の要素における時間の進行度を示す時間情報を更新する管理部と、
前記模擬部により前記共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、前記メモリに格納された時間情報が示す前記複数の要素における時間の進行度が同じになるまで、前記模擬部により選択された要素における命令の実行の模擬を中断して別の要素における命令の実行を模擬するよう前記模擬部を制御する中断部と
を備えるシミュレーション装置。
【請求項２】
前記模擬部により転送先のアドレスを指定してデータを転送する命令の実行の模擬が開始された場合、前記メモリに格納され前記共有リソースのアドレスを示す共有リソース情報を参照し、指定されたアドレスと、参照した共有リソース情報が示すアドレスとを比較し、比較の結果に応じて、前記模擬部により前記共有リソースへのアクセスを伴う命令の実行の模擬が開始されたことを検出し、前記中断部に通知を送る検出部
をさらに備える請求項１に記載のシミュレーション装置。
【請求項３】
前記模擬部は、選択した要素における命令の実行を模擬する度に、模擬の結果に応じて、前記メモリに格納され前記複数の要素における命令の実行状況を示すコンテキスト情報を更新し、
前記中断部は、前記模擬部により１つの命令の実行が模擬される度に、前記模擬部により次の命令の実行の模擬が開始される前のコンテキスト情報を直前のコンテキスト情報として前記メモリから取得し、前記模擬部により当該次の命令として前記共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、当該次の命令の実行の模擬を前記模擬部に中断させるとともに、前記メモリに格納されているコンテキスト情報を前記直前のコンテキスト情報に置換する請求項１又は２に記載のシミュレーション装置。
【請求項４】
前記複数の要素は、プロセッサの複数のコアである請求項１から３のいずれか１項に記載のシミュレーション装置。
【請求項５】
前記複数の要素は、複数のプロセッサである請求項１から３のいずれか１項に記載のシミュレーション装置。
【請求項６】
プログラムの命令を個別に実行する複数の要素と前記複数の要素からアクセスされる共有リソースとを有するシステムの並列処理の動作を模擬するシミュレーション方法であって、
模擬部が、前記複数の要素の中から要素を１つずつ繰り返し選択し、選択した要素における命令の実行を模擬し、
管理部が、前記模擬部により模擬された命令の実行に合わせて、前記模擬部により選択された要素における時間の進行を模擬し、模擬の結果に応じて、メモリに格納され前記複数の要素における時間の進行度を示す時間情報を更新し、
中断部が、前記模擬部により前記共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、前記メモリに格納された時間情報が示す前記複数の要素における時間の進行度が同じになるまで、前記模擬部により選択された要素における命令の実行の模擬を中断して別の要素における命令の実行を模擬するよう前記模擬部を制御するシミュレーション方法。
【請求項７】
プログラムの命令を個別に実行する複数の要素と前記複数の要素からアクセスされる共有リソースとを有するシステムの並列処理の動作を模擬するシミュレーションプログラムであって、
コンピュータに、
前記複数の要素の中から要素を１つずつ繰り返し選択し、選択した要素における命令の実行を模擬する処理と、
模擬された命令の実行に合わせて、選択された要素における時間の進行を模擬し、模擬の結果に応じて、メモリに格納され前記複数の要素における時間の進行度を示す時間情報を更新する処理と、
前記共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、前記メモリに格納された時間情報が示す前記複数の要素における時間の進行度が同じになるまで、選択された要素における命令の実行の模擬を中断して別の要素における命令の実行を模擬する処理と
を実行させるシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション装置、シミュレーション方法及びシミュレーションプログラムに関するものである。
【背景技術】
【０００２】
近年では、ＩＳＳ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｓｉｍｕｌａｔｏｒ）を用いることで実際のハードウェアの作成前にソフトウェアのデバッグが可能となっている。ＩＳＳは、ターゲットプロセッサの命令セットをホストプロセッサの命令セットに変換し、変換後の命令セットを実行するシミュレータである。ターゲットプロセッサとは、シミュレーションの対象となるターゲットマシンのプロセッサのことである。ホストプロセッサとは、シミュレーションを実行するホストマシンのプロセッサのことである。【０００３】
マルチコアプロセッサシステム及びマルチプロセッサシステムのシミュレーションも可能になってきている。マルチコアプロセッサシステムとは、１つのプロセッサの中に複数のコアが実装されているシステムのことである。マルチプロセッサシステムとは、複数のプロセッサを持つシステムのことである。【０００４】
特許文献１に記載の技術では、マルチプロセッサシステムの各プロセッサのシミュレーションを独立の性能シミュレータが担当する。性能シミュレータは、担当のプロセッサのシミュレーションを規定時間ごとに交互に実行し、かつ、共有リソースの占有状況データを互いにやり取りすることで、共有リソースの占有の衝突を回避する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−２９６４０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載の技術では、複数のプロセッサのシミュレーションを規定時間ごとに交互に実行するため、複数のプロセッサが実際のハードウェアと同じ順序で共有リソースにアクセスするようにシミュレーションを行うことが困難である。複数のプロセッサを複数のコアに置き換えた場合も同じである。以下に具体例を示す。【０００７】
図７は、２コアのマルチコアプロセッサである実際のハードウェアの命令実行を表したタイミングチャートである。この例では、先にコアＸが共有リソースにアクセスし、その後にコアＹが共有リソースにアクセスしている。【０００８】
図８は、複数のコアのシミュレーションを交互に実行する方式を用いた、図７と同じマルチコアプロセッサの命令実行のシミュレーションを表したタイミングチャートである。この例では、規定時間、規定命令数、又は、規定命令の出現によって区切られた命令列をコアＸ及びコアＹが交互に実行するようにシミュレーションが行われている。図８では、図７の順序とは異なり、先にコアＹが共有リソースにアクセスし、その後にコアＸが共有リソースにアクセスしている。【０００９】
このように、複数のプロセッサ又はコアのシミュレーションを交互に実行する方式では、共有リソースへのアクセスの順序が実際のハードウェアと同じ順序にならないことがある。【００１０】
本発明は、シミュレーションにおいて、共有リソースへのアクセスを実際のハードウェアと同じ順序で発生させることを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一態様に係るシミュレーション装置は、
プログラムの命令を個別に実行する複数の要素と前記複数の要素からアクセスされる共有リソースとを有するシステムの並列処理の動作を模擬する。
前記シミュレーション装置は、
前記複数の要素の中から要素を１つずつ繰り返し選択し、選択した要素における命令の実行を模擬する模擬部と、
前記模擬部により模擬された命令の実行に合わせて、前記模擬部により選択された要素における時間の進行を模擬し、模擬の結果に応じて、メモリに格納され前記複数の要素における時間の進行度を示す時間情報を更新する管理部と、
前記模擬部により前記共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、前記メモリに格納された時間情報が示す前記複数の要素における時間の進行度が同じになるまで、前記模擬部により選択された要素における命令の実行の模擬を中断して別の要素における命令の実行を模擬するよう前記模擬部を制御する中断部とを備える。
【発明の効果】
【００１２】
本発明では、複数のコア、複数のプロセッサといった複数の要素と、共有リソースとを有するシステムの並列処理の動作が模擬される。１つの要素における、共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、複数の要素における時間の進行度が同じになるまで、当該１つの要素における命令の実行の模擬が中断され、別の要素における命令の実行が模擬される。このため、シミュレーションにおいて、共有リソースへのアクセスを実際のハードウェアと同じ順序で発生させることができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係るシミュレーション装置の構成を示すブロック図。
【図２】実施の形態１に係るシミュレーション装置の中断部の構成を示すブロック図。
【図３】実施の形態１に係るシミュレーション装置の検出部の構成を示すブロック図。
【図４】実施の形態１に係るシミュレーション装置による命令実行の例を示す図。
【図５】実施の形態１に係るシミュレーション装置による命令実行の例を示す図。
【図６】実施の形態１に係るシミュレーション装置の動作を示すフローチャート。
【図７】２コアのマルチコアプロセッサである実際のハードウェアの命令実行を表したタイミングチャート。
【図８】複数のコアのシミュレーションを交互に実行する方式を用いた、図７と同じマルチコアプロセッサの命令実行のシミュレーションを表したタイミングチャート。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一又は相当する部分には、同一符号を付している。実施の形態の説明において、同一又は相当する部分については、その説明を適宜省略又は簡略化する。
【００１５】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１、図２及び図３を参照して、本実施の形態に係るシミュレーション装置１００の構成を説明する。
【００１６】
シミュレーション装置１００は、コンピュータである。シミュレーション装置１００は、プロセッサ３０１、メモリ３０２といったハードウェアを備える。プロセッサ３０１は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００１７】
シミュレーション装置１００は、プログラムの命令を個別に実行する複数の要素と複数の要素からアクセスされる共有リソースとを有するシステムの並列処理の動作を模擬する装置である。本実施の形態において、「複数の要素」は、マルチコアプロセッサシステムに備えられたプロセッサの複数のコアである。すなわち、本実施の形態では、シミュレーション装置１００がホストマシンであり、シミュレーション装置１００のプロセッサ３０１がホストプロセッサであり、マルチコアプロセッサシステムがターゲットマシンであり、マルチコアプロセッサシステムのプロセッサがターゲットプロセッサである。「要素」の数は、２つ以上であればよいが、本実施の形態ではコアＸ及びコアＹの２つである。なお、「複数の要素」は、マルチプロセッサシステムの複数のプロセッサであってもよい。
【００１８】
シミュレーション装置１００は、機能要素として、模擬部１０１と、管理部１０３と、デコード処理部１１０と、変換処理部１１１と、実行処理部１１２と、情報選択部１３１と、検出部２０１と、中断部２０２とを備える。模擬部１０１は、コア選択部１０２を有する。中断部２０２は、直前状態保持部２２０と、直前状態復元部２２１とを有する。検出部２０１は、共有リソースデータ復元部２２２と、オペランドアドレス監視部２２３とを有する。模擬部１０１、管理部１０３、デコード処理部１１０、変換処理部１１１、実行処理部１１２、情報選択部１３１、検出部２０１、中断部２０２といった「部」の機能は、ソフトウェアにより実現される。
【００１９】
プロセッサ３０１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ３０１は、具体的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００２０】
メモリ３０２には、ターゲット命令コード１２１と、ホスト命令コード１２２と、コンテキスト情報Ｘ１３２と、コンテキスト情報Ｙ１３３と、共有リソース情報２０３とが格納される。メモリ３０２は、具体的には、フラッシュメモリ、又は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００２１】
シミュレーション装置１００は、入力装置、ディスプレイ、通信装置といった追加のハードウェアを備えていてもよい。
【００２２】
入力装置は、具体的には、マウス、キーボード、又は、タッチパネルである。
【００２３】
ディスプレイは、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）である。
【００２４】
通信装置は、データを受信するレシーバ及びデータを送信するトランスミッタを含む。通信装置は、具体的には、通信チップ又はＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。
【００２５】
メモリ３０２には、「部」の機能を実現するプログラムが記憶されている。このプログラムは、プロセッサ３０１に読み込まれ、プロセッサ３０１によって実行される。メモリ３０２には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。プロセッサ３０１はＯＳを実行しながら、「部」の機能を実現するプログラムを実行する。
【００２６】
「部」の機能を実現するプログラムの全体又は一部がＯＳに組み込まれていてもよい。
【００２７】
「部」の機能を実現するプログラム及びＯＳは、補助記憶装置に記憶されていてもよい。補助記憶装置は、具体的には、フラッシュメモリ、又は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。補助記憶装置に記憶されているプログラム及びＯＳは、メモリ３０２にロードされ、プロセッサ３０１によって実行される。
【００２８】
シミュレーション装置１００は、１つのプロセッサ３０１のみを備えていてもよいし、複数のプロセッサ３０１を備えていてもよい。複数のプロセッサ３０１が「部」の機能を実現するプログラムを連携して実行してもよい。
【００２９】
「部」の処理の結果を示す情報、データ、信号値、及び、変数値は、メモリ３０２、補助記憶装置、又は、プロセッサ３０１内のレジスタ又はキャッシュメモリに記憶される。
【００３０】
「部」の機能を実現するプログラムは、磁気ディスク、光ディスクといった可搬記録媒体に記憶されてもよい。
【００３１】
＊＊＊動作の説明＊＊＊
図１から図６を参照して、本実施の形態に係るシミュレーション装置１００の動作を説明する。シミュレーション装置１００の動作は、本実施の形態に係るシミュレーション方法に相当する。シミュレーション装置１００の動作は、本実施の形態に係るシミュレーションプログラムの処理手順に相当する。
【００３２】
まず、図１に示したシミュレーション装置１００の各部の動作を説明する。
【００３３】
模擬部１０１は、ＩＳＳに相当する機能を有する。模擬部１０１は、ターゲットプロセッサが実行可能な命令コードであるターゲット命令コード１２１を、ホストプロセッサが実行可能な命令コードであるホスト命令コード１２２に変換して実行する処理を管理する。
【００３４】
デコード処理部１１０は、命令デコード処理を行う。具体的には、デコード処理部１１０は、模擬部１０１の指示により、命令実行アドレスで示される命令実行箇所に関して、変換されたホスト命令コード１２２がメモリ３０２上に存在するかを確認する。デコード処理部１１０は、そのようなホスト命令コード１２２が存在しない場合は、該当箇所のターゲット命令コード１２１に含まれる命令の種類と、ソース及びデスティネーションのレジスタ又はメモリアドレスとを解釈する。
【００３５】
変換処理部１１１は、命令変換処理を行う。具体的には、変換処理部１１１は、デコード処理部１１０が解釈したターゲット命令コード１２１を１つ又は複数のホスト命令コード１２２に変換する。変換処理部１１１は、変換後のホスト命令コード１２２をメモリ３０２に格納する。
【００３６】
実行処理部１１２は、ホスト命令コード実行処理を行う。具体的には、実行処理部１１２は、変換処理部１１１がメモリ３０２に格納した変換後のホスト命令コード１２２のうち、実行すべきターゲット命令コード１２１に対応したホスト命令コード１２２を実行することにより、シミュレーションを行う。
【００３７】
一度変換及び実行されたターゲット命令コード１２１のシミュレーションが再度実行されるときは、デコード処理部１１０がメモリ３０２内を検索する。対応するホスト命令コード１２２が格納されていれば、模擬部１０１は、デコード処理部１１０への命令デコード処理指示と、変換処理部１１１への命令変換処理指示とを出さずに、実行処理部１１２にホスト命令コード実行処理指示を出す。このように、命令デコード処理及び命令変換処理を省略し、ホスト命令コード実行処理のみを行うことで、シミュレーションを高速化することができる。
【００３８】
コンテキスト情報Ｘ１３２及びコンテキスト情報Ｙ１３３は、コアＸ及びコアＹという２つのコアを持つマルチコアプロセッサシステムのシミュレーションを実行するためのコンテキスト情報である。コンテキスト情報をコア数分用意することで、任意の数のコアに対応することができる。
【００３９】
コア選択部１０２は、次に実行すべきターゲット命令コード１２１がコアＸの命令コードとコアＹの命令コードのいずれであるかを判断する。コア選択部１０２は、判断結果に応じて、選択すべきコンテキスト情報を情報選択部１３１に伝達する。コンテキスト情報Ｘ１３２及びコンテキスト情報Ｙ１３３は、それぞれターゲットプロセッサのコアＸ及びコアＹがターゲット命令コード１２１を実行する際に必要な情報である。コンテキスト情報Ｘ１３２及びコンテキスト情報Ｙ１３３は、それぞれターゲットプロセッサの内部レジスタの情報、各コアで保持する命令実行アドレスの情報、時刻に関する情報、割り込みの情報、及び、リソースに関するその他の情報を含む。シミュレーション実行時にコアを切り替える場合は、コンテキスト情報も切り替えることで、共通のデコード処理部１１０、変換処理部１１１及び実行処理部１１２を利用することができる。
【００４０】
情報選択部１３１は、次に実行すべきターゲット命令コード１２１がコアＸの命令コードである場合は、コンテキスト情報Ｘ１３２を読み出し、次に実行すべきターゲット命令コード１２１がコアＹの命令コードである場合は、コンテキスト情報Ｙ１３３を読み出す。情報選択部１３１は、読み出したコンテキスト情報を、実行処理部１１２のホスト命令コード実行処理で用いられるリソース情報として提供する。
【００４１】
管理部１０３は、ターゲットプロセッサの時間進行をホスト命令コード１２２の実行に合わせて模擬する。管理部１０３は、１つのホスト命令コード１２２が実行される度に、命令の実行にかかる時間と、メモリアクセス、Ｉ／Ｏアクセス等にかかる時間とを算出し、算出結果を、コアごとに用意されたコンテキスト情報Ｘ１３２及びコンテキスト情報Ｙ１３３に反映する。各コアの時間情報は、一定間隔で同期化される。各コアの時間情報は、命令実行状況と合わせて性能情報として利用することが可能である。
【００４２】
従来のシミュレーション方式では、複数コア間の共有リソースへのアクセスの順序を制御できないため、実際のハードウェアの動作を正確に再現することができない。性能の分析を考慮せず、ソフトウェアの機能を模擬することだけが目的の場合は、共有リソースへのアクセスの順序を正確に模擬しなくても、ソフトウェアに共有リソースへのアクセスのための排他制御機能があればよい。しかし、性能を分析するための性能シミュレーションを行う場合は、共有リソースへのアクセスの順序まで正確に模擬する必要がある。
【００４３】
本実施の形態では、シミュレーション装置１００が、共有リソースへのアクセスが発生した場合に命令実行を中断する中断部２０２を備える。そのため、共有リソースへのアクセスの発生時点で複数コア間の同期が可能となり、複数コア間の共有リソースへのアクセスの順序を制御することが可能となる。
【００４４】
本実施の形態では、シミュレーション装置１００が、さらに、ホスト命令コード１２２が実行されているときにシミュレーション上で共有リソースへのアクセスが発生したことを検出する検出部２０１を備える。メモリ３０２には、共有リソースの領域のアドレス範囲を示す共有リソース情報２０３が格納される。検出部２０１は、共有リソース情報２０３と実行処理部１１２が実行している命令のオペランドアドレスとを基に、共有リソースへのアクセスの発生を検出する。中断部２０２は、検出部２０１から共有リソースへのアクセスの発生を検出したことの通知を受けて命令実行を中断する。
【００４５】
次に、図２に示した中断部２０２の各部の動作を説明する。
【００４６】
直前状態保持部２２０は、模擬部１０１より命令実行時のコンテキスト情報を受信する。直前状態保持部２２０は、受信したコンテキスト情報を、次の命令実行後まで保持する。直前状態保持部２２０は、保持したコンテキスト情報を、さらに次の命令が実行されるときはその前の命令実行時のコンテキスト情報に置き換える。
【００４７】
直前状態復元部２２１は、検出部２０１から共有リソースへのアクセスの発生を検出したことの通知を受信すると、模擬部１０１に対して命令実行の中断を指示し、模擬部１０１のコンテキスト情報を直前状態保持部２２０が保持しているコンテキスト情報に戻す。これにより、模擬部１０１の状態を共有リソースへのアクセスが発生する直前の状態に戻すことができる。
【００４８】
次に、図３に示した検出部２０１の各部の動作を説明する。
【００４９】
オペランドアドレス監視部２２３は、実行処理部１１２より実行中の命令のオペランドアドレスの情報を受信し、そのアドレスの領域が共有リソースの領域であった場合、すなわち、そのアドレスが共有リソース情報２０３で示されたアドレス範囲内であった場合に、中断部２０２に通知を送る。
【００５０】
共有リソースデータ復元部２２２は、実行処理部１１２で実行されている命令が共有リソースへのアクセスを伴う命令であった場合、その命令で発生するデータ転送の前の状態を復元する。
【００５１】
ここで、図４及び図５の例を用いて、具体的な動作を説明する。
【００５２】
図４及び図５は、ターゲットプロセッサの命令コード列を実行順に示すとともに、各命令の実行時の直前状態保持部２２０の保持内容を各命令に対応して示している。シミュレーション時は、ターゲットプロセッサの命令列はホストプロセッサの命令列に変換されているが、簡単のためターゲットプロセッサの命令列で動作を説明する。
【００５３】
図４の例では、命令ａ１から順に実行され、Ｌｏａｄ／Ｓｔｏｒｅ命令ａ１０で命令列が区切られている。すなわち、命令ａ１で始まり、Ｌｏａｄ／Ｓｔｏｒｅ命令ａ１０で終わる命令列が構成されている。Ｌｏａｄ／Ｓｔｏｒｅ命令ａ１０の次は命令ａ１１から命令ａ１６までが次の区切りの命令列になっている。すなわち、命令ａ１１で始まり、命令ａ１６で終わる命令列が次に構成されている。これらの命令列は、ホストプロセッサの命令コードに変換されて、それぞれホスト命令コード１２２のブロックとしてメモリ３０２に保存されている。
【００５４】
また、図４の例では、命令ａ３実行時の直前状態保持部２２０の保持内容は、命令ａ２実行後の状態である。Ｌｏａｄ／Ｓｔｏｒｅ命令ａ１０実行時の直前状態保持部２２０の保持内容は、直前の命令ａ５実行後の状態である。このＬｏａｄ／Ｓｔｏｒｅ命令ａ１０が共有リソースへのアクセスが発生する命令でない場合は、そのまま次の命令ａ１１からの命令列が実行される。Ｌｏａｄ／Ｓｔｏｒｅ命令ａ１０が共有リソースへのアクセスだった場合は、図５の例のように、命令実行が中断され、コア間の同期化が行われる。
【００５５】
図５の例では、Ｌｏａｄ／Ｓｔｏｒｅ命令ａ１０が共有リソースへのアクセスが発生する命令であるため、命令実行が中断されて直前の命令ａ５実行後の状態が直前状態復元部２２１により復元される。次に、コア間で同期がとられ、命令実行が中断されたコアが他のコアよりも命令実行が遅れている場合に命令実行が再開される。他のコアで命令実行が遅れているコアがある場合は、その遅れているコアの命令が実行される。コア間の同期化によって、共有リソースへのアクセスが発生する命令を実行するコアが最も遅れた状態になってから命令実行が再開され、共有リソースへのアクセスが発生することにより、共有リソースへのアクセスの順序が保障されることになる。
【００５６】
図６は、シミュレーション装置１００の動作のフローを示している。
【００５７】
ステップＳ１１において、模擬部１０１の構成要素であるコア選択部１０２は、次に命令を実行するコアを選択する。コア間の命令実行状況に差がない場合、すなわち、コア間の時間進行が同等の場合、次に命令を実行するコアは任意でよい。コア間の命令実行状況に差がある場合、すなわち、いずれかのコアの時間が先行している場合は、時間が遅れている方のコアが選択される。
【００５８】
ステップＳ１２において、情報選択部１３１は、ステップＳ１１で選択されたコアのコンテキスト情報を命令実行時の参照情報として選択する。ステップＳ１１で選択されたコアが次に実行すべきターゲット命令コード１２１を示す命令実行アドレスは、コンテキスト情報Ｘ１３２又はコンテキスト情報Ｙ１３３に保持されている。命令実行アドレスのターゲット命令コード１２１がホスト命令コード１２２に変換済であれば、ステップＳ１７の処理が行われる。一方、命令実行アドレスのターゲット命令コード１２１がホスト命令コード１２２に変換されていなければ、ステップＳ１３の処理が行われる。
【００５９】
ステップＳ１３において、デコード処理部１１０は、命令実行アドレスのターゲット命令コード１２１を読み込む。
【００６０】
ステップＳ１４において、デコード処理部１１０は、ステップＳ１４で読み込んだターゲット命令コード１２１をデコードする。
【００６１】
ステップＳ１５において、変換処理部１１１は、ステップＳ１５でデコードされた情報に従ってターゲット命令コード１２１をホスト命令コード１２２に変換する。このホスト命令コード１２２は、１つ以上の命令を含む命令列となっている。変換処理部１１１は、ステップＳ１２で選択されたコンテキスト情報を参照して、レジスタ等の内部リソースに関する情報をホスト命令コード１２２に埋め込む。
【００６２】
ステップＳ１６において、変換処理部１１１は、ステップＳ１５で得られたホスト命令コード１２２を１つのブロックとしてメモリ３０２に格納する。
【００６３】
次に、コア間の同期化が必要か判断される。ステップＳ１６で格納されたホスト命令コード１２２が同期化命令、分岐命令、及び、共有リソースへのアクセスが発生する可能性がある命令のいずれかに当てはまれば、同期化が必要であり、いずれでもなければ、同期化は不要である。同期化が不要であれば、ステップＳ１３からステップＳ１６の処理が繰り返されてターゲット命令コード１２１の変換が実施される。同期化が必要であれば、ターゲット命令コード１２１の変換が中断され、その時点でのホスト命令コード１２２のブロックの格納が完了する。そして、ステップＳ１７の処理が行われる。
【００６４】
ステップＳ１７において、中断部２０２の構成要素である直前状態保持部２２０は、直前の命令実行後の状態として、ステップＳ１２で選択されたコンテキスト情報を保存する。
【００６５】
ステップＳ１８において、実行処理部１１２は、１つのターゲット命令コード１２１に相当するホスト命令コード１２２を実行する。検出部２０１の構成要素であるオペランドアドレス監視部２２３は、そのホスト命令コード１２２が共有リソースへのアクセスが発生する命令であるか否かを判断する。共有リソースへのアクセスが発生する命令であれば、ステップＳ１９の処理が行われる。
【００６６】
ステップＳ１９において、中断部２０２の構成要素である直前状態復元部２２１は、ステップＳ１７で保存された直前の命令実行後の状態を復元する。
【００６７】
次に、ホスト命令コード１２２の１つのブロックの実行が完了しているか判断される。ステップＳ１８でホスト命令コード１２２が共有リソースへのアクセスが発生する命令でなかった場合も、ホスト命令コード１２２の１つのブロックの実行が完了しているか判断される。完了していなければ、ステップＳ１７以降の処理が繰り返されてホスト命令コード１２２の実行が継続される。完了していれば、ステップＳ２０の処理が行われる。
【００６８】
ステップＳ２０において、コア間の同期化が行われる。すなわち、コア間の命令実行状況に差がない場合、ステップＳ１１の処理が再び行われて、任意のコアが選択される。コア間の命令実行状況に差がある場合は、ステップＳ１１で時間が遅れている方のコアが選択される。
【００６９】
共有リソースアクセスが発生する命令は、同期化が必要なため、ホスト命令コード１２２の１つのブロックの最後に格納されている。よって、ステップＳ１８で共有リソースアクセスが発生する命令が実行され、ステップＳ１９で直前の命令実行後の状態が復元された後は、１つのブロックの実行が完了していると判断され、ステップＳ２０において、コア間の同期化が行われる。
【００７０】
上記のように、本実施の形態において、模擬部１０１は、複数のコアの中からコアを１つずつ繰り返し選択し、選択したコアにおける命令の実行を模擬する。管理部１０３は、模擬部１０１により模擬された命令の実行に合わせて、模擬部１０１により選択されたコアにおける時間の進行を模擬する。管理部１０３は、模擬の結果に応じて、模擬部１０１により選択されたコアの時間情報を更新する。時間情報は、複数のコアにおける時間の進行度を示す情報である。時間情報は、コアごとに個別に作成される。図示していないが、時間情報は、コンテキスト情報の一部としてメモリ３０２に格納されている。中断部２０２は、模擬部１０１により共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、メモリ３０２に格納された時間情報が示す複数のコアにおける時間の進行度が同じになるまで、模擬部１０１により選択されたコアにおける命令の実行の模擬を中断して別のコアにおける命令の実行を模擬するよう模擬部１０１を制御する。
【００７１】
また、本実施の形態において、検出部２０１は、模擬部１０１により転送先のアドレスを指定してデータを転送する命令の実行の模擬が開始された場合、共有リソース情報２０３を参照し、指定されたアドレスと、参照した共有リソース情報２０３が示すアドレスとを比較する。検出部２０１は、比較の結果に応じて、模擬部１０１により共有リソースへのアクセスを伴う命令の実行の模擬が開始されたことを検出し、中断部２０２に通知を送る。中断部２０２は、この通知を受けることで、模擬部１０１により共有リソースへのアクセスを伴う命令の実行の模擬が開始されたことを認識できる。
【００７２】
また、本実施の形態において、模擬部１０１は、選択したコアにおける命令の実行を模擬する度に、模擬の結果に応じて、選択したコアのコンテキスト情報を更新する。コンテキスト情報は、複数のコアにおける命令の実行状況を示す情報である。コンテキスト情報は、コアごとに個別に作成される。中断部２０２は、模擬部１０１により１つの命令の実行が模擬される度に、模擬部１０１により次の命令の実行の模擬が開始される前のコンテキスト情報を直前のコンテキスト情報としてメモリ３０２から取得する。中断部２０２は、模擬部１０１により当該次の命令として共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、当該次の命令の実行の模擬を模擬部１０１に中断させるとともに、メモリ３０２に格納されているコンテキスト情報を直前のコンテキスト情報に置換する。
【００７３】
このように、本実施の形態では、共有リソースへのアクセスが発生する命令の実行時にコア間の同期をとることにより、複数コア間の共有リソースへのアクセスの順序を正確に模擬することができる。
【００７４】
＊＊＊実施の形態の効果の説明＊＊＊
本実施の形態では、複数のコアと共有リソースとを有するシステムの並列処理の動作が模擬される。１つのコアにおける、共有リソースへのアクセスを伴う命令の実行の模擬が開始された場合、複数のコアにおける時間の進行度が同じになるまで、当該１つのコアにおける命令の実行の模擬が中断され、別のコアにおける命令の実行が模擬される。このため、シミュレーションにおいて、共有リソースへのアクセスを実際のハードウェアと同じ順序で発生させることができる。複数のコアを複数のプロセッサに置き換えた場合も、同等の効果を得ることができる。
【００７５】
＊＊＊他の構成＊＊＊
本実施の形態では、「部」の機能がソフトウェアにより実現されるが、変形例として、「部」の機能がソフトウェアとハードウェアとの組み合わせにより実現されてもよい。具体例として、１つ又はいくつかの「部」の機能が処理回路により実現され、残りの機能がソフトウェアにより実現されてもよい。
【００７６】
処理回路は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、又は、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）である。或いは、処理回路は、具体的には、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。
【００７７】
プロセッサ３０１、メモリ３０２、及び、処理回路を、総称して「プロセッシングサーキットリ」という。つまり、「部」の機能は、ソフトウェアにより実現されるか、ソフトウェアとハードウェアとの組み合わせにより実現されるかに関わらず、プロセッシングサーキットリにより実現される。
【００７８】
「部」を「工程」、「手順」又は「処理」に読み替えてもよい。
【００７９】
以上、本発明の実施の形態について説明したが、この実施の形態を部分的に実施しても構わない。具体的には、この実施の形態に係るシミュレーション装置１００の機能要素のうち、一部の機能要素のみを採用してもよい。なお、本発明は、この実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００８０】
１００  シミュレーション装置、１０１  模擬部、１０２  コア選択部、１０３  管理部、１１０  デコード処理部、１１１  変換処理部、１１２  実行処理部、１２１  ターゲット命令コード、１２２  ホスト命令コード、１３１  情報選択部、１３２  コンテキスト情報Ｘ、１３３  コンテキスト情報Ｙ、２０１  検出部、２０２  中断部、２０３  共有リソース情報、２２０  直前状態保持部、２２１  直前状態復元部、２２２  共有リソースデータ復元部、２２３  オペランドアドレス監視部、３０１  プロセッサ、３０２  メモリ。
【図１】
2017158786.tif 000003
【図２】
2017158786.tif 000004
【図３】
2017158786.tif 000005
【図４】
2017158786.tif 000006
【図５】
2017158786.tif 000007
【図６】
2017158786.tif 000008
【図７】
2017158786.tif 000009
【図８】
2017158786.tif 000010
【国際調査報告】
2017158786.tif 000011
2017158786.tif 000012
2017158786.tif 000013
2017158786.tif 000014