(57)【要約】【課題】ＣＰＵによる単位時間の命令の実行完了回数を動的に最適化できるマルチスレッド実行装置及びマルチスレッド実行方法を提供すること。【解決手段】複数のプログラムが記憶されたプログラム記憶手段２６と、プログラム記憶手段２６から読み出した命令を発行する命令発行手段１１，１９と、命令を実行する命令実行手段１５と、を有するマルチスレッド実行装置１００であって、プログラム毎に、命令の目標実行速度情報を記憶する目標実行速度情報記憶手段６０、７０と、命令の実行完了速度を監視する実行速度監視手段１４と、実行完了速度が目標実行速度情報に略一致するように、命令発行手段に命令を発行させるフィードバック制御手段１２と、ことを特徴とする。【選択図】図３
2010286898.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムが記憶されたプログラム記憶手段と、
前記プログラム記憶手段から読み出した命令を発行する命令発行手段と、
前記命令を実行する命令実行手段と、を有するマルチスレッド実行装置であって、
前記プログラム毎に、命令の目標実行速度情報を記憶する目標実行速度情報記憶手段と、
命令の実行完了速度を監視する実行速度監視手段と、
前記実行完了速度が前記目標実行速度情報に略一致するように、前記命令発行手段に命令を発行させるフィードバック制御手段と、
ことを特徴とするマルチスレッド実行装置。
【請求項２】
前記目標実行速度情報は、命令の単位時間当たりの目標実行完了数情報を有し、
前記実行速度監視手段は、命令の単位時間当たりの実行完了数を監視し、
前記フィードバック制御手段は、前記目標実行完了数情報と、前記実行完了数との差が小さくなるように、前記命令発行手段に命令を発行させる、
ことを特徴とする請求項１記載のマルチスレッド実行装置。
【請求項３】
前記目標実行完了数情報は、エミュレート対象のＣＰＵが前記プログラムを実行した際の、単位時間当たりの命令の実行完了数、又は、
エミュレート対象のＣＰＵの仕様及び前記プログラムの含む命令から、統計的に求めた単位時間当たりの命令の実行完了数である、
ことを特徴とする請求項２記載のマルチスレッド実行装置。
【請求項４】
前記目標実行速度情報は、プログラムの単位処理当たりの目標実行サイクル数情報を有し、
前記実行速度監視手段は、プログラムの単位処理当たりの実行サイクル数を監視し、
前記フィードバック制御手段は、前記目標実行サイクル数情報と、前記実行サイクル数との差が小さくなるように、前記命令発行手段に命令を発行させる、
ことを特徴とする請求項１記載のマルチスレッド実行装置。
【請求項５】
前記目標実行サイクル数情報は、エミュレート対象のＣＰＵが前記プログラムを実行した際の単位処理の実行サイクル数、又は、エミュレート対象のＣＰＵの仕様及び前記プログラムの含む命令から、統計的に求めた前記プログラムの単位処理の実行サイクル数である、
ことを特徴とする請求項４記載のマルチスレッド実行装置。
【請求項６】
前記目標実行完了数情報は、
エミュレート対象のＣＰＵと当該マルチスレッド実行装置のＣＰＵの動作周波数の比で補正したものである、
ことを特徴とする請求項３記載のマルチスレッド実行装置。
【請求項７】
前記目標実行速度情報は、所定の基準時から計測開始される前記プログラムの実行時間に対応づけられている、
ことを特徴とする請求項１〜６いずれか１項記載のマルチスレッド実行装置。
【請求項８】
前記命令発行手段は、予め定められた複数の前記プログラムの優先順位に従い、前記実行完了速度を前記目標実行速度情報に略一致させる前記プログラムを決定する、
ことを特徴とする請求項１〜７いずれか１項記載のマルチスレッド実行装置。
【請求項９】
前記命令発行手段は、前記実行完了速度と前記目標実行完了数情報の乖離が大きい前記プログラムから順に、前記実行完了速度を前記目標実行速度情報に略一致させる
ことを特徴とする請求項１〜７いずれか１項記載のマルチスレッド実行装置。
【請求項１０】
前記フィードバック制御手段は、
前記プログラム毎の前記目標実行速度情報から求めたスレッド間目標実行比率に、前記実行完了速度から求めたスレッド間の実行比率が略一致するように、前記命令発行手段に命令を発行させる、
ことを特徴とする請求項１記載のマルチスレッド実行装置。
【請求項１１】
複数のスレッドを切り替えて実行するマルチスレッド実行方法であって、
複数のプログラムが記憶されたプログラム記憶手段から、命令を読み出すステップと
命令発行手段が、読み出した命令を発行するステップと、
命令実行手段が、前記命令を実行するステップと、
実行速度監視手段が、命令の実行完了速度を監視するステップと、
前記プログラム毎に、命令の目標実行速度情報を記憶する目標実行速度情報記憶手段から読み出した前記目標実行速度情報に、前記実行完了速度が略一致するように、フィードバック制御手段が、前記命令発行手段に命令を発行させるステップと、
を有することを特徴とするマルチスレッド実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
複数のプログラムを独立に実行可能なマルチスレッド実行装置及びマルチスレッド実行方法に関し、特に、プログラム毎に命令の発行比率を調整可能なマルチスレッド実行装置及びマルチスレッド実行方法に関する。
【背景技術】
【０００２】
プログラムを効率よく実行するための種々の方法が考えられている。従来における実行効率の向上のアプローチの多くは、ＣＰＵの演算回路がプログラムを実行していない時間を少なくしようとするものである。例えば、分岐やユーザの操作による処理内容の確定待ちを低減する技術（例えば、特許文献１、３参照。）、入出力割り込みによるソフト的なオーバーヘッドを低減する技術（例えば、特許文献２参照。）、コンテキストの切り替え等、ハード的なオーバーヘッドを低減する技術（例えば、特許文献４参照。）が提案されている。
【０００３】
特許文献１では、静的に処理順序を決定可能なプログラムの部分を、コンパイル時にＰＵ（Processing  Unit）の特性に応じて配置しておくヘテロジニアスなマルチプロセッサが開示されている。また、特許文献２には、共有資源にアクセスするためのサブシステムコールをマスクすることで、ハイパバイザーによる介入を制御する入出力サブシステムコール命令制御方法が開示されている。ハイパバイザーによる介入を制御することで、割り込みによるオーバーヘッドを抑制することができるとしている。また、特許文献３には、複数のプロセッサに投機的に命令を発行するマルチスレッド処理装置において、各プロセッサのスレッド実行開始、終了、実行状態の切り替え、及び、スレッド間のデータ転送を制御するスレッドマネージャを有するマルチスレッド処理装置が開示されている。複数のプログラム経路を同時に実行することで、投機的実行の予測精度を向上させることができるとしている。また、特許文献４には、複数のハードウェアスレッドを有するマルチスレッドプロセッサにおいて、スレッドにプログラムカウンタとレジスタセットを固定的に割り当て、待機状態のスレッドと実行状態のスレッドを切り替えるマルチスレッド実行方法が開示されている。スレッドの準備に要する時間を削減できるので処理速度を向上できるとしている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−３２８４１６号公報
【特許文献２】特開平６−３５７３１号公報
【特許文献３】特開２０００−４７８８７号公報
【特許文献４】特開２００４−２３４１２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１〜４に代表される従来の技術のように実行効率を単に向上させるだけでは、２つのプログラム間に実行タイミングの依存性があるシステムに影響を及ぼすおそれがあるという問題がある。
【０００６】
図１（ａ）は、プログラム＃０の実行タイミングとプログラム＃１の実行タイミングの関係を説明する図の一例である。プログラム＃０はＣＰＵ＿Ａ１により実行され、プログラム＃１はＣＰＵ＿Ｂ１により実行されている。ＣＰＵ＿Ａ１とＣＰＵ＿Ｂ１は、一般的には別のマイコンに実装されている。
【０００７】
プログラム＃０は処理ａを実行し、プログラム＃１は、処理ｂ１と処理ｂ２を実行する。処理ｂ２は、処理ａの処理結果を利用して実行されるものである。図１（ａ）ではプログラム＃０とプログラム＃１の実行タイミングが同期するよう設計されているので、ＣＰＵ＿Ｂ１は処理ａの処理結果を利用して処理ｂ２を実行することができる。
【０００８】
図１（ｂ）は、ＣＰＵ＿Ｂ２がプログラム＃１を実行する際の、プログラム＃０の実行タイミングとプログラム＃１の実行タイミングの関係の一例を示す図である。ＣＰＵ＿Ｂ２はＣＰＵ＿Ｂ１よりＩＰＣ（Instructions  Per  Clock  cycle）が大きいか又は単位処理の実行サイクル数が小さいＣＰＵ、いわゆる実行速度の速いＣＰＵである。ＣＰＵ＿Ｂ２がプログラム＃１を実行することで、処理ｂ１の実行タイミングが早まる。一方、処理ｂ１が完了した時にはＣＰＵ＿Ａ１は処理ａを完了してない。このため、ＣＰＵ＿Ｂ２が処理ｂ２を実行する際に、処理ａの処理結果を利用できず、例えば、ＣＰＵ＿Ｂ２は１つ前の処理ａの処理結果を利用して処理ｂ２を実行してしまうなどの不具合が生じる。
【０００９】
ところで、ハードウェア・マルチスレッド技術を搭載したＣＰＵや、１つのＣＰＵに複数のコアを搭載したマルチコアＣＰＵ、が利用できるようになってきた。そこで、それまでは複数のＣＰＵ＿Ａ１で実行していたプログラム＃０とＣＰＵ＿Ｂ１で実行していたプログラム＃１を、１つのＣＰＵに移植して実行することが考えられている。このような技術は、例えば、車載ＬＡＮに接続された複数のＥＣＵ（Electronic  Control  Unit）をより少ない数のＥＣＵに統合する際に利用することができる。
【００１０】
しかしながら、統合後のＥＣＵに搭載されたＣＰＵは、統合前のＥＣＵに搭載されていたＣＰＵとアーキテクチャが異なるため、実行タイミングに依存関係のあるプログラム＃０とプログラム＃１を単に統合後のＥＣＵに移植しただけでは、図１（ｂ）と同様の不都合が生じてしまう。
【００１１】
このような不都合に対し、統合用ＣＰＵに異なるプログラム＃０，１を移植した場合、命令の発行比率を調整することが考えられる。
【００１２】
図２（ａ）は、統合前のＣＰＵ＿Ａ１とＣＰＵ＿Ｂ１、及び、統合用ＣＰＵの関係を説明する図の一例である。ＣＰＵ＿Ａ１の動作クロックは６０ＭＨｚ、ＣＰＵ＿Ｂ１の動作クロックは１８０ＭＨｚである。説明を簡単にするため両者のＩＰＣは同じ（ＩＰＣ＝１）としたが、両者のＩＰＣは異なっていてもよい。また、統合用ＣＰＵのＣＰＵ動作クロックは１８０ＭＨｚである。したがって、ＣＰＵ＿Ｂ１の実行速度はＣＰＵ＿Ａ１の３倍である。なお、統合用ＣＰＵが有するｖＣＰＵ＿Ａ１、ｖＣＰＵ＿Ｂ１は仮想ＣＰＵを意味する。
【００１３】
ＣＰＵ＿Ａ１が実行していたプログラム＃０とＣＰＵ＿Ｂ１が実行していたプログラム＃１の実行タイミングを合わせるためには、元の実行速度に応じて、統合用ＣＰＵにおける命令発行比率を変えればよい。
【００１４】
図２（ｂ）は命令の発行比率と実行完了数の関係の一例を示す図である。実行速度が３倍異なるのであれば、統合用ＣＰＵは、ｖＣＰＵ＿Ｂ１に３回、命令を発行する毎に、ｖＣＰＵ＿Ａ１に１回、命令を発行する。こうすることで、統合前にＣＰＵ＿Ａ１が実行していたプログラム＃０と、ＣＰＵ＿Ｂ１が実行していたるプログラム＃１の実行タイミングを、統合用ＥＣＰＵにおいても、ある程度、揃えられる可能性がある。
【００１５】
しかしながら、統合用ＣＰＵとＣＰＵ＿Ａ１及びＣＰＵ＿Ｂ１は動作周波数だけでなく、命令セットやＩＰＣなど単位時間当たりの命令実行完了数が異なる。また、統合用ＣＰＵが、段数の多いパイプラインや、複数のパイプラインを備えている場合、ハザードやストールにより単位時間当たりの命令実行完了数が変わるため、ＩＰＣを考慮して命令の発行比率を決定しても、所望の命令実行比率は得られない。
【００１６】
このため、命令の発行比率を制御するだけでは、ｖＣＰＵ＿Ａ１の単位時間当たりの命令実行完了数とＣＰＵ＿Ａ１の単位時間当たりの命令実行完了数、及び、ｖＣＰＵ＿Ｂ１の単位時間当たりの命令実行完了数とＣＰＵ＿Ｂ１の単位時間当たりの命令実行完了数、を一致させることができない。例えば、命令の発行比率を制御しても、単位時間におけるプログラム＃０と＃１の命令実行完了数はそれぞれ変動を繰り返し、最終的にはプログラム＃０とプログラム＃１実行タイミングが大きく異なることになってしまう。
【００１７】
すなわち、従来のマルチスレッド技術又はマルチコアを利用して、複数のプログラム＃０，１を統合した場合、統合前の複数のプログラム＃０，１の実行タイミングを保証することができないという問題があった。
【００１８】
本発明は、上記課題に鑑み、ＣＰＵによる単位時間の命令の実行完了回数を動的に最適化できるマルチスレッド実行装置及びマルチスレッド実行方法を提供することを目的とする。
【課題を解決するための手段】
【００１９】
上記課題に鑑み、本発明は、複数のプログラムが記憶されたプログラム記憶手段と、プログラム記憶手段から読み出した命令を発行する命令発行手段と、命令を実行する命令実行手段と、を有するマルチスレッド実行装置であって、プログラム毎に、命令の目標実行速度情報を記憶する目標実行速度情報記憶手段と、命令の実行完了速度を監視する実行速度監視手段と、実行完了速度が目標実行速度情報に略一致するように、命令発行手段に命令を発行させるフィードバック制御手段と、を有することを特徴とする。
【発明の効果】
【００２０】
ＣＰＵによる単位時間の命令の実行完了回数を動的に最適化できるマルチスレッド実行装置及びマルチスレッド実行方法を提供することができる。
【図面の簡単な説明】
【００２１】
【図１】プログラムＡの実行タイミングとプログラムＢの実行タイミングの関係を説明する図の一例である。
【図２】統合前のＣＰＵ＿Ａ１とＣＰＵ＿Ｂ１、及び、統合後のＣＰＵの関係を説明する図の一例である。
【図３】マルチスレッド実行装置の概略構成図の一例である。
【図４】実行状況監視装置１４の概略構成図の一例である。
【図５】スケジュールフィードバック装置の概略構成図の一例である。
【図６】ターゲットプロファイルを模式的に説明する図の一例である。
【図７】ターゲットプロファイル（ＩＰＣ）及びターゲットプロファイル（単位処理の実行サイクル数）の一例を示す図である。
【図８】目標ＩＰＣの算出手順及び目標実行サイクル数の算出手順の一例を示す図である。
【図９】目標ＩＰＣと単位時間毎の命令実行完了数から生成されるスケジュールパラメータ、目標実行サイクル数と単位処理毎の実行サイクル数から生成されるスケジュールパラメータの一例を示す図である。
【図１０】スレッドスケジューリングの制御系を模式的に示す図の一例である。
【図１１】各スレッドの実行状態の一例を示す図である。
【図１２】マルチスレッド装置の効果を説明する図である。
【図１３】マルチスレッド実行装置がスレッドの割り当て時間を制御する手順を示すフローチャート図の一例である。
【図１４】マルチスレッド実行装置の概略構成図の一例である。
【図１５】命令発行比率に基づくスケジュールパラメータの一例を示す図である。
【図１６】スレッドスケジューリングの制御系を模式的に示す図の一例である。
【発明を実施するための形態】
【００２２】
以下、本発明を実施するための形態について図面を参照しながら説明する。
図３は、マルチスレッド実行装置１００の概略構成図の一例を示す。始めにマルチスレッド実行装置１００が、プログラムの実行回数を動的に最適化する手順の概略を説明する。
（１）アプリ実行プロファイル又は標準プロファイル（以下、両者を区別しない場合、「ターゲットプロファイル」という）を用意する。
【００２３】
くわしくは後述するが、アプリ実行プロファイルは、統合前のＣＰＵ（以下、エミュレート対象ＣＰＵという）によるプログラムの単位時間毎の命令実行完了数、又は、単位処理毎の実行サイクル数である。すわなち、エミュレート対象ＣＰＵの実行速度の指標となる情報である。また、標準プロファイルは、アプリ実行プロファイルが得られない場合の、標準的な単位時間毎の命令実行完了数又は単位処理毎の実行サイクル数である。
（２）実行状況監視装置１４が、各プログラム毎に（ハードウェア・マルチスレッド毎に）、単位時間毎の命令実行完了数又は単位処理毎の実行サイクル数をカウントする。
（３）スケジュールフィードバック装置１２が、ターゲットプロファイルと命令実行完了数又は単位処理の実行サイクル数を比較して、プログラム毎に、スレッドスケジュール装置１１にスケジュールパラメータをフィードバックする。
（４）スレッドスケジュール装置１１は、スケジュールパラメータに応じて各プログラムの命令の発行比率を制御する。これにより、スレッドスケジュール装置１１は、ターゲットプロファイルと略一致するように各プログラムの命令発行比率を調整する。
【００２４】
したがって、本実施形態のマルチスレッド実行装置１００は、複数のＥＣＵを１つに統合しても各プログラムの単位時間毎の命令実行完了数又は単位処理の実行サイクル数を統合前とほぼ同じにできるので、ＥＣＵの統合時に各プログラムを再コーディングする必要がない。また、各プログラム間の実行タイミングの検討も不要である。特に、後述するように、単位処理の実行サイクル数をフィードバック制御に用いることで、異種マイコンへの統合が可能となる。
【００２５】
〔マルチスレッド実行装置１００のハードウェア構成〕
マルチスレッド実行装置１００はプロセッサ５０と、プロセッサ５０と接続されたアプリ実行プロファイル記憶部６０又は標準プロファイル記憶部７０と、を有する。アプリ実行プロファイル記憶部６０又は標準プロファイル記憶部７０はいずれか一方があればよいが、両方を備えていてもよい。両方を備える場合、スケジュールフィードバック装置１２は、どちらからターゲットプロファイルを読み出すかを選択できる。例えば、あるプログラムはエミュレート対象ＣＰＵでアプリ実行プロファイルが取得できたが、別のプログラムは取得できなかった場合、スケジュールフィードバック装置１２は、プログラムに応じて読み出すターゲットプロファイルを切り替える。アプリ実行プロファイル記憶部６０又は標準プロファイル記憶部７０は、例えばフラッシュメモリ等の不揮発メモリを実体とする。両者を別体に設ける必要はなく、また、プロセッサ５０内に搭載されていてもよい。
【００２６】
プロセッサ５０は、ハードウェア・マルチスレッド型の実行環境を有する。ハードウェア・マルチスレッドとは、命令バッファ１７、レジスタファイル１６（システムレジスタ等）をそれぞれ複数備え、これらを適宜切り替えて命令を実行する構造をいう。なお、プログラムやその一部の関数等を処理の実行単位としてスレッドと呼ぶことがあるが、本実施形態のスレッドとはハード的な命令の供給手段をいう。図３（ａ）では、３つの命令バッファ１７と３つのレジスタファイル１６を有するので、マルチスレッド実行装置１００は３つのスレッド＃０〜＃２を有する。図３（ｂ）はスレッド＃０〜＃２とハードウェアリソースの関係の一例を示す図である。
【００２７】
マルチスレッド実行装置１００は、各スレッドを１クロックで切り替えて異なるプログラムを実行するので、物理的に存在する１つのプロセッサ５０により複数の仮想的なＣＰＵを有するように振る舞う。このため、命令バッファ＃０から演算回路１５をスレッド＃０、命令バッファ＃１から演算回路１５をスレッド＃１、命令バッファ＃２から演算回路１５をスレッド＃２、といい、スレッド＃０〜＃２とその他の周辺回路を併せてｖＣＰＵ（virtual  ＣＰＵ）＃０〜＃２と称する。このように、仮想的なｖＣＰＵ＃０〜＃２を複数有することで、統合前のＣＰＵでそれぞれ独立に実行されていた異なるプログラム＃０〜＃２を独立に実行することができる。
【００２８】
なお、本実施形態は、ハードウェア・マルチスレッドを対象に説明するが、マルチコアに対しても命令実行完了数のフィードバック制御を適用することができる。この場合、マルチコアがそれぞれフィードバック制御を有していてもよいし、各マルチコアが実行するスレッドをスケジュールする別のＣＰＵコアを有していてもよい。また、マルチコアに共通のスケジューラ（ＯＳ）がフィードバック制御してもよい。
【００２９】
命令バッファ＃０〜＃２は、それぞれ命令側メモリバス２２と接続されている。命令側メモリバス２２は、プログラム＃０〜＃２を記憶したＥＥＰＲＯＭ等のプログラム記憶部２６と接続されている。スレッドスケジュール装置１１は、命令バッファ＃０〜＃２毎に設けられた不図示のプログラムカウンタのアドレスを命令側メモリバス２２に出力して、命令バッファ＃０〜＃２にプログラム＃０〜＃２の命令を１つずつ読み出す。命令バッファ＃０〜＃２は、切り替えスイッチ１９に接続されている。切り替えスイッチ１９は、同時に１つの命令バッファ１７だけを命令デコーダ１８に接続するスイッチである。
【００３０】
スレッドスケジュール装置１１は、命令を発行する命令バッファ＃０〜＃２を選択する装置である。後述するように、スレッドスケジュール装置１１は、スケジュールフィードバック装置１２からフィードバックされたスケジュールパラメータに基づき、命令を発行するスレッドを決定する。こうすることで、プログラム毎に独立にＩＰＣ（Instructions  Per  Clock  cycle）を制御でき、命令発行比率を制御できる。なお、各スレッド＃０〜＃２の命令の発行比率を静的に決定することもできる。
【００３１】
スレッドスケジュール装置１１は２つの切り替えスイッチ１９、２１とそれぞれ接続されており、切り替えスイッチ１９の接続先を命令バッファ＃０〜＃２のいずれかに切り替えることで、命令デコーダ１８に接続する命令バッファ＃０〜＃２を切り替える。スレッドスケジュール装置１１が選択したスレッド＃０〜＃２の命令が命令バッファ＃０〜＃２から読み出され、命令デコーダ１８に送出される。また、スレッドスケジュール装置１１は、命令バッファ＃０〜＃２の全てを命令デコーダ１８と切り離すこともできる。同様に、スレッドスケジュール装置１１は、切り替えスイッチ２１の接続先をレジスタファイル＃０〜＃２のいずれかに切り替えることで、命令デコーダ１８と演算回路１５が使用するレジスタファイル＃０〜＃２を切り替える。
【００３２】
命令デコーダ１８は命令を解読し、解読結果をそのスレッドのレジスタファイル＃０〜＃２に転送すると共に、パイプライン制御回路１３に送出する。レジスタファイル＃０〜＃２は、演算回路１５の演算結果、及び、データ側メモリバス２３に接続されたデータ記憶部２７から読み出されたデータを一時的に記憶する一群のレジスタである。命令デコーダ１８による解読結果は、例えば、演算の種別、１以上のソースオペランド、結果の格納場所、等である。ソースオペランドはレジスタファイル１６に供給されるので、演算回路１５が演算に使用するレジスタが指定される。
【００３３】
命令デコーダ１８が演算の種類をパイプライン制御回路１３に送出すると、パイプライン制御回路１３は演算回路１５が実行する演算を指定する。演算回路１５は、演算の種類に応じて、レジスタファイル１６に記憶されたデータに演算を施す。演算の内容は、ストア、ロード、加算、乗算、除算、分岐等、演算回路１５に応じて種々のものが用意されている。そして、ストアやロード命令の場合、演算回路１５は演算したアドレスを指定してデータ側メモリバス２３からデータをフェッチする。そして、演算回路１５は、加算等の演算結果、又は、読み出したデータを、レジスタファイル１６の、結果の格納場所により指定されるレジスタにライトバックする。
【００３４】
パイプライン制御回路１３は、以上のパイプライン制御の各ステージ（命令フェッチ、命令デコード、命令実行、オペランドフェッチ、ライトバック等）を動作クロックに基づき制御する。また、パイプライン処理ではハザード（各ステージの処理を決まった時間内に終わらせることを阻害する要因）が不可避なので、パイプライン制御回路１３は、演算の種類やソースオペランド等を参照して、パイプラインにストールを発生させたり、ＮＯＰ命令を挿入したり、分岐により不要となった各ステージの内容をフラッシュするなどの処理を行う。例えば、あるスレッド（例えばスレッド＃０）にＩ／Ｏ待ちのようなハザードが生じた場合、パイプライン制御回路１３はスレッドスケジュール装置１１にそのスレッド＃０を停止させ、別のスレッド（例えばスレッド＃１）を実行するよう要求する。
【００３５】
パイプライン制御回路１３は実行状況監視装置１４と、実行状況監視装置１４はスケジュールフィードバック装置１２とそれぞれ接続されている。実行状況監視装置１４は、スレッド毎に、単位時間当たりの命令実行完了数又は単位処理の実行サイクル数をカウントする（以下、両者を区別しない場合、単に「カウント値」という。）。また、スケジュールフィードバック装置１２は、スレッド＃０〜＃２毎に、カウント値とターゲットプロファイルを比較して、スケジュールパラメータを生成し、スレッドスケジュール装置１１に出力する。以下、これらについて詳細に説明する。
【００３６】
〔実行状況監視装置１４〕
図４は、実行状況監視装置１４の概略構成図の一例を示す。実行状況監視装置１４は、実行状況監視部１４１とカウンタ部１４２を有する。単位時間当たりの命令実行完了数又は単位処理の実行サイクル数は、いずれも広い意味で命令の実行速度を表すものである。単位時間当たりの命令実行完了数は、エミュレート対象ＣＰＵとｖＣＰＵ＃０〜＃２の命令セットアーキテクチャ（ＩＳＡ）が同一の場合に、単位処理の実行サイクル数はＩＳＡが異なる場合に、それぞれスケジュールフィードバック装置１２がスケジュールパラメータを生成するために用いられる。
【００３７】
ＩＳＡは、ＣＰＵに実装された一式の命令形式（二進数のオペコード）を意味する。したがって、ＩＳＡが同一であればある命令を実行完了するまでの実行命令数は、エミュレート対象ＣＰＵとｖＣＰＵ＃０〜＃２で同じである。ＩＳＡが同一でもパイプライン構成等で実行サイクル数は変化する。ある処理の命令数が同一なので命令実行完了数で進捗を一致させることができる。
【００３８】
一方、ＩＳＡが異なる場合はある処理を実行完了するまでの実行命令数がエミュレート対象ＣＰＵとｖＣＰＵで異なるので、単位時間当たりの命令実行完了数がソースコード上の命令実行完了の進捗と一致しない。このため、エミュレート対象ＣＰＵとｖＣＰＵ＃０〜＃２のＩＳＡが異なる場合、単位処理の実行サイクル数を利用して、ソースコード上の実行の進捗が一致するようにスケジュールパラメータを生成する。
【００３９】
・単位時間毎の命令実行完了数
まず、単位時間毎の命令実行完了数のカウントについて説明する。パイプライン制御回路１３は、１つの命令をパイプライン処理の各ステージに遷移させながら、回路やレジスタにデータを送出する。したがって、１つの命令が実行完了したこと（例えば、レジスタファイル１６へのライトバック時）は、パイプライン制御回路１３にとって既知である。また、どのスレッドの命令を実行完了したかは、スレッドスケジュール装置１１や切り替えスイッチ１９の状態から明らかとなる。パイプライン制御回路１３は、１つの命令が実行完了すると命令実行完了情報を実行状況監視装置１４に出力する。具体的には、パイプライン制御回路１３と実行状況監視装置１４がスレッドの数だけ信号線で接続されており、パイプライン制御回路１３は実行完了したスレッドに対応した信号線にＨｉｇｈ信号を出力する。
【００４０】
実行状況監視部１４１は命令実行完了情報を取得すると、カウンタ部１４２にカウントアップを要求する。具体的にはスレッド毎に設けられたカウント回路＃０〜＃２にＨｉｇｈ信号を出力する。これにより、カウンタ部１４２は、スレッド毎に実行完了した実行完了命令数をカウントできる。単位時間の命令実行完了数は、大きいほど実行速度が大きいことを意味する。
【００４１】
そして、カウンタ部１４２は、単位時間毎に、カウント値をスケジュールフィードバック装置１２に出力する。また、実行状況監視部１４１は、カウンタ部１４２がカウント値をスケジュールフィードバック装置１２に出力した直後に、カウンタ部１４２をリセット（ゼロに戻す）する。したがって、カウンタ部１４２は、単位時間毎の命令実行完了数をスケジュールフィードバック装置１２に出力することができる。なお、単位時間は、例えば、動作クロックの×１０〜１０００程度である。単位時間が余り短いとカウント値の変動が大きく、長いとフィードバック制御に好ましくないので、単位時間として極端に短くない程度の実行サイクル数が、実行状況監視装置１４に設定されている。
【００４２】
・単位処理の実行サイクル数
単位処理の実行サイクル数のカウントについて説明する。単位処理とは、例えば一連の処理をまとめた関数である。例えばＣ言語では「関数名〜｛Return；｝」が１つの単位処理である。プロセッサ５０がコンパイルされたオブジェクトコードを実行する場合、コンパイルにより、オブジェクトコードには、関数の始まり・終わりにそれぞれスタックポインタの初期化・後処理する所定のコードが記述される。パイプライン制御回路１３は、命令デコーダ１８から、これら関数の始まりを示すコードと終わり示すコードを検出するとＨｉｇｈ信号を実行状況監視装置１４に出力する。
【００４３】
実行状況監視部１４１は、関数の始まりのＨｉｇｈ信号を取得するとカウンタ部１４２に動作クロックのカウント開始を要求し、次に終わりのＨｉｇｈ信号を取得するとカウンタ部１４２にカウント値をスケジュールフィードバック装置１２に出力させる。また、実行状況監視部１４１は、Ｈｉｇｈ信号を取得する度にカウンタ部１４２をリセット（ゼロに戻す）する。したがって、カウンタ部１４２は、関数の実行完了に必要な実行サイクル数（単位処理毎の実行サイクル数）をカウントして出力することができる。単位処理毎の実行サイクル数は、大きいほど実行速度が遅いことを意味する。
【００４４】
単位処理の実行サイクル数をフィードバック制御に用いることで、ＩＳＡが異なる例えば異種マイコンへ複数のプログラム＃０〜＃２を移植することが可能となる。
【００４５】
〔スケジュールフィードバック装置１２〕
図５は、スケジュールフィードバック装置１２の概略構成図の一例を示す。スケジュールフィードバック装置１２は、フィードバック値生成部１２１とターゲットパラメータ保存部１２２を有する。
【００４６】
＜ターゲットプロファイル＞
図６は、ターゲットプロファイルを模式的に説明する図の一例である。図６（ａ）はエミュレート対象ＣＰＵ＃０〜＃２の演算量（広い意味での処理負荷）を示す。時間と共に演算量が変動し、エミュレート対象ＣＰＵ＃０〜＃２によって変動態様も異なることが示されている。プログラム＃０〜２を移植する際は、エミュレート対象ＣＰＵ＃０〜＃２が実行していたプログラム＃０〜＃２を、処理能力の高いｖＣＰＵ＃０〜＃２に実行させることが多い。
【００４７】
ｖＣＰＵ＃０〜＃２の処理能力を最大に活用してプログラム＃０〜＃２を実行すると、単位時間の演算量が多くなるので、図６（ｂ）の点線で示すように、各プログラム＃０〜＃２の実行が早まる傾向になる。これでは、ｖＣＰＵ＃０〜＃２によるプログラム＃０〜＃２の実行タイミングを保証できない。そこで、図６（ｂ）の実線に示すように、エミュレート対象ＣＰＵ＃０〜＃２の演算量がｖＣＰＵ＃０〜＃２にて再現されるように、ｖＣＰＵ＃０〜＃２の処理能力に応じて演算量を換算する。換算後の演算量は一様に低下するが演算量の変動態様はエミュレート対象ＣＰＵと変わっていない。換算後の演算量と一致するように、ｖＣＰＵ＃０〜＃２に発行する命令をスケジューリングすることで、エミュレート対象ＣＰＵとｖＣＰＵ＃０〜＃２の単位時間当たりの命令実行完了数又は単位処理の実行サイクル数を一致させることができる。換算後の演算量が、ターゲットプロファイルである。
【００４８】
図６（ｃ）はプロセッサ５０全体の演算量を示す。プロセッサ５０全体の演算量は、図６（ｂ）の演算量を時間毎にそのまま累計した形状となる。マルチスレッド実行装置は、このような複雑に変動する演算量が得られるように動的に命令発行比率を制御できる。
【００４９】
図５に戻り、ターゲットパラメータ保存部１２２は、ターゲットプロファイル値を保存する。ターゲットプロファイルについて説明する。図７（ａ）と図７（ｂ）は、ターゲットプロファイルの一例を示す。上記のとおり、ターゲットプロファイルには、アプリ実行プロファイルと、標準プロファイルがある。
【００５０】
・アプリ実行プロファイル
まず、アプリ実行プロファイルについて説明する。アプリ実行プロファイルも、単位時間当たりの命令実行完了数と単位処理の実行サイクル数のいずれかの場合がある。これらの取得には、実行状況監視装置１４が単位時間当たりの命令実行完了数又は単位処理の実行サイクル数をカウントした方法と同様の方法を利用すればよい。
【００５１】
図７（ａ）は単位時間当たりの命令実行完了数から求めたＩＰＣを示す。ＩＰＣは、「命令実行完了数÷単位時間（１クロック当たりの時間）」から算出される。時刻Ｔｎ毎にＩＰＣがプロットされている。単位時間当たりの命令実行完了数は単位時間毎にカウントされるので、ＩＰＣは等間隔にプロットされている。
【００５２】
図７（ｂ）は単位処理の実行サイクル数を示す。単位処理は、それぞれ実行サイクル数が異なるので、単位処理の実行サイクル数は時間に対し必ずしも等間隔にプロットされない。
【００５３】
上述したように、エミュレート対象ＣＰＵとｖＣＰＵ＃０〜＃２のＩＳＡが同一の場合は、図７（ａ）のＩＰＣをターゲットプロファイルとし、ＩＳＡが異なる場合は、図７（ｂ）の単位処理の実行サイクル数をターゲットプロファイルとする。エミュレート対象ＣＰＵは明らかであるし、移植先のプロセッサ５０のＩＳＡも明らかなので、図７（ａ）又は図７（ｂ）のターゲットプロファイルのうちいずれか一方をアプリ実行プロファイル記憶部６０に記憶しておけばよい。
【００５４】
なお、エミュレート対象ＣＰＵがＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上でプログラムを実行する場合、ＯＳのコードも含んだ形でアプリ実行プロファイルを測定する。または、ＯＳ実行区間は標準プロファイルを適用してもよい。
【００５５】
・標準プロファイル
アプリ実行プロファイルが、エミュレート対象ＣＰＵがプログラム＃０〜＃２を実行した際の実測値であるのに対し、標準プロファイルは人為的又は機械的に設定されたターゲットプロファイルである。例えば、エミュレート対象ＣＰＵでは、単位時間当たりの命令実行完了数又は単位処理の実行サイクル数のカウントが困難な場合、スケジュールフィードバック装置１２は標準プロファイルを利用する。
【００５６】
最も簡易に標準プロファイルを設定する場合、例えば設計者が一定のＩＰＣ又は単位処理の実行サイクル数を標準プロファイル記憶部７０に登録する。エミュレート対象ＣＰＵにおけるプログラムを開発した段階で、エミュレート対象ＣＰＵのおよそのＩＰＣや単位処理の実行サイクル数は設計者が把握していることが多い。したがって、開発者はエミュレート対象ＣＰＵ毎にＩＰＣや単位処理の実行サイクル数を設定することができる。例えば、エンジン制御用のプログラムではＩＰＣ＝０．２、単位処理の実行サイクル数＝１００、等のように設定する。
【００５７】
また、機械的に標準プロファイルを求めることができる。あるエミュレート対象ＣＰＵについて、演算の種類毎に必要なクロック数は統計的に知られていることが多い。演算には、加算、乗算、除算等の種類があるが、演算毎に最小限必要なクロック数はほぼ固定である。一方、分岐命令や入出力待ちがあると演算の実行完了に必要なクロック数は多くなるが、これらによる実行完了までのクロック数の増加がどの程度か統計的に算出できる。したがって、エミュレート対象ＣＰＵが実行していたオブジェクトコードの各命令を固定のクロック数で重み付けし、また、分岐命令や入出力待ちを生じさせる命令に統計的な重み付けをすれば、エミュレート対象ＣＰＵがプログラムを実行した際の各命令のクロック数は統計的に推定できる。
【００５８】
また、所定数の命令毎に必要なクロック数を算出して所定数毎に平均をとれば、１つの命令を実行するために必要なクロック数が分かる。例えば、１０命令の実行完了に５０の動作クロックが必要な場合、１つの命令を実行するために「５０／１０＝５クロック」必要となる。この逆数（０．２）がＩＰＣである。１つの動作クロックが費やす時間は、エミュレート対象ＣＰＵの動作周波数から算出できる。例えば、エミュレート対象ＣＰＵの動作周波数が２００ＭＨｚの場合、１動作クロックに費やす時間は、１／（２×１０８）〔ｓ〕である。したがって、図７（ａ）と同様に時間とＩＰＣが対応づけられたターゲットプロファイルを設定することができる。
【００５９】
また、オブジェクトコードから関数の始まりと終わりを示す所定のコードを検出し、所定のコード間のクロック数を累計すれば、単位処理の実行サイクル数を算出することができる。１動作クロックに費やす時間と、単位処理の実行サイクル数を掛ければ、単位処理の実行時間が分かるので、図７（ｂ）と同様に時間と単位処理の実行サイクル数が対応づけられたターゲットプロファイルを設定することができる。
【００６０】
＜スケジュールパラメータの算出＞
エミュレート対象ＣＰＵとｖＣＰＵ＃０〜＃２のＩＳＡが同一の場合、フィードバック値生成部１２１には、実行状況監視装置１４から単位時間毎の命令実行完了数が与えられ、ＩＳＡが異なる場合、単位処理の実行サイクル数が与えられる。
【００６１】
まず、単位時間毎の命令実行完了数が与えられた場合について説明する。
図８（ａ）は目標ＩＰＣの算出手順の一例を示す図である。図示するように、
目標ＩＰＣ＝  エミュレート対象ＣＰＵのＩＰＣ（ターゲットプロファイル値）  ÷  エミュレート対象ＣＰＵの動作周波数とｖＣＰＵの動作周波数の比  …  （１）
エミュレート対象ＣＰＵのＩＰＣは、図７（ａ）のターゲットプロファイルから読み出したＩＰＣである。また、一般にはプロセッサ５０が新しいほど（プロセスルールが微細であるほど）動作周波数が大きくなるため、エミュレート対象ＣＰＵの動作周波数とｖＣＰＵ＃０〜＃２の動作周波数の比は１以上となることが多い。以上から、エミュレート対象ＣＰＵのＩＰＣが例えば「０．８」であり、エミュレート対象ＣＰＵの動作周波数とｖＣＰＵ＃０〜＃２の動作周波数の比が「２」の場合、目標ＩＰＣは「０．４」となる。フィードバック値生成部１２１は、時刻Ｔｎが経過する毎に、式（１）の算出を実行する。なお、これに対しスケジュールパラメータは動作クロック毎にスレッドスケジュール装置１１に送出される。
【００６２】
図９（ａ）は、目標ＩＰＣと単位時間毎の命令実行完了数から生成されるスケジュールパラメータの一例を示す図である。スケジュールパラメータを生成するため、まず、フィードバック値生成部１２１は単位時間毎の命令実行完了数（実測値）を実測ＩＰＣに変換する。実測ＩＰＣは、「命令実行完了数÷単位時間（１クロック当たりの時間）」である。
【００６３】
フィードバック値生成部１２１は、目標ＩＰＣと実測ＩＰＣを比較して、スケジュールパラメータを決定する。例えば、目標ＩＰＣが「０．４」、実測ＩＰＣが「０．２７」の場合、「0．4−0．27＝0．13」を算出し、この差に応じてスケジュールパラメータを決定する。フィードバック値生成部１２１は、目標ＩＰＣと実測ＩＰＣの差の大きさを、例えば５段階程度に分類することでスケジュールパラメータを決定する。差が大きいほどスケジュールパラメータが大きくなる。差が負値の場合は、スケジュールパラメータも負値となる。このようにスケジュールパラメータを生成すると、例えば、スケジュールパラメータは「−５〜＋５」の整数となる。
【００６４】
図９（ａ）では、アプリ実行プロファイル記憶部８０又は標準プロファイル記憶部７０から読み出したターゲットプロファイル値が切り替わる毎に、目標ＩＰＣが算出されている。同じ目標ＩＰＣに対し、例えばクロック毎に、スケジュールフィードバック装置１２がスケジュールパラメータをスレッドスケジュール装置１１にフィードバックした結果、徐々に実測ＩＰＣが目標ＩＰＣに近づいている。
【００６５】
次に、スケジュールフィードバック装置１２に、単位処理の実行サイクル数が与えられた場合について説明する。
図８（ｂ）は目標実行サイクル数の算出手順の一例を示す図である。図示するように、
目標実行サイクル数＝  エミュレート対象ＣＰＵの単位処理の実行サイクル数（ターゲットプロファイル値）  ×  エミュレート対象ＣＰＵの動作周波数とｖＣＰＵの動作周波数の比  …  （２）
エミュレート対象ＣＰＵの単位処理の実行サイクル数は、図７（ｂ）のターゲットプロファイルから読み出した単位処理の実行サイクル数である。エミュレート対象ＣＰＵの単位処理の実行サイクル数が例えば「１００」であり、エミュレート対象ＣＰＵの動作周波数とｖＣＰＵ＃０〜＃２の動作周波数の比が「２」の場合、目標実行サイクル数は「２００」となる。フィードバック値生成部１２１は、時刻Ｔｎが経過する毎に、式（２）の算出を実行する。なお、スケジュールパラメータは動作クロック毎に送出される。
【００６６】
図９（ｂ）は、目標実行サイクル数と単位処理毎の実行サイクル数から生成されるスケジュールパラメータの一例を示す図である。フィードバック値生成部１２１は、目標実行サイクル数と、単位処理の実行サイクル数（実測値）を比較して、スケジュールパラメータを決定する。例えば、目標実行サイクル数が「２００」、単位処理の実行サイクル数（実測値）が「１５０」の場合、「２００−１５０＝５０」を算出し、この差に応じてスケジュールパラメータを決定する。フィードバック値生成部１２１は、目標実行サイクル数と単位処理の実行サイクル数（実測値）の差の大きさを、例えば５段階程度に分類することでスケジュールパラメータを決定する。差が負値の場合は、スケジュールパラメータも負値となる。なお、実行サイクル数は値が大きくなるので、目標ＩＰＣと単位時間毎の命令実行完了数の差でなく、比によってスケジュールパラメータを生成してもよい。
【００６７】
〔スレッドスケジューリング〕
スレッドスケジューリングについて説明する。１つのスレッド内でより小さい粒度のタスクについてスケジューリングする場合があるが、本実施形態では、スレッド＃０〜＃２間のスケジューリングについて説明する。スレッドスケジューリングは、命令デコーダ１８にどの命令バッファ＃０〜２を接続するか（切り替えスイッチ１９の切り替え先を決定する）と同等である。
【００６８】
スレッドスケジューリングには次のような決定要素がある。上位ほど、決定要素としての優先順位が高い。
（P1）ハードウェア割り込み
（P2）スケジュールパラメータ
（P3）スレッド内部要因
ハードウェア割り込みは、スレッドに関係するセンサや電源等に異常が検出された場合や、ユーザ操作が入力された場合に、スレッドに優先的に命令を供給する状況が生じることを言う。スレッド内部要因は、入出力待ち、他のスレッドの処理待ち、ハザード、等の発生と解消により、スレッドへの命令の供給停止・再開が生じることをいう。
【００６９】
これらに対し本実施形態のスレッドスケジュール装置１１は「スケジュールパラメータ」に基づきスレッドスケジューリングすることを特徴とする。優先順位の高いハードウェア割り込みは発生することが少ないとしてよいので、スレッドスケジュール装置１１は、スレッド内部要因より優先的にスケジュールパラメータに基づきスレッドスケジューリングすることができる。
【００７０】
図１０は、スレッドスケジューリングの制御系を模式的に示す図の一例である。これまで説明したように、スケジュールフィードバック装置１２には、ターゲットプロファイル値とカウンタ値が入力される。スケジュールフィードバック装置１２は両者から生成したスケジュールパラメータをクロック毎にスレッドスケジュール装置１１に出力する。スレッドスケジュール装置１１は、スケジュールパラメータに応じて、スレッド毎に、切り替えスイッチ１９を制御して命令デコーダ１８の接続先を命令バッファ＃０〜＃２のいずれかに切り替える。または、いずれにも接続しない。
【００７１】
なお、プロセッサ５０の起動直後は、カウンタ値がカウントされていないので、スレッドスケジュール装置１１は初期値のスケジュールパラメータに基づきスレッドスケジューリングする。初期値のスケジュールパラメータは例えば「０」である。この場合、スレッドスケジュール装置１１は、スレッド＃０〜＃２の命令発行比率を均等にする。
【００７２】
ところで、ｖＣＰＵ＃０〜＃２の時間軸の基準時とターゲットプロファイルの時間軸の基準時を一致させる必要があるので、スレッドスケジュール装置１１は予め定めた基準時と、ターゲットプロファイルの時刻Ｔｎを対応づけておく。例えば、プロセッサ５０にリセット信号が入力された時をターゲットプロファイルのＴ０に対応させてたり、プログラム＃０〜＃２の最初の命令をｖＣＰＵ＃０〜＃２がフェッチした時をターゲットプロファイルのＴ０に対応させておく。
【００７３】
図１１（ａ）は、各スレッドの実行状態の一例を示す図である。図１１（ａ）は比較のために示した図で、スケジュールパラメータによるフィードバックを行わない場合を示す。スレッドスケジュール装置１１は、予め定めた比率で各スレッドを命令デコーダ１８に接続する（命令を発行する）。図では等分に時分割して各スレッドを実行している。これにスレッド内部要因に応じた切り替えが適宜実行される。時分割により割り当てらえる割り当て時間は、１〜１００クロック程度である。
【００７４】
ところで、スレッドスケジュール装置１１があるスレッド＃０〜＃２をスレッドスケジューリングする場合、他のスレッドのスケジュールパラメータを考慮すべきと考えられる。これは、プロセッサ５０の処理能力に充分な余裕があるとは限らず、一方のスレッドの割り当て時間の増大が他方のスレッドの割り当て時間の低減になるおそれがあるためである。そこで、マルチスレッド実行装置１００は、予めスレッドに優先順位を定めておき、優先順位の高いスレッドから割り当て時間を制御する。
【００７５】
図１１（ｂ）は、スケジュールパラメータによりスレッドスケジューリングされた場合のスレッド＃０〜＃２の割り当て時間の一例を示す。優先順位の最も高いスレッドのスケジュールパラメータが「０」でない場合、スレッドスケジュール装置１１はそのスレッドの割り当て時間を制御する。スレッドスケジュール装置１１は、例えば、次のようにして割り当て時間を算出する。
スケジュールパラメータが正値の場合：直前の割り当て時間を「α＋スケジュールパラメータ」倍する。
スケジュールパラメータが負値の場合：直前の割り当て時間を「１／（α＋スケジュールパラメータの絶対値）」倍する。αはスケジュールパラメータに重み付けするパラメータであり、例えば「α＝０．５（０＜α＜１）」である。
【００７６】
例えば、スレッド＃０のスケジュールパラメータが「＋３」の場合、スレッドスケジュール装置１１は、直前の割り当て時間を「０．５＋３」倍する。したがって、優先順位の大きいスレッド＃０の実行タイミングを、優先的にエミュレート対象ＣＰＵの実行タイミングに近づけることができる。なお、割り当て時間には、所定の上限及び下限が設けられている。
【００７７】
優先順位の最も高いスレッド＃０のスケジュールパラメータが「０」になると、スレッドスケジュール装置１１は次に優先順位の高いスレッド＃１の割り当て時間を制御する。例えば、スレッド＃１のスケジュールパラメータが「−１」の場合、スレッドスケジュール装置１１は、直前の割り当て時間を「１／（０．５＋１）」倍する。こうすることで、各スレッドの割り当て時間をスケジュールパラメータに応じて調整できる。
【００７８】
なお、スレッドスケジュール装置１１は、優先順位を考慮することなく、スレッド＃０〜＃２の割り当て時間を制御してもよい。例えば、スレッドスケジュール装置１１は順番にスレッド＃０〜＃２の割り当て時間を制御する。この場合、スケジュールパラメータの絶対値が大きいものから順番に割り当て時間を制御してもよいし、又は、スレッド番号の順に割り当て時間を制御してもよい。スレッドスケジュール装置１１は、例えば、次のようにして割り当て時間を制御する。
（ｉ）  スケジュールパラメータの絶対値が最も大きいスレッドの割り当て時間を制御する。
（ｉｉ）次にスケジュールパラメータの絶対値が大きいスレッドの割り当て時間を制御する。
（ｉｉｉ）これをくりかえして、全てのスケジュールパラメータをゼロに近づける。
【００７９】
このように、各スレッドの割り当て時間をスケジュールパラメータの絶対値が大きい順に制御することで、エミュレート対象ＣＰＵの実行タイミングとのずれが大きいスレッドを優先的にエミュレート対象ＣＰＵの実行タイミングに近づけることができ、かつ、複数のスレッドの全体を、徐々にエミュレート対象ＣＰＵの実行タイミングに近づけることができる。
【００８０】
図１２は、マルチスレッド実行装置１００の効果を説明する図である。図１２（ａ）は時間に対する実測ＩＰＣと目標ＩＰＣの関係を示す図の一例である。図示するように、目標ＩＰＣの方が実測ＩＰＣより小さい。
【００８１】
本実施形態のスレッドスケジューリングを適用することで、実測ＩＰＣを目標ＩＰＣに一致させることができる。スレッド＃０〜＃２の割り当て時間を調整することで、図１２（ｂ）に示すように、目標ＩＰＣと実測ＩＰＣの差を小さくすることができる。
【００８２】
〔動作手順〕
図１３は、マルチスレッド実行装置１００が命令の発行比率を動的に最適化する手順を示すフローチャート図の一例を示す。図１３のフローチャート図は、マルチスレッド実行装置１００が起動するとスタートする。起動直後、スレッドスケジュール装置１１は初期値の命令の発行比率にて命令バッファ＃０〜＃２と命令デコーダ１８を接続している。この間、実行状況監視装置１４はカウンタ値をカウントしている。
【００８３】
実行状況監視部１４１は、リセット信号の検出時を起点にカウンタ値のカウントを開始する。このリセット信号の検出時が例えばターゲットプロファイルの時刻Ｔ０に対応する。フィードバック値生成部１２１は、カウンタ部１４２から、単位時間毎に、カウント値を取得する（Ｓ１０）。
【００８４】
ターゲットパラメータ保存部１２２は、アプリ実行プロファイル記憶部６０又は標準プロファイル記憶部７０からスレッド＃０〜＃２毎に、ターゲットプロファイル値を読み出す（Ｓ２０）。
【００８５】
そして、フィードバック値生成部１２１は、スレッド＃０〜＃２毎に、スレッドの時刻Ｔｎのターゲットプロファイル値と、単位時間毎に与えられるカウント値を比較して、スケジュールパラメータを生成する（Ｓ３０）。スケジュールパラメータはスレッドスケジュール装置１１に送出される。
【００８６】
スレッドスケジュール装置１１は、最も優先度の高いスレッドを制御対象に決定する（Ｓ４０）。そして、スレッドスケジュール装置１１は、選択したスレッド＃０〜＃２に対し、
スケジュールパラメータが正値の場合、スレッド＃０〜＃２の割り当て時間を長くし（Ｓ５０）、スケジュールパラメータが「０」の場合、スレッド＃０〜＃２の割り当て時間を制御せず（Ｓ６０）、スケジュールパラメータが負値の場合、スレッド＃０〜＃２の割り当て時間を短くする（Ｓ７０）。
【００８７】
ついで、スレッドスケジュール装置１１は、スケジュールパラメータが「０」でない他のスレッド＃０〜＃２があるか否かを判定する（Ｓ８０）。スケジュールパラメータに「０」でない他のスレッド＃０〜＃２がある場合（Ｓ８０のＹｅｓ）、スレッドスケジュール装置１１はステップＳ４０からの処理を繰り返す。
【００８８】
以上説明したように、本実施形態のマルチスレッド実行装置１００は、スレッド毎に命令の実行回数を動的に最適化できるので、エミュレート対象ＣＰＵのプログラム＃０〜＃２の実行タイミングを統合したＣＰＵで再現することができる。したがって、複数のＥＣＵを１つに統合した場合に、統合前の各ＥＣＵの動作を統合したＥＣＵで達成することができる。また、プログラムを別のＣＰＵに移植しても、移植先のＣＰＵが移植前と時間的に同じ振る舞いをするので、プログラムの再設計が不要になり、プログラムの流通性が向上する。特に、単位処理の実行サイクル数をフィードバック制御に用いることで、異種マイコンへの統合が可能となる。
【００８９】
〔好適な変形例〕
・シングルスレッド実行装置１００
マルチスレッド実行装置１００が複数のスレッドを有することを前提に説明したが、マルチスレッド実行装置１００が１つのみのスレッドを有していてもよい。
図１４は、マルチスレッド実行装置１００の概略構成図の一例を示す。図１４において図３と同一部には同一の符号を付しその説明は省略する。スレッド＃０が１つの場合、命令バッファ及びレジスタファイル１６も１つになる。また、スレッドスケジュールが不要なので、スレッドスケジュール装置１１の代わりに、命令発行制御回路２４が命令バッファ１７に接続されている。命令発行制御回路２４は、スケジュールパラメータに応じて、命令バッファ１７に命令をフェッチするタイミングを制御する。すなわち、スケジュールパラメータが負値の場合、スケジュールパラメータの絶対値に応じて、例えば、パイプラインにストールを発生させたりＮＯＰ命令を挿入する。こうすることで、単位時間毎の命令実行完了数を低下させ、又は、単位処理の実行サイクル数を増大させ、エミュレート対象ＣＰＵの実行タイミングを再現できる。また、スケジュールパラメータが正値の場合、スケジュールパラメータの大きさに応じて、ストール又はＮＯＰ命令に対する命令フェッチの比率を大きくする。こうすることで、単位時間毎の命令実行完了数を増大させ、又は、単位処理の実行サイクル数を低下させ、エミュレート対象ＣＰＵの実行タイミングを再現できる。
【００９０】
・スレッド間の命令実行比率に基づくフィードバック
また、本実施形態では、スレッドスケジュール装置１１がスレッド＃０〜＃２毎にカウンタ値とターゲットプロファイル値を比較して、スレッド＃０〜＃２毎にスケジュールパラメータを生成したが、スレッド間の命令実行比率に基づきスケジュールパラメータを生成してもよい。
【００９１】
図１５は、命令発行比率に基づき生成されるスケジュールパラメータの一例を示す図である。エミュレート対象ＣＰＵの各ターゲットプロファイルが得られているので、ある時刻ＴｎにおけるターゲットプロファイルのＩＰＣ又は単位処理の実行サイクル数が既知である（図６（ｃ））。したがって、ターゲットプロファイルにおける時刻Ｔｎの各プログラム＃０〜２の実行比率が分かる。図では、目標とする実行比率が「５：５０：４５」となる。各数値は合計すると１００〔％〕である。
【００９２】
これに対し、実行状況監視装置１４は、各スレッド＃０〜＃２のカウント値をカウントしているので、単位時間毎に実測した各スレッド＃０〜＃２の実行比率が明らかとなる。図では「１０：３０：６０」となる。
【００９３】
各スレッド＃０〜＃２毎に実行比率を比較すると、スレッド＃０「５−１０＝−５」、スレッド１「５０−３０＝２０」、スレッド２「４５−６０＝−１５」である。比較結果（差）が負値の場合、そのスレッドの実行比率を少なくし、正値の場合、そのスレッドの実行比率を多くする必要があることになるので、スケジュールフィードバック装置１２は比較結果に応じてスレッド毎にスケジュールパラメータを生成する。
【００９４】
スレッド間の命令実行率に基づき生成されたスケジュールパラメータは、割り当て時間を増大するスレッド＃１があれば必ず低減させるスレッド＃０、＃２もあることになるので、全スレッドの実行比率に整合性を保ちながらスレッドスケジュールすることができる。
【００９５】
・フィードフォワード制御を考慮したスレッドスケジューリング
また、スレッドスケジュール装置１１はフィードバック制御により、スレッドスケジュールするとしたが、フィードフォワード制御を加えてもよい。
図１６は、スレッドスケジューリングの制御系を模式的に示す図の一例である。スレッドスケジュール装置１１にフィードフォワード装置２５が接続されている。フィードフォワード装置２５は、外乱を検出して検出結果をスレッドスケジュール装置１１に送出する。スレッドスケジュール装置１１は、スケジュールフィードバック装置１２から取得したスケジュールパラメータに、外濫を考慮して各スレッドの割り当て時間を制御する。外濫は、例えば、ハードウェア割り込み、ハザード等、命令実行に影響を及ぼすイベントであり、予め登録されている。パイプライン制御回路１３はこのイベントを検出してスレッドスケジュール装置１１に通知する。スレッドスケジュール装置１１は、イベントの種類に応じてイベントを発生させたスレッド＃０〜＃２のスケジュールパラメータを補正する。このように外濫を考慮することで、ｖＣＰＵ＃０〜＃２が実行するプログラム＃０〜＃２の、ターゲットプロファイルへの追随性を向上させることができる。
【符号の説明】
【００９６】
１１        スレッドスケジュール装置
１２        スケジュールフィードバック装置
１３        パイプライン制御回路
１４        実行状況監視装置
１５        演算回路
１６        レジスタファイル
１７        命令バッファ
１８        命令デコーダ
１９、２１  切り替えスイッチ
５０        プロセッサ
６０        アプリ実行プロファイル記憶部
１００      マルチスレッド実行装置
【図１】
2010286898.tif 000003
【図２】
2010286898.tif 000004
【図３】
2010286898.tif 000005
【図４】
2010286898.tif 000006
【図５】
2010286898.tif 000007
【図７】
2010286898.tif 000008
【図８】
2010286898.tif 000009
【図９】
2010286898.tif 000010
【図１０】
2010286898.tif 000011
【図１１】
2010286898.tif 000012
【図１２】
2010286898.tif 000013
【図１３】
2010286898.tif 000014
【図１４】
2010286898.tif 000015
【図１６】
2010286898.tif 000016
【図６】
2010286898.tif 000017
【図１５】
2010286898.tif 000018