(57)【特許請求の範囲】
【請求項１】
シミュレーション対象のシステムに含まれる複数のコンポーネントをモデル化した複数の論理プロセスを並行実行するシミュレーション装置であって、
前記複数の論理プロセス間の通信遅延に基づいて、通信元の各論理プロセスから通信先の各論理プロセスに対して先行実行を許可するメッセージにより許可すべき先行実行時間と、前記複数の論理プロセスに与える初期時間シフトとが満たすべき制約条件を生成する条件生成部と、
前記制約条件を満たし、かつ前記複数の論理プロセス間における前記メッセージの通信オーバーヘッドを最小化する最適化問題を解いて前記複数の論理プロセスの初期時間シフトおよび前記複数の論理プロセス間における先行実行時間を得るソルバー部と、
を備えるシミュレーション装置。
【請求項２】
前記複数の論理プロセスのそれぞれを前記初期時間シフト分進めた時刻から開始させ、各論理プロセスから前記先行実行時間分の先行実行を許可する前記メッセージを送信させながら前記複数の論理プロセスを並行実行させるシミュレーション部を備える請求項１に記載のシミュレーション装置。
【請求項３】
前記シミュレーション部は、各論理プロセスに対して送信された前記メッセージにより許可された先行実行時間のうち最小の先行実行時間分先行する時刻まで各論理プロセスの実行を進め、当該論理プロセスから他の論理プロセスに対して前記メッセージを送信させる請求項２に記載のシミュレーション装置。
【請求項４】
前記ソルバー部は、前記制約条件を満たし、かつ前記複数の論理プロセスにおける前記先行実行時間の合計を最大化する最大化問題を解く請求項１から３のいずれか一項に記載のシミュレーション装置。
【請求項５】
前記条件生成部は、通信元の各論理プロセスから通信先の各論理プロセスに対する前記メッセージにより許可すべき先行実行時間を、通信元の各論理プロセスから通信先の各倫理プロセスへの前記通信遅延以下とする前記制約条件を生成する請求項１から４のいずれか一項に記載のシミュレーション装置。
【請求項６】
前記条件生成部は、一の論理プロセスから他の論理プロセスに対して直接通信しない場合に、前記一の論理プロセスから前記他の論理プロセスに対する前記先行実行時間の上限に制約を与えない請求項５に記載のシミュレーション装置。
【請求項７】
前記条件生成部は、前記複数の論理プロセス間において互いに通信する論理プロセス間において、第１論理プロセスおよび第２論理プロセスの前記初期時間シフトの差を、前記第２論理プロセスから前記第１論理プロセスに対する前記先行実行時間および前記第１論理プロセスから前記第２論理プロセスに対する前記先行実行時間の差より０に近付けた値とする前記制約条件を生成する請求項１から６のいずれか一項に記載のシミュレーション装置。
【請求項８】
前記条件生成部は、前記複数の論理プロセス間において互いに通信する論理プロセス間において、第１論理プロセスおよび第２論理プロセスの前記初期時間シフトの差を、前記第２論理プロセスから前記第１論理プロセスに対する前記先行実行時間および前記第１論理プロセスから前記第２論理プロセスに対する前記先行実行時間の差の１／４倍から３／４倍までの範囲内とする前記制約条件を生成する請求項７に記載のシミュレーション装置。
【請求項９】
前記条件生成部は、前記複数の論理プロセス間において互いに通信する論理プロセス間において、第１論理プロセスおよび第２論理プロセスの前記初期時間シフトの差を、前記第２論理プロセスから前記第１論理プロセスに対する前記先行実行時間および前記第１論理プロセスから前記第２論理プロセスに対する前記先行実行時間の差の１／２倍とする前記制約条件を生成する請求項８に記載のシミュレーション装置。
【請求項１０】
シミュレーション対象のシステムに含まれる複数のコンポーネントをモデル化した複数の論理プロセスを並行実行するシミュレーション方法であって、
前記複数の論理プロセス間の通信遅延に基づいて、通信元の各論理プロセスから通信先の各論理プロセスに対して先行実行を許可するメッセージにより許可すべき先行実行時間と、前記複数の論理プロセスに与える初期時間シフトとが満たすべき制約条件を生成する条件生成段階と、
前記制約条件を満たし、かつ前記複数の論理プロセス間における前記メッセージの通信オーバーヘッドを最小化する最適化問題を解いて前記複数の論理プロセスの初期時間シフトおよび前記複数の論理プロセス間における先行実行時間を得るソルバー段階と、
を備えるシミュレーション方法。
【請求項１１】
コンピュータに、請求項１から９のいずれか一項に記載のシミュレーション装置として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション装置、シミュレーション方法、およびプログラムに関する。
【背景技術】
【０００２】
従来、自動車、ロボット、および飛行機等の大規模な電子制御システムを、高価なエミュレーション用ハードウェアを用いることなく、例えば、ＭＡＴＬＡＢ（登録商標）／ＳｉｍｕＬｉｎｋ（登録商標）等のシミュレーション・モデリング・システムによって、シミュレーション・プログラムを生成してシミュレーションを実行していた。この場合、シミュレーション対象の電子制御システムを、複数の機能ブロックにモデル化し、各機能ブロックを並列実行させて実行速度を向上させることが知られていた（例えば、特許文献１および非特許文献１、２参照）。
［特許文献１］  国際公開第２０１３／０８４６５４号
［非特許文献１］  Alois Ferscha, Satish K. Tripathi, "Parallel and Distributed Simulation of Discrete Event Systems" ,the University of Maryland Computer Science Department; CS-TR-3336, 15-Oct-1998
［非特許文献２］  Vikas Jha, Rajive Bagrodia, "Simultaneous events and lookahead in simulation protocols", Journal ACM Transactions on Modeling and Computer Simulation, Volume 10 Issue 3, July 2000
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、このような機能ブロックを並列実行させる場合、限られた条件でなければ、互いの機能ブロック間のメッセージ送信を最小にしつつ、並列処理を効率的に実行させるシミュレーション・プログラムを生成することが困難であった。特に、複数の機能ブロック間の一部に、一方向の通信はあるが逆方向の通信がない場合等は、並列処理を効率よく実行するシミュレーション・プログラムを生成することができなかった。
【課題を解決するための手段】
【０００４】
本発明の第１の態様においては、シミュレーション対象のシステムに含まれる複数のコンポーネントをモデル化した複数の論理プロセスを並行実行するシミュレーション装置であって、複数の論理プロセス間の通信遅延に基づいて、通信元の各論理プロセスから通信先の各論理プロセスに対して先行実行を許可するメッセージにより許可すべき先行実行時間と、複数の論理プロセスに与える初期時間シフトとが満たすべき制約条件を生成する条件生成部と、制約条件を満たし、かつ複数の論理プロセス間におけるメッセージの通信オーバーヘッドを最小化する最適化問題を解いて複数の論理プロセスの初期時間シフトおよび複数の論理プロセス間における先行実行時間を得るソルバー部と、を備えるシミュレーション装置、シミュレーション方法、およびプログラムを提供する。
【０００５】
なお、上記の発明の概要は、本発明の特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【図面の簡単な説明】
【０００６】
【図１】本実施形態に係る論理プロセスおよび当該論理プロセスの動作の一例を示す。
【図２】本実施形態に係る論理プロセスおよび初期シフト期間がある場合の論理プロセスの第１の動作例を示す。
【図３】本実施形態に係る論理プロセスおよび初期シフト期間がある場合の論理プロセスの第２の動作例を示す。
【図４】本実施形態に係るシミュレーション装置１００の構成例を示す。
【図５】本実施形態に係るシミュレーション装置１００の動作フローの一例を示す。
【図６】本実施形態に係る３つの論理プロセスを備える第１の構成例を示す。
【図７】本実施形態に係る４つの論理プロセスを備える構成例を示す。
【図８】本実施形態に係る３つの論理プロセスを備える第２の構成例を示す。
【図９】本実施形態に係るシミュレーション装置１００として機能するコンピュータ１９００のハードウェア構成の一例を示す。
【発明を実施するための形態】
【０００７】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【０００８】
図１は、本実施形態に係る論理プロセスおよび当該論理プロセスの動作の一例を示す。図１は、ＡおよびＢで示す２つの論理プロセスでシミュレーションを実行する構成を示す。各論理プロセスは、シミュレーション対象のシステムに含まれる複数のコンポーネントをモデル化した機能ブロックであり、シミュレーション・モデリング・ツールは、このような機能ブロックを配置して処理の流れを指定する。
【０００９】
それぞれの論理プロセスは、和および積等の基本演算、論理演算、積分等の数式処理、条件分岐、並びにソフトウエア・コードの呼び出し等の機能を有し、一例として、シミュレーションの実行単位を示す。例えば、論理プロセスＡおよびＢは、それぞれ自動車のエンジン、トランスミッション、または電子制御ユニット等の動作をシミュレートする論理プロセスであり、互いにメッセージを通知しながら相互に連携して動作する。
【００１０】
これに加え、論理プロセスが通知するメッセージは、一例として、受信側の論理プロセスの先行実行を許可するメッセージを含む。また、当該メッセージには、時間情報が付加されてよい。この場合、当該時間情報は、受信側の論理プロセスの先行実行を終了すべき時刻でよく、これに代えて、受信側の論理プロセスが先行実行を許可された期間の情報であってもよい。
【００１１】
ここで、メッセージに付加された時間情報は、例えば、送信側および受信側の論理プロセス間に生じる伝達遅延に応じて予め定められる。ここで、当該伝達遅延は、論理プロセスの制御対象となる機能同士の間で、状態、コマンド／制御等が伝搬するのに要する時間に応じて決めることができる。
【００１２】
また、当該受信側の論理プロセスが先行実行を許可された期間は、論理プロセスがタイマー機能等を用いて処理を実行する場合、送信側の論理プロセスがタイマーにセットする時刻および／または受信側の論理プロセスがアラームを発生する時刻に応じて予め定められてよい。また、当該期間は、受信側の論理プロセスが許容する遅延時間の範囲に応じて予め定められてもよい。
【００１３】
本実施形態の各論理プロセスのうち、シミュレーションの実行開始時点から先行して処理を開始した論理プロセスは、予め定められた初期シフト期間の経過時点で、対応する論理プロセスに先行実行を許可するメッセージを送信する。また、実行開始時点で先行実行していない他の論理プロセスは、実行開始時点において対応する論理プロセスに先行実行を許可するメッセージを送信する。
【００１４】
それぞれの論理プロセスは、先行実行を許可するメッセージを受け取ったことに応じて、対応する動作を先行実行する。そして、各論理プロセスは、メッセージに付加された時間情報に応じた期間が終了すると、対応する論理プロセスに先行実行を許可するメッセージを送信する。
【００１５】
また、各論理プロセスは、先行実行を許可する次のメッセージを受け取っている場合、対応する次の動作を実行し、当該次のメッセージを受け取っていない場合、当該次のメッセージを受け取るまで待機状態となる。このように、複数の論理プロセス間でメッセージを送信しつつ同期を取ってシミュレーションを進行させる方法は、例えば非特許文献１等で知られており、送信するメッセージをｎｕｌｌ（ヌル）メッセージと呼ぶ。
【００１６】
図１は、論理プロセスＡおよびＢの論理プロセス間の通信について、送信および受信の時間差をタイムラグ（時間ずれ）として模式的に示した例である。図中のＬ'ＡＢは、ＡからＢへのメッセージ通知のタイムラグ（即ち、論理プロセスＢに対して実行を許可する最先の時刻である先行実行時間）であり、Ｌ'ＢＡは、ＢからＡへのメッセージ通知のタイムラグである。
【００１７】
ここで、Ｌ'ＡＢおよびＬ'ＢＡが共に０の場合（Ｌ'ＡＢ＝Ｌ'ＢＡ＝０）、互いにタイムラグがなしとなり、論理プロセスＡおよびＢは、並列実行できない強連成の構成となる。この場合、論理プロセスＡおよびＢは、異なる論理プロセスに分けることはできず、単一のシミュレータとして計算することになる。
【００１８】
Ｌ'ＡＢおよびＬ'ＢＡが共に０ではない場合（Ｌ'ＡＢ≠０、Ｌ'ＢＡ≠０）、一例として、Ｌ'ＡＢおよびＬ'ＢＡの最大公約数の時間ステップで同期処理を行うことにより、最大公約数の時間は並列動作で時間誤差を生じない連成シミュレーションを実行することができる。
【００１９】
Ｌ'ＡＢおよびＬ'ＢＡのいずれか一方が０の場合、例えば、Ｌ'ＢＡが０の場合（Ｌ'ＡＢ≠０、Ｌ'ＢＡ＝０）、論理プロセスＡは、論理プロセスＢからのメッセージを受け取るまで待機の状態を継続させることになる。この場合、論理プロセスＡおよびＢは、交互にシーケンシャル実行することになる。
【００２０】
図１のシミュレーション時間および実行時間は、横軸を時間軸として、このようなシーケンシャル動作の例を示す。図中のシミュレーション時間は、論理プロセスＡおよびＢの間のメッセージのやりとりを矢印で示す。例えば、論理プロセスＢからＡへと横軸に対して垂直上向きに示す矢印は、タイムラグが０のメッセージを論理プロセスＢが論理プロセスＡへと送信することを示す。
【００２１】
また、論理プロセスＡからＢへと横軸に対して斜めに示す矢印は、タイムラグが０以上（本例ではＬ'ＡＢ）のメッセージを論理プロセスＡがＢへ送信することを示す。そして、各メッセージは、対応する各矢印において、矢の先端位置まで論理プロセスの処理の実行を許可することを意味する。
【００２２】
また、図中の実行時間は、各論理プロセスが実際の時間軸において、シミュレーションを実行している期間を四角形で示し、待機状態となっている期間を矢印で示す。即ち、各論理プロセスの四角形が、時間軸上で重なり合っている期間が並列動作している期間に相当する。
【００２３】
論理プロセスＡおよびＢは、一例として、開始時点で互いに相手側へとメッセージを送信して同期を取る。論理プロセスＡからＢへの送信（図中のｍ１）は、Ｌ'ＡＢのタイムラグを通知するので、論理プロセスＢは、当該Ｌ'ＡＢの時間が経過する期間Ｂ１の間、シミュレーションを実行できる。また、論理プロセスＡは、論理プロセスＢからＬ'ＢＡ＝０のメッセージ（ｎ１）を通知されているので、シミュレーションは実行できず、論理プロセスＢからのメッセージを待つ待機状態となる。
【００２４】
そしてＬ'ＡＢに相当する時間が経過すると、論理プロセスＢは、シミュレーションの実行を停止し、論理プロセスＡにメッセージ（ｎ２）を送信する。当該メッセージは、経過したＬ'ＡＢに相当する期間とタイムラグが０の期間（Ｌ'ＡＢ＋０の期間、即ち、Ａ１の期間）まで論理プロセスＡの実行を許可するメッセージである。そして、論理プロセスＢは、論理プロセスＡからのメッセージを待つ待機状態となる。
【００２５】
論理プロセスＡは、実行許可のメッセージ（ｎ２）を受け取ったことに応じて、Ｌ'ＡＢの時間が経過するまでの期間Ａ１においてシミュレーションを実行する。次に、Ｌ'ＡＢに相当する時間（すなわち、シミュレーションを開始してから２Ｌ'ＡＢに相当する時間）が経過すると、論理プロセスＡは、シミュレーションを停止する。そして、論理プロセスＡは、論理プロセスＢに、期間Ｂ１（＝Ａ１）とタイムラグがＬ'ＡＢの期間（Ｌ'ＡＢ＋Ｌ'ＡＢの期間、即ち、Ｂ２の期間）まで論理プロセスＢの実行を許可するメッセージ（ｍ２）を送信すると共に、論理プロセスＢからのメッセージを待つ待機状態となる。
【００２６】
待機状態だった論理プロセスＢは、論理プロセスＡからのメッセージ（ｍ２）に応じて、期間Ｂ２の間、シミュレーションを実行する。そして期間Ｂ２が経過すると、論理プロセスＢは、シミュレーションの実行を停止し、論理プロセスＡにＡ２の期間だけ論理プロセスＡの実行を許可するメッセージ（ｎ３）を送信すると共に、論理プロセスＡからのメッセージを待つ待機状態となる。
【００２７】
論理プロセスＡおよびＢは、このような動作を繰り返して、同期を取りつつシミュレーションを実行することができるが、並列実行していないので、実行時間を高速にすることはできない。そこで、全体のシミュレーションを開始する前に、予め定められた時間を初期時間シフトとして、予め定められた論理プロセスを先行して実行させ、各論理プロセスを並列実行させる。
【００２８】
図２は、本実施形態に係る論理プロセスおよび初期シフト期間がある場合の論理プロセスの第１の動作例を示す。図２は、図１と同様に、論理プロセスＡおよびＢでシミュレーションを実行する構成であり、Ｌ'ＢＡが０の場合（Ｌ'ＡＢ≠０、Ｌ'ＢＡ＝０）を説明する。
【００２９】
また、本実施形態において、論理プロセスＡの初期時間シフトをＳＡ、論理プロセスＢの初期時間シフトをＳＢとし、初期シフト期間を、ＳＡ−ＳＢ＝（Ｌ'ＢＡ−Ｌ'ＡＢ）／２とした例を説明する。ここで、論理プロセスの初期時間シフトとは、予め定められた基準時間から当該論理プロセスがシミュレーション処理を開始するまでの時間である。
【００３０】
したがって、論理プロセスＡおよびＢの初期シフト期間（ＳＡ−ＳＢ）は、論理プロセスＡの処理開始時刻と論理プロセスＢの処理開始時刻の差となる。例えば、図１で説明した論理プロセスＡおよびＢの初期シフト期間（ＳＡ−ＳＢ）は０であり、２つの論理プロセスは略同時に処理を開始する。
【００３１】
図２において、Ｌ'ＢＡ＝０であるから、ＳＢ−ＳＡ＝Ｌ'ＡＢ／２となり、論理プロセスＢは、当該初期シフト期間（Ｌ'ＡＢ／２）だけ論理プロセスＡに先行してシミュレーションを実行することになる。即ち、論理プロセスＢは、論理プロセスＡのシミュレーションの実行開始時点から先行して処理を開始する（期間Ｂ０）。また、論理プロセスＡは、開始時点で相手側の論理プロセスＢへと期間Ｂ１まで処理を進めるメッセージを送信すると共に、論理プロセスＢからのメッセージを待つ待機状態となる。
【００３２】
論理プロセスＢは、メッセージを受け取ったことに応じてシミュレーションを開始し、初期シフト期間（Ｌ'ＡＢ／２）に相当する時間が経過すると、論理プロセスＡの期間Ａ１までの実行を許可するメッセージを送信する。また、論理プロセスＢは、この時点において、許可されたタイムラグＬ'ＡＢに相当する時間は経過していないので、シミュレーションの実行を継続する（期間Ｂ１に移行する）。
【００３３】
論理プロセスＡは、実行許可のメッセージを受け取ったことに応じて、Ｌ'ＡＢ／２の時間が経過するまでの期間Ａ１においてシミュレーションを実行する。シミュレーション開始からＬ'ＡＢに相当する時間が経過すると、論理プロセスＡは、シミュレーション実行期間Ａ１を終了させ、論理プロセスＢに、期間Ｂ２まで実行を許可するメッセージを送信する。一方、論理プロセスＢは、シミュレーション実行期間Ｂ１を終了させ、論理プロセスＡに、期間Ａ２まで実行を許可するメッセージを送信すると共に、メッセージに応じて期間Ｂ２のシミュレーションを実行する。
【００３４】
論理プロセスＡは、実行許可のメッセージを受け取ったことに応じて、期間Ａ２のシミュレーションを実行する。シミュレーション開始から１．５×Ｌ'ＡＢに相当する時間が経過すると、論理プロセスＡは、シミュレーション実行期間Ａ２を終了させ、論理プロセスＢに、期間Ｂ３まで実行を許可するメッセージを送信する。一方、論理プロセスＢは、シミュレーション実行期間Ｂ２を終了させ、論理プロセスＡに、期間Ａ３まで実行を許可するメッセージを送信すると共に、メッセージに応じて期間Ｂ３のシミュレーションを実行する。
【００３５】
論理プロセスＡおよびＢは、このような動作を繰り返して、同期を取りつつシミュレーションを並列実行することができるので、全体のシミュレーション実行時間を短縮することができる。
【００３６】
また、Ｌ'ＡＢおよびＬ'ＢＡが共に０ではない場合（Ｌ'ＡＢ≠０、Ｌ'ＢＡ≠０）においても、予め定められた時間を初期シフト期間として、予め定められた論理プロセスを先行して実行させることで、各論理プロセスを並列実行させる期間を増加させることができる。図３は、本実施形態に係る論理プロセスおよび初期シフト期間がある場合の論理プロセスの第２の動作例を示す。図３は、図１および図２と同様に、論理プロセスＡおよびＢでシミュレーションを実行する構成であり、Ｌ'ＡＢおよびＬ'ＢＡが共に０ではない場合（Ｌ'ＡＢ≠０、Ｌ'ＢＡ≠０）を説明する。
【００３７】
また、本実施形態においても、論理プロセスＡの初期時間シフトをＳＡ、論理プロセスＢの初期時間シフトをＳＢとし、初期シフト期間を、ＳＡ−ＳＢ＝（Ｌ'ＢＡ−Ｌ'ＡＢ）／２とした例を説明する。ここで、ＳＡ−ＳＢ＝（Ｌ'ＢＡ−Ｌ'ＡＢ）／２＞０とし（即ち、Ｌ'ＢＡ＞Ｌ'ＡＢ）、論理プロセスＡは、予め定められた初期シフト期間（（Ｌ'ＢＡ−Ｌ'ＡＢ）／２）において、論理プロセスＢに先行してシミュレーションを実行する例を説明する。
【００３８】
即ち、論理プロセスＢが開始時点で論理プロセスＡへとタイムラグＬ'ＢＡに相当する期間（Ａ１）までの実行を許可するメッセージ（ｎ１）を送信する。また、論理プロセスＡは、（Ｌ'ＢＡ−Ｌ'ＡＢ）／２が経過するまでの期間Ａ０のシミュレーションを開始する。ここで、論理プロセスＢは、論理プロセスＡからのメッセージを待つ待機状態となる。
【００３９】
そして（Ｌ'ＢＡ−Ｌ'ＡＢ）／２に相当する時間が経過すると、論理プロセスＡは、論理プロセスＢのタイムラグＬ'ＡＢに相当する期間（Ｂ１）までの実行を許可するメッセージ（ｍ１）を送信する。また、この時点において、許可された期間Ａ１に相当する時間は経過していないので、論理プロセスＡは、シミュレーションの実行を継続する（期間Ａ１に移行する）。
【００４０】
論理プロセスＢは、実行許可のメッセージ（ｍ１）を受け取ったことに応じて、Ｌ'ＡＢ＋（Ｌ'ＢＡ−Ｌ'ＡＢ）／２（＝（Ｌ'ＡＢ＋Ｌ'ＢＡ）／２）の時間が経過するまでの期間（Ｂ１）までシミュレーションを実行する。論理プロセスＢは、期間Ｂ１までのシミュレーションを実行すると、論理プロセスＡに、期間Ａ２までの実行を許可するメッセージ（ｎ２）を送信する。
【００４１】
一方、開始時点からＬ'ＢＡに相当する時間が経過すると（即ち、期間Ａ１の開始からＬ'ＢＡ−（Ｌ'ＢＡ−Ｌ'ＡＢ）／２＝（Ｌ'ＡＢ＋Ｌ'ＢＡ）／２）の時間が経過すると、論理プロセスＡは、シミュレーション実行期間Ａ１を終了させる。そして、論理プロセスＡは、論理プロセスＢに、期間Ｂ２までの実行を許可するメッセージ（ｍ２）を送信する。なお、期間Ａ１の開始時刻と、期間Ｂ１の開始時刻は、シミュレーション開始から期間Ａ０だけ経過した時点の略同一時刻であり、期間Ａ１および期間Ｂ１に相当する時間はＬ'ＡＢ＋Ｌ'ＢＡ）／２と略同一である。
【００４２】
したがって、論理プロセスＡおよびＢは、次の期間（Ａ２およびＢ２）までの実行を許可するメッセージを略同時に受け取り、略同時に次の期間の処理を実行する。論理プロセスＡおよびＢは、このような動作を繰り返して、同期を取りつつシミュレーションを並列実行することができる。このように、予め定められた論理プロセスを先行して実行させることで、各論理プロセスを並列実行させる期間を増加させることができ、全体のシミュレーション実行時間を短縮することができる。
【００４３】
以上の説明において、シミュレーションを２つの論理プロセスで実行することを説明したが、同様に、３以上の論理プロセスで実行することもできる。ここで、一の論理プロセスは、他の複数の論理プロセスからそれぞれ実行を許可するメッセージを受け取ることになる。この場合、一の論理プロセスは、複数のメッセージにより許可された複数の期間のうち、最も短い時間で終了する期間までの処理が許可されたものとして、当該最短期間の処理を実行する。
【００４４】
以上のように、各論理プロセスの初期時間シフトをそれぞれ設定する場合、図１〜３のように、各プロセスが１対１にメッセージを送信する構造またはツリー状の構造といった、単純な通信リンクの構造であれば、それぞれの初期時間シフトを解析的に算出することができる。即ち、ＳＡ−ＳＢ＝（Ｌ'ＢＡ−Ｌ'ＡＢ）／２、ＳＢ−ＳＣ＝（Ｌ'ＣＢ−Ｌ'ＢＣ）／２、・・・、ＳＲ−ＳＺ＝（Ｌ'ＺＲ−Ｌ'ＲＺ）／２、ＳＡ＝Ｃの連立方程式を解くことで初期時間シフトを算出できる。ここで、ＳＡ＝Ｃは、ＳＡを初期時間シフトの計算の一時的な基準としたことを意味し、当該基準は、後の処理により正しい基準に修正することができる。
【００４５】
しかしながら、論理プロセス同士の接続が複雑な場合、連立方程式の数と解くべき初期時間シフトの数とが一致しない場合が生じる。例えば、初期時間シフトの数に比べて連立方程式の数が多い場合、論理プロセスの優先度が低い接続に対応する式を除去する等の処理を実行すれば、連立方程式の数と初期時間シフトの数とを一致させて解析的に方程式を解くことはできる。しかしこの場合、ユーザの経験等による判断が必要となり、一貫したアルゴリズムによって初期時間シフトを定めることができない。
【００４６】
また、例えば、初期時間シフトの数に比べて連立方程式の数が少ない場合（一例として、複数の論理プロセス間の一部に、一方向の接続があるが逆方向の接続がない場合）、連立方程式を解くことができないので、初期時間シフトを定めることはできなくなってしまう。即ち、初期時間シフトの数および連立方程式の数が一致しなければ、ユーザの経験等による判断、処理、および追加の情報等なしに、初期時間シフトを決定することは困難であった。
【００４７】
そこで、本実施形態のシミュレーション装置１００は、各論理プロセスの初期時間シフトを制約付き最適化問題として定式化することにより、ユーザの経験等による判断、処理、および追加の情報等なしに、当該初期時間シフトを自動で決定する。図４は、本実施形態に係るシミュレーション装置１００の構成例を示す。
【００４８】
シミュレーション装置１００は、シミュレーション対象のシステムに含まれる複数のコンポーネントをモデル化した複数の論理プロセスのパラメータを決定し、当該複数の論理プロセスを並行実行する。シミュレーション装置１００は、取得部１１０と、記憶部１２０と、条件生成部１３０と、ソルバー部１４０と、シミュレーション部１５０と、表示部１６０とを備える。
【００４９】
取得部１１０は、論理プロセスの情報を取得する。取得部１１０は、各論理プロセスにおいて、シミュレーションする内容（処理内容）、メッセージを通信する相手、メッセージ内容、メッセージを通知する場合に各論理プロセス間で生じる通信遅延（タイムラグ）等の情報を取得する。取得部１１０は、ユーザの入力によって論理プロセスの情報を取得してよく、これに代えて、予め定められた形式で記憶されたデータを読み出して取得してもよい。
【００５０】
取得部１１０は、ネットワーク等に接続され、シミュレーション装置１００の本体とは異なる位置で論理プロセスの情報を取得し、当該ネットワークを介して本体部に取得した情報を供給してもよい。この場合、取得部１１０は、別の装置によって実現され、シミュレーション装置１００の本体の前処理として論理プロセスの情報を取得してもよい。取得部１１０は、一例として、取得した論理プロセスの情報を記憶部１２０に供給する。
【００５１】
記憶部１２０は、取得部１１０に接続され、当該取得部１１０から受け取った論理プロセスの情報を記憶する。記憶部１２０は、例えば、条件生成部１３０の要求に応じて当該条件生成部１３０に、記憶した論理プロセスの情報を供給する。また、記憶部１２０は、シミュレーションを実行するライブラリデータおよびプログラム等を記憶してよい。また、記憶部１２０は、シミュレーション装置１００がシミュレーションを実行する過程において生成するデータおよびプログラム等を記憶してよい。
【００５２】
条件生成部１３０は、複数の論理プロセス間の通信遅延に基づいて、通信元の各論理プロセスから通信先の各論理プロセスに対して先行実行を許可するメッセージにより許可すべき先行実行時間と、複数の論理プロセスに与える初期時間シフトとが満たすべき制約条件を生成する。条件生成部１３０は、記憶部１２０に接続され、各論理プロセス間で生じる通信遅延（Ｌ'ＸＹ等）の情報を受け取り、当該情報に基づく制約条件を生成する。
【００５３】
本実施形態の当該制約条件は、各論理プロセスが送信するｎｕｌｌメッセージにより許可すべき先行実行時間と、各論理プロセスの初期時間シフト（Ｓｎ等）とのパラメータが満たすべき条件を示す。ここで、先行実行時間は、例えば、ＬＸＹ等と表わされ、最小値が０、最大値が通信遅延Ｌ'ＸＹとなるパラメータである。そして、先行実行時間ＬＸＹは、対応する論理プロセス間（一例として、論理プロセスＸに対する論理プロセスＹ）における、未処理のシミュレーションの一部を先に実行させる時間を示し、タイムラグ、ルックアヘッド、および／または先読み処理等の時間であってよい。
【００５４】
ソルバー部１４０は、制約条件を満たし、かつ複数の論理プロセス間におけるメッセージの通信オーバーヘッドを最小化する最適化問題を解いて複数の論理プロセスの初期時間シフトおよび複数の論理プロセス間における先行実行時間を得る。ソルバー部１４０は、条件生成部１３０に接続され、当該条件生成部１３０が生成した制約条件を受け取る。これに代えて、条件生成部１３０は、生成した制約条件を記憶部１２０に記憶し、ソルバー部１４０は、当該記憶部１２０に接続され、当該記憶部１２０から制約条件を読み出してもよい。
【００５５】
ソルバー部１４０は、より多くの論理プロセスを並行実行させ、かつ、並行実行する処理時間を増加させるようにして、メッセージの通信オーバーヘッドを最小化する。これにより、ソルバー部１４０は、複数の論理プロセスによるシミュレーションをコンカレントに進めさせる（すなわち、並列実行させる）初期時間シフトおよび先行実行時間を得る。ソルバー部１４０は、初期時間シフトおよび先行実行時間を記憶部１２０に記憶してよく、これに代えて、シミュレーション部１５０に直接供給してよい。
【００５６】
シミュレーション部１５０は、複数の論理プロセスのそれぞれを初期時間シフト分進めた時刻から開始させ、各論理プロセスから先行実行時間分の先行実行を許可するメッセージを送信させながら複数の論理プロセスを並行実行させる。シミュレーション部１５０は、記憶部１２０に接続され、各論理プロセスの情報、初期時間シフト、先行実行時間、シミュレーション実行に用いるプログラム、およびライブラリ等を読み出し、複数の論理プロセスを並行実行させてシミュレーションを実行する。
【００５７】
表示部１６０は、シミュレーション結果を表示する。表示部１６０は、シミュレーション部１５０に接続され、例えば、シミュレーションによる実行時間、並行実行時間、並行実行時間によって短縮された時間、並行実行による効率、および／または各論理プロセスの情報等を表示する。また、表示部１６０は、取得部１１０に接続され、取得部１１０による各論理プロセスの情報の取得状況等を表示してもよい。また、表示部１６０は、シミュレーション装置１００がシミュレーションを実行する過程において、進行状況および進行の確認等を表示してよい。
【００５８】
また、表示部１６０は、記憶部１２０に接続され、ユーザ等の要求に応じて、各論理プロセスの情報、初期時間シフト、先行実行時間、シミュレーション実行に用いるプログラム、およびライブラリ等を表示してよい。以上の本実施形態のシミュレーション装置１００は、複数の論理プロセスの並列性を高め、同時処理にかかるオーバーヘッドを最小に抑えつつ、後戻りなしで実行させる各論理プロセスの初期時間シフトおよび先行実行時間を自動で算出し、当該複数の論理プロセスによるシミュレーションを実行する。シミュレーション装置１００の具体的な動作を次に説明する。
【００５９】
図５は、本実施形態に係るシミュレーション装置１００の動作フローの一例を示す。まず、取得部１１０は、複数の論理プロセスの情報を取得する（Ｓ２００）。取得部１１０は、論理プロセス間で送受信するメッセージの送受信先およびそれぞれの送受信に対応する通信遅延（Ｌ'ＡＢ、Ｌ'ＢＡ等）を含む情報を取得して、記憶部１２０に記憶する。
【００６０】
取得部１１０は、一例として、キーボード、マウス、ペンタブレット、およびタッチパッド等の入力デバイスに接続され、表示部１６０と連動したＧＵＩによって、論理プロセスの情報を取得する。即ち、この場合、ユーザは、表示部１６０の画面上にＧＵＩを用いて複数の機能ブロックを配置し、当該複数の機能ブロックの情報および処理の流れ等を入力する。
【００６１】
次に、条件生成部１３０は、複数の論理プロセスの情報に基づく制約条件を生成する（Ｓ２１０）。条件生成部１３０は、通信元の各論理プロセスから通信先の各論理プロセスに対するメッセージにより許可すべき先行実行時間（例えば、ＬＡＢ、ＬＢＡ等）を、通信元の各論理プロセスから通信先の各論理プロセスへの通信遅延（例えば、Ｌ'ＡＢ、Ｌ'ＢＡ等）以下とする制約条件を生成する。より具体的には、条件生成部１３０は、次式で示される制約条件を生成する。
（数１）
０≦ＬＡＢ≦Ｌ'ＡＢ
０≦ＬＢＡ≦Ｌ'ＢＡ
【００６２】
なお、（数１）式は、２つの論理プロセスＡおよびＢに対して条件生成部１３０が生成した制約条件の例を示す。このように、条件生成部１３０は、制約条件として、各論理プロセスに許可する先行実行時間（ＬＡＢ、ＬＢＡ等）を、各論理プロセスの通信遅延（Ｌ'ＡＢ、Ｌ'ＢＡ等）以下とするので、当該制約条件を満たす解（即ち、ＬＡＢ、ＬＢＡ等）は、各論理プロセスの通信遅延を超えることなく、安定に各プロセス間のメッセージを授受することができる。
【００６３】
また、条件生成部１３０は、先行実行時間（ＬＡＢ、ＬＢＡ等）および各論理プロセスの初期時間シフト（例えば、ＳＡ、ＳＢ等）の制約条件を生成する。条件生成部１３０は、一例として、次式で示される制約条件を生成する。
（数２）
ＳＡ−ＳＢ＝（ＬＢＡ−ＬＡＢ）／２
ＳＡ≧０，ＳＢ≧０
【００６４】
（数２）式は、（数１）式と同様に、２つの論理プロセスＡおよびＢに対して条件生成部１３０が生成した制約条件の例を示す。条件生成部１３０は、複数の論理プロセス間において互いに通信する論理プロセス間において、第１論理プロセスおよび第２論理プロセスの初期時間シフトの差（（数２）式の例では、ＳＡ−ＳＢ）が、第２論理プロセスから第１論理プロセスに対する先行実行時間ＬＢＡおよび第１論理プロセスから第２論理プロセスに対する先行実行時間ＬＡＢの少なくともいずれか一方に比例する式（例えば、ＳＡ−ＳＢ＝αＬＢＡ、ＳＡ−ＳＢ＝αＬＡＢ等）となる制約条件を、生成してもよい。この場合、条件生成部１３０は、例えば、比例係数αを０より大きく、１より小さい値にする。
【００６５】
これに代えて、条件生成部１３０は、第１論理プロセスおよび第２論理プロセスの初期時間シフトの差（（数２）式の例では、ＳＡ−ＳＢ）を、第２論理プロセスから第１論理プロセスに対する先行実行時間および第１論理プロセスから第２論理プロセスに対する先行実行時間の差（（数２）式の例では、ＬＢＡ−ＬＡＢ）より０に近付けた値とする制約条件を生成する。即ち、条件生成部１３０は、当該初期時間シフトの差（ＳＡ−ＳＢ）を、当該先行実行時間の差（ＬＢＡ−ＬＡＢ）に係数αを乗じた値とする式（ＳＡ−ＳＢ＝α（ＬＢＡ−ＬＡＢ））として制約条件を生成する。ここで、αは、０より大きく、１より小さい係数である（０＜α＜１）。
【００６６】
この場合、条件生成部１３０は、例えば、第１論理プロセスおよび第２論理プロセスの初期時間シフトの差を、第２論理プロセスから第１論理プロセスに対する先行実行時間および第１論理プロセスから第２論理プロセスに対する先行実行時間の差の１／４倍から３／４倍までの範囲内とする。また、条件生成部１３０は、論理プロセス同士が送信待ちの状態に陥ってしまうデッドロックが生じる場合には、例えば、当該初期時間シフトの差を、当該先行実行時間の差の１／２倍に近づける等により、当該デッドロックを解消するようにしてもよい。一例として、条件生成部１３０は、第１論理プロセスおよび第２論理プロセスの初期時間シフトの差を、第２論理プロセスから第１論理プロセスに対する先行実行時間および第１論理プロセスから第２論理プロセスに対する先行実行時間の差の１／２倍とする制約条件を生成する。（数２）式は、条件生成部１３０が、初期時間シフトの差ＳＡ−ＳＢを、先行実行時間の差ＬＢＡ−ＬＡＢの１／２に比例する制約条件を生成した例を示す。
【００６７】
次に、ソルバー部１４０は、条件生成部１３０が生成した条件を満たし、複数の論理プロセスの並列性を高め、同時処理にかかるオーバーヘッドを最小に抑える最適化問題を解く（Ｓ２２０）。例えば、ソルバー部１４０は、制約条件を満たし、かつ複数の論理プロセスにおける先行実行時間の合計を最大化する最大化問題を解く。ソルバー部１４０は、一例として、（数１）および（数２）式の制約条件を満たしつつ、次式を最小化する最小化問題を解く。
（数３）
１／（ＬＢＡ＋ＬＡＢ）
【００６８】
（数３）式は、２つの論理プロセスＡおよびＢに対応する式の例を示したが、２以上の論理プロセスに対応する式として、最小化問題を次式のように表現してもよい。
【数４】
0005920842.tif 000002
【００６９】
以上のように、ソルバー部１４０は、制約条件（数１）および（数２）式と、最小化すべき（数３）式が明確になるので、当該最小化問題を既知の算出方法で解くことができる。ソルバー部１４０は、例えば、連続非線形最適化問題の解法として既知である最急降下法等の勾配法によって（数３）式を最小化することができる。即ち、ソルバー部１４０は、（数３）式を最小化する解として、複数の論理プロセスの初期時間シフトおよび複数の論理プロセス間における先行実行時間を得る。
【００７０】
ここで、論理プロセス同士のメッセージの授受に応じて生成される連立方程式の数と、解くべき初期時間シフトの数とが一致する場合、即ち、図２および図３で説明したように、解析的に先行実行時間および初期時間シフト（Ｌ'ＡＢ、Ｌ'ＢＡ、・・・）を算出できる場合がある。このような場合、ソルバー部１４０は、解析解となる先行実行時間および取得した通信遅延に等しい初期時間シフト（Ｌ'ＡＢ、Ｌ'ＢＡ、・・・）と略同一の先行実行時間および初期時間シフトを解として得る。即ち、ソルバー部１４０は、図２および図３で説明したように、各論理プロセスを並列実行させて全体のシミュレーション実行時間を短縮させる先行実行時間および初期時間シフトを得ることができる。
【００７１】
また、論理プロセス同士のメッセージの授受に応じて生成される連立方程式の数が、解くべき初期時間シフトの数と異なる場合、即ち、何らかの追加の情報および処理等がなければ初期時間シフトを算出できない場合がある。このような場合であっても、条件生成部１３０が連立方程式に対応する制約条件を生成し、ソルバー部１４０が最小化問題を解くことで、連立方程式の数を増減させることなしに、制約条件を満たす適切な先行実行時間および初期時間シフトを得ることができる。
【００７２】
図６は、本実施形態に係る３つの論理プロセスを備える第１の構成例を示す。図１から図３で説明したように、図中のＬ'ＸＹは、論理プロセスＸからＹへのメッセージ通知のタイムラグを示す。図６の構成に対して、条件生成部１３０は、一例として、次式の制約条件を生成する。
（数５）
ＳＡ−ＳＢ＝（ＬＢＡ−ＬＡＢ）／２
ＳＢ−ＳＣ＝（ＬＣＢ−ＬＢＣ）／２
ＳＣ−ＳＡ＝（ＬＡＣ−ＬＣＡ）／２
ＳＡ≧０，ＳＢ≧０，ＳＣ≧０
０≦ＬＸＹ≦Ｌ'ＸＹ
【００７３】
そして、ソルバー部１４０は、（数５）式の制約条件を満足しつつ、（数４）式の最小化問題を解いて、先行実行時間ＬＸＹおよび初期時間シフト（ＳＡ、ＳＢ、ＳＣ）を得る。ここで、ソルバー部１４０は、（数５）式の第１番目から第３番目の式の和より、制約条件を次式のように縮退してよい。
（数６）
ＬＡＢ＋ＬＢＣ＋ＬＣＡ＝ＬＢＡ＋ＬＡＣ＋ＬＣＢ
０≦ＬＸＹ≦Ｌ'ＸＹ
【００７４】
（数６）式の左辺は、メッセージが時計回りに送信される通信リンク（接続）の先行実行時間を示し、右辺はメッセージが反時計回りに送信される通信リンクの先行実行時間を示す。このような場合、ソルバー部１４０は、ＬＸＹの総和を最大にするように最適化するので、典型的には、左辺および右辺のいずれか一方が上限値（Ｌ'ＡＢ＋Ｌ'ＢＣ＋Ｌ'ＣＡまたはＬ'ＢＡ＋Ｌ'ＡＣ＋Ｌ'ＣＢ）となる。
【００７５】
また、一例として、時計回りおよび反時計回りの通信リンクのうち、少なくともいずれか一方のタイムラグの総和が零となる場合がある。この場合、３つの論理プロセスの少なくとも一方のループが、タイムラグなし（即ち、Ｌ'ＡＢ＝Ｌ'ＢＣ＝Ｌ'ＣＡ＝０および／またはＬ'ＢＡ＋Ｌ'ＡＣ＋Ｌ'ＣＢ＝０）となり、論理プロセスＡ、Ｂ、およびＣは、並列実行できない強連成の構成となるので、ソルバー部１４０は、解を得ることができない。
【００７６】
図７は、本実施形態に係る４つの論理プロセスを備える構成例を示す。図６と同様に、図中のＬ'ＸＹは、論理プロセスＸからＹへのメッセージ通知のタイムラグを示す。図７の構成に対して、条件生成部１３０は、一例として、次式の制約条件を生成する。
（数７）
ＳＡ−ＳＢ＝（ＬＢＡ−ＬＡＢ）／２
ＳＢ−ＳＣ＝（ＬＣＢ−ＬＢＣ）／２
ＳＣ−ＳＡ＝（ＬＡＣ−ＬＣＡ）／２
ＳＢ−ＳＤ＝（ＬＤＢ−ＬＢＤ）／２
ＳＤ−ＳＣ＝（ＬＣＤ−ＬＤＣ）／２
ＳＡ≧０，ＳＢ≧０，ＳＣ≧０，ＳＤ≧０
０≦ＬＸＹ≦Ｌ'ＸＹ
【００７７】
そして、ソルバー部１４０は、（数７）式の制約条件を満足しつつ、（数４）式の最小化問題を解いて、先行実行時間ＬＸＹおよび初期時間シフト（ＳＡ、ＳＢ、ＳＣ、ＳＤ）を得る。ここで、ソルバー部１４０は、（数７）式の第１番目から第３番目の式、並びに、第２、４、および５番目の式より、制約条件を次式のように縮退してよい。
（数８）
ＬＡＢ＋ＬＢＣ＋ＬＣＡ＝ＬＢＡ＋ＬＡＣ＋ＬＣＢ
ＬＣＢ＋ＬＢＤ＋ＬＤＣ＝ＬＢＣ＋ＬＣＤ＋ＬＤＢ
０≦ＬＸＹ≦Ｌ'ＸＹ
【００７８】
以上のように、本実施形態の条件生成部１３０およびソルバー部１４０は、取得部１１０が取得した複数の論理プロセスの情報に基づき、制約条件を生成して最小化問題を解き、制約条件を満たす適切な先行実行時間および初期時間シフトを得ることができる。また、条件生成部１３０およびソルバー部１４０は、論理プロセス間の一部の通信リンクが存在しない構成においても、制約条件を生成して最小化問題を解くことができる。
【００７９】
図８は、本実施形態に係る３つの論理プロセスを備える第２の構成例を示す。当該第２の構成例において、図６に示された本実施形態に係る３つの論理プロセスを備える第１の構成例の動作と略同一のものには同一の符号を付け、説明を省略する。この場合、条件生成部１３０は、一の論理プロセスから他の論理プロセスに対して直接通信しない場合に、一の論理プロセスから他の論理プロセスに対する先行実行時間の上限に制約を与えない。即ち、条件生成部１３０は、直接通信しない通信リンクの通信遅延を無限大に設定する。
【００８０】
条件生成部１３０は、一例として、図８の構成に対して次式の制約条件を生成する。
（数９）
ＳＡ−ＳＢ＝（ＬＢＡ−ＬＡＢ）／２
ＳＢ−ＳＣ＝（ＬＣＢ−ＬＢＣ）／２
ＳＣ−ＳＡ＝（ＬＡＣ−ＬＣＡ）／２
ＳＡ≧０，ＳＢ≧０，ＳＣ≧０
０≦ＬＸＹ≦Ｌ'ＸＹ、ただし、Ｌ'ＢＣ＝∞
【００８１】
そして、ソルバー部１４０は、（数９）式の制約条件を満足しつつ、（数４）式の最小化問題を解いて、先行実行時間ＬＸＹおよび初期時間シフト（ＳＡ、ＳＢ、ＳＣ）を得る。ソルバー部１４０は、一例として、Ｌ'ＡＢ＝１００、Ｌ'ＢＡ＝８０、Ｌ'ＣＢ＝９０、Ｌ'ＣＡ＝４０、およびＬ'ＡＣ＝０といった通信遅延に対して、ＬＢＣ＝３０といった解を得ることができる。
【００８２】
次に、シミュレーション部１５０は、得られた先行実行時間および初期時間シフトに基づき、シミュレーションを実行する（Ｓ２３０）。シミュレーション部１５０は、最小の初期時間シフトとの差が０ではない初期時間シフトを有する論理プロセスを、当該差を初期シフト期間としてシミュレーションの実行開始時点から先行して実行させる。
【００８３】
シミュレーション部１５０は、例えば、論理プロセスＡ、Ｂ、およびＣの各初期時間シフトがそれぞれＳＡ＝０、ＳＢ＝５０、ＳＣ＝７５の場合、最小の初期時間シフト（ＳＡ＝０）との差（ＳＢ−ＳＡ＝５０、ＳＣ−ＳＡ＝７５）が０ではない初期時間シフトを有する論理プロセスＢおよびＣを、先行実行させる。この場合、初期シフト期間は論理プロセスＡの初期時間シフトＳＡとの差なので、論理プロセスＢは５０、論理プロセスＣは７５となる。ここで、各数値は一例であって、任意に規格化されたものであってよい。
【００８４】
また、シミュレーション部１５０は、実行開始時点から先行して実行させない論理プロセスからは、シミュレーションの実行開始時点において対応する論理プロセスに先行実行を許可するメッセージを送信させる。即ち、シミュレーション部１５０は、例えば、シミュレーションの実行開始時点において、論理プロセスＡから論理プロセスＢおよびＣにメッセージを送信させる。
【００８５】
そして、シミュレーション部１５０は、初期シフト期間が経過した論理プロセスから対応する論理プロセスに先行実行を許可するメッセージを送信させる。即ち、シミュレーション部１５０は、例えば、時間が５０経過した時点で、論理プロセスＢから論理プロセスＡおよびＣにメッセージを送信させる。また、シミュレーション部１５０は、時間が７５経過した時点で、論理プロセスＣから論理プロセスＡおよびＢにメッセージを送信させる。
【００８６】
シミュレーション部１５０は、各論理プロセスに対して送信されたメッセージにより許可された先行実行時間のうち最小の先行実行時間分先行する時刻まで各論理プロセスの実行を進め、当該論理プロセスから他の論理プロセスに対してメッセージをそれぞれ送信させる。即ち、シミュレーション部１５０は、例えば、論理プロセスＡが論理プロセスＢおよびＣから受け取った先行時間のうち、先に経過する先行時間の経過まで論理プロセスＡの処理を実行させる。そして、シミュレーション部１５０は、論理プロセスＡの処理を停止させ、当該論理プロセスＡから論理プロセスＢおよびＣに次のメッセージを送信させた後、論理プロセスＢおよびＣからメッセージを受け取るまで待機時間とさせる。
【００８７】
同様に、シミュレーション部１５０は、論理プロセスＢが論理プロセスＣおよびＡから受け取った先行時間のうち、先に経過する先行時間の経過まで論理プロセスＢの処理を実行させる。そして、シミュレーション部１５０は、論理プロセスＢの処理を停止させ、当該論理プロセスＢから論理プロセスＣおよびＡに次のメッセージを送信させた後、論理プロセスＣおよびＡからメッセージを受け取るまで待機時間とさせる。
【００８８】
シミュレーション部１５０は、論理プロセスＣについても論理プロセスＡおよびＢと同様に、処理の実行、およびメッセージの送信等を実行させる。シミュレーション部１５０は、シミュレーションが終了するまで以上の動作を繰り返すことで、複数の論理プロセスを並行実行させることができる。
【００８９】
そして、表示部１６０は、シミュレーション部１５０が実行したシミュレーション結果を表示する（Ｓ２４０）。また、シミュレーション部１５０は、シミュレーション結果および／またはシミュレーションプログラム等を記憶部１２０に記憶してもよい。
【００９０】
以上のように、本実施形態のシミュレーション装置１００は、各論理プロセスの通信遅延に基づき、シミュレーションを実行させることができる。ここで、シミュレーション装置１００は、通信遅延を上限とした制約条件を生成し、調整すべき各論理プロセスのタイムラグを、先行実行時間を最大とするように最適化する最適化問題として定式化するので、先行実行時間および初期時間シフトを自動で得ることができる。また、複数の論理プロセス間の一部に、一方向の接続があるが逆方向の接続がない場合が生じても、当該最適化問題を解くことができ、シミュレーション・プログラムを生成してシミュレーションを実行させることができる。
【００９１】
また、シミュレーション装置１００は、複数の論理プロセスの一部を、シミュレーションの実行開始時点から初期シフト期間が経過するまで先行して実行させて、各論理プロセスを効率的に並列実行させることができる。この場合においても、シミュレーション装置１００は、先行して実行させる論理プロセスおよび当該論理プロセスの初期シフト期間を、自動で決定することができる。
【００９２】
そして、各論理プロセスは、先行実行を許可するメッセージを受け取ったことに応じて、先行実行を開始するので、シミュレーション実行中および待機時間においてはメッセージを受信しても送信することはない。即ち、シミュレーション装置１００は、各論理プロセス間のメッセージ送信の頻度を最小にさせつつ、各論理プロセスを効率的に並列実行させることができる。
【００９３】
図９は、本実施形態に係るシミュレーション装置１００として機能するコンピュータ１９００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ１９００は、ホスト・コントローラ２０８２により相互に接続されるＣＰＵ２０００、ＲＡＭ２０２０、グラフィック・コントローラ２０７５、および表示装置２０８０を有するＣＰＵ周辺部と、入出力コントローラ２０８４によりホスト・コントローラ２０８２に接続される通信インターフェイス２０３０、ハードディスクドライブ２０４０、およびＤＶＤドライブ２０６０を有する入出力部と、入出力コントローラ２０８４に接続されるＲＯＭ２０１０、フレキシブルディスク・ドライブ２０５０、および入出力チップ２０７０を有するレガシー入出力部と、を備える。
【００９４】
ホスト・コントローラ２０８２は、ＲＡＭ２０２０と、高い転送レートでＲＡＭ２０２０をアクセスするＣＰＵ２０００およびグラフィック・コントローラ２０７５とを接続する。ＣＰＵ２０００は、ＲＯＭ２０１０およびＲＡＭ２０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ２０７５は、ＣＰＵ２０００等がＲＡＭ２０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置２０８０上に表示させる。これに代えて、グラフィック・コントローラ２０７５は、ＣＰＵ２０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【００９５】
入出力コントローラ２０８４は、ホスト・コントローラ２０８２と、比較的高速な入出力装置である通信インターフェイス２０３０、ハードディスクドライブ２０４０、ＤＶＤドライブ２０６０を接続する。通信インターフェイス２０３０は、ネットワークを介して他の装置と通信する。ハードディスクドライブ２０４０は、コンピュータ１９００内のＣＰＵ２０００が使用するプログラムおよびデータを格納する。ＤＶＤドライブ２０６０は、ＤＶＤ−ＲＯＭ２０９５からプログラムまたはデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。
【００９６】
また、入出力コントローラ２０８４には、ＲＯＭ２０１０と、フレキシブルディスク・ドライブ２０５０、および入出力チップ２０７０の比較的低速な入出力装置とが接続される。ＲＯＭ２０１０は、コンピュータ１９００が起動時に実行するブート・プログラム、および／または、コンピュータ１９００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ２０５０は、フレキシブルディスク２０９０からプログラムまたはデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。入出力チップ２０７０は、フレキシブルディスク・ドライブ２０５０を入出力コントローラ２０８４へと接続すると共に、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ２０８４へと接続する。
【００９７】
ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供されるプログラムは、フレキシブルディスク２０９０、ＤＶＤ−ＲＯＭ２０９５、またはＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ２０２０を介してコンピュータ１９００内のハードディスクドライブ２０４０にインストールされ、ＣＰＵ２０００において実行される。
【００９８】
プログラムは、コンピュータ１９００にインストールされ、コンピュータ１９００を取得部１１０、記憶部１２０、条件生成部１３０、ソルバー部１４０、シミュレーション部１５０、および表示部１６０として機能させる。
【００９９】
プログラムに記述された情報処理は、コンピュータ１９００に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段である取得部１１０、記憶部１２０、条件生成部１３０、ソルバー部１４０、シミュレーション部１５０、および表示部１６０として機能する。そして、この具体的手段によって、本実施形態におけるコンピュータ１９００の使用目的に応じた情報の演算または加工を実現することにより、使用目的に応じた特有のシミュレーション装置１００が構築される。
【０１００】
一例として、コンピュータ１９００と外部の装置等との間で通信を行う場合には、ＣＰＵ２０００は、ＲＡＭ２０２０上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス２０３０に対して通信処理を指示する。通信インターフェイス２０３０は、ＣＰＵ２０００の制御を受けて、ＲＡＭ２０２０、ハードディスクドライブ２０４０、フレキシブルディスク２０９０、またはＤＶＤ−ＲＯＭ２０９５等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス２０３０は、ＤＭＡ（ダイレクト・メモリ・アクセス）方式により記憶装置との間で送受信データを転送してもよく、これに代えて、ＣＰＵ２０００が転送元の記憶装置または通信インターフェイス２０３０からデータを読み出し、転送先の通信インターフェイス２０３０または記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
【０１０１】
また、ＣＰＵ２０００は、ハードディスクドライブ２０４０、ＤＶＤドライブ２０６０（ＤＶＤ−ＲＯＭ２０９５）、フレキシブルディスク・ドライブ２０５０（フレキシブルディスク２０９０）等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をＤＭＡ転送等によりＲＡＭ２０２０へと読み込ませ、ＲＡＭ２０２０上のデータに対して各種の処理を行う。そして、ＣＰＵ２０００は、処理を終えたデータを、ＤＭＡ転送等により外部記憶装置へと書き戻す。このような処理において、ＲＡＭ２０２０は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはＲＡＭ２０２０および外部記憶装置等をメモリ、記憶部、または記憶装置等と総称する。本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、ＣＰＵ２０００は、ＲＡＭ２０２０の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはＲＡＭ２０２０の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもＲＡＭ２０２０、メモリ、および／または記憶装置に含まれるものとする。
【０１０２】
また、ＣＰＵ２０００は、ＲＡＭ２０２０から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、ＲＡＭ２０２０へと書き戻す。例えば、ＣＰＵ２０００は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすかどうかを判断し、条件が成立した場合（または不成立であった場合）に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
【０１０３】
また、ＣＰＵ２０００は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第１属性の属性値に対し第２属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、ＣＰＵ２０００は、記憶装置に格納されている複数のエントリの中から第１属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第２属性の属性値を読み出すことにより、所定の条件を満たす第１属性に対応付けられた第２属性の属性値を得ることができる。
【０１０４】
以上に示したプログラムまたはモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク２０９０、ＤＶＤ−ＲＯＭ２０９５の他に、ＤＶＤ、Ｂｌｕ−ｒａｙ（登録商標）、またはＣＤ等の光学記録媒体、ＭＯ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークまたはインターネットに接続されたサーバシステムに設けたハードディスクまたはＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１９００に提供してもよい。
【０１０５】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【０１０６】
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【符号の説明】
【０１０７】
１００  シミュレーション装置、１１０  取得部、１２０  記憶部、１３０  条件生成部、１４０  ソルバー部、１５０  シミュレーション部、１６０  表示部、１９００  コンピュータ、２０００  ＣＰＵ、２０１０  ＲＯＭ、２０２０  ＲＡＭ、２０３０  通信インターフェイス、２０４０  ハードディスクドライブ、２０５０  フレキシブルディスク・ドライブ、２０６０  ＤＶＤドライブ、２０７０  入出力チップ、２０７５  グラフィック・コントローラ、２０８０  表示装置、２０８２  ホスト・コントローラ、２０８４  入出力コントローラ、２０９０  フレキシブルディスク、２０９５  ＤＶＤ−ＲＯＭ
【図１】
0005920842.tif 000003
【図２】
0005920842.tif 000004
【図３】
0005920842.tif 000005
【図４】
0005920842.tif 000006
【図５】
0005920842.tif 000007
【図６】
0005920842.tif 000008
【図７】
0005920842.tif 000009
【図８】
0005920842.tif 000010
【図９】
0005920842.tif 000011