(57)【要約】【課題】  高速なマルチコアモデルシミュレータを実現することを課題とする。【解決手段】  複数のスレッド（１０２，１０３）と、前記複数のスレッドを実行する複数のコアモデル（ＰＥ０，ＰＥ１）とを有するマルチコアモデルシミュレータが提供される。複数のコアモデルは、複数のプロセッサコアモデルであり、それぞれが１つのスレッドを実行し、各スレッドの所定の実行命令数（Ｉ１）毎に相互に同期（ＳＮＣ）がとられる。【選択図】        図１
2006293759.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドと、
前記複数のスレッドを実行する複数のコアモデルと
を有するマルチコアモデルシミュレータ。
【請求項２】
前記複数のコアモデルは、複数のプロセッサコアモデルである請求項１記載のマルチコアモデルシミュレータ。
【請求項３】
前記複数のコアモデルは、複数のハードウエアコアモデルである請求項１記載のマルチコアモデルシミュレータ。
【請求項４】
前記複数のコアモデルは、プロセッサコアモデル及びハードウエアコアモデルを含む請求項１記載のマルチコアモデルシミュレータ。
【請求項５】
前記複数のプロセッサコアモデルは、それぞれが１つのスレッドを実行する請求項２記載のマルチコアモデルシミュレータ。
【請求項６】
前記複数のプロセッサコアモデルは、相互に同期がとられる請求項５記載のマルチコアモデルシミュレータ。
【請求項７】
前記複数のプロセッサコアモデルは、前記スレッドの所定の実行命令数毎又はサイクル数毎に同期がとられる請求項６記載のマルチコアモデルシミュレータ。
【請求項８】
前記複数のプロセッサコアモデルは、それぞれが複数のスレッドをシリアルに実行する請求項２記載のマルチコアモデルシミュレータ。
【請求項９】
前記各プロセッサコアモデルがシリアルに実行する複数のスレッドは、所定の実行命令数毎又はサイクル数毎に分割されたものである請求項８記載のマルチコアモデルシミュレータ。
【請求項１０】
さらに、前記複数のプロセッサコアモデルが実行する複数のスレッドを生成し、前記複数のプロセッサコアモデルが並列に実行するスレッド毎に同期をとるメインスレッドを有する請求項８記載のマルチコアモデルシミュレータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアモデルシミュレータに関する。
【背景技術】
【０００２】
近年、パーソナルコンピュータ用の汎用ＣＰＵ（中央処理装置）と同様に、組み込み型プロセッサにおいてもＣＰＵはマルチコア化へシフトしている。また、ますます複雑化するシステムＬＳＩの開発期間の短縮のために、設計の早い段階からハードウエアとソフトウエアの協調設計を行うことが重要である。しかし、既存のシミュレータではマルチコア対応ができていないことに加え十分なシミュレーション速度が得られていない。高速なソフトウエア／ハードウエア協調シミュレータの開発が課題となっている。
【０００３】
図２は、従来方式のシミュレータのメインスレッド（プライマリスレッド）２０１を示す図である。メインスレッド２０１は、プロセッサコアモデルＰＥ０の処理２０２及びプロセッサコアモデルＰＥ１の処理２０３をループ形式で実行する。その結果、図１に示すように、１つのメインスレッド２０１が実行される。なお、図１において、太枠が１スレッドを示す。メインスレッド２０１は、プロセッサコアモデルＰＥ０の処理及びプロセッサコアモデルＰＥ１の処理が交互に行われる。このシミュレータは、２つのプロセッサコアモデルＰＥ０及びＰＥ１をシミュレーションするものであるが、１つのプロセッサコアのみでシミュレーションするため、２つのプロセッサコアモデルＰＥ０及びＰＥ１の処理を交互に行う。
【０００４】
命令レベルシミュレータ（ISS:Instruction Set Simulator）でマルチコア等のマルチマスターをシミュレーションすると、１コアのシミュレーション時間に比べて、コアの個数倍のシミュレーション時間の長期化を招く。例えば、Ｎ個のマルチコア構成のプロセッサをシミュレーションする場合、個々のプロセッサで実行するプログラムが同じものであると仮定する。そのプログラムを１コアが実行する時間をＨ秒とすると、シミュレータのシミュレーション時間はＮ個のプロセッサ分なのでＮ×Ｈ秒となる。このときの１コアの処理性能がＺ［MIPS:Mega Instructions/Second］とすると、このマルチプロセッサシミュレータの処理性能は、Ｚ／（Ｎ×Ｈ）となり、シミュレーション時間はＮ×Ｈ秒を要してしまう。
【０００５】
また、下記の特許文献１には、組み込みシステムのハードウエア構成を模擬するシミュレータをコンピュータ上に構築し、シミュレータを用いて組み込みシステムのソフトウエアの検証を行うテスト方法及びテストシステムが記載されている。
【０００６】
また、下記の特許文献２には、他のマルチプロセッシング・システムの仮想メモリ・アドレス指定を使用してエミュレートするときに、あるマルチプロセッシング・システムのメモリ・アドレス指定を効果的にマッピングすることができる方法及び構造が記載されている。
【０００７】
【特許文献１】特開２００１−３１８８０５号公報
【特許文献２】特開２００４−１１０８１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
現在、シミュレータは、ＬＳＩ設計で期待値生成等の論理検証に使われたり、それと同時進行でアプリケーション等のプログラム開発に使われている。また、エンドユーザのプログラム開発用シミュレータとして使われている。シミュレーション速度の速いシミュレータは、開発期間の短縮に大きく貢献するため、高速なシミュレータが必要とされている。
【０００９】
本発明の目的は、高速なマルチコアモデルシミュレータを実現することである。
【課題を解決するための手段】
【００１０】
本発明の一観点によれば、複数のスレッドと、前記複数のスレッドを実行する複数のコアモデルとを有するマルチコアモデルシミュレータが提供される。
【発明の効果】
【００１１】
複数のスレッドを複数のコアモデルが実行することにより、高速なマルチコアモデルシミュレータを実現することができる。
【発明を実施するための最良の形態】
【００１２】
（第１の実施形態）
図９は、本発明の第１の実施形態によるマルチプロセッサコアモデルシミュレータ９００のハードウエア構成例を示すブロック図である。シミュレータ９００は、例えば２つのプロセッサ（ＣＰＵ）コア９０１，９０２、メモリ９０３及びチップセット９０４を有する。本実施形態のシミュレータ９００は、マルチプロセッサコア９０１，９０２のコンピュータ（例えばインテルＣＰＵのＸＥＯＮの２プロセッサ構成のコンピュータ等）を使用する。なお、ペンティアム（登録商標）４のように１プロセッサでも論理的に２プロセッサ構成であるコンピュータも含む。
【００１３】
図１０は、本実施形態によるマルチプロセッサコアモデルを説明するための図である。マルチプロセッサコアモデルは、図９のハードウエア構成により実現される。プロセッサコアモデルＰＥ０及びＰＥ１は、図９のプロセッサコア９０１及び９０２に対応する。ただし、プロセッサコアモデルＰＥ０及びＰＥ１がそれぞれプロセッサコア９０１及び９０２のいずれに割り当てられるかはコンピュータアーキテクチャに依存し、スレッド単位で決定される。メモリモデル１００３は、図９のメモリ９０３に対応し、コンピュータプログラム（命令コード）１００４を記憶する。コンピュータプログラム１００４は、複数のスレッドを有する。ここで、スレッドは、プログラム（ソフトウエア）の実行単位である。プロセッサコアモデルＰＥ０及びＰＥ１は、セレクタ１００５の排他制御により、いずれかがメモリモデル１００３にアクセス可能であり、メモリモデル１００３からプログラム１００４内の所定のスレッドを読み出して実行することができる。
【００１４】
図３は、本発明の第１の実施形態によるマルチプロセッサコアモデルシミュレータのメインスレッド３０１の例を示す図である。メインスレッド３０１は、スレッド１０２及び１０３を生成するためのスレッド生成関数、及びスレッド１０２及び１０３の終了を待つスレッド待ち関数を有する。図１及び図３に示すように、スレッド１０２はプロセッサコアモデルＰＥ０であり、プロセッサコアモデルＰＥ０により実行されるスレッドであり、スレッド１０３はプロセッサコアモデルＰＥ１であり、プロセッサコアモデルＰＥ１により実行されるスレッドである。なお、図１において、太枠が１スレッドを示す。プロセッサコアモデルＰＥ０が実行するスレッドは１つのスレッド１０２であり、プロセッサコアモデルＰＥ１が実行するスレッドは１つのスレッド１０３である。複数のプロセッサコアモデルＰＥ０及びＰＥ１は、複数のスレッド１０２及び１０３を並列に実行する。これにより、シミュレータのシミュレーション時間を高速化することができる。
【００１５】
例えば、個々のプロセッサコアモデルＰＥ０及びＰＥ１上で実行するプログラムが同じものであったとした場合、このときの１プロセッサコアモデルの処理性能がＺ[ＭＩＰＳ]とする。そのプログラムを１プロセッサコアモデルが実行する時間をＨ秒とすると、Ｎ個のプロセッサコアモデルは並列実行するため、１プロセッサコアモデル分の処理時間Ｈ秒で全処理を終えることができる。このマルチプロセッサコアモデルシミュレータの処理性能は、Ｚ×Ｈとなる。本実施形態は、シミュレーション実行環境が図９に示すようにマルチプロセッサコア９０１，９０２のコンピュータ（例えば、インテルのＸｅｏｎの２ＣＰＵ以上）で有効である。本実施形態によれば、１スレッドを１つのプロセッサコアモデルが実行するため並列に高速実行が可能となる。
【００１６】
プロセッサコアモデルＰＥ０及びＰＥ１は、スレッド１０２及び１０３の所定の実行命令数（ランステップ数）Ｉ１毎に相互に同期ＳＮＣがとられる。なお、同期ＳＮＣは、所定のサイクル数毎にとるようにしてもよい。
【００１７】
次に、プロセッサコアモデルＰＥ０及びＰＥ１間で同期をとる理由を説明する。実際の１チップで構成されるマルチプロセッサコア９０１，９０２は、同じクロックか定数倍のクロックで同期している。あるタイミングでプロセッサコア９０１及び９０２間に割り込みがあると、その実行中のプログラムのどこで割り込みが入ったかにより処理も異なる。マルチプロセッサコアモデルとしては、正しく時間軸や命令ステップ数を実現できなければプロセッサコアモデルＰＥ０，ＰＥ１上で実行されるユーザプログラムのデバッグもできないことになる。また、サイクル数がカウントできなければ精度のよいシミュレーションはできない。よって、マルチプロセッサコアモデルにとって、プロセッサコア間又はマスター及びスレーブ間の同期は大変重要な技術である。そもそも、一般的にマルチスレッドプログラムはスレッド間では同期しない。つまり、非同期なのである。上述のようにスレッド間はもともと非同期であるが、図５のバリアというアルゴリズムを使って同期する仕組みを利用する。これを使うことで、プロセッサコアモデルＰＥ０及びＰＥ１間あるいはハードウエアモデルＨＷ（図６）間で同期をとることが可能になる。この同期により、本シミュレータは、プロセッサコアモデル間の割り込み、外部割り込み、プロセッサコアモデル間や各ブロック間の命令レベルの同期あるいはサイクル同期を可能にする。
【００１８】
図９において、例えば、メインスレッド３０１はプロセッサコア９０１により実行され、プロセッサコアモデルＰＥ０のスレッド１０２はプロセッサコア９０２により実行され、プロセッサコアモデルＰＥ１のスレッド１０３はプロセッサコア９０１により実行される。すなわち、プロセッサコアモデルＰＥ０はプロセッサコア９０２に割り当てられ、プロセッサコアモデルＰＥ１はプロセッサコア９０１に割り当てられる。この割り当て方法は、制限されず、任意の割り当てでよい。
【００１９】
図５は、プロセッサコアモデルＰＥ０及びＰＥ１の同期方法を説明するための図である。本実施形態では、バリアのアルゴリズムにより同期処理を行う。メインスレッド３０１が実行されると、タイミングｔ１において、メインスレッド３０１は、プロセッサコアモデルＰＥ０のスレッド１０２及びプロセッサコアモデルＰＥ１のスレッド１０３を生成し、スリープ状態になる。
【００２０】
次に、プロセッサコアモデルＰＥ０はスレッド１０２の所定実行命令数Ｉ１の命令を実行し、プロセッサコアモデルＰＥ１はスレッド１０３の所定実行命令数Ｉ１の命令を実行する。タイミングｔ２において、例えば、プロセッサコアモデルＰＥ０は、先に実行を終了すると、待ち関数５０１により待ち状態となる。次に、タイミングｔ３において、プロセッサコアモデルＰＥ１は、実行を終了すると、待ち関数５０１により待ち状態となる。
【００２１】
プロセッサコアモデルＰＥ０及びＰＥ１が実行を終了すると、タイミングｔ４において、待ち関数５０１は、プロセッサコアモデルＰＥ０及びＰＥ１の同期をとって、両者を待ち状態から目覚めさせる。プロセッサコアモデルＰＥ０はスレッド１０２の続く所定実行命令数Ｉ１の命令を実行し、プロセッサコアモデルＰＥ１はスレッド１０３の続く所定実行命令数Ｉ１の命令を実行する。
【００２２】
次に、例えば、プロセッサコアモデルＰＥ１は、先に実行を終了すると、待ち関数５０１により待ち状態となる。次に、タイミングｔ６において、プロセッサコアモデルＰＥ０は、実行を終了すると、待ち関数５０１により待ち状態となる。
【００２３】
プロセッサコアモデルＰＥ０及びＰＥ１が実行を終了すると、タイミングｔ７において、待ち関数５０１は、プロセッサコアモデルＰＥ０及びＰＥ１の同期をとって、両者を待ち状態から目覚めさせる。プロセッサコアモデルＰＥ０はスレッド１０２の続く命令を実行し、プロセッサコアモデルＰＥ１はスレッド１０３の続く命令を実行する。
【００２４】
次に、タイミングｔ８において、プロセッサコアモデルＰＥ０及びＰＥ１がすべての命令の実行を終了すると、メインスレッド３０１はスリープ状態から目覚め、メインスレッド３０１の処理に戻る。
【００２５】
以上のように、プロセッサコアモデルＰＥ０又はＰＥ１のどちらかが先に所定の実行命令数の処理を済ませると、待ち状態に入り、もう片方のプロセッサコアモデルＰＥ０又はＰＥ１がそれを開放する仕組みになっている。これにより、３つ以上のプロセッサコアモデルの場合でも、同様の動作により同期がとれることになる。トレースをとると完全にプロセッサコアモデルＰＥ０及びＰＥ１が並列動作する。この同期の仕組みにより、所定の実行命令数毎に同期する仕組みを実現することができる。
【００２６】
（第２の実施形態）
図４は、本発明の第２の実施形態によるマルチプロセッサコアモデルシミュレータのメインスレッド４０１の例を示す図である。メインスレッド４０１は、スレッド群１０４及び１０５の各スレッドを生成するためのスレッド生成関数、及びスレッド群１０４及び１０５の各スレッドの終了を待つスレッド待ち関数を有し、それらの関数をループ処理する。図１及び図４に示すように、スレッド群１０４は、プロセッサコアモデルＰＥ０により実行されるスレッドであり、所定の実行命令数Ｉ１毎に分割されたスレッド１０４ａ，１０４ｂ，１０４ｃ，・・・を有する。スレッド群１０５は、プロセッサコアモデルＰＥ１により実行されるスレッドであり、所定の実行命令数Ｉ１毎に分割されたスレッド１０５ａ，１０５ｂ，１０５ｃ，・・・を有する。なお、図１において、太枠が１スレッドを示す。プロセッサコアモデルＰＥ０及びＰＥ１は、それぞれがスレッド群１０４及び１０５の複数のスレッドをシリアル（直列）に実行する。スレッド１０５ａ，１０５ｂ，１０５ｃ，・・・は、所定のサイクル数毎に分割されたものでもよい。
【００２７】
メインスレッド４０１は１回目のループ処理でスレッド１０４ａ及び１０５ａを生成し、プロセッサコアモデルＰＥ０がスレッド１０４ａを実行し、プロセッサコアモデルＰＥ１がスレッド１０５ａを実行する。スレッド１０４ａ及び１０５ａは並列実行され、両者の実行が終了すると、メインスレッド４０１の処理に戻る。このメインスレッド４０１の処理により、上記の並列実行するスレッドの処理が終了すると同期ＳＮＣがとられる。
【００２８】
次に、メインスレッド４０１は２回目のループ処理でスレッド１０４ｂ及び１０５ｂを生成し、プロセッサコアモデルＰＥ０がスレッド１０４ｂを実行し、プロセッサコアモデルＰＥ１がスレッド１０５ｂを実行する。スレッド１０４ｂ及び１０５ｂは並列実行され、両者の実行が終了すると、メインスレッド４０１の処理に戻り、同期ＳＮＣがとられる。
【００２９】
次に、メインスレッド４０１は３回目のループ処理でスレッド１０４ｃ及び１０５ｃを生成し、プロセッサコアモデルＰＥ０がスレッド１０４ｃを実行し、プロセッサコアモデルＰＥ１がスレッド１０５ｃを実行する。スレッド１０４ｃ及び１０５ｃは並列実行され、両者の実行が終了すると、メインスレッド４０１の処理に戻り、同期ＳＮＣがとられる。
【００３０】
以下、同様の処理を繰り返し、スレッド群１０４及び１０５の最後まで処理が行われると、メインスレッド４０１のループ処理は終了する。以上のように、プロセッサコアモデルＰＥ０はスレッド群１０４を実行し、プロセッサコアモデルＰＥ１はスレッド群１０５を実行する。複数のプロセッサコアモデルＰＥ０及びＰＥ１は、複数のスレッド群１０４及び１０５を並列に実行する。これにより、シミュレータのシミュレーション時間を高速化することができる。本実施形態は、第１の実施形態と同様に、Ｎ個のプロセッサコアモデルが並列実行するため、１プロセッサコアモデル分の処理時間Ｈ秒で全処理を終えることができる。このマルチプロセッサコアシミュレータの処理性能は、Ｚ×Ｈとなる。
【００３１】
以上のように、本実施形態は、各プロセッサコアモデルＰＥ０，ＰＥ１の中で所定の実行命令数Ｉ１毎にスレッド化し、その所定の実行命令数Ｉ１毎にプロセッサコアモデルＰＥ０及びＰＥ１間で同期をとる。複数のマルチプロセッサコアモデルＰＥ０及びＰＥ１は、並列実行するスレッド毎にメインスレッド４０１で同期がとられる。メインスレッド４０１は、各プロセッサコアモデルＰＥ０及びＰＥ１のスレッドを生成する。この生成単位は、各プロセッサコアモデルＰＥ０及びＰＥ１の所定の実行命令数Ｉ１の命令の塊である。この単位でシリアルに実行することにより、メインスレッド４０１内で同期することが可能である。所定の実行命令数Ｉ１は、パラメータであるため１以上であればよい。このような同期を採用した場合はプログラムのデバッグが容易という利点をもつ。
【００３２】
（第３の実施形態）
図６は、本発明の第３の実施形態によるマルチコアモデルシミュレータを説明するための図である。本実施形態は、第２の実施形態（図１）と同様に、プロセッサコアモデルＰＥ０がスレッド群１０４を実行し、プロセッサコアモデルＰＥ１がスレッド群１０５を実行し、さらにハードウエアコアモデルＨＷがスレッド群６０１を実行する。スレッド群１０４、１０５及び６０１は、並列に実行される。同期方法は、第２の実施形態と同じである。ハードウエアコアモデルＨＷは、ハードウエアコアをシミュレーションするためにプロセッサコアに割り当てられるモデルである。例えば、図９では、プロセッサコア９０１及び９０２の他にもう１つのプロセッサコアが設けられる。ハードウエアコアモデルＨＷは、プロセッサコアモデル以外のコアモデルであり、例えば、画像処理、音声処理、リコンフィギュレーション（再構成）処理、タイマ又はバスブロック等のハードウエアコアをシミュレーションするためのモデルである。
【００３３】
本実施形態は、プロセッサコアモデル以外にマスターになるハードウエアコアモデルＨＷを有するＳｏＣ（System-on-Chip）のシミュレータ例を示し、所定の実行命令数Ｉ１毎に同期ＳＮＣをとることでマルチプロセッサコアモデル及びＳｏＣの動作モデルを実現できる。
【００３４】
以上のように、第１〜第３の実施形態によれば、複数のスレッドを実行する複数のコアモデルを有するマルチコアモデルシミュレータが提供される。第１及び第２の実施形態では、その複数のコアモデルは、複数のプロセッサコアモデルである。また、本実施形態では、その複数のコアモデルは、プロセッサコアモデル及びハードウエアコアモデルの両方を含むものである。また、その複数のコアモデルは、複数のハードウエアコアモデルでもよい。
【００３５】
なお、本実施形態は、第２の実施形態にハードウエアコアモデルＨＷを適用する例を説明したが、同様に、第１の実施形態にハードウエアコアモデルＨＷを適用することもできる。
【００３６】
（第４の実施形態）
図７は、本発明の第４の実施形態によるデバッガ７０１を有するマルチプロセッサコアモデルシミュレータの構成例を示すブロック図である。本実施形態は、第１の実施形態のマルチプロセッサコアモデルシミュレータにデバッガ７０１を追加したものであり、Ｎ個のプロセッサコアモデルＰＥ０〜ＰＥＮを有する。マルチプロセッサコアモデルシミュレータは、第１の実施形態と同様に、メインスレッド３０１、プロセッサコアモデルＰＥ０のスレッド１０２、プロセッサコアモデルＰＥ１のスレッド１０３、・・・、プロセッサコアモデルＰＥＮのスレッド７００を有し、さらにデバッガ７０１を有する。デバッガ７０１は、メインスレッド３０１に対してＴＣＰ（Transmission Control Protocol）７０２により接続され、メインスレッド３０１を介してＮ個のプロセッサコアモデルＰＥ０〜ＰＥＮを択一的に選択してデバッグすることができる。
【００３７】
デバッグは、コンピュータプログラムの誤り（バグ）を探して取り除く処理である。デバッガ７０１は、バグを発見したり修正する作業を支援するソフトウエア（コンピュータプログラム）であり、例えば各プロセッサコアモデルＰＥ０〜ＰＥＮの任意の実行命令で停止させたり、命令単位で実行を停止させたりし、その内部状態をモニタすることができる。
【００３８】
なお、本実施形態のデバッガ７０１は、第１の実施形態の他、第２及び第３の実施形態に適用することができる。
【００３９】
（第５の実施形態）
図８は、本発明の第５の実施形態によるマルチデバッガ８０１を有するマルチプロセッサコアモデルシミュレータの構成例を示すブロック図である。本実施形態は、第１の実施形態のマルチプロセッサコアモデルシミュレータにマルチデバッガ８０１を追加したものであり、Ｎ個のプロセッサコアモデルＰＥ０〜ＰＥＮを有する。マルチプロセッサコアモデルシミュレータは、第１の実施形態と同様に、メインスレッド３０１、プロセッサコアモデルＰＥ０のスレッド１０２、プロセッサコアモデルＰＥ１のスレッド１０３、・・・、プロセッサコアモデルＰＥＮのスレッド７００を有し、さらにマルチデバッガ８０１を有する。マルチデバッガ８０１は、Ｎ個のプロセッサコアモデルＰＥ０〜ＰＥＮをそれぞれデバッグするためのＮ個のデバッガ８０１ａ，８０１ｂ，・・・，８０１ｎを有する。Ｎ個のデバッガ８０１ａ，８０１ｂ，・・・，８０１ｎは、それぞれ、ＴＣＰ接続８０２を介して、Ｎ個のプロセッサコアモデルＰＥ０〜ＰＥＮをデバッグすることができる。
【００４０】
なお、本実施形態のマルチデバッガ８０１は、第１の実施形態の他、第２及び第３の実施形態に適用することができる。
【００４１】
以上のように、第１〜第５の実施形態では、マルチスレッド化されたマルチコアモデルシミュレータを実現することができる。現在までコンピュータ（計算機）環境はシングルプロセッサが主でその上で実行するマルチプロセッサコアモデルのシミュレータはシングルスレッドであり、マルチスレッド化されたマルチコアモデルシミュレータは開発が困難なことから開発されてこなかった。第１〜第５の実施形態は、開発を容易にする同期制御方式を採用しているため、マルチスレッド（並列プログラミング）化されたマルチコアモデルシミュレータ（ＳｏＣシミュレータを含む）を実現することができる。近い将来、エンドユーザにおいてもマルチプロセッサパーソナルコンピュータ環境が普通に使える状況となるため、上記実施形態の優位性は高い。
【００４２】
上記実施形態は、組み込み型マルチプロセッサをシミュレーションすることができる高速シミュレータである。本シミュレータは、１コアを１スレッドという単位で動作させるという基本原理によってマルチプロセッサの高速シミュレートが可能である。ただし、本シミュレータの性能を出すにはマルチスレッドが実行できるマルチＣＰＵのコンピュータ環境を利用しなければならない。並列で実行できるスレッド数がマルチプロセッサモデルのＣＰＵ数以上という条件であれば高速実行が可能である。
【００４３】
コアモデル間は同期しなければならない。１コアモデルが１スレッドを実行する場合、コアモデルのスレッド間で同期をとる必要がある。第１の実施形態では、スレッド化されたコアモデル間をバリアモデルを利用して同期をとる。第２の実施形態では、コアモデル間の同期をメインスレッドでコントロールする。
【００４４】
プロセッサ及びＳｏＣのコアモデルシミュレータ実現において同期が問題になる。上記実施形態では、プロセッサコアモデル及びハードウエアコアモデル等のマスターブロック及び／又はスレーブブロック間の同期の仕組みとそれを用いたモデルの高速シミュレーションを提供する。これにより、シミュレータ上でマルチプログラミングも可能となり、マルチプロセッサ及びＳｏＣを採用するマルチコア及びマルチマスター・スレーブのシミュレータを実現することができる。
【００４５】
マルチプロセッサあるいはＳｏＣモデルを従来方式のシングルスレッドのプログラムで実行すると、コアモデル数あるいはマスターとなるハードウエアコアモデル数の合計の処理をシリアルにつなげた処理時間を必要とする。上記実施形態により、コアモデル及びハードウエアコアモデルを並列化することによりこれらの個数に依存しない処理性能を実現することができる。このとき並列プログラムでは同期の仕組みが大変難しいが、第２の実施形態では同期の仕組みをメインスレッドにおいてコード化することでコードにより同期を取ることを可能にした。これにより、コアモデル上で走るプログラムのデバッグに対して同期をとることも可能である。各コアモデルが並列実行するため処理速度はコアモデル数倍となり、従来に比べコアモデル数倍の性能で実行できる。
【００４６】
本シミュレータは、高速実行が可能であることからアーキテクチャ仕様検討、期待値生成等の論理検証、ファーム開発等の用途があり、システムＬＳＩ開発期間の短縮に大きな貢献になる。また、本シミュレータは、マルチプロセッサを含むシステムＬＳＩのシミュレーションに適用できる。
【００４７】
本実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、プログラムをコンピュータに供給するための手段、例えばかかるプログラムを記録したＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体又はかかるプログラムを伝送するインターネット等の伝送媒体も本発明の実施形態として適用することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。上記のプログラム、記録媒体、伝送媒体及びコンピュータプログラムプロダクトは、本発明の範疇に含まれる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００４８】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００４９】
本発明の実施形態は、例えば以下のように種々の適用が可能である。
【００５０】
（付記１）
複数のスレッドと、
前記複数のスレッドを実行する複数のコアモデルと
を有するマルチコアモデルシミュレータ。
（付記２）
前記複数のコアモデルは、複数のプロセッサコアモデルである付記１記載のマルチコアモデルシミュレータ。
（付記３）
前記複数のコアモデルは、複数のハードウエアコアモデルである付記１記載のマルチコアモデルシミュレータ。
（付記４）
前記複数のコアモデルは、プロセッサコアモデル及びハードウエアコアモデルを含む付記１記載のマルチコアモデルシミュレータ。
（付記５）
さらに、論理的に複数のプロセッサコアを有し、
前記複数のプロセッサコアモデルは、それぞれが複数のプロセッサコアに割り当てられる付記２記載のマルチコアモデルシミュレータ。
（付記６）
前記複数のプロセッサコアモデルは、前記複数のスレッドを並列に実行する付記２記載のマルチコアモデルシミュレータ。
（付記７）
前記複数のプロセッサコアモデルは、それぞれが１つのスレッドを実行する付記２記載のマルチコアモデルシミュレータ。
（付記８）
前記複数のプロセッサコアモデルは、相互に同期がとられる付記７記載のマルチコアモデルシミュレータ。
（付記９）
前記複数のプロセッサコアモデルは、前記スレッドの所定の実行命令数毎に同期がとられる付記８記載のマルチコアモデルシミュレータ。
（付記１０）
前記複数のプロセッサコアモデルは、所定のサイクル数毎に同期がとられる付記８記載のマルチコアモデルシミュレータ。
（付記１１）
さらに、前記複数のプロセッサコアモデルを択一的にデバッグするためのデバッガを有する付記７記載のマルチコアモデルシミュレータ。
（付記１２）
さらに、前記複数のプロセッサコアモデルをそれぞれデバッグするための複数のデバッガを有する付記７記載のマルチコアモデルシミュレータ。
（付記１３）
前記複数のプロセッサコアモデルは、それぞれが複数のスレッドをシリアルに実行する付記２記載のマルチコアモデルシミュレータ。
（付記１４）
前記各プロセッサコアモデルがシリアルに実行する複数のスレッドは、所定の実行命令数毎又はサイクル数毎に分割されたものである付記１３記載のマルチコアモデルシミュレータ。
（付記１５）
さらに、前記複数のプロセッサコアモデルが実行する複数のスレッドを生成し、前記複数のプロセッサコアモデルが並列に実行するスレッド毎に同期をとるメインスレッドを有する付記１３記載のマルチコアモデルシミュレータ。
（付記１６）
さらに、前記複数のプロセッサコアモデルを択一的にデバッグするためのデバッガを有する付記１３記載のマルチコアモデルシミュレータ。
（付記１７）
さらに、前記複数のプロセッサコアモデルをそれぞれデバッグするための複数のデバッガを有する付記１３記載のマルチコアモデルシミュレータ。
【図面の簡単な説明】
【００５１】
【図１】本発明の第１及び第２の実施形態によるマルチプロセッサコアモデルシミュレータの動作を説明するためのタイムチャートである。
【図２】従来方式のシミュレータのメインスレッドを示す図である。
【図３】本発明の第１の実施形態によるマルチプロセッサコアモデルシミュレータのメインスレッドの例を示す図である。
【図４】本発明の第２の実施形態によるマルチプロセッサコアモデルシミュレータのメインスレッドの例を示す図である。
【図５】プロセッサコアモデルＰＥ０及びＰＥ１の同期方法を説明するための図である。
【図６】本発明の第３の実施形態によるマルチコアモデルシミュレータを説明するための図である。
【図７】本発明の第４の実施形態によるデバッガを有するマルチプロセッサコアモデルシミュレータの構成例を示すブロック図である。
【図８】本発明の第５の実施形態によるマルチデバッガを有するマルチプロセッサコアモデルシミュレータの構成例を示すブロック図である。
【図９】本発明の第１の実施形態によるマルチプロセッサコアモデルシミュレータのハードウエア構成例を示すブロック図である。
【図１０】本発明の第１の実施形態によるマルチプロセッサコアモデルを説明するための図である。
【符号の説明】
【００５２】
１０２，１０３  スレッド
１０４，１０５，６０１  スレッド群
２０１，３０１，４０１  メインスレッド
５０１  待ち関数
７０１  デバッガ
７０２，８０２  ＴＣＰ
８０１  マルチデバッガ
９００  シミュレータ
９０１，９０２  プロセッサコア
９０３  メモリ
９０４  チップセット
１００３  メモリモデル
１００４  プログラム
１００５  セレクタ
【図１】
2006293759.tif 000003
【図２】
2006293759.tif 000004
【図３】
2006293759.tif 000005
【図４】
2006293759.tif 000006
【図５】
2006293759.tif 000007
【図６】
2006293759.tif 000008
【図７】
2006293759.tif 000009
【図８】
2006293759.tif 000010
【図９】
2006293759.tif 000011
【図１０】
2006293759.tif 000012