(57)【特許請求の範囲】
【請求項１】
複数のコアモデルを並列実行させるマルチコアモデルシミュレーションプログラムであって、
コンピュータに、前記複数のコアモデルの並列実行中において、一のコアモデルから他のコアモデルへコアモデル間通信させる場合に、前記一のコアモデルから第１の記憶モデルへのデータの書き込みに関する通信を実行させ、
前記第１の記憶モデルに書き込まれたデータを第２の記憶モデルに転送させ、
前記第２の記憶モデルに転送されたデータの読み出しに関する通信を前記他のコアモデルに実行させることにより、前記一のコアモデルの実行中の命令と前記他のコアモデルの実行中の命令とを同期させることを特徴とするマルチコアモデルシミュレーションプログラム。
【請求項２】
さらに、前記他のコアモデルによる前記データの読み出しに関する通信中に、前記一のコアモデルから前記第１の記憶モデルへのあらたなデータの書き込みに関する通信を実行させることを特徴とする請求項１に記載のマルチコアモデルシミュレーションプログラム。
【請求項３】
請求項１または２に記載のマルチコアモデルシミュレーションプログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【請求項４】
複数のコアモデルを並列実行するマルチコアモデルシミュレータであって、
前記複数のコアモデルの並列実行中において、一のコアモデルから他のコアモデルへコアモデル間通信する場合に、前記一のコアモデルから第１の記憶モデルへのデータの書き込みに関する通信を実行する手段と、
前記第１の記憶モデルに書き込まれたデータを第２の記憶モデルに転送する手段と、
前記第２の記憶モデルに転送されたデータの読み出しに関する通信を前記他のコアモデルに実行することにより、前記一のコアモデルの実行中の命令と前記他のコアモデルの実行中の命令とを同期する手段と、
を備えることを特徴とするマルチコアモデルシミュレータ。
【請求項５】
さらに、前記他のコアモデルによる前記データの読み出しに関する通信中に、前記一のコアモデルから前記第１の記憶モデルへのあらたなデータの書き込みに関する通信を実行する手段を備えることを特徴とする請求項４に記載のマルチコアモデルシミュレータ。
【請求項６】
複数のコアモデルを並列実行するマルチコアモデルシミュレーション方法であって、
前記複数のコアモデルの並列実行中において、一のコアモデルから他のコアモデルへコアモデル間通信する場合に、前記一のコアモデルから第１の記憶モデルへのデータの書き込みに関する通信を実行し、
前記第１の記憶モデルに書き込まれたデータを第２の記憶モデルに転送し、
前記第２の記憶モデルに転送されたデータの読み出しに関する通信を前記他のコアモデルに実行させることにより、前記一のコアモデルの実行中の命令と前記他のコアモデルの実行中の命令とを同期することを特徴とするマルチコアモデルシミュレーション方法。
【請求項７】
さらに、前記他のコアモデルによる前記データの読み出しに関する通信中に、前記一のコアモデルから前記第１の記憶モデルへのあらたなデータの書き込みに関する通信を実行することを特徴とする請求項６に記載のマルチコアモデルシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マルチプロセッサおよびＳｏＣ（Ｓｙｓｔｅｍ  Ｏｎ  ａ  Ｃｈｉｐ）モデルにおけるコアモデル間通信のシミュレーションを実行するマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法に関する。
【背景技術】
【０００２】
近年、パーソナル・コンピュータ用の汎用ＣＰＵ（中央処理装置）と同様に、組み込み型プロセッサにおいてもＣＰＵはマルチコア化へシフトしている。また、ますます複雑化するシステムＬＳＩの開発期間の短縮のために、設計の早い段階からハードウェアとソフトウェアの協調設計を行うことが重要である。しかし、既存のシミュレータではマルチコア対応ができていないことに加え十分なシミュレーション速度が得られていない。高速なソフトウェア／ハードウェア協調シミュレータの開発が課題となっている。
【０００３】
ここで、従来のマルチプロセッサモデルのシミュレータによるシミュレーション方式について、それぞれコアモデルを有する２つのプロセッサモデルＰＥ１，ＰＥ２を例に挙げて説明する。図２２は、従来のマルチプロセッサモデルのシミュレーション処理を示すフローチャートであり、図２３は、従来のマルチプロセッサモデルのシミュレーション処理を示すタイミングチャートである。
【０００４】
まず、シミュレーション対象となるプログラムのシミュレーションを実行するか否かを判断する（ステップＳ２２０１）。実行しない場合（ステップＳ２２０１：Ｎｏ）、シミュレーションを終了する。一方、実行する場合（ステップＳ２２０１：Ｙｅｓ）、変数を指定し（ステップＳ２２０２）、プロセッサモデルＰＥ１のコアモデル処理を実行する（ステップＳ２２０３）。具体的には、指定された変数を、プロセッサモデルＰＥ１の命令実行関数に順次与えて、プロセッサモデルＰＥ１のコアモデル処理を実行する。
【０００５】
つぎに、プロセッサモデルＰＥ１のコアモデル処理の実行が終了すると、指定された変数を、プロセッサモデルＰＥ２の命令実行関数に順次与えて、プロセッサモデルＰＥ２のコアモデル処理を実行する（ステップＳ２２０４）。プロセッサモデルＰＥ２のコアモデル処理の実行が終了することにより、シミュレーションの１ループが完了する。その後は、ステップＳ２２０１に移行する。すなわち、図２３に示すように、プロセッサモデルＰＥ１、プロセッサモデルＰＥ２、プロセッサモデルＰＥ１、プロセッサモデルＰＥ２・・・の順序で実行することとなる。
【０００６】
ここで、プロセッサモデルＰＥ１のコアモデル処理の実行処理（ステップＳ２２０３）について具体的に説明する。図２２において、未実行の命令があるか否かを判断する（ステップＳ２２１１）。未実行の命令がない場合（ステップＳ２２１１：Ｎｏ）、プロセッサモデルＰＥ２のコアモデル実行処理（ステップＳ２２０４）に移行する。
【０００７】
一方、未実行の命令がある場合（ステップＳ２２１１：Ｙｅｓ）、当該未実行の命令をフェッチし（ステップＳ２２１２）、実行する（ステップＳ２２１３）。そのあと、割り込み処理（ステップＳ２２１４）により、割り込みがあったか否かをチェックして、ステップＳ２２１１に戻る。
【０００８】
プロセッサモデルＰＥ２のコアモデル実行処理（ステップＳ２２０４）についても、未実行の命令があるか否かを判断する（ステップＳ２２２１）。未実行の命令がない場合（ステップＳ２２２１：Ｎｏ）、ステップＳ２２０１に移行する。
【０００９】
一方、未実行の命令がある場合（ステップＳ２２２１：Ｙｅｓ）、当該未実行の命令をフェッチし（ステップＳ２２２２）、実行する（ステップＳ２２２３）。そのあと、割り込み処理（ステップＳ２２２４）により、割り込みがあったか否かをチェックして、ステップＳ２２２１に戻る。
【００１０】
このシミュレータでは、マルチプロセッサモデルは１コアの命令実行をコア単位で順次実行するため、コアの命令実行が終了して次のコアの命令実行をする間にコア間の通信処理（コアモデル間通信処理）をする。そして、プロセッサモデルＰＥ１の割り込み処理（ステップＳ２２１４）において、プロセッサモデルＰＥ２への割り込みが検出された場合、プロセッサモデルＰＥ１からプロセッサモデルＰＥ２へ通信をおこない、一時的にプロセッサモデルＰＥ２のコアモデル処理を実行する。なお、上記従来のシミュレータに関連する従来技術としては、たとえば、下記特許文献１〜３の従来技術が挙げられる。
【００１１】
【特許文献１】特開平５−３５５３４号公報
【特許文献２】特開平４−３５２２６２号公報
【特許文献３】特開２００１−２５６２６７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、上述した従来のシミュレーション方式では、プロセッサモデルＰＥ１，ＰＥ２の実行処理（ステップＳ２２０３，ステップＳ２２０４）がシリアライズされることとなり、シミュレーション時間が数珠繋ぎ式に増大するという問題があった。
【００１３】
また、上述した従来のシミュレーション方式では、プロセッサモデルＰＥ１，ＰＥ２の実行処理（ステップＳ２２０３，ステップＳ２２０４）がシリアライズされているため、プロセッサモデルＰＥ１でプロセッサモデルＰＥ２に対する割り込み処理が発生した場合には、プロセッサモデルＰＥ２とコアモデル間通信することにより、一時的にプロセッサモデルＰＥ２のコアモデル処理を実行することができる。
【００１４】
一方、プロセッサモデルＰＥ２でプロセッサモデルＰＥ１に対する割り込み処理が発生した場合、割り込みにより実行すべき命令がプロセッサモデルＰＥ１においてすでに終了しているため、プロセッサモデルＰＥ１に対して通信することができない。したがって、つぎのループにおけるプロセッサモデルＰＥ１の命令実行を待たなければならず、シミュレーション時間の増大を招くという問題があった。
【００１５】
上述した特許文献１の従来技術では、マルチプロセッサモデルを利用しているが、プロセッサモデル間におけるコアモデル間通信が同期されておらず、結果的に、図２２および図２３に示した従来のシミュレータと同様、シミュレーション時間の増大を招くという問題があった。
【００１６】
このように、従来のシミュレータでは、シミュレーション時間の増大により、シミュレーション速度が低下し、シミュレーション対象のプログラムを組み込んだ実機の開発期間が遅延するという問題があった。
【００１７】
この発明は、上述した従来技術による問題点を解消するため、マルチコアモデルシミュレーションの信頼性および高速化の向上を図ることにより、開発期間の短縮化を実現することができるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法を提供することを目的とする。
【課題を解決するための手段】
【００１８】
上述した課題を解決し、目的を達成するため、この発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法は、複数のコアモデルを並列実行させるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法であって、前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信することを特徴とする。
【００１９】
また、上記発明において、前記他のコアモデルの実行中の命令を停止し、前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行し、当該命令の実行終了後に停止された命令を実行することとしてもよい。
【００２０】
また、上記発明において、前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデル（たとえば、レジスタモデル、メモリモデル、バッファモデル）への通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止し、前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信することとしてもよい。
【００２１】
また、上記発明において、前記一のコアモデルから前記他のコアモデルに対し割り込み指示に関する通信をし、当該割り込み指示に関する通信後に、前記割り込み指示に関する通信に基づく割り込み処理を前記他のコアモデルに実行することとしてもよい。
【００２２】
また、上記発明において、前記複数のコアモデルのうち、最も遅く実行が終了したコアモデルを検出し、当該検出結果に基づいて、前記複数のコアモデルのあらたな実行を開始することとしてもよい。
【００２３】
また、上記発明において、前記一のコアモデルから第１の記憶モデルへのデータの書き込みに関する通信を実行し、前記第１の記憶モデルに書き込まれたデータを第２の記憶モデルに転送し、前記第２の記憶モデルに転送されたデータの読み出しに関する通信を前記他のコアモデルに実行することとしてもよい。
【００２４】
また、上記発明において、さらに、前記他のコアモデルによる前記データの読み出しに関する通信中に、前記一のコアモデルから前記第１の記憶モデルへのあらたなデータの書き込みに関する通信を実行することとしてもよい。
【００２５】
これらの発明によれば、複数のプロセッサモデル間で同期をとることで、プロセッサモデル間のコアモデル間通信の高速化を図ることができる。また、任意の命令実行数により同期のタイミングをとることもできる。さらに、複数のプロセッサモデルの同時実行により、プロセッサモデル間の双方向によるコアモデル間通信を実現することができる。また、同期後のコアモデル間通信処理をスレッド化することで、コアモデル通信処理時間を、プロセッサモデル間のシミュレーション処理時間に隠蔽することができ、マルチコアモデルシミュレータのサイクルレベルでの同期を実現することができる。
【発明の効果】
【００２６】
本発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法によれば、マルチコアモデルシミュレーションの信頼性および高速化の向上を図ることにより、開発期間の短縮化を実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【００２７】
以下に添付図面を参照して、この発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法の好適な実施の形態を詳細に説明する。
【００２８】
本実施の形態にかかるマルチコアモデルシミュレータは、複数のコアモデルに関するシミュレータであり、シミュレーション対象であるプログラムを読み込んで実行するコアモデルは、１つのプロセッサモデル内に複数存在していてもよく、また、プロセッサモデルごとに１つずつ存在していてもよい。以下、実施の形態では、例として、コアモデルがプロセッサモデルごとに１つずつ存在する場合について説明する。
【００２９】
（マルチコアモデルシミュレータのハードウェア構成）
まず、この発明の実施の形態にかかるマルチコアモデルシミュレータのハードウェア構成について説明する。図１は、この発明の実施の形態にかかるマルチコアモデルシミュレータのハードウェア構成を示すブロック図である。
【００３０】
図１において、マルチコアモデルシミュレータは、ＣＰＵ１０１と、ＲＯＭ１０２と、ＲＡＭ１０３と、ＨＤＤ（ハードディスクドライブ）１０４と、ＨＤ（ハードディスク）１０５と、ＦＤＤ（フレキシブルディスクドライブ）１０６と、着脱可能な記録媒体の一例としてのＦＤ（フレキシブルディスク）１０７と、ディスプレイ１０８と、Ｉ／Ｆ（インターフェース）１０９と、キーボード１１０と、マウス１１１と、スキャナ１１２と、プリンタ１１３と、を備えている。また、各構成部はバス１００によってそれぞれ接続されている。
【００３１】
ここで、ＣＰＵ１０１は、マルチコアモデルシミュレータの全体の制御を司る。ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵ１０１のワークエリアとして使用される。ＨＤＤ１０４は、ＣＰＵ１０１の制御にしたがってＨＤ１０５に対するデータのリード／ライトを制御する。ＨＤ１０５は、ＨＤＤ１０４の制御で書き込まれたデータを記憶する。
【００３２】
ＦＤＤ１０６は、ＣＰＵ１０１の制御にしたがってＦＤ１０７に対するデータのリード／ライトを制御する。ＦＤ１０７は、ＦＤＤ１０６の制御で書き込まれたデータを記憶したり、ＦＤ１０７に記憶されたデータをマルチコアモデルシミュレータに読み取らせたりする。
【００３３】
また、着脱可能な記録媒体として、ＦＤ１０７のほか、ＣＤ−ＲＯＭ（ＣＤ−Ｒ、ＣＤ−ＲＷ）、ＭＯ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、メモリーカードなどであってもよい。ディスプレイ１０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３４】
Ｉ／Ｆ１０９は、通信回線を通じてインターネットなどのネットワーク１１４に接続され、このネットワーク１１４を介して他の装置に接続される。そして、Ｉ／Ｆ１０９は、ネットワーク１１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３５】
キーボード１１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス１１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３６】
スキャナ１１２は、画像を光学的に読み取り、マルチコアモデルシミュレータ内に画像データを取り込む。なお、スキャナ１１２は、ＯＣＲ機能を持たせてもよい。また、プリンタ１１３は、画像データや文書データを印刷する。プリンタ１１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３７】
（マルチコアモデルシミュレータによるシミュレーション処理手順）
つぎに、上述したマルチコアモデルシミュレータによるシミュレーション処理について説明する。図２２に示した従来のマルチコアモデルシミュレーション処理と異なり、各コアモデルは並列に実行する。そのためコアモデル間は非同期で通信することができる。しかし、命令実行するごとに毎回他のコアモデルからの通信があるのかどうかをチェックするには処理が多く増えてしまうため、本実施の形態では、コア間通信回数を間引くようにシミュレーション処理を実行する。これにより、コアモデル処理の並列実行という実行性能を低下させることなく、コアモデル間通信を実現することができ、シミュレーション処理時間の短縮化を図ることができる。
【００３８】
以下の図に示すフローチャートにおける「Ｓ○○○−ｉ」（○○○は数字）の表記は、プロセッサモデルＰＥｉによる処理をあらわしている。また図示はしないが、プロセッサモデルＰＥｊ（ｊ＝１〜ｎ、ｎ≧２，ｊ≠ｉ）による処理は、「Ｓ○○○−ｊ」（○○○は数字）と読み替えることとする。
【００３９】
図２は、この発明の実施の形態にかかるマルチコアモデルシミュレータによるマルチコアモデルシミュレーション処理手順を示すフローチャートである。図２において、まず、シミュレーション対象となるプログラムのシミュレーションを実行するか否かを判断する（ステップＳ２０１）。実行しない場合（ステップＳ２０１：Ｎｏ）、シミュレーションを終了する。
【００４０】
一方、実行する場合（ステップＳ２０１：Ｙｅｓ）、ｎ個のスレッドを生成し（ステップＳ２０２）、各スレッドにおいて実行されるプロセッサモデルＰＥｉ（ｉ＝１〜ｎ、ｎ≧２）の命令を特定する変数を指定する（ステップＳ２０３）。たとえば、シミュレーション対象となるプログラムが１０００個の命令（プログラムコード）を有する場合、変数として１〜１００を指定することにより、１００個の命令を、各プロセッサモデルＰＥｉにおいて実行することができる。１ループ（ステップＳ２０１〜ステップＳ２０４−ｉ）ごとに変数を１００個指定すれば、１０ループでシミュレーションが完了する。
【００４１】
つぎに、プロセッサモデルＰＥｉを実行する（ステップＳ２０４−１〜Ｓ２０４−ｎ）。具体的には、指定された変数を、プロセッサモデルＰＥｉの命令実行関数に与えて、プロセッサモデルＰＥ１〜プロセッサモデルＰＥｎを実行する（ステップＳ２０４）。プロセッサモデルＰＥ１〜プロセッサモデルＰＥｎの実行が終了した場合、ステップＳ２０１に戻る。
【００４２】
（プロセッサモデルＰＥｉの実行処理）
つぎに、上述したプロセッサモデルＰＥｉ（ｉ＝１〜ｎ、ｎ≧２）の実行処理について説明する。図３は、この発明の実施の形態にかかるプロセッサモデルＰＥｉの実行処理手順を示すフローチャートである。図３において、未実行の命令があるか否かを判断する（ステップＳ３０１−ｉ）。未実行の命令がない場合（ステップＳ３０１−ｉ：Ｎｏ）、プロセッサモデルＰＥｉの実行処理を終了し、ステップＳ２０１に戻る。
【００４３】
一方、未実行の命令がある場合（ステップＳ３０１−ｉ：Ｙｅｓ）、当該未実行の命令をフェッチして（ステップＳ３０２−ｉ）、実行する（ステップＳ３０３−ｉ）。このあと、同期処理を実行して（ステップＳ３０４−ｉ）、割り込み処理を実行する（ステップＳ３０５−ｉ）。割り込み処理では、他のプロセッサモデルＰＥｊ（ｊ＝１〜ｎ、ｎ≧２，ｊ≠ｉ）からの割り込みをチェックし、ステップＳ３０１−ｉに戻る。
【００４４】
（プロセッサモデルＰＥｉの同期処理）
つぎに、上述したプロセッサモデルＰＥｉの同期処理について説明する。図４は、この発明の実施の形態にかかるプロセッサモデルＰＥｉの同期処理手順を示すフローチャートである。図４において、まず、命令実行（ステップＳ３０３−ｉ）の結果により、他のプロセッサモデルＰＥｊに通信するか否かを判断する（ステップＳ４０１−ｉ）。他のプロセッサモデルＰＥｊに通信する場合（ステップＳ４０１−ｉ：Ｙｅｓ）、他のプロセッサモデルＰＥｊへのコアモデル間通信処理を実行する（ステップＳ４０２−ｉ）。このコアモデル間通信処理の実行後、図３に示したステップＳ３０１−ｉに戻る。
【００４５】
一方、他のプロセッサモデルＰＥｊにコアモデル間通信しない場合（ステップＳ４０１−ｉ：Ｎｏ）、設定フラグが『１』であるか否かを判断する（ステップＳ４０３−ｉ）。ここで、設定フラグとは、他のプロセッサモデルＰＥｊから通信がありうるか否かを識別するフラグである。この場合、『１』であるときには、他のプロセッサモデルＰＥｊから通信があると判断され、『０』である場合には、他のプロセッサモデルＰＥｊから通信がないと判断される。但し、本設定フラグは各コアモデルからアクセス可能であるため、どのコアモデルが占有してアクセスするかを決定しなければならい。その仕組みの例としてマルチスレッドプログラミングで使う排他制御の使用で実装できる。
【００４６】
そして、設定フラグが『０』である場合（ステップＳ４０３−ｉ：Ｎｏ）、図３に示したステップＳ３０１−ｉに戻る。一方、設定フラグが『１』である場合（ステップＳ４０３−ｉ：Ｙｅｓ）、カウンタＣｎｔが所定のしきい値Ｔよりも大きいか否かを判断する（ステップＳ４０４−ｉ）。ここで、カウンタＣｎｔとは、命令実行数をあらわすループカウンタである。また、しきい値Ｔは、任意の命令実行数でコアモデル間通信をさせるためのしきい値である。
【００４７】
そして、カウンタＣｎｔがしきい値Ｔ以下である場合（ステップＳ４０４−ｉ：Ｎｏ）、図３に示したステップＳ３０１−ｉに戻る。一方、カウンタＣｎｔがしきい値Ｔより大きい場合（ステップＳ４０４−ｉ：Ｙｅｓ）、割り込み前処理（ステップＳ４０５−ｉ）を実行する。割り込み前処理では、たとえば、他のプロセッサモデルＰＥｊからコアモデル間通信があるか否かをチェックし、コアモデル間通信がある場合には、他のプロセッサモデルＰＥｊから送信されてくる変数を受け付ける。なお、割り込み処理（ステップＳ３０５−ｉ）では、この受け付けられた変数に命令実行関数を与えることで、変数に応じた命令の割り込みをおこなう。
【００４８】
なお、図２〜図４に示した処理は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５などの記録媒体に記録されたプログラムを、ＣＰＵ１０１が実行することによって実現することができる。
【００４９】
図５は、この発明の実施の形態にかかるマルチプロセッサモデルのシミュレーション処理の一例を示すタイミングチャートである。図５において、従来のマルチプロセッサモデルでは、プロセッサモデルＰＥ１とプロセッサモデルＰＥ２とのコアモデル処理がシリアライズされているため、プロセッサモデルＰＥ１のコアモデル処理とプロセッサモデルＰＥ２のコアモデル処理との間に、プロセッサモデルＰＥ１からプロセッサモデルＰＥ２へのコアモデル間通信処理時間が必要であった。
【００５０】
また、プロセッサモデルＰＥ２の命令実行中にプロセッサモデルＰＥ１へのコアモデル間通信が必要となった場合、当該必要な命令を呼び出すために、プロセッサモデルＰＥ１のコアモデル処理を始めからやり直す必要があった。したがって、プロセッサモデルのコアモデル処理時間とコアモデル間通信処理時間からなるシミュレーション時間が増大することとなる。
【００５１】
一方、この発明の実施の形態にかかるシミュレーション処理によれば、マルチプロセッサモデルのシミュレーション処理に必要なコアモデル間通信を、コアモデル処理時間に隠蔽するように、換言すれば、コアモデル処理と並列にコアモデル間通信処理を実行することができる。
【００５２】
また、このコアモデル間通信も並列に実行できる。そのためシミュレーション速度の高速化はもちろん、コア上での実行中の命令を止めずに並列実行することができる。したがって、実機に限りなく近いモデルのシミュレーションを実現することができる。以下、図２〜図４に示したマルチコアモデルシミュレーション処理の詳細な実施例について説明する。
【実施例１】
【００５３】
まず、上述した実施の形態のマルチコアモデルシミュレータの実施例１について説明する。実施例１では、プロセッサモデルＰＥｉからプロセッサモデルＰＥｊに対しコアモデル間通信処理を直接実行する例である。
【００５４】
図６は、実施例１にかかるマルチコアモデルシミュレーションを示す説明図である。図６において、プロセッサモデルＰＥｉおよびプロセッサモデルＰＥｊはコアモデル処理を並列実行している。プロセッサモデルＰＥｉの実行中に、プロセッサモデルＰＥｊへのコアモデル間通信を検出すると、プロセッサモデルＰＥｉは、プロセッサモデルＰＥｊに対し排他制御を実行する。
【００５５】
排他制御とは、通信先であるプロセッサモデルＰＥｊにおける現在実行中の命令を一時的に排除して、プロセッサモデルＰＥｊを占有する制御である。具体的には、プロセッサモデルＰＥｉの現在実行中の命令に関連する命令を実行する。
【００５６】
たとえば、通信先であるプロセッサモデルＰＥｊにおける現在実行中の命令をロックし、プロセッサモデルＰＥｊに対し、当該プロセッサモデルＰＥｊで管理されている変数を送信して、命令実行関数に当該変数を与えることにより、プロセッサモデルＰＥｉから命令を割り込ませる。そして、プロセッサモデルＰＥｉからの割り込み処理が終了した場合、プロセッサモデルＰＥｉでは、プロセッサモデルＰＥｉの実行を継続するとともに、プロセッサモデルＰＥｊでは、ロックされていた命令の実行を再開する。
【００５７】
まず、実施例１にかかる排他制御によるコアモデル間通信処理について説明する。図７は、実施例１にかかる排他制御によるコアモデル間通信処理手順を示すフローチャートである。このフローチャートは、図４に示したプロセッサモデルＰＥｉにおけるプロセッサモデルＰＥｊへのコアモデル間通信処理（ステップＳ４０２−ｉ）の詳細なフローチャートである。
【００５８】
図７において、プロセッサモデルＰＥｊへのアクセスが可能か否か、すなわち、変数のリード／ライトが可能か否かを判断する（ステップＳ７０１−ｉ）。具体的には、たとえば、他のプロセッサモデルＰＥｊの排他制御に関するフラグにより判断する。他のプロセッサモデルＰＥｊが現在排他制御されていればアクセス不可能であると判断し、他のプロセッサモデルＰＥｊ排他制御されていなければアクセス可能であると判断することができる。
【００５９】
アクセス可能でない場合（ステップＳ７０１−ｉ：Ｎｏ）、待機するか否かを判断する（ステップＳ７０２−ｉ）。具体的には、アクセスのリトライをおこなうか否かを判断する。待機する場合（ステップＳ７０２−ｉ：Ｙｅｓ）、ステップＳ７０１−ｉに戻る。一方、待機しない場合（ステップＳ７０２−ｉ：Ｎｏ）、図３に示したステップＳ３０１−ｉに戻って、未実行の命令があるか否かを判断する。
【００６０】
また、ステップＳ７０１−ｉにおいて、プロセッサモデルＰＥｊへのアクセスが可能である場合（ステップＳ７０１−ｉ：Ｙｅｓ）、変数にアクセスする（ステップＳ７０３−ｉ）。具体的には、プロセッサモデルＰＥｉで指定した変数を、コアモデル間通信により、プロセッサモデルＰＥｊのレジスタモデルに書き込む。これにより、プロセッサモデルＰＥｊのレジスタモデルに書き換えられた変数を命令実行関数に与えることができる。このあと、図３に示したステップＳ３０１−ｉに戻って、未実行の命令があるか否かを判断する。
【００６１】
つぎに、実施例１にかかる排他制御による割り込み前処理について説明する。図８は、実施例１にかかる排他制御による割り込み前処理手順を示すフローチャートである。このフローチャートは、図４に示したプロセッサモデルＰＥｉにおけるプロセッサモデルＰＥｊに対する割り込み前処理（ステップＳ４０５−ｉ）の詳細なフローチャートである。
【００６２】
図８において、他のプロセッサモデルＰＥｊからアクセス可能か否かを判断する（ステップＳ８０１−ｉ）。具体的には、たとえば、プロセッサモデルＰＥｉの排他制御に関するフラグにより判断する。プロセッサモデルＰＥｉが現在排他制御されていればアクセス不可能であると判断し、プロセッサモデルＰＥｉが排他制御されていなければアクセス可能であると判断することができる。
【００６３】
アクセス可能でない場合（ステップＳ８０１−ｉ：Ｎｏ）、待機するか否かを判断する（ステップＳ８０２−ｉ）。具体的には、アクセスのリトライをおこなうか否かを判断する。待機する場合（ステップＳ８０２−ｉ：Ｙｅｓ）、ステップＳ８０１−ｉに戻る。一方、待機しない場合（ステップＳ８０２−ｉ：Ｎｏ）、ステップＳ８０４−ｉに移行する。
【００６４】
また、ステップＳ８０１−ｉにおいて、プロセッサモデルＰＥｊからアクセス可能である場合（ステップＳ８０１−ｉ：Ｙｅｓ）、変数にアクセスする（ステップＳ８０３−ｉ）。具体的には、プロセッサモデルＰＥｉのレジスタモデルを読み込む。そして、コアモデル間通信が有効か否かを判断する（ステップＳ８０４−ｉ）。具体的には、他のプロセッサモデルＰＥｊからの通信によりレジスタモデルの変数が書き換えられているか否かを判断する。
【００６５】
有効でない場合（ステップＳ８０４−ｉ：Ｎｏ）、図３に示したステップＳ３０５−ｉに移行する。一方、有効である場合（ステップＳ８０４−ｉ：Ｙｅｓ）、関数決定処理を実行する（ステップＳ８０５−ｉ）。関数決定処理では、レジスタモデルに書き換えられた変数に応じて、割り込み処理（ステップＳ３０５−ｉ）でコールすべき命令実行関数を決定する。そのあと、ステップＳ３０５−ｉに移行する。
【００６６】
このように、実施例１によれば、排他制御により他のプロセッサモデルＰＥｊを一時的に占有することにより、プロセッサモデルＰＥｉ，ＰＥｊのコアモデル処理を同期させることができる。したがって、コアモデル処理と並列にコアモデル間通信処理を実行することができ、シミュレーション処理時間の短縮化を図ることができる。
【実施例２】
【００６７】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例２について説明する。実施例１では、プロセッサモデルＰＥｉからプロセッサモデルＰＥｊに対しコアモデル間通信処理を直接実行する例について説明したが、実施例２では、プロセッサモデルＰＥｉからプロセッサモデルＰＥｊに対しコアモデル間通信処理を間接的に実行する例である。具体的には、実施例２では、各プロセッサモデルＰＥｉ，ＰＥｊ外のレジスタモデルまたはメモリモデル（以下、「レジスタ／メモリモデル」と称す。）を利用した排他制御をおこなうことによりコアモデル間通信処理を実行する例である。
【００６８】
また、実施例１においてアクセス対象となる変数は、各プロセッサモデルＰＥｉ，ＰＥｊで管理されている変数であるが、実施例２においてアクセス対象となる変数（ステップＳ７０３−ｉ、ステップＳ８０３−ｉ）は、各プロセッサモデルＰＥｉ，ＰＥｊに共通のグローバル変数である。また、アクセス領域は、各プロセッサモデルＰＥｉ，ＰＥｊ内部のレジスタモデルではなく、上述した各プロセッサモデルＰＥｉ，ＰＥｊ外のレジスタ／メモリモデルとなる。このため、図７および図８に示した処理手順は、変数およびアクセス領域が相違するだけで同一処理手順となるため省略する。
【００６９】
図９は、実施例２にかかるマルチコアモデルシミュレーションを示す説明図である。図９において、プロセッサモデルＰＥｉおよびプロセッサモデルＰＥｊはコアモデル処理を並列実行している。プロセッサモデルＰＥｉのコアモデル処理中に、プロセッサモデルＰＥｊへの通信を検出すると、プロセッサモデルＰＥｉは、プロセッサモデルＰＥｊに対し排他制御を実行する。
【００７０】
具体的には、図９（Ａ）において、プロセッサモデルＰＥｉおよびプロセッサモデルＰＥｊがアクセス可能なレジスタ／メモリモデル９００に変数を書き込む。書き込み中は、プロセッサモデルＰＥｊからのレジスタ／メモリモデルの読み込みを排他制御により禁止する。すなわち、書き込みが終了するまでレジスタ／メモリモデル９００へのアクセスを待機する。つぎに、図９（Ｂ）において、プロセッサモデルＰＥｉからの書き込みが終了した場合、プロセッサモデルＰＥｊからレジスタ／メモリモデル９００を読み込む。
【００７１】
このように、実施例２によれば、実施例１と同様、排他制御により他のプロセッサモデルＰＥｊからのレジスタ／メモリモデルへのアクセスを一時的に禁止することにより、プロセッサモデルＰＥｉ，ＰＥｊのコアモデル処理を同期させることができる。したがって、コアモデル処理と並列にコアモデル間通信処理を実行することができ、シミュレーション処理時間の短縮化を図ることができる。
【実施例３】
【００７２】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例３について説明する。実施例３では、割り込み処理の具体例を示している。実施例３では、プロセッサモデルＰＥｉからプロセッサモデルＰＥｊへの割り込み指示があった場合、プロセッサモデルＰＥｊにおいて割り込み処理を実行する。
【００７３】
図１０は、実施例３にかかるマルチコアモデルシミュレーションを示す説明図であり、図１１は、実施例３にかかるマルチコアモデルシミュレーション処理手順を示すフローチャートである。図１０および図１１において、コアモデル間通信により、プロセッサモデルＰＥｉからプロセッサモデルＰＥｊに割り込み指示があったか否かを判断する（ステップＳ１１０１−ｊ）。具体的には、プロセッサモデルＰＥｊ内のレジスタモデルにプロセッサモデルＰＥｉからの割り込み指示信号が書き込まれたか否かを判断する。
【００７４】
割り込み指示がない場合（ステップＳ１１０１−ｊ：Ｎｏ）、ステップＳ３０１−ｊ（図３を参照。）に戻る。一方、割り込み指示がある場合（ステップＳ１１０１−ｊ：Ｙｅｓ）、具体的には、プロセッサモデルＰＥｊ内のレジスタモデルにプロセッサモデルＰＥｉからの割り込み指示信号が書き込まれた場合、当該書き込みが終了するまで待機して、書き込み終了後、プロセッサモデルＰＥｊのインターラプトコントローラＩＲＣを起動する（ステップＳ１１０２−ｊ）。そして、インターラプトコントローラＩＲＣの実行の終了を検出し続け（ステップＳ１１０３−ｊ：Ｎｏ）、終了した場合（ステップＳ１１０３−ｊ：Ｙｅｓ）、ステップＳ３０１−ｊ（図３を参照。）に戻る。
【００７５】
このように、実施例３によれば、プロセッサモデルＰＥｉとプロセッサモデルＰＥｊとの並列実行中に、プロセッサモデルＰＥｉからの割り込み指示によりプロセッサモデルＰＥｊにおいて割り込み処理を実行することができる。したがって、シミュレーション処理時間の短縮化を図ることができる。
【実施例４】
【００７６】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例４について説明する。実施例４では、いわゆるバリア方式（バリアアルゴリズム）を利用してマルチコアシミュレーションを実現する例である。
【００７７】
実際の１チップで構成されるマルチプロセッサは、同じクロックか定数倍のクロックで同期している。あるタイミングでマルチプロセッサ間に割り込みがあると、その実行中のプログラムのどこで割り込みが入ったかにより処理も異なる。マルチプロセッサモデルとしては、正しく時間軸や命令ステップ数を実現できなければプロセッサモデルＰＥｉ，ＰＥｊ上で実行されるユーザプログラムのデバッグもできないことになる。また、サイクル数がカウントできなければ精度のよいシミュレーションはできない。
【００７８】
したがって、マルチプロセッサモデルにとって、プロセッサ間の同期は、大変重要な技術である。そもそも、一般的にマルチスレッドプログラムはスレッド間では同期しない。つまり、非同期なのである。上述のようにスレッド間はもともと非同期であるが、バリアアルゴリズムを使って同期する仕組みを利用する。これにより、プロセッサモデルＰＥｉおよびＰＥｊ間で同期をとることができる。この同期により、シミュレータは、プロセッサモデル間の割り込み、外部割り込み、プロセッサモデル間や各ブロック間の命令レベルの同期あるいはサイクル同期が可能となる。
【００７９】
図１２は、実施例４にかかるマルチコアモデルシミュレーションを示す説明図である。図１２では、上述したバリアアルゴリズムにより同期処理をおこなう。メインスレッド１２０１が実行されると、タイミングｔ１において、メインスレッド１２０１は、プロセッサモデルＰＥｉのスレッドと、プロセッサモデルＰＥｊのスレッドを生成し、スリープ状態になる。
【００８０】
つぎに、プロセッサモデルＰＥｉはそのスレッドの所定実行命令数の命令を実行し、プロセッサモデルＰＥｊはそのスレッドの所定実行命令数の命令を実行する。タイミングｔ２において、たとえば、プロセッサモデルＰＥｉは、先に実行を終了すると、待ち関数１２０２により待ち状態となる。つぎに、タイミングｔ３において、プロセッサモデルＰＥｊは、実行を終了すると、待ち関数１２０２により待ち状態となる。
【００８１】
プロセッサモデルＰＥｉおよびＰＥｊが実行を終了すると、タイミングｔ４において、待ち関数１２０２は、プロセッサモデルＰＥｉおよびＰＥｊの同期をとって、両者を待ち状態から目覚めさせる。プロセッサモデルＰＥｉはそのスレッドの続く所定実行命令数の命令を実行し、プロセッサモデルＰＥｊはそのスレッドの続く所定実行命令数の命令を実行する。
【００８２】
つぎに、たとえば、プロセッサモデルＰＥｊは、先に実行を終了すると、待ち関数１２０２により待ち状態となる。つぎに、タイミングｔ６において、プロセッサコアモデルＰＥｉは、実行を終了すると、待ち関数１２０２により待ち状態となる。
【００８３】
プロセッサコアモデルＰＥｉおよびＰＥｊが実行を終了すると、タイミングｔ７において、待ち関数１２０２は、プロセッサコアモデルＰＥｉおよびＰＥｊの同期をとって、両者を待ち状態から目覚めさせる。プロセッサコアモデルＰＥｉはそのスレッドの続く命令を実行し、プロセッサモデルＰＥｊはそのスレッドの続く命令を実行する。
【００８４】
つぎに、タイミングｔ８において、プロセッサコアモデルＰＥｉおよびＰＥｊがすべての命令の実行を終了すると、メインスレッド１２０１はスリープ状態から目覚め、メインスレッド１２０１の処理に戻る。
【００８５】
このように、プロセッサコアモデルＰＥｉおよびＰＥｊのいずれか一方が先に所定の実行命令数の処理を済ませると、待ち状態に入り、他方のプロセッサコアモデルＰＥｉまたはＰＥｊがそれを開放する仕組みになっている。これにより、３つ以上のプロセッサモデルの場合でも、同様の動作により同期がとれることになる。トレースをとると完全にプロセッサモデルＰＥｉおよびＰＥｊが並列実行する。この同期の仕組みにより、所定の実行命令数毎に同期することができ、シミュレーション処理時間の短縮化を図ることができる。
【実施例５】
【００８６】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例５について説明する。実施例５では、実施例１および実施例２のような排他制御を利用せず、遅延によるコアモデル間通信を実現する方式である。
【００８７】
図１３は、実施例５にかかるマルチコアモデルシミュレーションを示す説明図である。図１３において、実施例５では、レジスタモデルは、いずれか一方のプロセッサモデルＰＥｉ（ＰＥｊ）から書き込み可能であり、他方のプロセッサモデルＰＥｊ（ＰＥｉ）からのみ読出しをおこなう必要がある。この条件を満たさない場合、レジスタモデルには意図しない値が入ることとなる。
【００８８】
すなわち、（Ａ）の段階において、プロセッサモデルＰＥｉおよびプロセッサモデルＰＥｊが並列実行されている状態において、まず、プロセッサモデルＰＥｉからレジスタモデル１３００に書き込みをおこなう。その後、（Ｂ）の段階において、（Ａ）の段階でレジスタモデルに書き込まれたデータを、プロセッサモデルＰＥｊにより読み出す。
【００８９】
図１４は、実施例５にかかるプロセッサモデルＰＥｉのコアモデル間通信処理手順を示すフローチャートである。このフローチャートは、図４に示したプロセッサモデルＰＥｉにおけるプロセッサモデルＰＥｊへのコアモデル間通信処理（Ｓ４０２−ｉ）の詳細なフローチャートである。図１４において、プロセッサモデルＰＥｉは、変数にアクセスする（ステップＳ１４０１−ｉ）。具体的には、レジスタモデルに変数を書き込む。このあと、ステップＳ３０１−ｉに戻る。
【００９０】
図１５は、実施例５にかかるプロセッサモデルＰＥｊの割り込み前処理手順を示すフローチャートである。このフローチャートは、図４に示したプロセッサモデルＰＥｉの割り込み前処理（ステップＳ４０５−ｉ）をプロセッサモデルＰＥｊに置き換えた場合の詳細なフローチャートである。
【００９１】
図１５において、まず、変数にアクセスする（ステップＳ１５０１−ｊ）。具体的には、図１４に示したように、プロセッサモデルＰＥｉからレジスタモデルへの変数の書き込みが終了したあと、レジスタモデルから書き込まれた変数を読み出す。つぎに、ステップＳ１５０１−ｊによる処理が有効であるか否かを判断する（ステップＳ１５０２−ｊ）。具体的には、読み出された変数が、読み出し前にプロセッサモデルＰＥｉから書き込まれたデータであるか否かを判断する。
【００９２】
有効でない場合（ステップＳ１５０２−ｊ：Ｎｏ）、プロセッサモデルＰＥｊの割り込み処理に移行する（図３を参照。）。一方、有効である場合（ステップＳ１５０２−ｊ：Ｙｅｓ）、関数決定処理を実行する（ステップＳ１５０３−ｊ）関数決定処理では、レジスタモデルに書き換えられた変数に応じて、プロセッサモデルＰＥｊの割り込み処理でコールすべき命令実行関数を決定する。このあと、プロセッサモデルＰＥｊの割り込み処理に移行する（図３を参照。）。
【００９３】
このように、実施例５によれば、プロセッサモデルＰＥｉとプロセッサモデルＰＥｊとの並列実行中に、レジスタモデルからのリード／ライトを、同期制御をおこなわずに正確に実行することができる。したがって、簡単な制御により、シミュレーション処理時間の短縮化を図ることができる。
【実施例６】
【００９４】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例６について説明する。実施例６では、バッファモデルを用いた排他制御により、コアモデル間通信を実現する方式である。
【００９５】
図１６は、実施例６にかかるマルチコアモデルシミュレーションの一例を示す説明図である。図１６は、単一のバッファモデルを利用した場合の例である。図１６において、プロセッサモデルＰＥｉ（ＰＥｊ）からバッファモデルに変数を書き込み、プロセッサモデルＰＥｊ（ＰＥｉ）がバッファモデル１６００に書き込まれた変数を読み出す。
【００９６】
たとえば、プロセッサモデルＰＥｉが変数を書き込み（Ｗ１）、当該書き込み（Ｗ１）の終了後、プロセッサモデルＰＥｊによる読み出し（Ｒ１）をおこなう。当該読み出し（Ｒ１）の終了後、プロセッサモデルＰＥｊがバッファモデル１６００に変数を書き込み（Ｗ２）、当該書き込み（Ｗ２）の終了後、バッファモデル１６００からプロセッサモデルＰＥｉによる読み出し（Ｒ２）をおこなう。
【００９７】
このように、書き込み（Ｗｘ）が終了するまで読み出し（Ｒｘ）が待たされるという排他制御により、プロセッサモデルＰＥｉとプロセッサモデルＰＥｊの並列実行中において同期させることができる。したがって、シミュレーション処理時間の短縮化を図ることができる。
【００９８】
図１７は、実施例６にかかるマルチコアモデルシミュレーションの他の例を示す説明図である。図１７は、複数のバッファモデルを利用した場合の例である。図１７において、プロセッサモデルＰＥｉ（ＰＥｊ）からバッファモデル１７０１に変数を書き込む。バッファモデル１７０１は、プロセッサモデルＰＥｉにのみリード／ライトされる。
【００９９】
そして、転送ブロック１７００により、バッファモデル１７０１に書き込まれた変数を順次バッファモデル１７０２に転送する。また、バッファモデル１７０２に書き込まれた変数を順次バッファモデル１７０１に転送することもできる。バッファモデル１７０２は、プロセッサモデルＰＥｊにのみリード／ライトされる。
【０１００】
たとえば、プロセッサモデルＰＥｉからバッファモデル１７０１に変数の書き込み（Ｗ１）をおこなう。当該書き込み（Ｗ１）のあと、バッファモデル１７０１に書き込まれた変数は転送ブロック１７００によりバッファモデル１７０２に転送され、プロセッサモデルＰＥｊから読み出し（Ｒ１）がおこなわれる。
【０１０１】
この読み出し（Ｒ１）中に、プロセッサモデルＰＥｉは、バッファモデル１７０１に変数をあらたに書き込む（Ｗ２）。当該書き込み（Ｗ２）のあと、バッファモデル１７０１に書き込まれた変数は転送ブロック１７００によりバッファモデル１７０２に転送され、プロセッサモデルＰＥｊから読み出し（Ｒ２）がおこなわれる。
【０１０２】
この読み出し（Ｒ２）中に、プロセッサモデルＰＥｉは、バッファモデル１７０１に変数をあらたに書き込む（Ｗ３）。当該書き込み（Ｗ３）のあと、バッファモデル１７０１に書き込まれた変数は転送ブロック１７００によりバッファモデル１７０２に転送され、プロセッサモデルＰＥｊから読み出し（Ｒ３）がおこなわれる。そして、この読み出し（Ｒ３）と同時に、プロセッサモデルＰＥｉは、バッファモデル１７０１に変数をあらたに書き込む（Ｗ４）。
【０１０３】
図１８は、実施例６の書き込み側のバッファ構成を示す説明図である。図１８において、（Ａ）は、図１６に示した単一バッファモデルを利用した場合の説明図である。（Ａ）において、プロセッサモデルＰＥｉは、バッファモデル１６００に対し書き込みと読み出しをおこなう。プロセッサＰＥｊ側も同様の構成となる。
【０１０４】
（Ｂ）は、図１７に示した複数のバッファモデルを利用した場合の説明図である。（Ｂ）において、プロセッサモデルＰＥｉは、セレクタ１８００により、バッファモデル１６００への書き込みと読み出しの切り替えをおこなっている。プロセッサＰＥｊ側も同様の構成となる。
【０１０５】
このように、書き込み（Ｗｘ）が終了するまで読み出し（Ｒｘ）が待たされるという排他制御により、プロセッサモデルＰＥｉとプロセッサモデルＰＥｊの並列実行中において同期させることができる。また、転送先のバッファモデル１７０２の読み出し中に、転送元のバッファモデル１７０１へのあらたな書き込みをおこなうことができるため、異なる変数間でリード／ライトを同時におこなうことができる。したがって、シミュレーション処理時間の短縮化を図ることができる。
【実施例７】
【０１０６】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例７について説明する。実施例７では、実施例１〜実施例６におけるデータ転送処理を実現する方式である。この方式には、１コアモデル対１コアモデルの単一転送、１コアモデル対複数コアモデルの複数転送、１コアモデル対１コアモデルおよび１コアモデル対複数コアモデルの混在した並列転送の三種類のデータ転送方式がある。
【０１０７】
図１９は、１コアモデル対１コアモデルの単一転送を示す説明図である。図１９では、プロセッサモデルＰＥ１からプロセッサモデルＰＥ２へデータを転送している例を示している。
【０１０８】
図２０は、１コアモデル対複数コアモデルの複数転送を示す説明図である。図２０では、プロセッサモデルＰＥ１から複数のプロセッサモデルＰＥ２〜ＰＥｎにデータを転送している例を示している。
【０１０９】
図２１は、並列転送を示す説明図である。図２１では、プロセッサモデルＰＥ１〜ＰＥｍ中、プロセッサモデルＰＥ１がプロセッサモデルＰＥ２へデータを転送しており、プロセッサモデルＰＥ３から複数のプロセッサモデルＰＥ４〜ＰＥｎにデータを転送している例を示している。
【０１１０】
以上説明したように、この発明の実施の形態（実施例１〜実施例７を含む）によれば、複数のプロセッサモデル間で同期をとることで、プロセッサモデル間のコアモデル間通信の高速化を図ることができる。また、任意の命令実行数により同期のタイミングをとることもできる。さらに、複数のプロセッサモデルの同時実行により、プロセッサモデル間の双方向によるコアモデル間通信を実現することができる。また、同期後のコアモデル間通信処理をスレッド化することで、コアモデル通信処理時間を、プロセッサモデル間のシミュレーション処理時間に隠蔽することができ、マルチコアモデルシミュレータのサイクルレベルでの同期を実現することができる。
【０１１１】
なお、本実施の形態で説明したマルチコアモデルシミュレーション方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【０１１２】
（付記１）複数のコアモデルを並列実行させるマルチコアモデルシミュレーションプログラムであって、
コンピュータに、前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信させることを特徴とするマルチコアモデルシミュレーションプログラム。
【０１１３】
（付記２）前記他のコアモデルの実行中の命令を停止させ、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行させ、
当該命令の実行終了後に停止された命令を実行させることを特徴とする付記１に記載のマルチコアモデルシミュレーションプログラム。
【０１１４】
（付記３）前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行させるとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止させ、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信させることを特徴とする付記１に記載のマルチコアモデルシミュレーションプログラム。
【０１１５】
（付記４）前記一のコアモデルから前記他のコアモデルに対し割り込み指示に関する通信をさせ、当該割り込み指示に関する通信後に、前記割り込み指示に関する通信に基づく割り込み処理を前記他のコアモデルに実行させることを特徴とする付記１に記載のマルチコアモデルシミュレーションプログラム。
【０１１６】
（付記５）前記複数のコアモデルのうち、最も遅く実行が終了したコアモデルを検出させ、
当該検出結果に基づいて、前記複数のコアモデルのあらたな実行を開始させることを特徴とする付記１に記載のマルチコアモデルシミュレーションプログラム。
【０１１７】
（付記６）前記一のコアモデルから第１の記憶モデルへのデータの書き込みに関する通信を実行させ、
前記第１の記憶モデルに書き込まれたデータを第２の記憶モデルに転送させ、
前記第２の記憶モデルに転送されたデータの読み出しに関する通信を前記他のコアモデルに実行させることを特徴とする付記１に記載のマルチコアモデルシミュレーションプログラム。
【０１１８】
（付記７）さらに、前記他のコアモデルによる前記データの読み出しに関する通信中に、前記一のコアモデルから前記第１の記憶モデルへのあらたなデータの書き込みに関する通信を実行させることを特徴とする付記６に記載のマルチコアモデルシミュレーションプログラム。
【０１１９】
（付記８）付記１〜７のいずれか一つに記載のマルチコアモデルシミュレーションプログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【０１２０】
（付記９）複数のコアモデルを並列実行するマルチコアモデルシミュレータであって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信する手段を備えることを特徴とするマルチコアモデルシミュレータ。
【０１２１】
（付記１０）前記他のコアモデルの実行中の命令を停止する手段と、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行する手段と、
当該命令の実行終了後に停止された命令を実行する手段と、
を備えることを特徴とする付記９に記載のマルチコアモデルシミュレータ。
【０１２２】
（付記１１）前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止する手段と、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信する手段と、
を備えることを特徴とする付記９に記載のマルチコアモデルシミュレータ。
【０１２３】
（付記１２）複数のコアモデルを並列実行させるマルチコアモデルシミュレーション方法であって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信することを特徴とするマルチコアモデルシミュレーション方法。
【０１２４】
（付記１３）前記他のコアモデルの実行中の命令を停止し、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行し、
当該命令の実行終了後に停止された命令を実行することを特徴とする付記１２に記載のマルチコアモデルシミュレーション方法。
【０１２５】
（付記１４）前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止し、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信することを特徴とする付記１２に記載のマルチコアモデルシミュレーション方法。
【産業上の利用可能性】
【０１２６】
以上のように、本発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法は、マルチプロセッサおよびＳｏＣモデルにおけるコアモデル間通信のシミュレーションに適している。
【図面の簡単な説明】
【０１２７】
【図１】この発明の実施の形態にかかるマルチコアモデルシミュレータのハードウェア構成を示すブロック図である。
【図２】この発明の実施の形態にかかるマルチコアモデルシミュレータによるマルチコアモデルシミュレーション処理手順を示すフローチャートである。
【図３】この発明の実施の形態にかかるプロセッサモデルＰＥｉの実行処理手順を示すフローチャートである。
【図４】この発明の実施の形態にかかるプロセッサモデルＰＥｉの同期処理手順を示すフローチャートである。
【図５】この発明の実施の形態にかかるマルチプロセッサモデルのシミュレーション処理の一例を示すタイミングチャートである。
【図６】実施例１にかかるマルチコアモデルシミュレーションを示す説明図である。
【図７】実施例１にかかる排他制御によるコアモデル間通信処理手順を示すフローチャートである。
【図８】実施例１にかかる排他制御による割り込み前処理手順を示すフローチャートである。
【図９】実施例２にかかるマルチコアモデルシミュレーションを示す説明図である。
【図１０】実施例３にかかるマルチコアモデルシミュレーションを示す説明図である。
【図１１】実施例３にかかるマルチコアモデルシミュレーション処理手順を示すフローチャートである。
【図１２】実施例４にかかるマルチコアモデルシミュレーションを示す説明図である。
【図１３】実施例５にかかるマルチコアモデルシミュレーションを示す説明図である。
【図１４】実施例５にかかるプロセッサモデルＰＥｉのコアモデル間通信処理手順を示すフローチャートである。
【図１５】実施例５にかかるプロセッサモデルＰＥｊの割り込み前処理手順を示すフローチャートである。
【図１６】実施例６にかかるマルチコアモデルシミュレーションの一例を示す説明図である。
【図１７】実施例６にかかるマルチコアモデルシミュレーションの他の例を示す説明図である。
【図１８】実施例６の書き込み側のバッファ構成を示す説明図である。
【図１９】１コアモデル対１コアモデルの単一転送を示す説明図である。
【図２０】１コアモデル対複数コアモデルの複数転送を示す説明図である。
【図２１】並列転送を示す説明図である。
【図２２】従来のマルチプロセッサモデルのシミュレーション処理を示すフローチャートである。
【図２３】従来のマルチプロセッサモデルのシミュレーション処理を示すタイミングチャートである。
【符号の説明】
【０１２８】
ＰＥｉ（ｉ＝１〜ｎ、ｎ≧２）  プロセッサモデル
ＰＥｊ（ｊ＝１〜ｎ、ｎ≧２，ｊ≠ｉ）  プロセッサモデル
９００  レジスタ／メモリモデル（記憶モデル）
１３００  レジスタモデル（記憶モデル）
１６００，１７０１，１７０２  バッファモデル（記憶モデル）
１７００  転送ブロック
【図１】
0004667206.tif 000002
【図２】
0004667206.tif 000003
【図３】
0004667206.tif 000004
【図４】
0004667206.tif 000005
【図５】
0004667206.tif 000006
【図６】
0004667206.tif 000007
【図７】
0004667206.tif 000008
【図８】
0004667206.tif 000009
【図９】
0004667206.tif 000010
【図１０】
0004667206.tif 000011
【図１１】
0004667206.tif 000012
【図１２】
0004667206.tif 000013
【図１３】
0004667206.tif 000014
【図１４】
0004667206.tif 000015
【図１５】
0004667206.tif 000016
【図１６】
0004667206.tif 000017
【図１７】
0004667206.tif 000018
【図１８】
0004667206.tif 000019
【図１９】
0004667206.tif 000020
【図２０】
0004667206.tif 000021
【図２１】
0004667206.tif 000022
【図２２】
0004667206.tif 000023
【図２３】
0004667206.tif 000024