(57)【要約】【課題】開発されたＳＯＣのような高速プロセッサを含むシステムのソフトウエアの性能評価や動作検証をマシンサイクル単位でシミュレーションにより行なう際に、命令スケジューリングを高速にかつ高精度に実行可能な、命令スケジューリングのシミュレーション方法及びシミュレーションシステムを提供する。【解決手段】命令エミュレータ１によりシミュレーション対象の命令列を順次フェッチして先行実行しその実行結果を実行ログの記録部２に格納し、実行ログにループが含まれている場合は命令スケジューラ３における今回のスケジューリング前の状態が直前の計算再利用エンジン４の登録状態と一致するときにその命令スケジューリング処理をスキップさせる。【選択図】　　図１
2004078599.tif 000002
【特許請求の範囲】
【請求項１】
シミュレーション対象の命令列からループを検出し、ループが検出された状態における命令スケジューリング対象命令列を登録し、ループ周回毎に今回のスケジューリング対象命令列と登録されているスケジューリング対象命令列とを比較し、登録されたスケジューリング対象命令列と一致するときはその命令列に付いてのスケジューリングをスキップし、一致しないときは今回のスケジューリング対象命令列を新しく登録するとともにスケジューリングを実行することを特徴とする命令スケジューリングのシミュレーション方法。
【請求項２】
前記シミュレーション対象の命令列は互いに前後してフェッチされる少なくとも第１、第２の後方分岐命令を含み、前記第１、第２の後方分岐命令の分岐命令アドレスおよび分岐先アドレスの一致を検出することで前記ループを検出することを特徴とする請求項１に記載の命令スケジューリングのシミュレーション方法。
【請求項３】
命令列を先行実行して得られた実行ログを前記シミュレーション対象の命令列として一定量記憶し、前記実行ログが前記一定量を超えた際は、前記記憶した実行ログの最古の実行ログから順次消去し、書き換えることを特徴とする請求項１又は請求項２に記載の命令スケジューリングのシミュレーション方法。
【請求項４】
シミュレーション対象の命令列を先行実行して得られた実行ログに基づいて命令スケジューリングを行い、前記命令スケジューリングの結果を記憶することを特徴とする請求項１乃至請求項３のいずれか１項に記載の命令スケジューリングのシミュレーション方法。
【請求項５】
シミュレーション対象の命令列からループを検出するループ検出手段と、前記ループ検出手段によりループが検出された状態における命令スケジューリング対象となる命令列を登録する登録手段と、ループ周回毎に今回の命令スケジューリング対象命令列と登録されている命令スケジューリング対象命令列とを比較する比較手段と、を有し、登録された命令スケジューリング対象命令列と一致するときは命令スケジューリングをスキップし、一致しないときは今回の命令スケジューリング対象命令列を新しく登録するとともに命令スケジューリングを実行することを特徴とする命令スケジューリングのシミュレーションシステム。
【請求項６】
前記シミュレーション対象の命令列は互いに前後してフェッチされる少なくとも第１、第２の後方分岐命令を含み、前記ループ検出手段は、前記第１、第２の後方分岐命令の分岐命令アドレスおよび分岐先アドレスの一致を検出する一致検出手段を有することを特徴とする請求項５に記載の命令スケジューリングのシミュレーションシステム。
【請求項７】
命令列を先行実行して得られた実行ログを一定量記憶する記憶手段と、前記実行ログが一定量を超えた際に、前記記憶した実行ログの最古の実行ログから順次書き換える書き換え手段と、を有することを特徴とする請求項５又は請求項６に記載の命令スケジューリングのシミュレーションシステム。
【請求項８】
命令列を先行実行して得られた実行ログに基づいて命令スケジューリングを行うスケジューリング手段と、前記命令スケジューリング手段から得られたスケジューリング結果を記憶する記憶手段と、を有することを特徴とする請求項５乃至請求項７のいずれか１項に記載の命令スケジューリングのシミュレーションシステム。
【請求項９】
フェッチされた命令列を実行し、実行ログを記録する命令エミュレータと、前記記録された実行ログに基づき命令スケジューリングを実行するとともに前記命令列に含まれるループを検出する命令スケジューラと、前記ループが検出された状態で前記命令スケジューラに保持されている命令列が登録される計算再利用エンジンと、を具備し、
前記命令スケジューラは、前記ループの周回毎に、前記計算再利用エンジンに登録されている命令列と今回の命令スケジューリング対象となっている命令列とを比較する手段と、前記両者の命令列が一致した場合はスケジューリングをスキップし、一致しない場合は今回の命令列を新しく前記計算再利用エンジンに登録するとともに命令スケジューリングを実行する手段とを有することを特徴とする命令スケジューリングのシミュレーションシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、プロセッサのプログラムのシミュレーション、特に命令スケジューリングのシミュレーション方法とシミュレーションシステムに関する。
【０００２】
【従来の技術】
高速プロセッサを含むＳＯＣ（Ｓｙｓｔｅｍ　Ｏｎ　Ｃｈｉｐ）のような情報処理システムを開発する際、開発の一部の工程においては開発の対象（ターゲット）となるＳＯＣの完成以前にソフトウェアを含めたシステム全体の性能評価や動作検証を行なわなければならない場合がある。また、精度良く性能評価や動作検証を行なうためには、ＣＡ（Ｃｙｃｌｅ　Ａｃｃｕｒａｔｅ）シミュレータと称される、マシンサイクルの単位での高精度なシミュレータによるシミュレーションを行なう必要がある。一方、このようなＣＡシミュレータによるＣＡＳ（Ｃｙｃｌｅ　Ａｃｃｕｒａｔｅ　Ｓｉｍｕｌａｔｉｏｎ）、即ちＣＡシミュレーションの実行に際しては、性能評価や動作検証の対象となるＳＯＣのプロセッサ、例えばＣＰＵが高速、高性能である場合は、このＣＰＵが実装された状態で実際に動作する時間の５０００倍ないし１００００倍程度の実行時間が必要となる。
【０００３】
一般に、ＣＡシミュレータは命令エミュレータおよび命令スケジューラから構成されている。この命令エミュレータでは開発されたソフトウエアの命令をフェッチするとともに実行し、命令スケジューラへは命令エミュレータで実行された命令が送られる。前記命令エミュレータから送られた命令に対して、命令スケジューラでスケジューリングが実行される。このように、命令エミュレータがフェッチして実行した命令は順次命令スケジューラに送られ、命令スケジューラが逐次命令スケジューリングを行なう。
【０００４】
【発明が解決しようとする課題】
ＣＡＳにおいては、ＳＯＣのシミュレータ内部で各マシンサイクルでの、例えばＣＰＵの挙動、特に命令スケジューリングの処理を正確にシミュレートしなければならない。精度良くシミュレーションをするためには、このスケジューリング処理は必要不可欠である。上記のようなＣＡシミュレータの構成では、命令エミュレータの計算時間はＣＡＳにおける全体の処理時間の１パーセント程度であるが、逐次スケジューリングを行なう命令スケジューラでの計算時間はＣＡＳ全体の大半を占めている。
【０００５】
このため、従来の技術ではＣＡＳにおける命令スケジューリングの実行時間がボトルネックとなり、システム全体の正確な性能評価や動作検証を高速且つ正確に行うことは困難であった。
【０００６】
そこで、この発明は、システム全体の性能評価や動作検証の高速化を可能とした、命令スケジューリングのシミュレーション方法および命令スケジューリングのシミュレーションシステムを提供することを目的とする。
【０００７】
【課題を解決するための手段】
上記目的を達成するためこの発明の一実施形態の命令スケジューリングのシミュレーション方法は、シミュレーション対象の命令列からループを検出し、ループが検出された状態における命令スケジューリング対象命令列を登録し、ループ周回毎に今回のスケジューリング対象命令列と登録されているスケジューリング対象命令列とを比較し、登録されたスケジューリング対象命令列と一致するときはその命令列に付いてのスケジューリングをスキップし、一致しないときは今回のスケジューリング対象命令列を新しく登録するとともにスケジューリングを実行することを特徴として構成されている。
【０００８】
また、この発明の他の実施形態の命令スケジューリングのシミュレーションシステムは、シミュレーション対象の命令列からループを検出するループ検出手段と、前記ループ検出手段によりループが検出された状態における命令スケジューリング対象となる命令列を登録する登録手段と、ループ周回毎に今回の命令スケジューリング対象命令列と登録されている命令スケジューリング対象命令列とを比較する比較手段と、を有し、登録された命令スケジューリング対象命令列と一致するときは命令スケジューリングをスキップし、一致しないときは今回の命令スケジューリング対象命令列を新しく登録するとともに命令スケジューリングを実行することを特徴として構成されている。
【０００９】
また、この発明の他の実施形態の命令スケジューリングのシミュレーションシステムは、フェッチされた命令列を実行し、実行ログを記録する命令エミュレータと、前記記録された実行ログに基づき命令スケジューリングを実行するとともに前記命令列に含まれるループを検出する命令スケジューラと、前記ループが検出された状態で前記命令スケジューラに保持されている命令列が登録される計算再利用エンジンと、を具備し、前記命令スケジューラは、前記ループの周回毎に、前記計算再利用エンジンに登録されている命令列と今回の命令スケジューリング対象となっている命令列とを比較する手段と、前記両者の命令列が一致した場合はスケジューリングをスキップし、一致しない場合は今回の命令列を新しく前記計算再利用エンジンに登録するとともに命令スケジューリングを実行する手段とを有することを特徴として構成されている。
【００１０】
上記のように構成することにより、命令スケジューラの内容を計算再利用エンジンに登録することで、命令スケジューラは、ループを検出した場合、実行ログが送られた命令スケジューラの状態と以前に命令スケジューラの状態が登録された計算再利用エンジンの状態とを比較し、命令スケジューラの状態が計算再利用エンジンの状態と一致した場合はスケジューリングをスキップすることでスケジューリングの処理時間を短縮することが可能になる。特に対象となる命令列にループが多く含まれる場合はループ部分のスケジューリングをすることなく高速にＳＯＣを含むようなシステムの性能評価および動作検証を精度良く実行することが可能になる。
【００１１】
【発明の実施の形態】
以下、この発明の実施の形態について図面を参照して説明する。この実施の形態では性能評価および動作検証の対象としてＳＯＣを例に取り上げるが、対象としてはこれに限らず、一般のプロセッサ、特に高速プロセッサに適用できることは勿論である。
【００１２】
図１はＳＯＣの性能評価、動作検証を行うためのこの実施形態のＣＡシミュレータを示す機能ブロック図を示す。このＣＡシミュレータは、命令エミュレータ１と、この命令エミュレータ１に付属した実行ログ記録部２と、命令スケジューラ３と計算再利用エンジン４とに分けて構成されている。また、この実施形態では、実行ログ記録部２は命令エミュレータ１の内部に配置されているが、この実行ログ記録部２は命令エミュレータ１の外部に配置されてもよく、あるいは命令スケジューラ３に付属させてもよい。即ち、ＣＡシミュレータのどこかに配置されていればよいが、図１では説明を分かり易くするために命令エミュレータ１の外部に取り出して示している。
【００１３】
まず、図１において、性能評価或いは動作検証の対象プログラムが格納されている図示しない主記憶部から、対象プログラムの命令列が１命令ずつ命令エミュレータ１に順次送られる。このように、命令エミュレータ１は主記憶部からの命令を順次、フェッチしている。また、命令エミュレータ１はフェッチした命令を先行して実行する機能も持っている。
【００１４】
先行して実行された実行結果は実行ログとして実行ログの記録部２に順次送られる。この実行ログは実際に命令列が実行された結果であるので、分岐等も全て正確な結果が記録されている。この実施形態では、実行ログの記録部２は命令エミュレータ１で実行された実行結果をある一定量、例えば１００００命令分だけ記録する容量を持つものとして構成されている。
【００１５】
ここで、命令列の実行結果とは、命令を実行して得られる、その後の命令スケジューリングに必要かつ十分な情報であり、実行した命令のアドレス、命令自体、分岐の成否、分岐予想の成功・不成功、キャッシュのヒット、ミス、例外の有無等を含むものである。特に、シミュレーション対象のプログラム中の後方分岐命令を起点とする命令のループ部分で行なわれるループ計算を発見すべく、命令エミュレータ１では、後述するスケジューリングの前に、演算を含む命令の論理的な実行が行なわれる。
【００１６】
実行ログの記録部２で記録された実行ログは、命令スケジューラ３に例えば２命令分ずつ送られる。なお、ここでは、実行ログの記録部２から命令スケジューラ３には２命令分ずつ送られるが、２命令分づつである必要はなく、１命令分づつでも良いし、３命令分以上を一度に送るようにしてもよい。
【００１７】
命令スケジューラ３は、実行ログの記録部２から送られる実行ログに基づいて、命令を定期的にスケジューリングする。この命令スケジューラ３には、通常の命令スケジューリングに加え、実行ログに残された実行結果から命令列中に含まれるループを検出する機能を持たせる。この命令列のループを検出した命令スケジューラ３は、ループの周回毎に、即ち実行ログ中にループの両端位置を示す分岐アドレスと分岐先アドレスとが一致する前後する２個の後方分岐命令が含まれている度に、計算再利用エンジン４に対し、以前に同一のスケジューリング対象命令列が登録されているか否かを問い合わせる。同一のスケジューリング対象命令列が登録されていなければ、命令スケジューラ３内のパイプラインステージのスナップショット、即ちスケジューリング対象としてその時に命令スケジューラ３が保持している命令列を計算再利用エンジン４に登録する。このように、命令列の実行結果である実行ログにループが含まれていたときに、前記スケジューリング対象の命令列が計算再利用エンジン４に送られる。
【００１８】
ここで、命令スケジューラ３内部は例えば３段階のパイプラインで構成されている。１段目（図２乃至図１１で示す左端の列）では命令のフェッチとデコードを行い、２段目（図２乃至図１１で示す中央列）ではロード命令ＬＷが指示する主記憶部からのデータのフェッチ、加算命令ＡＤＤや減算命令ＳＵＢＩに基づく演算、分岐命令ＢＮＥＺにおける条件判定など、いわゆる演算動作を行う。また、３段目（図２乃至図１１で示す右端の列）では演算結果のレジスタなどへの格納を行なう。このように、この実施形態では命令スケジューラ３において３段のパイプラインが構成されている。しかしながら、命令スケジューラ３を必ずしも３段のパイプラインで構成する必要はなく、例えば４段のパイプラインで構成されてもよい。
【００１９】
また、計算再利用エンジン４は命令スケジューラ３でスケジューリングされる対象の命令列を、後で説明するように、ループ検出時に適宜記録するものである。従って、ループが検出されている状態で、計算再利用エンジン４に命令スケジューラ３の内容と同一の命令列が登録されていなければ、その命令列も登録するとともに、命令スケジューリングを実行してそのスケジューリング結果も登録しておく。また、既に登録されていた場合には、計算再利用エンジン４に格納されている結果を用いて、命令スケジューリングの処理をスキップする。このスキップ動作は、以後のスケジューリング演算において、ループが続く限り同様に行われ、ループ終了が検知されるまで繰り返される。つまり、ループが続く限りはそのループ内に含まれる命令列のスケジューリングはそのループの先頭で少なくとも１度行われてその結果が登録され、ループの２巡目以降はスケジューリングを行なわず、計算再利用エンジン４に格納されているスケジューリング結果を用いて以後の処理を行なう。
【００２０】
これにより、ループ内の同じ命令列のスケジューリングが重複して行われることがなくなり、スケジューリング演算の時間を大幅に縮減することができる。尚、以下の説明において、ループ検出後の命令スケジューリングのスキップ動作は高速実行モードで行われるものとしてある。
【００２１】
以上、この実施形態のＣＡシミュレータの概要を説明した。ここで、図１乃至図１１の機能ブロック図および図１２乃至図１８のフローチャートを参照して、この実施形態における命令スケジューラ３のスケジューリングを高速化するための命令処理手順の詳細な説明を行う。
【００２２】
ＣＡシミュレーションの対象となるＳＯＣで実行されるべきプログラムは、例えば図１のエミュレータ１に記載されたようなロード命令ＬＷ，加算命令ＡＤＤ，減算命令ＳＵＢＩ、或いはループの起点となる分岐命令ＢＮＥＺなどの機械命令プログラムの断片によって構成された命令列である。このような命令列をＣＡシミュレータによってシミュレーションすることで、ＳＯＣを含むようなシステムの性能評価あるいは動作検証を行うことができる。
【００２３】
まず、図１１のステップＳ０において、まだループ命令列が検出されず、また高速実行モードでもないので、ループ検出モードを論理値の偽（以下、ＦＡＬＳＥと称する）とし、かつ高速実行モードもＦＡＬＳＥとする。
【００２４】
次いで、処理は次のステップＳ１に移行する。このステップＳ１では、図２の命令エミュレータ１が図示しない主記憶部にアクセスし、この主記憶部にＣＡシミュレーション対象のプログラムの命令列が格納されているか否かがチェックされる。ＮＯであれば、即ち対象の命令列が残存していなければ、処理は終了する。ＹＥＳであれば、処理は次のステップＳ２に移行する。
【００２５】
ステップＳ２では、この主記憶部から、シミュレーション対象プログラムの命令列がその先頭から１命令ずつ命令エミュレータ１に順次送られる。つまり、ステップＳ２において、命令エミュレータ１が主記憶部から命令列をフェッチする。すると、命令エミュレータ１は受け取った命令を先行して実行する。図２においては、最初にフェッチされた命令はロード命令ＬＷ（１）である。但し、図２乃至図９に示された命令エミュレータ１においては、一般的表示としてＬ：ＬＷとして示してある。
【００２６】
ここで、一例として図２に示されたロード命令「Ｌ：ＬＷ　Ｒ３，０（Ｒ２）」の意味は、図示しない２番レジスタ（Ｒ２）が保持する値に０を加えた値、即ちレジスタＲ２の値そのものをアドレスとして主記憶部から１語を読み出し、その結果を図示しない３番レジスタ（Ｒ３）に格納する、ということである。
【００２７】
次いで、ステップＳ３において、ループ検出モードであるか否か調べる。この場合はまだループ検出モードはＦＡＬＳＥであり、ＴＲＵＥではないので、次のステップＳ４に移行し、このステップＳ４において前記の命令ＬＷ（１）が先行実行された実行結果を含む実行ログ２１（１）を実行ログの記録部２に記録する。この実行ログは実際に命令列が実行された結果であるので、命令自体は勿論、分岐等も全て正確な結果が記録されることになる。なお、この実行ログの記録部２は、後述するように、この実施形態では１００００個の実行ログの記録容量を持つように設定されている。
【００２８】
更に、この実行ログの記録部２に記録した実行ログ２１（１）は命令スケジューリングのために命令スケジューラ３に転送される。この実施形態では、実行ログの記録部２から命令スケジューラ３へ２命令分ずつの実行ログが順次送られるように設定されており、最初の命令ＬＷ（１）が命令エミュレータ１にフェッチされた段階ではまだ送られない。
【００２９】
次いで、処理はステップＳ５に移行し、実行ログの記録部２に記録された実行ログ２２（１）が後方分岐であるか否かがチェックされる。このロード命令ＬＷ（１）は後方分岐ではないので、処理はステップＳ１０へ移る。このステップＳ１０においては、実行ログの記録部２に１サイクル分のスケジューリング対象命令列が格納されているかをチェックする。最初の命令ＬＷ（１）に関する実行ログ２１（１）が記録部２に記録された時点ではまだ１サイクル分のスケジュール対象命令列が格納されていない。従って、スケジューリングは実行されないため、処理はステップＳ２へ戻る。
【００３０】
この状態で、命令エミュレータ１は次の加算命令ＡＤＤ（１）をフェッチする。このフェッチされた加算命令ＡＤＤ（１）に関しても処理はロード命令ＬＷ（１）と同様に、ステップＳ３、Ｓ４、Ｓ５、Ｓ１０と進む。
【００３１】
ここで、図２の命令エミュレータ１内に一例として記載された加算命令「ＡＤＤ　Ｒ１，Ｒ１，Ｒ３」の意味は、図示しないレジスタＲ１の値とレジスタＲ３の値を加算した結果をレジスタＲ１に格納する、ということである。
【００３２】
ステップＳ１０において、この加算命令ＡＤＤ（１）に関する実行ログ２２（１）が図２に示すように実行ログの記録部２に記録された時点では、１サイクル分のスケジューリング対象命令列が格納されていることになる。そのため、処理はステップＳ１１に移行し、実行ログの記録部２から１サイクル分のスケジューリング対象命令列であるロード命令ＬＷ（１）および加算命令ＡＤＤ（１）の実行ログ２１（１）、２２（１）が命令スケジューラ３に送られ、スケジューリングが実行される。
【００３３】
図２に示す命令スケジューラ３内には、命令ＬＷ（１）およびＡＤＤ（１）の実行ログ２１（１）、２２（１）がスケジューリングされた結果を示す。このスケジューリングが実行されると、処理はステップＳ１１からステップＳ２へ戻る。
【００３４】
すると、ステップＳ２において、命令エミュレータ１は新たに減算命令ＳＵＢＩ（１）をフェッチする。図２の命令エミュレータ１ではこの減算命令ＳＵＢＩ（１）は一般表示ＳＵＢＩで示されている。この減算命令ＳＵＢＩ（１）に関する処理は、同様に順次ステップＳ２、Ｓ３、Ｓ４、Ｓ５、Ｓ１０と進む。ステップＳ１０において、図３に示したように、減算命令ＳＵＢＩ（１）に関する実行ログ２３（１）が実行ログの記録部２に記録された時点では、該実行ログの記録部２に次の１サイクル分のスケジューリング対象命令列は格納されていないため、スケジューリングは行なわず、処理はステップＳ２へ戻る。
【００３５】
ここで、図２の命令エミュレータ１内に一例として記載された減算命令「ＳＵＢＩ　Ｒ２，Ｒ２，＃１」の意味は、レジスタＲ２の値から即値１（＃１）を減算した結果をレジスタＲ２に格納する、と言うことである。
【００３６】
命令エミュレータ１は次の分岐命令ＢＮＥＺ（１）をフェッチする。以下、この分岐命令ＢＮＥＺ（１）に関する処理は減算命令ＳＵＢＩ（１）と同様に、ステップＳ２、Ｓ３、Ｓ４、Ｓ５と進む。しかし、この分岐命令ＢＮＥＺ（１）に付いての先行実行結果の実行ログ２４（１）が図３に示すように実行ログの記録部２に記録されると、分岐命令ＢＮＥＺ（１）が後方分岐命令であるときは、今度はステップＳ５におけるチェックの結果がＹＥＳとなり、処理はステップＳ６へと進む。
【００３７】
ここで、図２の命令エミュレータ１内に一例として示された分岐命令「ＢＮＥＺ　Ｒ２，Ｌ」は条件分岐命令であり、その意味は、レジスタＲ２の値が０でなければラベルＬ、即ちロード命令ＬＷの番地へジャンプし、そうでなければ引き続く命令を実行する、と言うことである。
【００３８】
ステップＳ６では、直前の後方分岐命令の先行実行結果と今回の分岐命令の先行実行結果とを比較し、この両者の分岐命令アドレスおよび分岐先アドレスが一致するか否かをチェックする。
【００３９】
例えば、最初の後方分岐命令がフェッチされると、この分岐命令を先行実行し、この分岐命令のアドレス（例えば、Ａ）、分岐先アドレス（例えば、Ｂ）を実行ログに記録するとともに、その実行ログの記録部２および実行ログの記録部２における記録位置（例えばＣ）を例えば命令エミュレータ１内に記録する。その後、２つ目の後方分岐命令がフェッチされた際に、この後発の分岐命令の先行実行の結果得られた各アドレスを位置Ｃに記憶したアドレスＡ、Ｂと比較する。
【００４０】
しかしながら、ここでは、このフェッチされた分岐命令が最初の分岐命令であるため、先行する分岐命令に関する記録がないため、チェック結果はＮＯとなり、ＢＮＥＺ（１）のアドレス、分岐先アドレスを実行ログ２４（１）に記録し、実行ログ２４（１）の記録位置を前述のＣに記憶した上で、処理はステップＳ１１へ移る。
【００４１】
この状態では、実行ログの記録部２には１サイクル分のスケジューリング対象命令列である減算命令ＳＵＢＩ（１）および分岐命令ＢＮＥＺ（１）に関する実行ログ２３（１）、２４（１）が格納されているので、スケジューリングを実行するためにこれらの命令は命令スケジューラ３に送られる。このときの命令スケジューラ３の内容が図３に示されている。
【００４２】
この図３の状態では、命令スケジューラ３には減算命令ＳＵＢＩ（１）および分岐命令ＢＮＥＺ（１）の実行ログ２３（１）、２４（１）がスケジューリングされた結果を示す。このスケジューリングが実行されると処理は再びステップＳ２へ戻る。
【００４３】
ステップＳ２において、命令エミュレータ１はロード命令ＬＷ（２）をフェッチして実行し、次いで加算命令ＡＤＤ（２）をフェッチして実行する。ここで、ロード命令ＬＷ（２）、および加算命令ＡＤＤ（２）に関する処理の動作は、各々前出のロード命令ＬＷ（１）、および加算命令ＡＤＤ（１）と同様である。即ち、ロード命令ＬＷ（２）に関する処理はステップＳ２、Ｓ３、Ｓ４、Ｓ５、Ｓ１０の順に進行し、次いで加算命令ＡＤＤ（２）に関する処理がステップＳ２、Ｓ３、Ｓ４、Ｓ５、Ｓ１０、Ｓ１１と進むので説明は省略する。
【００４４】
図４は、実行ログの記録部２からロード命令ＬＷ（２）および加算命令ＡＤＤ（２）の２命令の実行ログ２１（２）、２２（２）が命令スケジューラ３に送られ、スケジューリングが行なわれたところを示すものである。この結果、処理は再びステップＳ２へ移る。
【００４５】
このステップＳ２では、新たに減算命令ＳＵＢＩ（２）を命令エミュレータ１はフェッチする。この減算命令ＳＵＢＩ（２）に関する処理動作はステップＳ２、Ｓ３、Ｓ４、Ｓ５、Ｓ１０と進んでステップＳ２へ戻る。この結果、減算命令ＳＵＢＩ（２）の実行ログ２３（２）は記録部２に記録される。
【００４６】
この状態でステップＳ２では、命令エミュレータ１は次の命令として分岐命令ＢＮＥＺ（２）をフェッチし、実行する。この分岐命令ＢＮＥＺ（２）に関する処理動作はステップＳ２、Ｓ３、Ｓ４、Ｓ５、Ｓ６と進む。この時、命令エミュレータ１で先行実行された２番目の分岐命令ＢＮＥＺ（２）に関する実行ログ２４（２）は図５に示すように実行ログの記録部２に記録されるとともに、命令スケジューラ３の第１パイプラインに送られる。ここでは、ステップＳ５において後方分岐であるか否かのチェック結果がＹＥＳとなるから、処理はステップＳ６に進む。
【００４７】
このステップＳ６においては記録部２の記録位置Ｃに記録されている直前の、即ち最初の後方分岐命令ＢＮＥＺ（１）の実行ログ２４（１）と、今回の２番目の分岐命令ＢＮＥＺ（２）の実行ログ２４（２）夫々の分岐命令アドレスおよび分岐先アドレスが一致するため、ステップＳ６のチェック結果がＹＥＳとなり、ループが検出されたことになり、処理はステップＳ７へ進む。このステップＳ７ではループ検出モードがＴＲＵＥ（論理値の真）となる。
【００４８】
この設定されたループ検出モードでは、新しくフェッチされた命令を命令エミュレータ１で実行する度に、その命令の実行結果と、前記実行ログの記録位置Ｃ以降に記録された先行命令の実行結果である実行ログの内容と比較し、一致するか否かがチェックされる。この一致判断が成立している間がループである。この処理に付いての詳細な説明はステップＳ１２において後述する。
【００４９】
前述のように、２番目の分岐命令ＢＮＥＺ（２）に関する処理のステップＳ７では、ループ検出モードが論理値の真（以下、ＴＲＵＥと称する）となる。また、このとき命令エミュレータ１には、実行ログ比較のために参照する実行ログ記録位置（例えばＤ）として、先行する分岐命令ＢＮＥＺ（１）の実行ログ２４（１）の記録位置Ｃの次の位置、すなわちロード命令ＬＷ（２）の実行ログ２１（２）の記録位置が記憶される。また、実行ログの記録位置Ｃは、現在の分岐命令ＢＮＥＺ（２）の実行ログ２４（２）の記録位置に更新される。
【００５０】
次のステップＳ８において、図５に示すように、実行ログの記録部２から１サイクル分のスケジューリング対象命令列の減算命令ＳＵＢＩ（２）の実行ログ２３（２）および分岐命令ＢＮＥＺ（２）の実行ログ２４（２）を命令スケジューラ３に送り、スケジューリングを実行する。
【００５１】
その後、ステップＳ９において、命令スケジューラ３においてスケジューリング対象として保持されている命令列を命令スケジューラ３の３段のパイプラインからスナップショットとして計算再利用エンジン４に格納して登録する。なお、図５に示すように、このときの登録命令列をＸとする。また、命令スケジューラ３のスケジューリング内容も計算再利用エンジン４の内部に保存する。この命令スケジューラ３の内容が計算再利用エンジン４にＡとして登録されると、処理は再びＳ２へ戻る。
【００５２】
次に、命令エミュレータ１は命令ＬＷ（３）をフェッチし、実行する。その後、ステップＳ２、Ｓ３と進む。この段階では、既にループ検出モードに入っているため、ステップＳ３からステップＳ１２へ移る。このステップＳ１２では、実行した命令の実行結果が、実行ログの記録位置Ｄに記録された直前のループ繰り返しにおける先行命令の実行結果と一致するか否かをチェックする。
【００５３】
この場合、最新命令の実行結果は、実行ログの記録位置Ｄに記録された先行命令であるＬＷ（２）の実行ログ２１（２）の内容と一致するため、ステップＳ１２の結果はＹＥＳとなり、処理は次のステップＳ１８へ移る。このステップＳ１８においては、このフェッチされ実行された命令の実行結果を実行ログの記録部２に記録し、参照する実行ログ記録位置Ｄを１つ進め、ステップＳ１９へ進む。
【００５４】
このステップＳ１９では、高速実行モードであるか否かのチェックが行われる。ステップＳ１９において、このロード命令ＬＷ（３）がフェッチされた時点ではまだ高速実行モードではないため、処理は次のステップＳ２０へ進む。このロード命令ＬＷ（３）に関する先行実行の結果は実行ログ２１（３）として図６に示すように記録部２に記録されるとともに、命令スケジューラ３の第１パイプラインに供給される。
【００５５】
ステップＳ２０では、この実行ログ２１（３）の命令が後方分岐命令であるか否かがチェックされる。このロード命令ＬＷ（３）は後方分岐命令ではないので、チェック結果はＮＯとなり、処理はステップＳ１０へ移る。
【００５６】
このステップＳ１０の段階では、実行ログに次の１サイクル分のスケジューリング対象命令列は格納されていないので、処理はステップＳ２へ戻る。
【００５７】
次の加算命令ＡＤＤ（３）を命令エミュレータ１はフェッチし、実行する。その後、この加算命令ＡＤＤ（３）に関する処理動作は、前述のロード命令ＬＷ（３）と同様であり、ステップＳ２、Ｓ３、Ｓ１２、Ｓ１８、Ｓ１９、Ｓ２０、Ｓ１０と順次進むので説明は省略する。
【００５８】
ここで、ステップＳ１０においては、実行ログの記録部２に加算命令ＡＤＤ（３）に関する実行結果の実行ログ２２（３）が記録された結果、１サイクル分のスケジューリング対象命令列が格納されているため、処理はステップＳ１０からステップＳ１１へ進む。すると、ステップＳ１１において、実行ログの記録部２から１サイクル分のスケジューリング対象命令列を命令スケジューラ３に送りスケジューリングを実行する。
【００５９】
図６に示すように、命令スケジューラ３にはロード命令ＬＷ（３）および加算命令ＡＤＤ（３）がスケジューリングされた結果を示す。このスケジューリングが実行されると、処理は再びステップＳ２へ戻る。
【００６０】
次に、命令エミュレータ１は減算命令ＳＵＢＩ（３）をフェッチし、実行する。その後、この減算命令ＳＵＢＩ（３）に関する処理動作は前述のロード命令ＬＷ（３）と同様であり、ステップＳ２、Ｓ３、Ｓ１２、Ｓ１８、Ｓ１９、Ｓ２０、Ｓ１０と順次進むので説明は省略する。
【００６１】
このステップＳ１０においては、まだ実行ログの記録部２に１サイクル分のスケジューリング対象命令列が格納されていないため、処理は再びステップＳ２へ戻る。すると、命令エミュレータ１は新たに分岐命令ＢＮＥＺ（３）をフェッチし、実行する。その後、この分岐命令ＢＮＥＺ（３）に関する処理動作は、ステップＳ２、Ｓ３、Ｓ１２、Ｓ１８、Ｓ１９、Ｓ２０と順次進む。
【００６２】
この分岐命令ＢＮＥＺ（３）は後方分岐命令であるため、この時はステップＳ２０から次のステップＳ２１へ進む。またその際、実行ログの記録位置Ｃは、現在の分岐命令ＢＮＥＺ（３）の実行ログ２４（３）の記録位置に更新される。ステップＳ２１においては、実行ログの記録部２から実行ログ２４（３）を含む次の１サイクル分のスケジューリング対象命令列の実行ログを命令スケジューラ３に送り、スケジューリングを実行する。その後、ステップＳ２２へ進む。
【００６３】
ステップＳ２２では、命令スケジューラ３のスケジューリング対象となる命令列の内容が、既に計算再利用エンジン４に登録されているか否かをチェックする。ここで減算命令ＳＵＢＩ（３）および分岐命令ＢＮＥＺ（３）が命令スケジューラ３に供給された状態は、すでに計算再利用エンジン４に登録されている図５の登録命令列Ｘと一致するため、処理はステップＳ２４へ移る。
【００６４】
ステップＳ２４では高速実行モードをＴＲＵＥに設定する。また、登録命令列Ｘが計算再利用エンジン４に既に登録されている状態であり、この登録命令列Ｘが再利用されたので、既に登録された命令列Ｘを再利用状態として設定する。また、この再利用状態を直前に登録した状態の次の状態とする。ここでは直前に登録した状態も命令列Ｘであるので、Ｘの次の状態がＸとなる。その後、ステップＳ２へ戻る。
【００６５】
図７には命令スケジューラ３に減算命令ＳＵＢＩ（３）および分岐命令ＢＮＥＺ（３）の実行ログ２３（３）、２４（３）が供給され、保持された状態を示す。
【００６６】
図７に示すように、減算命令ＳＵＢＩ（３）および分岐ＢＮＥＺ（３）が送られた命令スケジューラ３の命令保持状態と、直前、即ちループ１回前の減算命令ＳＵＢＩ（２）および分岐命令ＢＮＥＺ（２）が、命令スケジューラ３でスケジューリングされたときの計算再利用エンジン４に送られた命令スケジューラ３の命令保持状態と一致するので、このループ一周前のスケジューリング計算結果が再利用できることがわかる。すなわち、同じループが終了するまで同じスケジューリングが繰り返し演算される必要はなく、スケジューリングはスキップされ、必要に応じて最初にスケジューリングされた結果が利用される。
【００６７】
この場合は、命令スケジューラ３の命令列保持状態と直前の計算再利用エンジン３に登録された登録命令列Ａとが一致したが、不一致になることもある。その場合は、計算再利用エンジン４に既に登録されている登録命令列Ａとは別に、他の登録命令列（例えば登録命令列Ｂ）を新たに計算再利用エンジン４に登録する。従って、ループ周回が検出された状態で命令スケジューラ３に命令列が供給された段階で、すでに計算再利用エンジン４に登録された複数の登録内容との比較の結果、その内の一つと内容が一致した場合は、そのとき命令スケジューラ３に供給された命令列に関してスケジューリング演算を行う必要がなく、高速実行モードにおけるスケジューリングの高速化が可能になる。
【００６８】
次に、ステップＳ２において命令エミュレータ１はロード命令ＬＷ（４）をフェッチし、実行する。その後、このロード命令ＬＷ（４）に関する処理はロード命令ＬＷ（３）と同様にステップＳ２、Ｓ３、Ｓ１２、Ｓ１８、Ｓ１９と順次進むので説明は省略する。
【００６９】
ステップＳ１９において、この時点では既に高速実行モードが設定されているので、ステップＳ２５へ移る。ステップＳ２５では、この命令が後方分岐命令であるか否かをチェックする。ここで、ロード命令ＬＷ（４）は後方分岐命令ではないので、ステップＳ２へ戻る。
【００７０】
その後、加算命令ＡＤＤ（４）、減算命令ＳＵＢＩ（４）および分岐命令ＢＮＥＺ（４）が命令エミュレータ１によって順次フェッチされ、実行される。ここで、これらの加算命令ＡＤＤ（４）、減算命令ＳＵＢＩ（４）および分岐命令ＢＮＥＺ（４）に関する処理動作はロード命令ＬＷ（４）と同様であり、ステップＳ２、Ｓ３、Ｓ１２、Ｓ１８、Ｓ１９、Ｓ２５と順次進むので説明は省略する。
【００７１】
ステップＳ２５において、分岐命令ＢＮＥＺ（４）がフェッチされた場合は、チェックの結果はＹＥＳとなり、実行ログの記録位置Ｃを現在の分岐命令ＢＮＥＺ（４）の実行ログ２４（４）の記録位置に更新した上で、ステップＳ２６へ進む。このステップＳ２６においては、再利用状態として設定されている命令列を、その次の状態に置き換える。ここでは元の再利用状態は命令列Ｘであり、かつその次の状態も命令列Ｘであるので結果的に再利用状態は変化しない。
【００７２】
図８には、再利用状態である命令列Ｘにより命令スケジューラの状態が設定され、命令スケジューラ３に減算命令ＳＵＢＩ（４）および分岐命令ＢＮＥＺ（４）の２命令の実行ログ２３（４）、２４（４）が供給された状態となっていることが示されている。
【００７３】
以降、同じループが続く限り同じスケジューリング結果が繰り返し発生することになるため、ループが終了するまで、計算再利用エンジン４に格納されている登録データを用いて、命令スケジューラ３における命令スケジューリングの処理をスキップすることになる。例えば、ループ回数が１００回続いてからそのループが終了すると仮定すると、ループ９９回目の繰り返しである命令列のロード命令ＬＷ（９９）、加算命令ＡＤＤ（９９）、減算命令ＳＵＢＩ（９９）および分岐命令ＢＮＥＺ（９９）までの処理に関しては、命令列ＬＷ（４）、ＡＤＤ（４）、ＳＵＢＩ（４）およびＢＮＥＺ（４）と同じ動作をし、計算再利用エンジン４の登録内容を再利用できる状態にあり、命令スケジューリングはすべてスキップされる。この時点でのＣＡシミュレータの状態を図９に示す。
【００７４】
次に、ループ１００回目のＣＡシミュレータの状態を図１０に示す。ステップＳ２において、ロード命令ＬＷ（１００）を命令エミュレータ１はフェッチして実行する。このロード命令ＬＷ（１００）に関する処理動作は、以前のロード命令ＬＷ（４）と同様であり、ステップＳ２、Ｓ３、Ｓ１２、Ｓ１８、Ｓ１９、Ｓ２５と進む。又、加算命令ＡＤＤ（１００）、減算命令ＳＵＢＩ（１００）に関する処理動作も以前の加算命令ＡＤＤ（４）、減算命令ＳＵＢＩ（４）と同様であるので説明は省略する。
【００７５】
その後、ステップＳ２において、分岐命令ＢＮＥＺ（１００）を命令エミュレータ１がフェッチし、実行する。この段階ではまだループ検出モードであるので、処理はステップＳ３からステップＳ１２へ進む。この時、分岐命令ＢＮＥＺ（１００）は一連のループの最後の命令であるから、その実行結果、即ち分岐先アドレスなどはそれ以前のループ中の実行ログの記録個所の内容と一致しないので、今度はステップＳ１３へ進む。
【００７６】
ステップＳ１３ではループ検出モードはこの時点でＦＡＬＳＥとなる。その後、処理はステップＳ１４へ進み高速実行モードであるか否かがチェックされる。この段階ではまだ高速実行モードであるのでステップＳ１５へ進む。
【００７７】
このステップＳ１５においては高速実行モードがＦＡＬＳＥに設定される。この場合、図１０に示すように、分岐命令ＢＮＥＺ（１００）の実行ログ２４（１００）を実行ログの記録部２に記録する。この後、処理は直前の後方分岐命令の次の実行ログの記録個所、すなわちＢＮＥＺ（９９）の実行ログ２４（９９）の記録位置Ｃの次の位置であるＬＷ（１００）の実行ログ２１（１００）の記録位置まで戻る。なおこの時点において命令スケジューラの状態は図９に示した状態のままである。
【００７８】
この結果、処理はステップＳ１６に進み、実行ログから１サイクル分のスケジューリング対象命令列ＬＷ（１００）およびＡＤＤ（１００）の実行ログ２１（１００）、２２（１００）を命令スケジューラ３に送りスケジューリングを実行する。
【００７９】
その後、処理は次のステップＳ１７へ進み、現在のループ内で実行ログの記録部２に既に登録されているスケジューリングすべき実行ログがまだ残っているか否かがチェックされる。この段階では実行ログはまだ残っているので、処理はステップＳ１６へ戻る。
【００８０】
この状態では、ステップＳ１６において、図１０に示すように、実行ログの記録部２から１サイクル分のスケジューリング対象命令列の減算命令ＳＵＢＩ（１００）および分岐命令ＢＮＥＺ（１００）の実行ログ２３（１００）、２４（１００）を命令スケジューラ３に送り、スケジューリングを実行する。ここで、ループ回数を１００回と想定しているので、この段階でループ繰り返しの実行ログは尽きる。従って、この場合、ステップＳ１７においてチェック結果はＮＯとなりステップＳ２へ戻る。
【００８１】
このようにしてループ処理が終わり、ステップＳ２において、次の新たな命令ｎｅｘｔ１が命令エミュレータ１によりフェッチされ、先行実行される。その後、処理はステップＳ３に進む。この時点では新しいループはまだ検出されていないので、ループ検出モードではなく、ステップＳ４において、新しい命令ｎｅｘｔ１の実行結果を実行ログの記録部２に記録する。
【００８２】
次いで、ステップＳ５において後方分岐であるか否かがチェックされる。この命令ｎｅｘｔ１が後方分岐の命令ではない場合は、ステップＳ１０へ進む。命令ｎｅｘｔ１の実行ログ２５が図１１に示すように実行ログの記録部２に格納された時点では、まだ１サイクル分のスケジューリング対象命令列は格納されていないため、スケジューリングは実行されない。そのため、処理はステップＳ２へ戻る。
【００８３】
ここで、次の命令ｎｅｘｔ２を命令エミュレータ１はフェッチし、実行する。その後、この命令ｎｅｘｔ２に関する処理はステップＳ２、Ｓ３、Ｓ４、Ｓ５、Ｓ１０と進む。この時点では、１サイクル分のスケジューリング対象命令列ｎｅｘｔ１およびｎｅｘｔ２の実行ログ２５，２６が格納されているので、ステップＳ１１へと進む。すると、実行ログの記録部２から１サイクル分のスケジューリング対象命令列の実行ログ２５，２６が命令スケジューラ３に供給され、スケジューリングが実行される。
【００８４】
以後、主記憶部にスケジューリング対象命令がある限り、上記説明したような動作が続く。
【００８５】
なお、以上の説明では図示したフローチャートに示したすべての処理について述べていない。例えば、ステップＳ１４からステップＳ４への処理の流れがある。つまり、一つのループに関する処理が終了していない段階で、新しく命令エミュレータ１によりフェッチされた命令に関して、ステップＳ１２においてその命令の実行結果と実行ログの内容が何らかの原因で不一致となる場合がある。この場合は、ステップＳ１２の結果がＮＯとなるから、ステップＳ１３においてループ検出モード＝ＦＡＬＳＥとなり、且つ高速実行モード＝ＦＡＬＳＥの状況となる。この場合は処理はステップＳ１４からステップＳ４に移行し、別のループ検出動作が行われることになる。
【００８６】
また、ステップＳ２２からステップＳ２３への処理がある。ここで、例えば、既に登録されていた命令列がＸであり、ステップＳ２２でこれと比較されるスケジューラ３の命令列もＸであれば、ステップＳ２４において高速実行モードがＴＲＵＥとして設定されるとともに、この命令列Ｘが再利用状態に設定され、更に、この再利用の次の状態の命令列もＸとなる。
【００８７】
しかしながら、この再利用状態の次の状態の命令列が別の状態である、例えば命令列Ｙである場合がある。例えば、ステップＳ９で登録された命令列をＸとし、ステップＳ２２で比較される命令列がこれと異なる命令列Ｙである場合には、ステップＳ２２からステップＳ２３に移行する。この場合はステップＳ２３で命令列Ｂが登録されるから、この命令列ＢはこのステップＳ２３では、直前に登録したスケジューラ３の命令列Ｘの次の状態として設定されることになる。
【００８８】
この状態で次のループ周回時には比較すべき命令列はＸであるから、ステップＳ２２からステップＳ２４に移行し、命令列Ｘが再利用状態として設定され、その結果、この命令列Ｘが直前に登録された状態Ｙの次の状態となる。
【００８９】
ステップＳ２４で高速実行モードが設定されるから、次のループ周回時にはステップＳ１９からステップＳ２５を介してステップＳ２６に移行する。ここでは命令列Ｙが再利用されるから、次のループ周回時の再利用命令列はＸとなり、更に次のループ周回時には今度は命令列Ｘが再利用される。このようにして、命令列Ｘ，ＹがステップＳ２６でループ周回毎に交互に再利用されることになる。
【００９０】
このような構成のＣＡシミュレータを用いることにより、命令スケジューリングに必要な計算時間を大幅に短縮することが可能となり、特に、ループの多い、即ち一つのループの繰り返し回数が多い計算のＣＡＳは大幅に高速化されることになる。
【００９１】
以上の説明では実行ログの記録部２における実行ログの記録容量について特に規定していないが、通常は、先行実行のログが１００００命令分あればシミュレーションのためには実質的に十分であると考えられる。この場合、１００００命令分の実行ログが記録されるまでは、形成される実行ログは実行ログの記録部２に順次格納される。ここで、１０００１番目の命令の実行結果が実行ログの記録部２に送られると、一番最初に格納された１番目の実行ログを消去し、その位置に１０００１番目の命令を代わりに記録するように設定されている。このような設定をすることである一定量（例えば１００００命令分）のみを保存し、それ以前の古い命令の実行ログは新しい命令に対する実行ログを作るたびに捨てていくようにすれば、ログ記録部の記録容量を現実的サイズとすることができる。但し、この場合は、ループの繰り返し１回分がログ記録部の記録容量以内であることが必要であるが、１００００命令分もあれば実質的に十分であると考えられる。しかしながら、シミュレーション対象の開発されたプログラムに含まれるループの内容によっては、実行ログの記録容量を更に大きく、または小さくすることもできることは勿論である。
【００９２】
このような構成のＣＡシミュレータを用いることにより、命令スケジューリングに必要な計算時間を大幅に短縮することが可能となり、特にループの数が多く、且つ一つのループの繰り返し回数が多いプログラムのシミュレーションが大幅に高速化されることになる。よって、大きな計算時間を必要とする命令スケジューラのスケジューリングの処理時間を大幅に短縮することができる。
【００９３】
【発明の効果】
以上詳述したようにこの発明によれば、開発された情報処理システムのソフトウエアの性能評価や動作検証を行なう際に、命令スケジューリングの処理時間を大幅に短縮することができ、高速、高精度なシミュレーションが可能な命令スケジューリングのシミュレーション方法およびシミュレーションシステムを提供することが出来る。
【図面の簡単な説明】
【図１】この発明の一実施形態の命令スケジューリングのシミュレーションシステムの機能ブロック図。
【図２】図１の機能ブロック図において命令スケジューラに新たな２命令が送られた状態を示す図。
【図３】図２の状態に続いて命令スケジューラに更に新たな２命令が送られた状態を示す図。
【図４】図３の状態に続いて命令スケジューラに更に新たな２命令が送られた状態を示す図。
【図５】図４に続いて命令スケジューラに更に新たな２命令が送られるとともにループが検出され、計算再利用エンジンにこの時の命令スケジューラの内容を登録した状態を示す図。
【図６】図５に続いて命令スケジューラに更に新たな２命令が送られた状態を示す図。
【図７】図６に続いて命令スケジューラに更に新たな２命令が送られるとともに、ループ検出モードにおいてそのときの命令スケジューラの内容と計算再利用エンジンの既登録内容とが一致した状態を示す図。
【図８】図７に続いてループ検出モードにおいて命令スケジューラに更に新たな２命令が送られたときに、計算再利用エンジンに格納されている内容を用いて命令スケジューリングの処理をスキップさせる状態を示す図。
【図９】図８に続いてループ検出モードにおいて命令スケジューラに新たな２命令が送られ、計算再利用エンジンに格納されている内容を用いて命令スケジューリングの処理をスキップした後、ループが終了される状態を示す図。
【図１０】図９に続いて命令スケジューラに新たな２命令が送られた状態でループの終了に伴い命令スケジューリング処理のスキップが終了される状態を示す図。
【図１１】図１０に続いてループ終了後に命令スケジューラに新たな２命令が送られた状態を示す図。
【図１２】この発明の一実施形態のシミュレーションシステムの動作のフローの最初の部分を示すフローチャート。
【図１３】この発明の一実施形態のシミュレーションシステムの動作のフローにおける図１２に示したものに続く部分を示すフローチャート。
【図１４】この発明の一実施形態のシミュレーションシステムの動作のフローにおける図１２及び図１６に示したものに続く部分を示すフローチャート。
【図１５】この発明の一実施形態のシミュレーションシステムの動作のフローにおける図１２に示したものに続く部分を示すフローチャート。
【図１６】この発明の一実施形態のシミュレーションシステムの動作のフローにおける図１５に示したものに続く部分を示すフローチャート。
【図１７】この発明の一実施形態のシミュレーションシステムの動作のフローにおける図１６に示したものに続く部分を示すフローチャート。
【図１８】この発明の一実施形態のシミュレーションシステムの動作のフローにおける図１６に示したものに続く部分を示すフローチャート。
【符号の説明】
１…命令エミュレータ、
２…実行ログの記録部、
３…命令スケジューラ、
４…計算再利用エンジン、
２１（１）・・・最初のロード命令の実行ログ、
２２（１）・・・最初の加算命令の実行ログ、
２３（１）・・・最初の減算命令の実行ログ、
２４（１）・・・最初の分岐命令の実行ログ、
２１（１００）・・・ループ最後のロード命令の実行ログ、
２２（１００）・・・ループ最後の加算命令の実行ログ、
２３（１００）・・・ループ最後の減算命令の実行ログ、
２４（１００）・・・ループ最後の分岐命令の実行ログ、
２５・・・ループ後の最初の命令の実行ログ。
【図１】
2004078599.tif 000003
【図２】
2004078599.tif 000004
【図３】
2004078599.tif 000005
【図４】
2004078599.tif 000006
【図５】
2004078599.tif 000007
【図６】
2004078599.tif 000008
【図７】
2004078599.tif 000009
【図８】
2004078599.tif 000010
【図９】
2004078599.tif 000011
【図１０】
2004078599.tif 000012
【図１１】
2004078599.tif 000013
【図１２】
2004078599.tif 000014
【図１３】
2004078599.tif 000015
【図１４】
2004078599.tif 000016
【図１５】
2004078599.tif 000017
【図１６】
2004078599.tif 000018
【図１７】
2004078599.tif 000019
【図１８】
2004078599.tif 000020