マルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法
【課題】マルチコアモデルシミュレーションの信頼性および高速化の向上を図ることにより、開発期間の短縮化を実現すること。
【解決手段】(A)のマルチプロセッサモデルでは、プロセッサモデルPE1とプロセッサモデルPE2とのコアモデル処理がシリアライズされているため、プロセッサモデルPE1のコアモデル処理とプロセッサモデルPE2のコアモデル処理との間に、プロセッサモデルPE1からプロセッサモデルPE2へのコアモデル間通信処理時間が必要であった。(B)のシミュレーション処理によれば、マルチプロセッサモデルのシミュレーション処理に必要なコアモデル間通信を、コアモデル処理時間に隠蔽するように、換言すれば、コアモデル処理と並列にコアモデル間通信処理を実行することができる。
【解決手段】(A)のマルチプロセッサモデルでは、プロセッサモデルPE1とプロセッサモデルPE2とのコアモデル処理がシリアライズされているため、プロセッサモデルPE1のコアモデル処理とプロセッサモデルPE2のコアモデル処理との間に、プロセッサモデルPE1からプロセッサモデルPE2へのコアモデル間通信処理時間が必要であった。(B)のシミュレーション処理によれば、マルチプロセッサモデルのシミュレーション処理に必要なコアモデル間通信を、コアモデル処理時間に隠蔽するように、換言すれば、コアモデル処理と並列にコアモデル間通信処理を実行することができる。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、マルチプロセッサおよびSoC(System On a Chip)モデルにおけるコアモデル間通信のシミュレーションを実行するマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法に関する。
【背景技術】
【0002】
近年、パーソナル・コンピュータ用の汎用CPU(中央処理装置)と同様に、組み込み型プロセッサにおいてもCPUはマルチコア化へシフトしている。また、ますます複雑化するシステムLSIの開発期間の短縮のために、設計の早い段階からハードウェアとソフトウェアの協調設計を行うことが重要である。しかし、既存のシミュレータではマルチコア対応ができていないことに加え十分なシミュレーション速度が得られていない。高速なソフトウェア/ハードウェア協調シミュレータの開発が課題となっている。
【0003】
ここで、従来のマルチプロセッサモデルのシミュレータによるシミュレーション方式について、それぞれコアモデルを有する2つのプロセッサモデルPE1,PE2を例に挙げて説明する。図22は、従来のマルチプロセッサモデルのシミュレーション処理を示すフローチャートであり、図23は、従来のマルチプロセッサモデルのシミュレーション処理を示すタイミングチャートである。
【0004】
まず、シミュレーション対象となるプログラムのシミュレーションを実行するか否かを判断する(ステップS2201)。実行しない場合(ステップS2201:No)、シミュレーションを終了する。一方、実行する場合(ステップS2201:Yes)、変数を指定し(ステップS2202)、プロセッサモデルPE1のコアモデル処理を実行する(ステップS2203)。具体的には、指定された変数を、プロセッサモデルPE1の命令実行関数に順次与えて、プロセッサモデルPE1のコアモデル処理を実行する。
【0005】
つぎに、プロセッサモデルPE1のコアモデル処理の実行が終了すると、指定された変数を、プロセッサモデルPE2の命令実行関数に順次与えて、プロセッサモデルPE2のコアモデル処理を実行する(ステップS2204)。プロセッサモデルPE2のコアモデル処理の実行が終了することにより、シミュレーションの1ループが完了する。その後は、ステップS2201に移行する。すなわち、図23に示すように、プロセッサモデルPE1、プロセッサモデルPE2、プロセッサモデルPE1、プロセッサモデルPE2・・・の順序で実行することとなる。
【0006】
ここで、プロセッサモデルPE1のコアモデル処理の実行処理(ステップS2203)について具体的に説明する。図22において、未実行の命令があるか否かを判断する(ステップS2211)。未実行の命令がない場合(ステップS2211:No)、プロセッサモデルPE2のコアモデル実行処理(ステップS2204)に移行する。
【0007】
一方、未実行の命令がある場合(ステップS2211:Yes)、当該未実行の命令をフェッチし(ステップS2212)、実行する(ステップS2213)。そのあと、割り込み処理(ステップS2214)により、割り込みがあったか否かをチェックして、ステップS2211に戻る。
【0008】
プロセッサモデルPE2のコアモデル実行処理(ステップS2204)についても、未実行の命令があるか否かを判断する(ステップS2221)。未実行の命令がない場合(ステップS2221:No)、ステップS2201に移行する。
【0009】
一方、未実行の命令がある場合(ステップS2221:Yes)、当該未実行の命令をフェッチし(ステップS2222)、実行する(ステップS2223)。そのあと、割り込み処理(ステップS2224)により、割り込みがあったか否かをチェックして、ステップS2221に戻る。
【0010】
このシミュレータでは、マルチプロセッサモデルは1コアの命令実行をコア単位で順次実行するため、コアの命令実行が終了して次のコアの命令実行をする間にコア間の通信処理(コアモデル間通信処理)をする。そして、プロセッサモデルPE1の割り込み処理(ステップS2214)において、プロセッサモデルPE2への割り込みが検出された場合、プロセッサモデルPE1からプロセッサモデルPE2へ通信をおこない、一時的にプロセッサモデルPE2のコアモデル処理を実行する。なお、上記従来のシミュレータに関連する従来技術としては、たとえば、下記特許文献1〜3の従来技術が挙げられる。
【0011】
【特許文献1】特開平5−35534号公報
【特許文献2】特開平4−352262号公報
【特許文献3】特開2001−256267号公報
【発明の開示】
【発明が解決しようとする課題】
【0012】
しかしながら、上述した従来のシミュレーション方式では、プロセッサモデルPE1,PE2の実行処理(ステップS2203,ステップS2204)がシリアライズされることとなり、シミュレーション時間が数珠繋ぎ式に増大するという問題があった。
【0013】
また、上述した従来のシミュレーション方式では、プロセッサモデルPE1,PE2の実行処理(ステップS2203,ステップS2204)がシリアライズされているため、プロセッサモデルPE1でプロセッサモデルPE2に対する割り込み処理が発生した場合には、プロセッサモデルPE2とコアモデル間通信することにより、一時的にプロセッサモデルPE2のコアモデル処理を実行することができる。
【0014】
一方、プロセッサモデルPE2でプロセッサモデルPE1に対する割り込み処理が発生した場合、割り込みにより実行すべき命令がプロセッサモデルPE1においてすでに終了しているため、プロセッサモデルPE1に対して通信することができない。したがって、つぎのループにおけるプロセッサモデルPE1の命令実行を待たなければならず、シミュレーション時間の増大を招くという問題があった。
【0015】
上述した特許文献1の従来技術では、マルチプロセッサモデルを利用しているが、プロセッサモデル間におけるコアモデル間通信が同期されておらず、結果的に、図22および図23に示した従来のシミュレータと同様、シミュレーション時間の増大を招くという問題があった。
【0016】
このように、従来のシミュレータでは、シミュレーション時間の増大により、シミュレーション速度が低下し、シミュレーション対象のプログラムを組み込んだ実機の開発期間が遅延するという問題があった。
【0017】
この発明は、上述した従来技術による問題点を解消するため、マルチコアモデルシミュレーションの信頼性および高速化の向上を図ることにより、開発期間の短縮化を実現することができるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法を提供することを目的とする。
【課題を解決するための手段】
【0018】
上述した課題を解決し、目的を達成するため、この発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法は、複数のコアモデルを並列実行させるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法であって、前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信することを特徴とする。
【0019】
また、上記発明において、前記他のコアモデルの実行中の命令を停止し、前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行し、当該命令の実行終了後に停止された命令を実行することとしてもよい。
【0020】
また、上記発明において、前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデル(たとえば、レジスタモデル、メモリモデル、バッファモデル)への通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止し、前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信することとしてもよい。
【0021】
また、上記発明において、前記一のコアモデルから前記他のコアモデルに対し割り込み指示に関する通信をし、当該割り込み指示に関する通信後に、前記割り込み指示に関する通信に基づく割り込み処理を前記他のコアモデルに実行することとしてもよい。
【0022】
また、上記発明において、前記複数のコアモデルのうち、最も遅く実行が終了したコアモデルを検出し、当該検出結果に基づいて、前記複数のコアモデルのあらたな実行を開始することとしてもよい。
【0023】
また、上記発明において、前記一のコアモデルから第1の記憶モデルへのデータの書き込みに関する通信を実行し、前記第1の記憶モデルに書き込まれたデータを第2の記憶モデルに転送し、前記第2の記憶モデルに転送されたデータの読み出しに関する通信を前記他のコアモデルに実行することとしてもよい。
【0024】
また、上記発明において、さらに、前記他のコアモデルによる前記データの読み出しに関する通信中に、前記一のコアモデルから前記第1の記憶モデルへのあらたなデータの書き込みに関する通信を実行することとしてもよい。
【0025】
これらの発明によれば、複数のプロセッサモデル間で同期をとることで、プロセッサモデル間のコアモデル間通信の高速化を図ることができる。また、任意の命令実行数により同期のタイミングをとることもできる。さらに、複数のプロセッサモデルの同時実行により、プロセッサモデル間の双方向によるコアモデル間通信を実現することができる。また、同期後のコアモデル間通信処理をスレッド化することで、コアモデル通信処理時間を、プロセッサモデル間のシミュレーション処理時間に隠蔽することができ、マルチコアモデルシミュレータのサイクルレベルでの同期を実現することができる。
【発明の効果】
【0026】
本発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法によれば、マルチコアモデルシミュレーションの信頼性および高速化の向上を図ることにより、開発期間の短縮化を実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【0027】
以下に添付図面を参照して、この発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法の好適な実施の形態を詳細に説明する。
【0028】
本実施の形態にかかるマルチコアモデルシミュレータは、複数のコアモデルに関するシミュレータであり、シミュレーション対象であるプログラムを読み込んで実行するコアモデルは、1つのプロセッサモデル内に複数存在していてもよく、また、プロセッサモデルごとに1つずつ存在していてもよい。以下、実施の形態では、例として、コアモデルがプロセッサモデルごとに1つずつ存在する場合について説明する。
【0029】
(マルチコアモデルシミュレータのハードウェア構成)
まず、この発明の実施の形態にかかるマルチコアモデルシミュレータのハードウェア構成について説明する。図1は、この発明の実施の形態にかかるマルチコアモデルシミュレータのハードウェア構成を示すブロック図である。
【0030】
図1において、マルチコアモデルシミュレータは、CPU101と、ROM102と、RAM103と、HDD(ハードディスクドライブ)104と、HD(ハードディスク)105と、FDD(フレキシブルディスクドライブ)106と、着脱可能な記録媒体の一例としてのFD(フレキシブルディスク)107と、ディスプレイ108と、I/F(インターフェース)109と、キーボード110と、マウス111と、スキャナ112と、プリンタ113と、を備えている。また、各構成部はバス100によってそれぞれ接続されている。
【0031】
ここで、CPU101は、マルチコアモデルシミュレータの全体の制御を司る。ROM102は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPU101のワークエリアとして使用される。HDD104は、CPU101の制御にしたがってHD105に対するデータのリード/ライトを制御する。HD105は、HDD104の制御で書き込まれたデータを記憶する。
【0032】
FDD106は、CPU101の制御にしたがってFD107に対するデータのリード/ライトを制御する。FD107は、FDD106の制御で書き込まれたデータを記憶したり、FD107に記憶されたデータをマルチコアモデルシミュレータに読み取らせたりする。
【0033】
また、着脱可能な記録媒体として、FD107のほか、CD−ROM(CD−R、CD−RW)、MO、DVD(Digital Versatile Disk)、メモリーカードなどであってもよい。ディスプレイ108は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ108は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0034】
I/F109は、通信回線を通じてインターネットなどのネットワーク114に接続され、このネットワーク114を介して他の装置に接続される。そして、I/F109は、ネットワーク114と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F109には、たとえばモデムやLANアダプタなどを採用することができる。
【0035】
キーボード110は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス111は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0036】
スキャナ112は、画像を光学的に読み取り、マルチコアモデルシミュレータ内に画像データを取り込む。なお、スキャナ112は、OCR機能を持たせてもよい。また、プリンタ113は、画像データや文書データを印刷する。プリンタ113には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【0037】
(マルチコアモデルシミュレータによるシミュレーション処理手順)
つぎに、上述したマルチコアモデルシミュレータによるシミュレーション処理について説明する。図22に示した従来のマルチコアモデルシミュレーション処理と異なり、各コアモデルは並列に実行する。そのためコアモデル間は非同期で通信することができる。しかし、命令実行するごとに毎回他のコアモデルからの通信があるのかどうかをチェックするには処理が多く増えてしまうため、本実施の形態では、コア間通信回数を間引くようにシミュレーション処理を実行する。これにより、コアモデル処理の並列実行という実行性能を低下させることなく、コアモデル間通信を実現することができ、シミュレーション処理時間の短縮化を図ることができる。
【0038】
以下の図に示すフローチャートにおける「S○○○−i」(○○○は数字)の表記は、プロセッサモデルPEiによる処理をあらわしている。また図示はしないが、プロセッサモデルPEj(j=1〜n、n≧2,j≠i)による処理は、「S○○○−j」(○○○は数字)と読み替えることとする。
【0039】
図2は、この発明の実施の形態にかかるマルチコアモデルシミュレータによるマルチコアモデルシミュレーション処理手順を示すフローチャートである。図2において、まず、シミュレーション対象となるプログラムのシミュレーションを実行するか否かを判断する(ステップS201)。実行しない場合(ステップS201:No)、シミュレーションを終了する。
【0040】
一方、実行する場合(ステップS201:Yes)、n個のスレッドを生成し(ステップS202)、各スレッドにおいて実行されるプロセッサモデルPEi(i=1〜n、n≧2)の命令を特定する変数を指定する(ステップS203)。たとえば、シミュレーション対象となるプログラムが1000個の命令(プログラムコード)を有する場合、変数として1〜100を指定することにより、100個の命令を、各プロセッサモデルPEiにおいて実行することができる。1ループ(ステップS201〜ステップS204−i)ごとに変数を100個指定すれば、10ループでシミュレーションが完了する。
【0041】
つぎに、プロセッサモデルPEiを実行する(ステップS204−1〜S204−n)。具体的には、指定された変数を、プロセッサモデルPEiの命令実行関数に与えて、プロセッサモデルPE1〜プロセッサモデルPEnを実行する(ステップS204)。プロセッサモデルPE1〜プロセッサモデルPEnの実行が終了した場合、ステップS201に戻る。
【0042】
(プロセッサモデルPEiの実行処理)
つぎに、上述したプロセッサモデルPEi(i=1〜n、n≧2)の実行処理について説明する。図3は、この発明の実施の形態にかかるプロセッサモデルPEiの実行処理手順を示すフローチャートである。図3において、未実行の命令があるか否かを判断する(ステップS301−i)。未実行の命令がない場合(ステップS301−i:No)、プロセッサモデルPEiの実行処理を終了し、ステップS201に戻る。
【0043】
一方、未実行の命令がある場合(ステップS301−i:Yes)、当該未実行の命令をフェッチして(ステップS302−i)、実行する(ステップS303−i)。このあと、同期処理を実行して(ステップS304−i)、割り込み処理を実行する(ステップS305−i)。割り込み処理では、他のプロセッサモデルPEj(j=1〜n、n≧2,j≠i)からの割り込みをチェックし、ステップS301−iに戻る。
【0044】
(プロセッサモデルPEiの同期処理)
つぎに、上述したプロセッサモデルPEiの同期処理について説明する。図4は、この発明の実施の形態にかかるプロセッサモデルPEiの同期処理手順を示すフローチャートである。図4において、まず、命令実行(ステップS303−i)の結果により、他のプロセッサモデルPEjに通信するか否かを判断する(ステップS401−i)。他のプロセッサモデルPEjに通信する場合(ステップS401−i:Yes)、他のプロセッサモデルPEjへのコアモデル間通信処理を実行する(ステップS402−i)。このコアモデル間通信処理の実行後、図3に示したステップS301−iに戻る。
【0045】
一方、他のプロセッサモデルPEjにコアモデル間通信しない場合(ステップS401−i:No)、設定フラグが『1』であるか否かを判断する(ステップS403−i)。ここで、設定フラグとは、他のプロセッサモデルPEjから通信がありうるか否かを識別するフラグである。この場合、『1』であるときには、他のプロセッサモデルPEjから通信があると判断され、『0』である場合には、他のプロセッサモデルPEjから通信がないと判断される。但し、本設定フラグは各コアモデルからアクセス可能であるため、どのコアモデルが占有してアクセスするかを決定しなければならい。その仕組みの例としてマルチスレッドプログラミングで使う排他制御の使用で実装できる。
【0046】
そして、設定フラグが『0』である場合(ステップS403−i:No)、図3に示したステップS301−iに戻る。一方、設定フラグが『1』である場合(ステップS403−i:Yes)、カウンタCntが所定のしきい値Tよりも大きいか否かを判断する(ステップS404−i)。ここで、カウンタCntとは、命令実行数をあらわすループカウンタである。また、しきい値Tは、任意の命令実行数でコアモデル間通信をさせるためのしきい値である。
【0047】
そして、カウンタCntがしきい値T以下である場合(ステップS404−i:No)、図3に示したステップS301−iに戻る。一方、カウンタCntがしきい値Tより大きい場合(ステップS404−i:Yes)、割り込み前処理(ステップS405−i)を実行する。割り込み前処理では、たとえば、他のプロセッサモデルPEjからコアモデル間通信があるか否かをチェックし、コアモデル間通信がある場合には、他のプロセッサモデルPEjから送信されてくる変数を受け付ける。なお、割り込み処理(ステップS305−i)では、この受け付けられた変数に命令実行関数を与えることで、変数に応じた命令の割り込みをおこなう。
【0048】
なお、図2〜図4に示した処理は、具体的には、たとえば、図1に示したROM102、RAM103、HD105などの記録媒体に記録されたプログラムを、CPU101が実行することによって実現することができる。
【0049】
図5は、この発明の実施の形態にかかるマルチプロセッサモデルのシミュレーション処理の一例を示すタイミングチャートである。図5において、従来のマルチプロセッサモデルでは、プロセッサモデルPE1とプロセッサモデルPE2とのコアモデル処理がシリアライズされているため、プロセッサモデルPE1のコアモデル処理とプロセッサモデルPE2のコアモデル処理との間に、プロセッサモデルPE1からプロセッサモデルPE2へのコアモデル間通信処理時間が必要であった。
【0050】
また、プロセッサモデルPE2の命令実行中にプロセッサモデルPE1へのコアモデル間通信が必要となった場合、当該必要な命令を呼び出すために、プロセッサモデルPE1のコアモデル処理を始めからやり直す必要があった。したがって、プロセッサモデルのコアモデル処理時間とコアモデル間通信処理時間からなるシミュレーション時間が増大することとなる。
【0051】
一方、この発明の実施の形態にかかるシミュレーション処理によれば、マルチプロセッサモデルのシミュレーション処理に必要なコアモデル間通信を、コアモデル処理時間に隠蔽するように、換言すれば、コアモデル処理と並列にコアモデル間通信処理を実行することができる。
【0052】
また、このコアモデル間通信も並列に実行できる。そのためシミュレーション速度の高速化はもちろん、コア上での実行中の命令を止めずに並列実行することができる。したがって、実機に限りなく近いモデルのシミュレーションを実現することができる。以下、図2〜図4に示したマルチコアモデルシミュレーション処理の詳細な実施例について説明する。
【実施例1】
【0053】
まず、上述した実施の形態のマルチコアモデルシミュレータの実施例1について説明する。実施例1では、プロセッサモデルPEiからプロセッサモデルPEjに対しコアモデル間通信処理を直接実行する例である。
【0054】
図6は、実施例1にかかるマルチコアモデルシミュレーションを示す説明図である。図6において、プロセッサモデルPEiおよびプロセッサモデルPEjはコアモデル処理を並列実行している。プロセッサモデルPEiの実行中に、プロセッサモデルPEjへのコアモデル間通信を検出すると、プロセッサモデルPEiは、プロセッサモデルPEjに対し排他制御を実行する。
【0055】
排他制御とは、通信先であるプロセッサモデルPEjにおける現在実行中の命令を一時的に排除して、プロセッサモデルPEjを占有する制御である。具体的には、プロセッサモデルPEiの現在実行中の命令に関連する命令を実行する。
【0056】
たとえば、通信先であるプロセッサモデルPEjにおける現在実行中の命令をロックし、プロセッサモデルPEjに対し、当該プロセッサモデルPEjで管理されている変数を送信して、命令実行関数に当該変数を与えることにより、プロセッサモデルPEiから命令を割り込ませる。そして、プロセッサモデルPEiからの割り込み処理が終了した場合、プロセッサモデルPEiでは、プロセッサモデルPEiの実行を継続するとともに、プロセッサモデルPEjでは、ロックされていた命令の実行を再開する。
【0057】
まず、実施例1にかかる排他制御によるコアモデル間通信処理について説明する。図7は、実施例1にかかる排他制御によるコアモデル間通信処理手順を示すフローチャートである。このフローチャートは、図4に示したプロセッサモデルPEiにおけるプロセッサモデルPEjへのコアモデル間通信処理(ステップS402−i)の詳細なフローチャートである。
【0058】
図7において、プロセッサモデルPEjへのアクセスが可能か否か、すなわち、変数のリード/ライトが可能か否かを判断する(ステップS701−i)。具体的には、たとえば、他のプロセッサモデルPEjの排他制御に関するフラグにより判断する。他のプロセッサモデルPEjが現在排他制御されていればアクセス不可能であると判断し、他のプロセッサモデルPEj排他制御されていなければアクセス可能であると判断することができる。
【0059】
アクセス可能でない場合(ステップS701−i:No)、待機するか否かを判断する(ステップS702−i)。具体的には、アクセスのリトライをおこなうか否かを判断する。待機する場合(ステップS702−i:Yes)、ステップS701−iに戻る。一方、待機しない場合(ステップS702−i:No)、図3に示したステップS301−iに戻って、未実行の命令があるか否かを判断する。
【0060】
また、ステップS701−iにおいて、プロセッサモデルPEjへのアクセスが可能である場合(ステップS701−i:Yes)、変数にアクセスする(ステップS703−i)。具体的には、プロセッサモデルPEiで指定した変数を、コアモデル間通信により、プロセッサモデルPEjのレジスタモデルに書き込む。これにより、プロセッサモデルPEjのレジスタモデルに書き換えられた変数を命令実行関数に与えることができる。このあと、図3に示したステップS301−iに戻って、未実行の命令があるか否かを判断する。
【0061】
つぎに、実施例1にかかる排他制御による割り込み前処理について説明する。図8は、実施例1にかかる排他制御による割り込み前処理手順を示すフローチャートである。このフローチャートは、図4に示したプロセッサモデルPEiにおけるプロセッサモデルPEjに対する割り込み前処理(ステップS405−i)の詳細なフローチャートである。
【0062】
図8において、他のプロセッサモデルPEjからアクセス可能か否かを判断する(ステップS801−i)。具体的には、たとえば、プロセッサモデルPEiの排他制御に関するフラグにより判断する。プロセッサモデルPEiが現在排他制御されていればアクセス不可能であると判断し、プロセッサモデルPEiが排他制御されていなければアクセス可能であると判断することができる。
【0063】
アクセス可能でない場合(ステップS801−i:No)、待機するか否かを判断する(ステップS802−i)。具体的には、アクセスのリトライをおこなうか否かを判断する。待機する場合(ステップS802−i:Yes)、ステップS801−iに戻る。一方、待機しない場合(ステップS802−i:No)、ステップS804−iに移行する。
【0064】
また、ステップS801−iにおいて、プロセッサモデルPEjからアクセス可能である場合(ステップS801−i:Yes)、変数にアクセスする(ステップS803−i)。具体的には、プロセッサモデルPEiのレジスタモデルを読み込む。そして、コアモデル間通信が有効か否かを判断する(ステップS804−i)。具体的には、他のプロセッサモデルPEjからの通信によりレジスタモデルの変数が書き換えられているか否かを判断する。
【0065】
有効でない場合(ステップS804−i:No)、図3に示したステップS305−iに移行する。一方、有効である場合(ステップS804−i:Yes)、関数決定処理を実行する(ステップS805−i)。関数決定処理では、レジスタモデルに書き換えられた変数に応じて、割り込み処理(ステップS305−i)でコールすべき命令実行関数を決定する。そのあと、ステップS305−iに移行する。
【0066】
このように、実施例1によれば、排他制御により他のプロセッサモデルPEjを一時的に占有することにより、プロセッサモデルPEi,PEjのコアモデル処理を同期させることができる。したがって、コアモデル処理と並列にコアモデル間通信処理を実行することができ、シミュレーション処理時間の短縮化を図ることができる。
【実施例2】
【0067】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例2について説明する。実施例1では、プロセッサモデルPEiからプロセッサモデルPEjに対しコアモデル間通信処理を直接実行する例について説明したが、実施例2では、プロセッサモデルPEiからプロセッサモデルPEjに対しコアモデル間通信処理を間接的に実行する例である。具体的には、実施例2では、各プロセッサモデルPEi,PEj外のレジスタモデルまたはメモリモデル(以下、「レジスタ/メモリモデル」と称す。)を利用した排他制御をおこなうことによりコアモデル間通信処理を実行する例である。
【0068】
また、実施例1においてアクセス対象となる変数は、各プロセッサモデルPEi,PEjで管理されている変数であるが、実施例2においてアクセス対象となる変数(ステップS703−i、ステップS803−i)は、各プロセッサモデルPEi,PEjに共通のグローバル変数である。また、アクセス領域は、各プロセッサモデルPEi,PEj内部のレジスタモデルではなく、上述した各プロセッサモデルPEi,PEj外のレジスタ/メモリモデルとなる。このため、図7および図8に示した処理手順は、変数およびアクセス領域が相違するだけで同一処理手順となるため省略する。
【0069】
図9は、実施例2にかかるマルチコアモデルシミュレーションを示す説明図である。図9において、プロセッサモデルPEiおよびプロセッサモデルPEjはコアモデル処理を並列実行している。プロセッサモデルPEiのコアモデル処理中に、プロセッサモデルPEjへの通信を検出すると、プロセッサモデルPEiは、プロセッサモデルPEjに対し排他制御を実行する。
【0070】
具体的には、図9(A)において、プロセッサモデルPEiおよびプロセッサモデルPEjがアクセス可能なレジスタ/メモリモデル900に変数を書き込む。書き込み中は、プロセッサモデルPEjからのレジスタ/メモリモデルの読み込みを排他制御により禁止する。すなわち、書き込みが終了するまでレジスタ/メモリモデル900へのアクセスを待機する。つぎに、図9(B)において、プロセッサモデルPEiからの書き込みが終了した場合、プロセッサモデルPEjからレジスタ/メモリモデル900を読み込む。
【0071】
このように、実施例2によれば、実施例1と同様、排他制御により他のプロセッサモデルPEjからのレジスタ/メモリモデルへのアクセスを一時的に禁止することにより、プロセッサモデルPEi,PEjのコアモデル処理を同期させることができる。したがって、コアモデル処理と並列にコアモデル間通信処理を実行することができ、シミュレーション処理時間の短縮化を図ることができる。
【実施例3】
【0072】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例3について説明する。実施例3では、割り込み処理の具体例を示している。実施例3では、プロセッサモデルPEiからプロセッサモデルPEjへの割り込み指示があった場合、プロセッサモデルPEjにおいて割り込み処理を実行する。
【0073】
図10は、実施例3にかかるマルチコアモデルシミュレーションを示す説明図であり、図11は、実施例3にかかるマルチコアモデルシミュレーション処理手順を示すフローチャートである。図10および図11において、コアモデル間通信により、プロセッサモデルPEiからプロセッサモデルPEjに割り込み指示があったか否かを判断する(ステップS1101−j)。具体的には、プロセッサモデルPEj内のレジスタモデルにプロセッサモデルPEiからの割り込み指示信号が書き込まれたか否かを判断する。
【0074】
割り込み指示がない場合(ステップS1101−j:No)、ステップS301−j(図3を参照。)に戻る。一方、割り込み指示がある場合(ステップS1101−j:Yes)、具体的には、プロセッサモデルPEj内のレジスタモデルにプロセッサモデルPEiからの割り込み指示信号が書き込まれた場合、当該書き込みが終了するまで待機して、書き込み終了後、プロセッサモデルPEjのインターラプトコントローラIRCを起動する(ステップS1102−j)。そして、インターラプトコントローラIRCの実行の終了を検出し続け(ステップS1103−j:No)、終了した場合(ステップS1103−j:Yes)、ステップS301−j(図3を参照。)に戻る。
【0075】
このように、実施例3によれば、プロセッサモデルPEiとプロセッサモデルPEjとの並列実行中に、プロセッサモデルPEiからの割り込み指示によりプロセッサモデルPEjにおいて割り込み処理を実行することができる。したがって、シミュレーション処理時間の短縮化を図ることができる。
【実施例4】
【0076】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例4について説明する。実施例4では、いわゆるバリア方式(バリアアルゴリズム)を利用してマルチコアシミュレーションを実現する例である。
【0077】
実際の1チップで構成されるマルチプロセッサは、同じクロックか定数倍のクロックで同期している。あるタイミングでマルチプロセッサ間に割り込みがあると、その実行中のプログラムのどこで割り込みが入ったかにより処理も異なる。マルチプロセッサモデルとしては、正しく時間軸や命令ステップ数を実現できなければプロセッサモデルPEi,PEj上で実行されるユーザプログラムのデバッグもできないことになる。また、サイクル数がカウントできなければ精度のよいシミュレーションはできない。
【0078】
したがって、マルチプロセッサモデルにとって、プロセッサ間の同期は、大変重要な技術である。そもそも、一般的にマルチスレッドプログラムはスレッド間では同期しない。つまり、非同期なのである。上述のようにスレッド間はもともと非同期であるが、バリアアルゴリズムを使って同期する仕組みを利用する。これにより、プロセッサモデルPEiおよびPEj間で同期をとることができる。この同期により、シミュレータは、プロセッサモデル間の割り込み、外部割り込み、プロセッサモデル間や各ブロック間の命令レベルの同期あるいはサイクル同期が可能となる。
【0079】
図12は、実施例4にかかるマルチコアモデルシミュレーションを示す説明図である。図12では、上述したバリアアルゴリズムにより同期処理をおこなう。メインスレッド1201が実行されると、タイミングt1において、メインスレッド1201は、プロセッサモデルPEiのスレッドと、プロセッサモデルPEjのスレッドを生成し、スリープ状態になる。
【0080】
つぎに、プロセッサモデルPEiはそのスレッドの所定実行命令数の命令を実行し、プロセッサモデルPEjはそのスレッドの所定実行命令数の命令を実行する。タイミングt2において、たとえば、プロセッサモデルPEiは、先に実行を終了すると、待ち関数1202により待ち状態となる。つぎに、タイミングt3において、プロセッサモデルPEjは、実行を終了すると、待ち関数1202により待ち状態となる。
【0081】
プロセッサモデルPEiおよびPEjが実行を終了すると、タイミングt4において、待ち関数1202は、プロセッサモデルPEiおよびPEjの同期をとって、両者を待ち状態から目覚めさせる。プロセッサモデルPEiはそのスレッドの続く所定実行命令数の命令を実行し、プロセッサモデルPEjはそのスレッドの続く所定実行命令数の命令を実行する。
【0082】
つぎに、たとえば、プロセッサモデルPEjは、先に実行を終了すると、待ち関数1202により待ち状態となる。つぎに、タイミングt6において、プロセッサコアモデルPEiは、実行を終了すると、待ち関数1202により待ち状態となる。
【0083】
プロセッサコアモデルPEiおよびPEjが実行を終了すると、タイミングt7において、待ち関数1202は、プロセッサコアモデルPEiおよびPEjの同期をとって、両者を待ち状態から目覚めさせる。プロセッサコアモデルPEiはそのスレッドの続く命令を実行し、プロセッサモデルPEjはそのスレッドの続く命令を実行する。
【0084】
つぎに、タイミングt8において、プロセッサコアモデルPEiおよびPEjがすべての命令の実行を終了すると、メインスレッド1201はスリープ状態から目覚め、メインスレッド1201の処理に戻る。
【0085】
このように、プロセッサコアモデルPEiおよびPEjのいずれか一方が先に所定の実行命令数の処理を済ませると、待ち状態に入り、他方のプロセッサコアモデルPEiまたはPEjがそれを開放する仕組みになっている。これにより、3つ以上のプロセッサモデルの場合でも、同様の動作により同期がとれることになる。トレースをとると完全にプロセッサモデルPEiおよびPEjが並列実行する。この同期の仕組みにより、所定の実行命令数毎に同期することができ、シミュレーション処理時間の短縮化を図ることができる。
【実施例5】
【0086】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例5について説明する。実施例5では、実施例1および実施例2のような排他制御を利用せず、遅延によるコアモデル間通信を実現する方式である。
【0087】
図13は、実施例5にかかるマルチコアモデルシミュレーションを示す説明図である。図13において、実施例5では、レジスタモデルは、いずれか一方のプロセッサモデルPEi(PEj)から書き込み可能であり、他方のプロセッサモデルPEj(PEi)からのみ読出しをおこなう必要がある。この条件を満たさない場合、レジスタモデルには意図しない値が入ることとなる。
【0088】
すなわち、(A)の段階において、プロセッサモデルPEiおよびプロセッサモデルPEjが並列実行されている状態において、まず、プロセッサモデルPEiからレジスタモデル1300に書き込みをおこなう。その後、(B)の段階において、(A)の段階でレジスタモデルに書き込まれたデータを、プロセッサモデルPEjにより読み出す。
【0089】
図14は、実施例5にかかるプロセッサモデルPEiのコアモデル間通信処理手順を示すフローチャートである。このフローチャートは、図4に示したプロセッサモデルPEiにおけるプロセッサモデルPEjへのコアモデル間通信処理(S402−i)の詳細なフローチャートである。図14において、プロセッサモデルPEiは、変数にアクセスする(ステップS1401−i)。具体的には、レジスタモデルに変数を書き込む。このあと、ステップS301−iに戻る。
【0090】
図15は、実施例5にかかるプロセッサモデルPEjの割り込み前処理手順を示すフローチャートである。このフローチャートは、図4に示したプロセッサモデルPEiの割り込み前処理(ステップS405−i)をプロセッサモデルPEjに置き換えた場合の詳細なフローチャートである。
【0091】
図15において、まず、変数にアクセスする(ステップS1501−j)。具体的には、図14に示したように、プロセッサモデルPEiからレジスタモデルへの変数の書き込みが終了したあと、レジスタモデルから書き込まれた変数を読み出す。つぎに、ステップS1501−jによる処理が有効であるか否かを判断する(ステップS1502−j)。具体的には、読み出された変数が、読み出し前にプロセッサモデルPEiから書き込まれたデータであるか否かを判断する。
【0092】
有効でない場合(ステップS1502−j:No)、プロセッサモデルPEjの割り込み処理に移行する(図3を参照。)。一方、有効である場合(ステップS1502−j:Yes)、関数決定処理を実行する(ステップS1503−j)関数決定処理では、レジスタモデルに書き換えられた変数に応じて、プロセッサモデルPEjの割り込み処理でコールすべき命令実行関数を決定する。このあと、プロセッサモデルPEjの割り込み処理に移行する(図3を参照。)。
【0093】
このように、実施例5によれば、プロセッサモデルPEiとプロセッサモデルPEjとの並列実行中に、レジスタモデルからのリード/ライトを、同期制御をおこなわずに正確に実行することができる。したがって、簡単な制御により、シミュレーション処理時間の短縮化を図ることができる。
【実施例6】
【0094】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例6について説明する。実施例6では、バッファモデルを用いた排他制御により、コアモデル間通信を実現する方式である。
【0095】
図16は、実施例6にかかるマルチコアモデルシミュレーションの一例を示す説明図である。図16は、単一のバッファモデルを利用した場合の例である。図16において、プロセッサモデルPEi(PEj)からバッファモデルに変数を書き込み、プロセッサモデルPEj(PEi)がバッファモデル1600に書き込まれた変数を読み出す。
【0096】
たとえば、プロセッサモデルPEiが変数を書き込み(W1)、当該書き込み(W1)の終了後、プロセッサモデルPEjによる読み出し(R1)をおこなう。当該読み出し(R1)の終了後、プロセッサモデルPEjがバッファモデル1600に変数を書き込み(W2)、当該書き込み(W2)の終了後、バッファモデル1600からプロセッサモデルPEiによる読み出し(R2)をおこなう。
【0097】
このように、書き込み(Wx)が終了するまで読み出し(Rx)が待たされるという排他制御により、プロセッサモデルPEiとプロセッサモデルPEjの並列実行中において同期させることができる。したがって、シミュレーション処理時間の短縮化を図ることができる。
【0098】
図17は、実施例6にかかるマルチコアモデルシミュレーションの他の例を示す説明図である。図17は、複数のバッファモデルを利用した場合の例である。図17において、プロセッサモデルPEi(PEj)からバッファモデル1701に変数を書き込む。バッファモデル1701は、プロセッサモデルPEiにのみリード/ライトされる。
【0099】
そして、転送ブロック1700により、バッファモデル1701に書き込まれた変数を順次バッファモデル1702に転送する。また、バッファモデル1702に書き込まれた変数を順次バッファモデル1701に転送することもできる。バッファモデル1702は、プロセッサモデルPEjにのみリード/ライトされる。
【0100】
たとえば、プロセッサモデルPEiからバッファモデル1701に変数の書き込み(W1)をおこなう。当該書き込み(W1)のあと、バッファモデル1701に書き込まれた変数は転送ブロック1700によりバッファモデル1702に転送され、プロセッサモデルPEjから読み出し(R1)がおこなわれる。
【0101】
この読み出し(R1)中に、プロセッサモデルPEiは、バッファモデル1701に変数をあらたに書き込む(W2)。当該書き込み(W2)のあと、バッファモデル1701に書き込まれた変数は転送ブロック1700によりバッファモデル1702に転送され、プロセッサモデルPEjから読み出し(R2)がおこなわれる。
【0102】
この読み出し(R2)中に、プロセッサモデルPEiは、バッファモデル1701に変数をあらたに書き込む(W3)。当該書き込み(W3)のあと、バッファモデル1701に書き込まれた変数は転送ブロック1700によりバッファモデル1702に転送され、プロセッサモデルPEjから読み出し(R3)がおこなわれる。そして、この読み出し(R3)と同時に、プロセッサモデルPEiは、バッファモデル1701に変数をあらたに書き込む(W4)。
【0103】
図18は、実施例6の書き込み側のバッファ構成を示す説明図である。図18において、(A)は、図16に示した単一バッファモデルを利用した場合の説明図である。(A)において、プロセッサモデルPEiは、バッファモデル1600に対し書き込みと読み出しをおこなう。プロセッサPEj側も同様の構成となる。
【0104】
(B)は、図17に示した複数のバッファモデルを利用した場合の説明図である。(B)において、プロセッサモデルPEiは、セレクタ1800により、バッファモデル1600への書き込みと読み出しの切り替えをおこなっている。プロセッサPEj側も同様の構成となる。
【0105】
このように、書き込み(Wx)が終了するまで読み出し(Rx)が待たされるという排他制御により、プロセッサモデルPEiとプロセッサモデルPEjの並列実行中において同期させることができる。また、転送先のバッファモデル1702の読み出し中に、転送元のバッファモデル1701へのあらたな書き込みをおこなうことができるため、異なる変数間でリード/ライトを同時におこなうことができる。したがって、シミュレーション処理時間の短縮化を図ることができる。
【実施例7】
【0106】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例7について説明する。実施例7では、実施例1〜実施例6におけるデータ転送処理を実現する方式である。この方式には、1コアモデル対1コアモデルの単一転送、1コアモデル対複数コアモデルの複数転送、1コアモデル対1コアモデルおよび1コアモデル対複数コアモデルの混在した並列転送の三種類のデータ転送方式がある。
【0107】
図19は、1コアモデル対1コアモデルの単一転送を示す説明図である。図19では、プロセッサモデルPE1からプロセッサモデルPE2へデータを転送している例を示している。
【0108】
図20は、1コアモデル対複数コアモデルの複数転送を示す説明図である。図20では、プロセッサモデルPE1から複数のプロセッサモデルPE2〜PEnにデータを転送している例を示している。
【0109】
図21は、並列転送を示す説明図である。図21では、プロセッサモデルPE1〜PEm中、プロセッサモデルPE1がプロセッサモデルPE2へデータを転送しており、プロセッサモデルPE3から複数のプロセッサモデルPE4〜PEnにデータを転送している例を示している。
【0110】
以上説明したように、この発明の実施の形態(実施例1〜実施例7を含む)によれば、複数のプロセッサモデル間で同期をとることで、プロセッサモデル間のコアモデル間通信の高速化を図ることができる。また、任意の命令実行数により同期のタイミングをとることもできる。さらに、複数のプロセッサモデルの同時実行により、プロセッサモデル間の双方向によるコアモデル間通信を実現することができる。また、同期後のコアモデル間通信処理をスレッド化することで、コアモデル通信処理時間を、プロセッサモデル間のシミュレーション処理時間に隠蔽することができ、マルチコアモデルシミュレータのサイクルレベルでの同期を実現することができる。
【0111】
なお、本実施の形態で説明したマルチコアモデルシミュレーション方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【0112】
(付記1)複数のコアモデルを並列実行させるマルチコアモデルシミュレーションプログラムであって、
コンピュータに、前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信させることを特徴とするマルチコアモデルシミュレーションプログラム。
【0113】
(付記2)前記他のコアモデルの実行中の命令を停止させ、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行させ、
当該命令の実行終了後に停止された命令を実行させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0114】
(付記3)前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行させるとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止させ、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0115】
(付記4)前記一のコアモデルから前記他のコアモデルに対し割り込み指示に関する通信をさせ、当該割り込み指示に関する通信後に、前記割り込み指示に関する通信に基づく割り込み処理を前記他のコアモデルに実行させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0116】
(付記5)前記複数のコアモデルのうち、最も遅く実行が終了したコアモデルを検出させ、
当該検出結果に基づいて、前記複数のコアモデルのあらたな実行を開始させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0117】
(付記6)前記一のコアモデルから第1の記憶モデルへのデータの書き込みに関する通信を実行させ、
前記第1の記憶モデルに書き込まれたデータを第2の記憶モデルに転送させ、
前記第2の記憶モデルに転送されたデータの読み出しに関する通信を前記他のコアモデルに実行させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0118】
(付記7)さらに、前記他のコアモデルによる前記データの読み出しに関する通信中に、前記一のコアモデルから前記第1の記憶モデルへのあらたなデータの書き込みに関する通信を実行させることを特徴とする付記6に記載のマルチコアモデルシミュレーションプログラム。
【0119】
(付記8)付記1〜7のいずれか一つに記載のマルチコアモデルシミュレーションプログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【0120】
(付記9)複数のコアモデルを並列実行するマルチコアモデルシミュレータであって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信する手段を備えることを特徴とするマルチコアモデルシミュレータ。
【0121】
(付記10)前記他のコアモデルの実行中の命令を停止する手段と、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行する手段と、
当該命令の実行終了後に停止された命令を実行する手段と、
を備えることを特徴とする付記9に記載のマルチコアモデルシミュレータ。
【0122】
(付記11)前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止する手段と、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信する手段と、
を備えることを特徴とする付記9に記載のマルチコアモデルシミュレータ。
【0123】
(付記12)複数のコアモデルを並列実行させるマルチコアモデルシミュレーション方法であって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信することを特徴とするマルチコアモデルシミュレーション方法。
【0124】
(付記13)前記他のコアモデルの実行中の命令を停止し、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行し、
当該命令の実行終了後に停止された命令を実行することを特徴とする付記12に記載のマルチコアモデルシミュレーション方法。
【0125】
(付記14)前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止し、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信することを特徴とする付記12に記載のマルチコアモデルシミュレーション方法。
【産業上の利用可能性】
【0126】
以上のように、本発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法は、マルチプロセッサおよびSoCモデルにおけるコアモデル間通信のシミュレーションに適している。
【図面の簡単な説明】
【0127】
【図1】この発明の実施の形態にかかるマルチコアモデルシミュレータのハードウェア構成を示すブロック図である。
【図2】この発明の実施の形態にかかるマルチコアモデルシミュレータによるマルチコアモデルシミュレーション処理手順を示すフローチャートである。
【図3】この発明の実施の形態にかかるプロセッサモデルPEiの実行処理手順を示すフローチャートである。
【図4】この発明の実施の形態にかかるプロセッサモデルPEiの同期処理手順を示すフローチャートである。
【図5】この発明の実施の形態にかかるマルチプロセッサモデルのシミュレーション処理の一例を示すタイミングチャートである。
【図6】実施例1にかかるマルチコアモデルシミュレーションを示す説明図である。
【図7】実施例1にかかる排他制御によるコアモデル間通信処理手順を示すフローチャートである。
【図8】実施例1にかかる排他制御による割り込み前処理手順を示すフローチャートである。
【図9】実施例2にかかるマルチコアモデルシミュレーションを示す説明図である。
【図10】実施例3にかかるマルチコアモデルシミュレーションを示す説明図である。
【図11】実施例3にかかるマルチコアモデルシミュレーション処理手順を示すフローチャートである。
【図12】実施例4にかかるマルチコアモデルシミュレーションを示す説明図である。
【図13】実施例5にかかるマルチコアモデルシミュレーションを示す説明図である。
【図14】実施例5にかかるプロセッサモデルPEiのコアモデル間通信処理手順を示すフローチャートである。
【図15】実施例5にかかるプロセッサモデルPEjの割り込み前処理手順を示すフローチャートである。
【図16】実施例6にかかるマルチコアモデルシミュレーションの一例を示す説明図である。
【図17】実施例6にかかるマルチコアモデルシミュレーションの他の例を示す説明図である。
【図18】実施例6の書き込み側のバッファ構成を示す説明図である。
【図19】1コアモデル対1コアモデルの単一転送を示す説明図である。
【図20】1コアモデル対複数コアモデルの複数転送を示す説明図である。
【図21】並列転送を示す説明図である。
【図22】従来のマルチプロセッサモデルのシミュレーション処理を示すフローチャートである。
【図23】従来のマルチプロセッサモデルのシミュレーション処理を示すタイミングチャートである。
【符号の説明】
【0128】
PEi(i=1〜n、n≧2) プロセッサモデル
PEj(j=1〜n、n≧2,j≠i) プロセッサモデル
900 レジスタ/メモリモデル(記憶モデル)
1300 レジスタモデル(記憶モデル)
1600,1701,1702 バッファモデル(記憶モデル)
1700 転送ブロック
【技術分野】
【0001】
この発明は、マルチプロセッサおよびSoC(System On a Chip)モデルにおけるコアモデル間通信のシミュレーションを実行するマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法に関する。
【背景技術】
【0002】
近年、パーソナル・コンピュータ用の汎用CPU(中央処理装置)と同様に、組み込み型プロセッサにおいてもCPUはマルチコア化へシフトしている。また、ますます複雑化するシステムLSIの開発期間の短縮のために、設計の早い段階からハードウェアとソフトウェアの協調設計を行うことが重要である。しかし、既存のシミュレータではマルチコア対応ができていないことに加え十分なシミュレーション速度が得られていない。高速なソフトウェア/ハードウェア協調シミュレータの開発が課題となっている。
【0003】
ここで、従来のマルチプロセッサモデルのシミュレータによるシミュレーション方式について、それぞれコアモデルを有する2つのプロセッサモデルPE1,PE2を例に挙げて説明する。図22は、従来のマルチプロセッサモデルのシミュレーション処理を示すフローチャートであり、図23は、従来のマルチプロセッサモデルのシミュレーション処理を示すタイミングチャートである。
【0004】
まず、シミュレーション対象となるプログラムのシミュレーションを実行するか否かを判断する(ステップS2201)。実行しない場合(ステップS2201:No)、シミュレーションを終了する。一方、実行する場合(ステップS2201:Yes)、変数を指定し(ステップS2202)、プロセッサモデルPE1のコアモデル処理を実行する(ステップS2203)。具体的には、指定された変数を、プロセッサモデルPE1の命令実行関数に順次与えて、プロセッサモデルPE1のコアモデル処理を実行する。
【0005】
つぎに、プロセッサモデルPE1のコアモデル処理の実行が終了すると、指定された変数を、プロセッサモデルPE2の命令実行関数に順次与えて、プロセッサモデルPE2のコアモデル処理を実行する(ステップS2204)。プロセッサモデルPE2のコアモデル処理の実行が終了することにより、シミュレーションの1ループが完了する。その後は、ステップS2201に移行する。すなわち、図23に示すように、プロセッサモデルPE1、プロセッサモデルPE2、プロセッサモデルPE1、プロセッサモデルPE2・・・の順序で実行することとなる。
【0006】
ここで、プロセッサモデルPE1のコアモデル処理の実行処理(ステップS2203)について具体的に説明する。図22において、未実行の命令があるか否かを判断する(ステップS2211)。未実行の命令がない場合(ステップS2211:No)、プロセッサモデルPE2のコアモデル実行処理(ステップS2204)に移行する。
【0007】
一方、未実行の命令がある場合(ステップS2211:Yes)、当該未実行の命令をフェッチし(ステップS2212)、実行する(ステップS2213)。そのあと、割り込み処理(ステップS2214)により、割り込みがあったか否かをチェックして、ステップS2211に戻る。
【0008】
プロセッサモデルPE2のコアモデル実行処理(ステップS2204)についても、未実行の命令があるか否かを判断する(ステップS2221)。未実行の命令がない場合(ステップS2221:No)、ステップS2201に移行する。
【0009】
一方、未実行の命令がある場合(ステップS2221:Yes)、当該未実行の命令をフェッチし(ステップS2222)、実行する(ステップS2223)。そのあと、割り込み処理(ステップS2224)により、割り込みがあったか否かをチェックして、ステップS2221に戻る。
【0010】
このシミュレータでは、マルチプロセッサモデルは1コアの命令実行をコア単位で順次実行するため、コアの命令実行が終了して次のコアの命令実行をする間にコア間の通信処理(コアモデル間通信処理)をする。そして、プロセッサモデルPE1の割り込み処理(ステップS2214)において、プロセッサモデルPE2への割り込みが検出された場合、プロセッサモデルPE1からプロセッサモデルPE2へ通信をおこない、一時的にプロセッサモデルPE2のコアモデル処理を実行する。なお、上記従来のシミュレータに関連する従来技術としては、たとえば、下記特許文献1〜3の従来技術が挙げられる。
【0011】
【特許文献1】特開平5−35534号公報
【特許文献2】特開平4−352262号公報
【特許文献3】特開2001−256267号公報
【発明の開示】
【発明が解決しようとする課題】
【0012】
しかしながら、上述した従来のシミュレーション方式では、プロセッサモデルPE1,PE2の実行処理(ステップS2203,ステップS2204)がシリアライズされることとなり、シミュレーション時間が数珠繋ぎ式に増大するという問題があった。
【0013】
また、上述した従来のシミュレーション方式では、プロセッサモデルPE1,PE2の実行処理(ステップS2203,ステップS2204)がシリアライズされているため、プロセッサモデルPE1でプロセッサモデルPE2に対する割り込み処理が発生した場合には、プロセッサモデルPE2とコアモデル間通信することにより、一時的にプロセッサモデルPE2のコアモデル処理を実行することができる。
【0014】
一方、プロセッサモデルPE2でプロセッサモデルPE1に対する割り込み処理が発生した場合、割り込みにより実行すべき命令がプロセッサモデルPE1においてすでに終了しているため、プロセッサモデルPE1に対して通信することができない。したがって、つぎのループにおけるプロセッサモデルPE1の命令実行を待たなければならず、シミュレーション時間の増大を招くという問題があった。
【0015】
上述した特許文献1の従来技術では、マルチプロセッサモデルを利用しているが、プロセッサモデル間におけるコアモデル間通信が同期されておらず、結果的に、図22および図23に示した従来のシミュレータと同様、シミュレーション時間の増大を招くという問題があった。
【0016】
このように、従来のシミュレータでは、シミュレーション時間の増大により、シミュレーション速度が低下し、シミュレーション対象のプログラムを組み込んだ実機の開発期間が遅延するという問題があった。
【0017】
この発明は、上述した従来技術による問題点を解消するため、マルチコアモデルシミュレーションの信頼性および高速化の向上を図ることにより、開発期間の短縮化を実現することができるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法を提供することを目的とする。
【課題を解決するための手段】
【0018】
上述した課題を解決し、目的を達成するため、この発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法は、複数のコアモデルを並列実行させるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法であって、前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信することを特徴とする。
【0019】
また、上記発明において、前記他のコアモデルの実行中の命令を停止し、前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行し、当該命令の実行終了後に停止された命令を実行することとしてもよい。
【0020】
また、上記発明において、前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデル(たとえば、レジスタモデル、メモリモデル、バッファモデル)への通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止し、前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信することとしてもよい。
【0021】
また、上記発明において、前記一のコアモデルから前記他のコアモデルに対し割り込み指示に関する通信をし、当該割り込み指示に関する通信後に、前記割り込み指示に関する通信に基づく割り込み処理を前記他のコアモデルに実行することとしてもよい。
【0022】
また、上記発明において、前記複数のコアモデルのうち、最も遅く実行が終了したコアモデルを検出し、当該検出結果に基づいて、前記複数のコアモデルのあらたな実行を開始することとしてもよい。
【0023】
また、上記発明において、前記一のコアモデルから第1の記憶モデルへのデータの書き込みに関する通信を実行し、前記第1の記憶モデルに書き込まれたデータを第2の記憶モデルに転送し、前記第2の記憶モデルに転送されたデータの読み出しに関する通信を前記他のコアモデルに実行することとしてもよい。
【0024】
また、上記発明において、さらに、前記他のコアモデルによる前記データの読み出しに関する通信中に、前記一のコアモデルから前記第1の記憶モデルへのあらたなデータの書き込みに関する通信を実行することとしてもよい。
【0025】
これらの発明によれば、複数のプロセッサモデル間で同期をとることで、プロセッサモデル間のコアモデル間通信の高速化を図ることができる。また、任意の命令実行数により同期のタイミングをとることもできる。さらに、複数のプロセッサモデルの同時実行により、プロセッサモデル間の双方向によるコアモデル間通信を実現することができる。また、同期後のコアモデル間通信処理をスレッド化することで、コアモデル通信処理時間を、プロセッサモデル間のシミュレーション処理時間に隠蔽することができ、マルチコアモデルシミュレータのサイクルレベルでの同期を実現することができる。
【発明の効果】
【0026】
本発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法によれば、マルチコアモデルシミュレーションの信頼性および高速化の向上を図ることにより、開発期間の短縮化を実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【0027】
以下に添付図面を参照して、この発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法の好適な実施の形態を詳細に説明する。
【0028】
本実施の形態にかかるマルチコアモデルシミュレータは、複数のコアモデルに関するシミュレータであり、シミュレーション対象であるプログラムを読み込んで実行するコアモデルは、1つのプロセッサモデル内に複数存在していてもよく、また、プロセッサモデルごとに1つずつ存在していてもよい。以下、実施の形態では、例として、コアモデルがプロセッサモデルごとに1つずつ存在する場合について説明する。
【0029】
(マルチコアモデルシミュレータのハードウェア構成)
まず、この発明の実施の形態にかかるマルチコアモデルシミュレータのハードウェア構成について説明する。図1は、この発明の実施の形態にかかるマルチコアモデルシミュレータのハードウェア構成を示すブロック図である。
【0030】
図1において、マルチコアモデルシミュレータは、CPU101と、ROM102と、RAM103と、HDD(ハードディスクドライブ)104と、HD(ハードディスク)105と、FDD(フレキシブルディスクドライブ)106と、着脱可能な記録媒体の一例としてのFD(フレキシブルディスク)107と、ディスプレイ108と、I/F(インターフェース)109と、キーボード110と、マウス111と、スキャナ112と、プリンタ113と、を備えている。また、各構成部はバス100によってそれぞれ接続されている。
【0031】
ここで、CPU101は、マルチコアモデルシミュレータの全体の制御を司る。ROM102は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPU101のワークエリアとして使用される。HDD104は、CPU101の制御にしたがってHD105に対するデータのリード/ライトを制御する。HD105は、HDD104の制御で書き込まれたデータを記憶する。
【0032】
FDD106は、CPU101の制御にしたがってFD107に対するデータのリード/ライトを制御する。FD107は、FDD106の制御で書き込まれたデータを記憶したり、FD107に記憶されたデータをマルチコアモデルシミュレータに読み取らせたりする。
【0033】
また、着脱可能な記録媒体として、FD107のほか、CD−ROM(CD−R、CD−RW)、MO、DVD(Digital Versatile Disk)、メモリーカードなどであってもよい。ディスプレイ108は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ108は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0034】
I/F109は、通信回線を通じてインターネットなどのネットワーク114に接続され、このネットワーク114を介して他の装置に接続される。そして、I/F109は、ネットワーク114と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F109には、たとえばモデムやLANアダプタなどを採用することができる。
【0035】
キーボード110は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス111は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0036】
スキャナ112は、画像を光学的に読み取り、マルチコアモデルシミュレータ内に画像データを取り込む。なお、スキャナ112は、OCR機能を持たせてもよい。また、プリンタ113は、画像データや文書データを印刷する。プリンタ113には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【0037】
(マルチコアモデルシミュレータによるシミュレーション処理手順)
つぎに、上述したマルチコアモデルシミュレータによるシミュレーション処理について説明する。図22に示した従来のマルチコアモデルシミュレーション処理と異なり、各コアモデルは並列に実行する。そのためコアモデル間は非同期で通信することができる。しかし、命令実行するごとに毎回他のコアモデルからの通信があるのかどうかをチェックするには処理が多く増えてしまうため、本実施の形態では、コア間通信回数を間引くようにシミュレーション処理を実行する。これにより、コアモデル処理の並列実行という実行性能を低下させることなく、コアモデル間通信を実現することができ、シミュレーション処理時間の短縮化を図ることができる。
【0038】
以下の図に示すフローチャートにおける「S○○○−i」(○○○は数字)の表記は、プロセッサモデルPEiによる処理をあらわしている。また図示はしないが、プロセッサモデルPEj(j=1〜n、n≧2,j≠i)による処理は、「S○○○−j」(○○○は数字)と読み替えることとする。
【0039】
図2は、この発明の実施の形態にかかるマルチコアモデルシミュレータによるマルチコアモデルシミュレーション処理手順を示すフローチャートである。図2において、まず、シミュレーション対象となるプログラムのシミュレーションを実行するか否かを判断する(ステップS201)。実行しない場合(ステップS201:No)、シミュレーションを終了する。
【0040】
一方、実行する場合(ステップS201:Yes)、n個のスレッドを生成し(ステップS202)、各スレッドにおいて実行されるプロセッサモデルPEi(i=1〜n、n≧2)の命令を特定する変数を指定する(ステップS203)。たとえば、シミュレーション対象となるプログラムが1000個の命令(プログラムコード)を有する場合、変数として1〜100を指定することにより、100個の命令を、各プロセッサモデルPEiにおいて実行することができる。1ループ(ステップS201〜ステップS204−i)ごとに変数を100個指定すれば、10ループでシミュレーションが完了する。
【0041】
つぎに、プロセッサモデルPEiを実行する(ステップS204−1〜S204−n)。具体的には、指定された変数を、プロセッサモデルPEiの命令実行関数に与えて、プロセッサモデルPE1〜プロセッサモデルPEnを実行する(ステップS204)。プロセッサモデルPE1〜プロセッサモデルPEnの実行が終了した場合、ステップS201に戻る。
【0042】
(プロセッサモデルPEiの実行処理)
つぎに、上述したプロセッサモデルPEi(i=1〜n、n≧2)の実行処理について説明する。図3は、この発明の実施の形態にかかるプロセッサモデルPEiの実行処理手順を示すフローチャートである。図3において、未実行の命令があるか否かを判断する(ステップS301−i)。未実行の命令がない場合(ステップS301−i:No)、プロセッサモデルPEiの実行処理を終了し、ステップS201に戻る。
【0043】
一方、未実行の命令がある場合(ステップS301−i:Yes)、当該未実行の命令をフェッチして(ステップS302−i)、実行する(ステップS303−i)。このあと、同期処理を実行して(ステップS304−i)、割り込み処理を実行する(ステップS305−i)。割り込み処理では、他のプロセッサモデルPEj(j=1〜n、n≧2,j≠i)からの割り込みをチェックし、ステップS301−iに戻る。
【0044】
(プロセッサモデルPEiの同期処理)
つぎに、上述したプロセッサモデルPEiの同期処理について説明する。図4は、この発明の実施の形態にかかるプロセッサモデルPEiの同期処理手順を示すフローチャートである。図4において、まず、命令実行(ステップS303−i)の結果により、他のプロセッサモデルPEjに通信するか否かを判断する(ステップS401−i)。他のプロセッサモデルPEjに通信する場合(ステップS401−i:Yes)、他のプロセッサモデルPEjへのコアモデル間通信処理を実行する(ステップS402−i)。このコアモデル間通信処理の実行後、図3に示したステップS301−iに戻る。
【0045】
一方、他のプロセッサモデルPEjにコアモデル間通信しない場合(ステップS401−i:No)、設定フラグが『1』であるか否かを判断する(ステップS403−i)。ここで、設定フラグとは、他のプロセッサモデルPEjから通信がありうるか否かを識別するフラグである。この場合、『1』であるときには、他のプロセッサモデルPEjから通信があると判断され、『0』である場合には、他のプロセッサモデルPEjから通信がないと判断される。但し、本設定フラグは各コアモデルからアクセス可能であるため、どのコアモデルが占有してアクセスするかを決定しなければならい。その仕組みの例としてマルチスレッドプログラミングで使う排他制御の使用で実装できる。
【0046】
そして、設定フラグが『0』である場合(ステップS403−i:No)、図3に示したステップS301−iに戻る。一方、設定フラグが『1』である場合(ステップS403−i:Yes)、カウンタCntが所定のしきい値Tよりも大きいか否かを判断する(ステップS404−i)。ここで、カウンタCntとは、命令実行数をあらわすループカウンタである。また、しきい値Tは、任意の命令実行数でコアモデル間通信をさせるためのしきい値である。
【0047】
そして、カウンタCntがしきい値T以下である場合(ステップS404−i:No)、図3に示したステップS301−iに戻る。一方、カウンタCntがしきい値Tより大きい場合(ステップS404−i:Yes)、割り込み前処理(ステップS405−i)を実行する。割り込み前処理では、たとえば、他のプロセッサモデルPEjからコアモデル間通信があるか否かをチェックし、コアモデル間通信がある場合には、他のプロセッサモデルPEjから送信されてくる変数を受け付ける。なお、割り込み処理(ステップS305−i)では、この受け付けられた変数に命令実行関数を与えることで、変数に応じた命令の割り込みをおこなう。
【0048】
なお、図2〜図4に示した処理は、具体的には、たとえば、図1に示したROM102、RAM103、HD105などの記録媒体に記録されたプログラムを、CPU101が実行することによって実現することができる。
【0049】
図5は、この発明の実施の形態にかかるマルチプロセッサモデルのシミュレーション処理の一例を示すタイミングチャートである。図5において、従来のマルチプロセッサモデルでは、プロセッサモデルPE1とプロセッサモデルPE2とのコアモデル処理がシリアライズされているため、プロセッサモデルPE1のコアモデル処理とプロセッサモデルPE2のコアモデル処理との間に、プロセッサモデルPE1からプロセッサモデルPE2へのコアモデル間通信処理時間が必要であった。
【0050】
また、プロセッサモデルPE2の命令実行中にプロセッサモデルPE1へのコアモデル間通信が必要となった場合、当該必要な命令を呼び出すために、プロセッサモデルPE1のコアモデル処理を始めからやり直す必要があった。したがって、プロセッサモデルのコアモデル処理時間とコアモデル間通信処理時間からなるシミュレーション時間が増大することとなる。
【0051】
一方、この発明の実施の形態にかかるシミュレーション処理によれば、マルチプロセッサモデルのシミュレーション処理に必要なコアモデル間通信を、コアモデル処理時間に隠蔽するように、換言すれば、コアモデル処理と並列にコアモデル間通信処理を実行することができる。
【0052】
また、このコアモデル間通信も並列に実行できる。そのためシミュレーション速度の高速化はもちろん、コア上での実行中の命令を止めずに並列実行することができる。したがって、実機に限りなく近いモデルのシミュレーションを実現することができる。以下、図2〜図4に示したマルチコアモデルシミュレーション処理の詳細な実施例について説明する。
【実施例1】
【0053】
まず、上述した実施の形態のマルチコアモデルシミュレータの実施例1について説明する。実施例1では、プロセッサモデルPEiからプロセッサモデルPEjに対しコアモデル間通信処理を直接実行する例である。
【0054】
図6は、実施例1にかかるマルチコアモデルシミュレーションを示す説明図である。図6において、プロセッサモデルPEiおよびプロセッサモデルPEjはコアモデル処理を並列実行している。プロセッサモデルPEiの実行中に、プロセッサモデルPEjへのコアモデル間通信を検出すると、プロセッサモデルPEiは、プロセッサモデルPEjに対し排他制御を実行する。
【0055】
排他制御とは、通信先であるプロセッサモデルPEjにおける現在実行中の命令を一時的に排除して、プロセッサモデルPEjを占有する制御である。具体的には、プロセッサモデルPEiの現在実行中の命令に関連する命令を実行する。
【0056】
たとえば、通信先であるプロセッサモデルPEjにおける現在実行中の命令をロックし、プロセッサモデルPEjに対し、当該プロセッサモデルPEjで管理されている変数を送信して、命令実行関数に当該変数を与えることにより、プロセッサモデルPEiから命令を割り込ませる。そして、プロセッサモデルPEiからの割り込み処理が終了した場合、プロセッサモデルPEiでは、プロセッサモデルPEiの実行を継続するとともに、プロセッサモデルPEjでは、ロックされていた命令の実行を再開する。
【0057】
まず、実施例1にかかる排他制御によるコアモデル間通信処理について説明する。図7は、実施例1にかかる排他制御によるコアモデル間通信処理手順を示すフローチャートである。このフローチャートは、図4に示したプロセッサモデルPEiにおけるプロセッサモデルPEjへのコアモデル間通信処理(ステップS402−i)の詳細なフローチャートである。
【0058】
図7において、プロセッサモデルPEjへのアクセスが可能か否か、すなわち、変数のリード/ライトが可能か否かを判断する(ステップS701−i)。具体的には、たとえば、他のプロセッサモデルPEjの排他制御に関するフラグにより判断する。他のプロセッサモデルPEjが現在排他制御されていればアクセス不可能であると判断し、他のプロセッサモデルPEj排他制御されていなければアクセス可能であると判断することができる。
【0059】
アクセス可能でない場合(ステップS701−i:No)、待機するか否かを判断する(ステップS702−i)。具体的には、アクセスのリトライをおこなうか否かを判断する。待機する場合(ステップS702−i:Yes)、ステップS701−iに戻る。一方、待機しない場合(ステップS702−i:No)、図3に示したステップS301−iに戻って、未実行の命令があるか否かを判断する。
【0060】
また、ステップS701−iにおいて、プロセッサモデルPEjへのアクセスが可能である場合(ステップS701−i:Yes)、変数にアクセスする(ステップS703−i)。具体的には、プロセッサモデルPEiで指定した変数を、コアモデル間通信により、プロセッサモデルPEjのレジスタモデルに書き込む。これにより、プロセッサモデルPEjのレジスタモデルに書き換えられた変数を命令実行関数に与えることができる。このあと、図3に示したステップS301−iに戻って、未実行の命令があるか否かを判断する。
【0061】
つぎに、実施例1にかかる排他制御による割り込み前処理について説明する。図8は、実施例1にかかる排他制御による割り込み前処理手順を示すフローチャートである。このフローチャートは、図4に示したプロセッサモデルPEiにおけるプロセッサモデルPEjに対する割り込み前処理(ステップS405−i)の詳細なフローチャートである。
【0062】
図8において、他のプロセッサモデルPEjからアクセス可能か否かを判断する(ステップS801−i)。具体的には、たとえば、プロセッサモデルPEiの排他制御に関するフラグにより判断する。プロセッサモデルPEiが現在排他制御されていればアクセス不可能であると判断し、プロセッサモデルPEiが排他制御されていなければアクセス可能であると判断することができる。
【0063】
アクセス可能でない場合(ステップS801−i:No)、待機するか否かを判断する(ステップS802−i)。具体的には、アクセスのリトライをおこなうか否かを判断する。待機する場合(ステップS802−i:Yes)、ステップS801−iに戻る。一方、待機しない場合(ステップS802−i:No)、ステップS804−iに移行する。
【0064】
また、ステップS801−iにおいて、プロセッサモデルPEjからアクセス可能である場合(ステップS801−i:Yes)、変数にアクセスする(ステップS803−i)。具体的には、プロセッサモデルPEiのレジスタモデルを読み込む。そして、コアモデル間通信が有効か否かを判断する(ステップS804−i)。具体的には、他のプロセッサモデルPEjからの通信によりレジスタモデルの変数が書き換えられているか否かを判断する。
【0065】
有効でない場合(ステップS804−i:No)、図3に示したステップS305−iに移行する。一方、有効である場合(ステップS804−i:Yes)、関数決定処理を実行する(ステップS805−i)。関数決定処理では、レジスタモデルに書き換えられた変数に応じて、割り込み処理(ステップS305−i)でコールすべき命令実行関数を決定する。そのあと、ステップS305−iに移行する。
【0066】
このように、実施例1によれば、排他制御により他のプロセッサモデルPEjを一時的に占有することにより、プロセッサモデルPEi,PEjのコアモデル処理を同期させることができる。したがって、コアモデル処理と並列にコアモデル間通信処理を実行することができ、シミュレーション処理時間の短縮化を図ることができる。
【実施例2】
【0067】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例2について説明する。実施例1では、プロセッサモデルPEiからプロセッサモデルPEjに対しコアモデル間通信処理を直接実行する例について説明したが、実施例2では、プロセッサモデルPEiからプロセッサモデルPEjに対しコアモデル間通信処理を間接的に実行する例である。具体的には、実施例2では、各プロセッサモデルPEi,PEj外のレジスタモデルまたはメモリモデル(以下、「レジスタ/メモリモデル」と称す。)を利用した排他制御をおこなうことによりコアモデル間通信処理を実行する例である。
【0068】
また、実施例1においてアクセス対象となる変数は、各プロセッサモデルPEi,PEjで管理されている変数であるが、実施例2においてアクセス対象となる変数(ステップS703−i、ステップS803−i)は、各プロセッサモデルPEi,PEjに共通のグローバル変数である。また、アクセス領域は、各プロセッサモデルPEi,PEj内部のレジスタモデルではなく、上述した各プロセッサモデルPEi,PEj外のレジスタ/メモリモデルとなる。このため、図7および図8に示した処理手順は、変数およびアクセス領域が相違するだけで同一処理手順となるため省略する。
【0069】
図9は、実施例2にかかるマルチコアモデルシミュレーションを示す説明図である。図9において、プロセッサモデルPEiおよびプロセッサモデルPEjはコアモデル処理を並列実行している。プロセッサモデルPEiのコアモデル処理中に、プロセッサモデルPEjへの通信を検出すると、プロセッサモデルPEiは、プロセッサモデルPEjに対し排他制御を実行する。
【0070】
具体的には、図9(A)において、プロセッサモデルPEiおよびプロセッサモデルPEjがアクセス可能なレジスタ/メモリモデル900に変数を書き込む。書き込み中は、プロセッサモデルPEjからのレジスタ/メモリモデルの読み込みを排他制御により禁止する。すなわち、書き込みが終了するまでレジスタ/メモリモデル900へのアクセスを待機する。つぎに、図9(B)において、プロセッサモデルPEiからの書き込みが終了した場合、プロセッサモデルPEjからレジスタ/メモリモデル900を読み込む。
【0071】
このように、実施例2によれば、実施例1と同様、排他制御により他のプロセッサモデルPEjからのレジスタ/メモリモデルへのアクセスを一時的に禁止することにより、プロセッサモデルPEi,PEjのコアモデル処理を同期させることができる。したがって、コアモデル処理と並列にコアモデル間通信処理を実行することができ、シミュレーション処理時間の短縮化を図ることができる。
【実施例3】
【0072】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例3について説明する。実施例3では、割り込み処理の具体例を示している。実施例3では、プロセッサモデルPEiからプロセッサモデルPEjへの割り込み指示があった場合、プロセッサモデルPEjにおいて割り込み処理を実行する。
【0073】
図10は、実施例3にかかるマルチコアモデルシミュレーションを示す説明図であり、図11は、実施例3にかかるマルチコアモデルシミュレーション処理手順を示すフローチャートである。図10および図11において、コアモデル間通信により、プロセッサモデルPEiからプロセッサモデルPEjに割り込み指示があったか否かを判断する(ステップS1101−j)。具体的には、プロセッサモデルPEj内のレジスタモデルにプロセッサモデルPEiからの割り込み指示信号が書き込まれたか否かを判断する。
【0074】
割り込み指示がない場合(ステップS1101−j:No)、ステップS301−j(図3を参照。)に戻る。一方、割り込み指示がある場合(ステップS1101−j:Yes)、具体的には、プロセッサモデルPEj内のレジスタモデルにプロセッサモデルPEiからの割り込み指示信号が書き込まれた場合、当該書き込みが終了するまで待機して、書き込み終了後、プロセッサモデルPEjのインターラプトコントローラIRCを起動する(ステップS1102−j)。そして、インターラプトコントローラIRCの実行の終了を検出し続け(ステップS1103−j:No)、終了した場合(ステップS1103−j:Yes)、ステップS301−j(図3を参照。)に戻る。
【0075】
このように、実施例3によれば、プロセッサモデルPEiとプロセッサモデルPEjとの並列実行中に、プロセッサモデルPEiからの割り込み指示によりプロセッサモデルPEjにおいて割り込み処理を実行することができる。したがって、シミュレーション処理時間の短縮化を図ることができる。
【実施例4】
【0076】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例4について説明する。実施例4では、いわゆるバリア方式(バリアアルゴリズム)を利用してマルチコアシミュレーションを実現する例である。
【0077】
実際の1チップで構成されるマルチプロセッサは、同じクロックか定数倍のクロックで同期している。あるタイミングでマルチプロセッサ間に割り込みがあると、その実行中のプログラムのどこで割り込みが入ったかにより処理も異なる。マルチプロセッサモデルとしては、正しく時間軸や命令ステップ数を実現できなければプロセッサモデルPEi,PEj上で実行されるユーザプログラムのデバッグもできないことになる。また、サイクル数がカウントできなければ精度のよいシミュレーションはできない。
【0078】
したがって、マルチプロセッサモデルにとって、プロセッサ間の同期は、大変重要な技術である。そもそも、一般的にマルチスレッドプログラムはスレッド間では同期しない。つまり、非同期なのである。上述のようにスレッド間はもともと非同期であるが、バリアアルゴリズムを使って同期する仕組みを利用する。これにより、プロセッサモデルPEiおよびPEj間で同期をとることができる。この同期により、シミュレータは、プロセッサモデル間の割り込み、外部割り込み、プロセッサモデル間や各ブロック間の命令レベルの同期あるいはサイクル同期が可能となる。
【0079】
図12は、実施例4にかかるマルチコアモデルシミュレーションを示す説明図である。図12では、上述したバリアアルゴリズムにより同期処理をおこなう。メインスレッド1201が実行されると、タイミングt1において、メインスレッド1201は、プロセッサモデルPEiのスレッドと、プロセッサモデルPEjのスレッドを生成し、スリープ状態になる。
【0080】
つぎに、プロセッサモデルPEiはそのスレッドの所定実行命令数の命令を実行し、プロセッサモデルPEjはそのスレッドの所定実行命令数の命令を実行する。タイミングt2において、たとえば、プロセッサモデルPEiは、先に実行を終了すると、待ち関数1202により待ち状態となる。つぎに、タイミングt3において、プロセッサモデルPEjは、実行を終了すると、待ち関数1202により待ち状態となる。
【0081】
プロセッサモデルPEiおよびPEjが実行を終了すると、タイミングt4において、待ち関数1202は、プロセッサモデルPEiおよびPEjの同期をとって、両者を待ち状態から目覚めさせる。プロセッサモデルPEiはそのスレッドの続く所定実行命令数の命令を実行し、プロセッサモデルPEjはそのスレッドの続く所定実行命令数の命令を実行する。
【0082】
つぎに、たとえば、プロセッサモデルPEjは、先に実行を終了すると、待ち関数1202により待ち状態となる。つぎに、タイミングt6において、プロセッサコアモデルPEiは、実行を終了すると、待ち関数1202により待ち状態となる。
【0083】
プロセッサコアモデルPEiおよびPEjが実行を終了すると、タイミングt7において、待ち関数1202は、プロセッサコアモデルPEiおよびPEjの同期をとって、両者を待ち状態から目覚めさせる。プロセッサコアモデルPEiはそのスレッドの続く命令を実行し、プロセッサモデルPEjはそのスレッドの続く命令を実行する。
【0084】
つぎに、タイミングt8において、プロセッサコアモデルPEiおよびPEjがすべての命令の実行を終了すると、メインスレッド1201はスリープ状態から目覚め、メインスレッド1201の処理に戻る。
【0085】
このように、プロセッサコアモデルPEiおよびPEjのいずれか一方が先に所定の実行命令数の処理を済ませると、待ち状態に入り、他方のプロセッサコアモデルPEiまたはPEjがそれを開放する仕組みになっている。これにより、3つ以上のプロセッサモデルの場合でも、同様の動作により同期がとれることになる。トレースをとると完全にプロセッサモデルPEiおよびPEjが並列実行する。この同期の仕組みにより、所定の実行命令数毎に同期することができ、シミュレーション処理時間の短縮化を図ることができる。
【実施例5】
【0086】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例5について説明する。実施例5では、実施例1および実施例2のような排他制御を利用せず、遅延によるコアモデル間通信を実現する方式である。
【0087】
図13は、実施例5にかかるマルチコアモデルシミュレーションを示す説明図である。図13において、実施例5では、レジスタモデルは、いずれか一方のプロセッサモデルPEi(PEj)から書き込み可能であり、他方のプロセッサモデルPEj(PEi)からのみ読出しをおこなう必要がある。この条件を満たさない場合、レジスタモデルには意図しない値が入ることとなる。
【0088】
すなわち、(A)の段階において、プロセッサモデルPEiおよびプロセッサモデルPEjが並列実行されている状態において、まず、プロセッサモデルPEiからレジスタモデル1300に書き込みをおこなう。その後、(B)の段階において、(A)の段階でレジスタモデルに書き込まれたデータを、プロセッサモデルPEjにより読み出す。
【0089】
図14は、実施例5にかかるプロセッサモデルPEiのコアモデル間通信処理手順を示すフローチャートである。このフローチャートは、図4に示したプロセッサモデルPEiにおけるプロセッサモデルPEjへのコアモデル間通信処理(S402−i)の詳細なフローチャートである。図14において、プロセッサモデルPEiは、変数にアクセスする(ステップS1401−i)。具体的には、レジスタモデルに変数を書き込む。このあと、ステップS301−iに戻る。
【0090】
図15は、実施例5にかかるプロセッサモデルPEjの割り込み前処理手順を示すフローチャートである。このフローチャートは、図4に示したプロセッサモデルPEiの割り込み前処理(ステップS405−i)をプロセッサモデルPEjに置き換えた場合の詳細なフローチャートである。
【0091】
図15において、まず、変数にアクセスする(ステップS1501−j)。具体的には、図14に示したように、プロセッサモデルPEiからレジスタモデルへの変数の書き込みが終了したあと、レジスタモデルから書き込まれた変数を読み出す。つぎに、ステップS1501−jによる処理が有効であるか否かを判断する(ステップS1502−j)。具体的には、読み出された変数が、読み出し前にプロセッサモデルPEiから書き込まれたデータであるか否かを判断する。
【0092】
有効でない場合(ステップS1502−j:No)、プロセッサモデルPEjの割り込み処理に移行する(図3を参照。)。一方、有効である場合(ステップS1502−j:Yes)、関数決定処理を実行する(ステップS1503−j)関数決定処理では、レジスタモデルに書き換えられた変数に応じて、プロセッサモデルPEjの割り込み処理でコールすべき命令実行関数を決定する。このあと、プロセッサモデルPEjの割り込み処理に移行する(図3を参照。)。
【0093】
このように、実施例5によれば、プロセッサモデルPEiとプロセッサモデルPEjとの並列実行中に、レジスタモデルからのリード/ライトを、同期制御をおこなわずに正確に実行することができる。したがって、簡単な制御により、シミュレーション処理時間の短縮化を図ることができる。
【実施例6】
【0094】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例6について説明する。実施例6では、バッファモデルを用いた排他制御により、コアモデル間通信を実現する方式である。
【0095】
図16は、実施例6にかかるマルチコアモデルシミュレーションの一例を示す説明図である。図16は、単一のバッファモデルを利用した場合の例である。図16において、プロセッサモデルPEi(PEj)からバッファモデルに変数を書き込み、プロセッサモデルPEj(PEi)がバッファモデル1600に書き込まれた変数を読み出す。
【0096】
たとえば、プロセッサモデルPEiが変数を書き込み(W1)、当該書き込み(W1)の終了後、プロセッサモデルPEjによる読み出し(R1)をおこなう。当該読み出し(R1)の終了後、プロセッサモデルPEjがバッファモデル1600に変数を書き込み(W2)、当該書き込み(W2)の終了後、バッファモデル1600からプロセッサモデルPEiによる読み出し(R2)をおこなう。
【0097】
このように、書き込み(Wx)が終了するまで読み出し(Rx)が待たされるという排他制御により、プロセッサモデルPEiとプロセッサモデルPEjの並列実行中において同期させることができる。したがって、シミュレーション処理時間の短縮化を図ることができる。
【0098】
図17は、実施例6にかかるマルチコアモデルシミュレーションの他の例を示す説明図である。図17は、複数のバッファモデルを利用した場合の例である。図17において、プロセッサモデルPEi(PEj)からバッファモデル1701に変数を書き込む。バッファモデル1701は、プロセッサモデルPEiにのみリード/ライトされる。
【0099】
そして、転送ブロック1700により、バッファモデル1701に書き込まれた変数を順次バッファモデル1702に転送する。また、バッファモデル1702に書き込まれた変数を順次バッファモデル1701に転送することもできる。バッファモデル1702は、プロセッサモデルPEjにのみリード/ライトされる。
【0100】
たとえば、プロセッサモデルPEiからバッファモデル1701に変数の書き込み(W1)をおこなう。当該書き込み(W1)のあと、バッファモデル1701に書き込まれた変数は転送ブロック1700によりバッファモデル1702に転送され、プロセッサモデルPEjから読み出し(R1)がおこなわれる。
【0101】
この読み出し(R1)中に、プロセッサモデルPEiは、バッファモデル1701に変数をあらたに書き込む(W2)。当該書き込み(W2)のあと、バッファモデル1701に書き込まれた変数は転送ブロック1700によりバッファモデル1702に転送され、プロセッサモデルPEjから読み出し(R2)がおこなわれる。
【0102】
この読み出し(R2)中に、プロセッサモデルPEiは、バッファモデル1701に変数をあらたに書き込む(W3)。当該書き込み(W3)のあと、バッファモデル1701に書き込まれた変数は転送ブロック1700によりバッファモデル1702に転送され、プロセッサモデルPEjから読み出し(R3)がおこなわれる。そして、この読み出し(R3)と同時に、プロセッサモデルPEiは、バッファモデル1701に変数をあらたに書き込む(W4)。
【0103】
図18は、実施例6の書き込み側のバッファ構成を示す説明図である。図18において、(A)は、図16に示した単一バッファモデルを利用した場合の説明図である。(A)において、プロセッサモデルPEiは、バッファモデル1600に対し書き込みと読み出しをおこなう。プロセッサPEj側も同様の構成となる。
【0104】
(B)は、図17に示した複数のバッファモデルを利用した場合の説明図である。(B)において、プロセッサモデルPEiは、セレクタ1800により、バッファモデル1600への書き込みと読み出しの切り替えをおこなっている。プロセッサPEj側も同様の構成となる。
【0105】
このように、書き込み(Wx)が終了するまで読み出し(Rx)が待たされるという排他制御により、プロセッサモデルPEiとプロセッサモデルPEjの並列実行中において同期させることができる。また、転送先のバッファモデル1702の読み出し中に、転送元のバッファモデル1701へのあらたな書き込みをおこなうことができるため、異なる変数間でリード/ライトを同時におこなうことができる。したがって、シミュレーション処理時間の短縮化を図ることができる。
【実施例7】
【0106】
つぎに、上述した実施の形態のマルチコアモデルシミュレータの実施例7について説明する。実施例7では、実施例1〜実施例6におけるデータ転送処理を実現する方式である。この方式には、1コアモデル対1コアモデルの単一転送、1コアモデル対複数コアモデルの複数転送、1コアモデル対1コアモデルおよび1コアモデル対複数コアモデルの混在した並列転送の三種類のデータ転送方式がある。
【0107】
図19は、1コアモデル対1コアモデルの単一転送を示す説明図である。図19では、プロセッサモデルPE1からプロセッサモデルPE2へデータを転送している例を示している。
【0108】
図20は、1コアモデル対複数コアモデルの複数転送を示す説明図である。図20では、プロセッサモデルPE1から複数のプロセッサモデルPE2〜PEnにデータを転送している例を示している。
【0109】
図21は、並列転送を示す説明図である。図21では、プロセッサモデルPE1〜PEm中、プロセッサモデルPE1がプロセッサモデルPE2へデータを転送しており、プロセッサモデルPE3から複数のプロセッサモデルPE4〜PEnにデータを転送している例を示している。
【0110】
以上説明したように、この発明の実施の形態(実施例1〜実施例7を含む)によれば、複数のプロセッサモデル間で同期をとることで、プロセッサモデル間のコアモデル間通信の高速化を図ることができる。また、任意の命令実行数により同期のタイミングをとることもできる。さらに、複数のプロセッサモデルの同時実行により、プロセッサモデル間の双方向によるコアモデル間通信を実現することができる。また、同期後のコアモデル間通信処理をスレッド化することで、コアモデル通信処理時間を、プロセッサモデル間のシミュレーション処理時間に隠蔽することができ、マルチコアモデルシミュレータのサイクルレベルでの同期を実現することができる。
【0111】
なお、本実施の形態で説明したマルチコアモデルシミュレーション方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【0112】
(付記1)複数のコアモデルを並列実行させるマルチコアモデルシミュレーションプログラムであって、
コンピュータに、前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信させることを特徴とするマルチコアモデルシミュレーションプログラム。
【0113】
(付記2)前記他のコアモデルの実行中の命令を停止させ、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行させ、
当該命令の実行終了後に停止された命令を実行させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0114】
(付記3)前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行させるとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止させ、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0115】
(付記4)前記一のコアモデルから前記他のコアモデルに対し割り込み指示に関する通信をさせ、当該割り込み指示に関する通信後に、前記割り込み指示に関する通信に基づく割り込み処理を前記他のコアモデルに実行させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0116】
(付記5)前記複数のコアモデルのうち、最も遅く実行が終了したコアモデルを検出させ、
当該検出結果に基づいて、前記複数のコアモデルのあらたな実行を開始させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0117】
(付記6)前記一のコアモデルから第1の記憶モデルへのデータの書き込みに関する通信を実行させ、
前記第1の記憶モデルに書き込まれたデータを第2の記憶モデルに転送させ、
前記第2の記憶モデルに転送されたデータの読み出しに関する通信を前記他のコアモデルに実行させることを特徴とする付記1に記載のマルチコアモデルシミュレーションプログラム。
【0118】
(付記7)さらに、前記他のコアモデルによる前記データの読み出しに関する通信中に、前記一のコアモデルから前記第1の記憶モデルへのあらたなデータの書き込みに関する通信を実行させることを特徴とする付記6に記載のマルチコアモデルシミュレーションプログラム。
【0119】
(付記8)付記1〜7のいずれか一つに記載のマルチコアモデルシミュレーションプログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【0120】
(付記9)複数のコアモデルを並列実行するマルチコアモデルシミュレータであって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信する手段を備えることを特徴とするマルチコアモデルシミュレータ。
【0121】
(付記10)前記他のコアモデルの実行中の命令を停止する手段と、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行する手段と、
当該命令の実行終了後に停止された命令を実行する手段と、
を備えることを特徴とする付記9に記載のマルチコアモデルシミュレータ。
【0122】
(付記11)前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止する手段と、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信する手段と、
を備えることを特徴とする付記9に記載のマルチコアモデルシミュレータ。
【0123】
(付記12)複数のコアモデルを並列実行させるマルチコアモデルシミュレーション方法であって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信することを特徴とするマルチコアモデルシミュレーション方法。
【0124】
(付記13)前記他のコアモデルの実行中の命令を停止し、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行し、
当該命令の実行終了後に停止された命令を実行することを特徴とする付記12に記載のマルチコアモデルシミュレーション方法。
【0125】
(付記14)前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止し、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信することを特徴とする付記12に記載のマルチコアモデルシミュレーション方法。
【産業上の利用可能性】
【0126】
以上のように、本発明にかかるマルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法は、マルチプロセッサおよびSoCモデルにおけるコアモデル間通信のシミュレーションに適している。
【図面の簡単な説明】
【0127】
【図1】この発明の実施の形態にかかるマルチコアモデルシミュレータのハードウェア構成を示すブロック図である。
【図2】この発明の実施の形態にかかるマルチコアモデルシミュレータによるマルチコアモデルシミュレーション処理手順を示すフローチャートである。
【図3】この発明の実施の形態にかかるプロセッサモデルPEiの実行処理手順を示すフローチャートである。
【図4】この発明の実施の形態にかかるプロセッサモデルPEiの同期処理手順を示すフローチャートである。
【図5】この発明の実施の形態にかかるマルチプロセッサモデルのシミュレーション処理の一例を示すタイミングチャートである。
【図6】実施例1にかかるマルチコアモデルシミュレーションを示す説明図である。
【図7】実施例1にかかる排他制御によるコアモデル間通信処理手順を示すフローチャートである。
【図8】実施例1にかかる排他制御による割り込み前処理手順を示すフローチャートである。
【図9】実施例2にかかるマルチコアモデルシミュレーションを示す説明図である。
【図10】実施例3にかかるマルチコアモデルシミュレーションを示す説明図である。
【図11】実施例3にかかるマルチコアモデルシミュレーション処理手順を示すフローチャートである。
【図12】実施例4にかかるマルチコアモデルシミュレーションを示す説明図である。
【図13】実施例5にかかるマルチコアモデルシミュレーションを示す説明図である。
【図14】実施例5にかかるプロセッサモデルPEiのコアモデル間通信処理手順を示すフローチャートである。
【図15】実施例5にかかるプロセッサモデルPEjの割り込み前処理手順を示すフローチャートである。
【図16】実施例6にかかるマルチコアモデルシミュレーションの一例を示す説明図である。
【図17】実施例6にかかるマルチコアモデルシミュレーションの他の例を示す説明図である。
【図18】実施例6の書き込み側のバッファ構成を示す説明図である。
【図19】1コアモデル対1コアモデルの単一転送を示す説明図である。
【図20】1コアモデル対複数コアモデルの複数転送を示す説明図である。
【図21】並列転送を示す説明図である。
【図22】従来のマルチプロセッサモデルのシミュレーション処理を示すフローチャートである。
【図23】従来のマルチプロセッサモデルのシミュレーション処理を示すタイミングチャートである。
【符号の説明】
【0128】
PEi(i=1〜n、n≧2) プロセッサモデル
PEj(j=1〜n、n≧2,j≠i) プロセッサモデル
900 レジスタ/メモリモデル(記憶モデル)
1300 レジスタモデル(記憶モデル)
1600,1701,1702 バッファモデル(記憶モデル)
1700 転送ブロック
【特許請求の範囲】
【請求項1】
複数のコアモデルを並列実行させるマルチコアモデルシミュレーションプログラムであって、
コンピュータに、前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信させることを特徴とするマルチコアモデルシミュレーションプログラム。
【請求項2】
前記他のコアモデルの実行中の命令を停止させ、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行させ、
当該命令の実行終了後に停止された命令を実行させることを特徴とする請求項1に記載のマルチコアモデルシミュレーションプログラム。
【請求項3】
前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行させるとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止させ、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信させることを特徴とする請求項1に記載のマルチコアモデルシミュレーションプログラム。
【請求項4】
請求項1〜3のいずれか一つに記載のマルチコアモデルシミュレーションプログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【請求項5】
複数のコアモデルを並列実行するマルチコアモデルシミュレータであって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信する手段を備えることを特徴とするマルチコアモデルシミュレータ。
【請求項6】
前記他のコアモデルの実行中の命令を停止する手段と、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行する手段と、
当該命令の実行終了後に停止された命令を実行する手段と、
を備えることを特徴とする請求項5に記載のマルチコアモデルシミュレータ。
【請求項7】
前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止する手段と、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信する手段と、
を備えることを特徴とする請求項5に記載のマルチコアモデルシミュレータ。
【請求項8】
複数のコアモデルを並列実行させるマルチコアモデルシミュレーション方法であって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信することを特徴とするマルチコアモデルシミュレーション方法。
【請求項9】
前記他のコアモデルの実行中の命令を停止し、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行し、
当該命令の実行終了後に停止された命令を実行することを特徴とする請求項8に記載のマルチコアモデルシミュレーション方法。
【請求項10】
前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止し、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信することを特徴とする請求項8に記載のマルチコアモデルシミュレーション方法。
【請求項1】
複数のコアモデルを並列実行させるマルチコアモデルシミュレーションプログラムであって、
コンピュータに、前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信させることを特徴とするマルチコアモデルシミュレーションプログラム。
【請求項2】
前記他のコアモデルの実行中の命令を停止させ、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行させ、
当該命令の実行終了後に停止された命令を実行させることを特徴とする請求項1に記載のマルチコアモデルシミュレーションプログラム。
【請求項3】
前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行させるとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止させ、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信させることを特徴とする請求項1に記載のマルチコアモデルシミュレーションプログラム。
【請求項4】
請求項1〜3のいずれか一つに記載のマルチコアモデルシミュレーションプログラムを記録した前記コンピュータに読み取り可能な記録媒体。
【請求項5】
複数のコアモデルを並列実行するマルチコアモデルシミュレータであって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信する手段を備えることを特徴とするマルチコアモデルシミュレータ。
【請求項6】
前記他のコアモデルの実行中の命令を停止する手段と、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行する手段と、
当該命令の実行終了後に停止された命令を実行する手段と、
を備えることを特徴とする請求項5に記載のマルチコアモデルシミュレータ。
【請求項7】
前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止する手段と、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信する手段と、
を備えることを特徴とする請求項5に記載のマルチコアモデルシミュレータ。
【請求項8】
複数のコアモデルを並列実行させるマルチコアモデルシミュレーション方法であって、
前記複数のコアモデルの並列実行中において、一のコアモデルの実行中の命令と他のコアモデルの実行中の命令とを同期させて、前記一のコアモデルから前記他のコアモデルへコアモデル間通信することを特徴とするマルチコアモデルシミュレーション方法。
【請求項9】
前記他のコアモデルの実行中の命令を停止し、
前記他のコアモデルにおいて、前記一のコアモデルの実行中の命令に関連する命令を実行し、
当該命令の実行終了後に停止された命令を実行することを特徴とする請求項8に記載のマルチコアモデルシミュレーション方法。
【請求項10】
前記一のコアモデルから、前記他のコアモデルから通信を受ける記憶モデルへの通信を実行するとともに、前記他のコアモデルから前記記憶モデルへの通信を禁止し、
前記一のコアモデルから前記記憶モデルに対する通信の終了後に、前記他のコアモデルから前記記憶モデルへ通信することを特徴とする請求項8に記載のマルチコアモデルシミュレーション方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【公開番号】特開2007−122602(P2007−122602A)
【公開日】平成19年5月17日(2007.5.17)
【国際特許分類】
【出願番号】特願2005−316817(P2005−316817)
【出願日】平成17年10月31日(2005.10.31)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成19年5月17日(2007.5.17)
【国際特許分類】
【出願日】平成17年10月31日(2005.10.31)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]