(57)【要約】【課題】余剰能力を他の電子制御装置に供給できるプロセッサを提供する。【解決手段】本発明に係るプロセッサは、プロセッサ状態の退避回復を伴わずに、Ｎ（Ｎは２以上の整数）スレッドを同時又は時分割に実行する。前記スレッドは、優先度を有する。プロセッサは、Ｎ−１以下のスレッドを実行し、実行中の前記スレッドより優先度の高いスレッドを受付けた場合には、前記スレッドより優先度の低いスレッドの終了処理を開始、又は、前記スレッドを優先度の低いスレッドとして実行する。【選択図】図２３
2011070695.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ状態の退避回復を伴わずに、Ｎ（Ｎは２以上の整数）スレッドを同時又は時分割に実行するプロセッサであって、
前記スレッドは、優先度を有し、
Ｎ−１以下のスレッドを実行することによりホットスタンバイ状態を形成し、実行中の前記スレッドより優先度の高いスレッドを受付けた場合には、前記ホットスタンバイ状態を利用して、前記スレッドより優先度の低いスレッドの終了処理を開始、又は、前記スレッドを優先度の低いスレッドとして実行するプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、例えば複数命令フローの優先度管理と効率的実行を可能にするプロセッサに適用して有効な技術に関する。
【背景技術】
【０００２】
近年、プロセッサの処理効率向上のために１つのプロセッサで同時又は時分割に複数命令フロー（以下、命令流とも記す）を処理するマルチスレッドプロセッサを用いることが一般的になってきている。このようなマルチスレッドプロセッサは、複数の命令フローをどう選択すれば高い処理効率が得られるかという観点から技術開発が進められている。
【０００３】
特許文献１には、命令流毎に、命令解読手段、優先度保持手段、及び保持された優先度に従って機能ユニットに発行すべき命令を決定する制御手段を備える技術が開示されている。特許文献１の技術では、優先順位が同じ命令発行要求が２つ以上ある場合には、サイクル毎に優先する論理プロセッサを変更する方法、以前発行できなかった論理プロセッサを優先する方法、そして、固定的とする方法のうちいずれかの方法により命令発行を決定する。これにより、複数命令流間で各命令流の処理性能を柔軟に調整することができ、特に、同順位の優先度の命令流が均等に処理されるようにすることができる。命令流間で同期をとって処理する場合には、最も遅い命令流が処理性能を律するので、命令流が均等に処理されると、全体の処理効率が向上することになる。
【０００４】
特許文献２には、ソフトウェアによって割当てられた、それぞれのスレッドの優先度に基づいて、プロセッサ・リソースを割当てる技術が開示されている。特許文献２の技術では、例えば、キャッシュ・ミスなどによって効率の落ちたスレッドにも、固定的な割合でリソースを割当てるために、効率的なリソース割当てを実現できない、という問題を回避できる。具体的には、特許文献２の技術では、特定の命令スレッドに関連した、予め定義された事象又は状況が発生すると、１つ又は複数のスレッドの優先度を調整して、その優先度に従って命令をインターリーブする。これにより、効率の落ちている高優先度スレッドによる非効率なリソース占有を抑止して、効率的なリソース割当てを実現することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−１２４３１６号公報
【特許文献２】特開２００４−３２６７６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１，２では、ソフトウェアで指定した優先度をハードウェアが調整することで処理効率を向上させるので、優先度の高いスレッドを、そのスレッド単独で処理した場合とマルチスレッド処理した場合とでは、前者より後者の方が、実行時間が延びてしまう可能性が高い。要するに、このような技術は、効率向上を実行時間保証より優先させたシステム、即ち、スループット重視の情報系システムにおいて特に有効となる。
【０００７】
一方、制御系システムは、最悪の実行時間でも応答時間を保証して正常動作するように予め調整したシステムであって、実行時間を保証するためにスループットが犠牲になっている場合が多い。このため、制御系システムでは、スループットを重視して外部からの処理依頼を受付けると応答時間を保証できない場合がある。制御系システムとしては、例えば、最新の自動車の制御及び情報処理を行う車載システムがあり、このシステムには、エンジン制御、ブレーキ制御等を行う各電子制御装置やカーインフォメーションシステムが車内ネットワークで接続されている。しかしながら、各電子制御装置は、独立にチューニングされており、たとえ余剰能力があっても、その電子制御装置の応答時間を保証しつつ、余剰能力を他の電子制御装置に供給する機能を備えてはいない。
【０００８】
例えば、特許文献１では、あるスレッドの命令発行が直前に不可となった場合には、それ以外のスレッドの命令を発行できるとしても、その命令の代わりに発行することはしない。このため、スレッドの優先度を厳密に守ろうとすると、最優先スレッドの命令発行が直前に不可になった場合には、命令を発行できなくなってしまう。しかも、一般に命令発行の可否判定は、命令発行の直前に行われるので、スレッドの優先度を厳密に守ると、最優先スレッド以外の命令発行は困難となる。
【０００９】
本発明の目的は、処理の効率化を図ることができるプロセッサを提供することにある。
【００１０】
本発明の別の目的は、ソフトウェアで指定した優先度を厳密に守りながら、応答時間を保証できるプロセッサを提供することにある。
【００１１】
本発明の更に別の目的は、余剰能力を他の電子制御装置に供給できるプロセッサを提供することにある。
【００１２】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１３】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１４】
〔１〕本発明に係るプロセッサは、発行命令選択回路（１０）を有する。プロセッサは、前記発行命令選択回路に供給された命令をデコードして実行可能である。前記命令は、前記命令が発行された動作サイクルの次動作サイクル以降の命令発行情報（ｉｓｉｄ）を有する。前記命令発行情報は、前記命令を発行可能な動作サイクルの位置を示す情報である。
【００１５】
上記より、命令がある動作サイクルで発行されたとき、当該命令が保有する命令発行情報により、次動作サイクル以降については命令を発行可能な動作サイクルの位置が既に確定しているから、この動作サイクルの位置に従って必要な命令を発行でき、プロセッサの処理の効率化を図ることができる。尚、動作サイクルの位置は、本明細書中、スロットとも称する。
【００１６】
本発明の具体的な一つの形態として、前記命令発行情報は、前記命令の初回又は前回実行時に生成された情報である。上記より、命令の２回目以降の実行時から、命令発行情報を活用できる。
【００１７】
本発明の具体的な一つの形態として、前記命令発行情報は、前記命令の作成時に生成された情報である。上記より、命令の１回目の実行時から、命令発行情報を活用できる。
【００１８】
本発明の具体的な一つの形態として、命令記憶部（ＩＣ）は、前記命令を一時的に保持する。命令発行情報記憶部（ＩＳＩＮＦ）は、前記命令発行情報を一時的に保持する。前記命令発行情報は、前記命令記憶部から読み出された前記命令と共に、前記命令発行情報記憶部から読み出される。上記より、命令に命令発行情報を付加することができる。また、新たな命令に新たな命令発行情報を付加するときには、命令発行情報記憶部を更新するだけでよい。
【００１９】
本発明の具体的な一つの形態として、前記命令は、優先度を有する。前記発行命令選択回路は、前記命令発行情報に基づいて、優先度の高い命令を前記動作サイクルに発行し、優先度の低い命令を前記動作サイクルとは別の動作サイクルに発行する。上記より、優先度の低い命令は、優先度の高い命令が発行されない別の動作サイクル（又は、後の動作サイクル）に発行されるから、ソフトウェアで指定した優先度を厳密に守りつつ、応答時間を保証できる。
【００２０】
本発明の具体的な一つの形態として、前記発行命令選択回路は、前記命令を発行するか否かを判定する発行可否判定回路（ＩＳＯ）を有する。前記発行可否判定回路は、前記優先度の高い命令を発行可能である場合に不活性化される。上記より、命令の発行可否が命令発行情報で判定できる場合には、ハードウェアである発行可否判定回路を使用しないので、消費電力を低減できる。
【００２１】
〔２〕本発明に係るプロセッサは、プロセッサ状態の退避回復を伴わずに、Ｎ（Ｎは２以上の整数）スレッドを同時又は時分割に実行する。前記スレッドは、優先度を有する。プロセッサは、Ｎ−１以下のスレッドを実行し、実行中の前記スレッドより優先度の高いスレッドを受付けた場合には、前記スレッドより優先度の低いスレッドの終了処理を開始、又は、前記スレッドを優先度の低いスレッドとして実行する。
【００２２】
上記より、即時実行開始の必要な優先度の高いスレッドを受付ける可能性がある場合に、複数のスレッドのうち少なくとも１つを実行せず、ホットスタンバイ状態にすることができる。このため、実行していないスレッドは直ちに実行可能となり、このスレッドを最優先スレッドにすれば、実行中のスレッドの優先度は低くなるので、最優先スレッドの応答時間を保証できる。また、他にも優先スレッドを受付ける可能性がある場合には、実行中のスレッドよりも優先度の低いスレッドの終了処理を開始するので、ホットスタンバイ状態に戻ることができる。
【００２３】
従って、ホットスタンバイ状態を維持することにより、優先スレッドの即時実行開始を保証できるから、本来の応答時間を保証しつつ、余剰能力を活用して外部からの処理依頼を受付けることもできる。例えば、このプロセッサを適用した電子制御装置を複数有する制御系システムでは、余剰能力を他の電子制御装置に供給できるから、負荷の効率的分散を行うことができる。
【００２４】
〔３〕本発明に係るプロセッサは、プロセッサ状態の退避回復を伴わずに、複数スレッドを同時又は時分割に実行する。前記複数スレッドは、優先度を有する。プロセッサは、優先スレッド中の命令フローを１回目に実行したときに、前記命令フロー中の命令を発行可能な動作サイクルの位置を記憶し、前記命令フローの２回目以降の実行において、非優先スレッドを、前記動作サイクルとは別の動作サイクルで実行する。
【００２５】
上記より、命令フローの２回目以降の実行において、非優先スレッドは、動作サイクルの位置に従い、優先スレッドが実行されない別の動作サイクルで実行されるから、プロセッサの処理の効率化を図ると共に、ソフトウェアで指定した優先度を厳密に守りつつ、応答時間を保証できる。
【００２６】
〔４〕本発明に係るプロセッサは、発行すべき命令を発行命令選択回路で選択して複数のスレッドによる命令実行を処理する。前記発行命令選択回路は、発行した命令が保有する命令発行情報に従って、その後に発行可能な動作サイクルの位置を制御する。
【００２７】
上記より、発行した命令が保有する命令発行情報により、次動作サイクル以降については命令を発行可能な動作サイクルの位置を確定することができるから、この確定した動作サイクルの位置に従って必要な命令を発行できる。従って、プロセッサの処理の効率化を図ることができる。
【発明の効果】
【００２８】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００２９】
即ち、処理の効率化を図ることができる。また、ソフトウェアで指定した優先度を厳密に守りながら、応答時間を保証できる。更に、余剰能力を他の電子制御装置に供給できる。
【図面の簡単な説明】
【００３０】
【図１】第１のプログラムを例示する説明図である。
【図２】スカラプロセッサと２ウェイスーパースカラプロセッサにそれぞれ対応するアセンブラプログラムのループ部の動作を例示する説明図である。
【図３】第２のプログラムを例示する説明図である。
【図４】マルチスレッドプロセッサによるループ部の動作を例示する説明図である。
【図５】比較例としてのマルチスレッドプロセッサのパイプライン構造を例示する説明図である。
【図６】代表的な信号の生成タイミングを例示する説明図である。
【図７】比較例としてのマルチスレッドプロセッサによるスレッド切替えを例示する説明図である。
【図８】命令デコードステージＩＤで処理した命令を例示する説明図である。
【図９】スレッド選択を遅らせた場合の比較例としてのパイプライン構造を例示する説明図である。
【図１０】本発明の実施形態１に係るプロセッサの構成を示す概略図である。
【図１１】１命令に２ビットの発行情報を付加した例を示す説明図である。
【図１２】発行情報を活用するプロセッサ１のパイプライン構造部分４を例示する説明図である。
【図１３】スレッド選択回路１０を例示する説明図である。
【図１４】２ビットの発行情報によるスレッド選択制御論理を例示する説明図である。
【図１５】優先スレッドの空き発行スロットで非優先スレッドの命令を発行しているプロセッサ１の動作を例示する説明図である。
【図１６】１命令に１ビットの発行情報を付加した例を示す説明図である。
【図１７】１ビットの発行情報によるスレッド選択制御論理を例示する説明図である。
【図１８】優先スレッドの空き発行スロットで非優先スレッドの命令を発行している実施形態２に係るプロセッサの動作を例示する説明図である。
【図１９】命令デコーダＩＤＵの一部の構成を例示する説明図である。
【図２０】スレッド選択回路ＣＴＬのスレッド選択制御論理を例示する説明図である。
【図２１】命令コード内に３ビットの発行情報を付加した例を示す説明図である。
【図２２】３ビットの発行情報によるスレッド選択制御論理を例示する説明図である。
【図２３】実施形態５に係るプロセッサによるホットスタンバイ動作を例示する説明図である。
【図２４】各実施形態に係るプロセッサを用いた制御系システムを例示する説明図である。
【発明を実施するための形態】
【００３１】
《マルチスレッドプロセッサ》
本発明に係る各実施形態を詳細に説明する前に、まず、各実施形態の比較例となるマルチスレッドプロセッサの構成、動作等を図１〜図９に基づいて説明する。図１には、プロセッサの動作例を説明するための第１のプログラムが例示される。第１のプログラムは、Ｃ言語で記述されているように、Ｎ個の要素を持つ２つの配列ａ［ｉ］とｂ［ｉ］を加算し、配列ｃ［ｉ］に格納するプログラムである。この第１のプログラムを、アセンブラで記述した場合について説明する。このアセンブラプログラムでは、スタックのプッシュポップを主用途とするポストインクリメントロード命令と、プリデクリメントストア命令とを有するアーキテクチャ、例えばスカラプロセッサを想定している。このため、配列のロードには、ポストインクリメントロード命令を使用する。また、配列へのストアには、ポストインクリメントストア命令がないので、プログラム実行中に配列要素ｃ［ｉ］とａ［ｉ］の距離が一定であることを活用して、アドレス更新のない通常のストア命令を使用する。
【００３２】
まず、初期設定として４つの即値転送命令「ｍｏｖ  ＃＿ａ，ｒ０」、「ｍｏｖ  ＃＿ｂ，ｒ１」、「ｍｏｖ  ＃（＿ｃ−＿ａ），ｒ２」及び「ｍｏｖ  ＃Ｎ，ｒ３」によって、２つの配列の先頭アドレス＿ａ及び＿ｂ、２つの配列のアドレスの距離＿ｃ−＿ａ、及び配列の要素数Ｎを、それぞれレジスタｒ０、ｒ１、ｒ２、及びｒ３に格納する。次に、ループ部では、ポストインクリメントロード命令「ｍｏｖ  ＠ｒ０＋，ｒ４」及び「ｍｏｖ  ＠ｒ１＋，ｒ５」によって、ｒ０及びｒ１の指す配列ａ及びｂのアドレスから配列要素をｒ４及びｒ５にロードすると同時に、ｒ０及びｒ１をインクリメントして次の配列要素を指すようにする。その後、直ちに加算をしようとしてもロードデータ待ちとなるので、加算の前にデクリメント・テスト命令「ｄｔ  ｒ３」によって、ｒ３に格納された要素数Ｎをデクリメントし、その結果がゼロかどうかをテストし、ゼロであればフラグをセットし、ゼロでなければフラグをクリアする。
【００３３】
次に、加算命令「ａｄｄ  ｒ４，ｒ５」によって、ｒ４及びｒ５にロードされた配列要素を加算し、ｒ５に格納する。そして、ディレイスロット付条件分岐命令「ｂｆ／ｓ  ＿Ｌ００」によって、フラグをチェックし、クリアされていれば、残り要素数Ｎがまだゼロではないので、ディレイスロット命令実行後に、ラベル＿Ｌ００の指すループの先頭に分岐する。一方、セットされていれば、残り要素数Ｎがゼロなので、分岐せずにループを抜ける。最後に、ディレイスロット命令「ｍｏｖ  ｒ５，＠（ｒ０＋ｒ２）」によって、配列ａの要素を指すｒ０と「配列ａとｃのアドレスの距離＿ｃ−＿ａ」を格納したｒ２を加算して、配列ｃの要素アドレスを計算して、そのアドレスに配列要素の加算結果であるｒ５の値をストアする。
【００３４】
次に、このアセンブラプログラムを、２命令同時実行可能な２ウェイスーパースカラプロセッサ向けに最適化した場合について説明する。ここで、スーパースカラ方式は、ロードストア命令と他の命令の２命令同時発行が可能であるとする。このため、スーパースカラ向けに最適化したアセンブラプログラムでは、同種の命令の連続によるリソース競合を避けるために、ポストインクリメントロード命令「ｍｏｖ  ＠ｒ１＋，ｒ５」とデクリメント・テスト命令「ｄｔ  ｒ３」の順序を交換している。
【００３５】
図２には、スカラプロセッサと２ウェイスーパースカラプロセッサにそれぞれ対応するアセンブラプログラムのループ部の動作が例示される。ここで、ロードレイテンシは２を想定しており、ロード命令とロードデータを使用する命令の距離が２以上であれば、プログラムはストールしない。また、分岐命令の実行サイクル、即ち、分岐命令とターゲット命令の距離は２としている。その結果、スカラプロセッサの動作例では、対応するアセンブラプログラムのループを構成する６命令を、６サイクルで実行することができる。
【００３６】
一方、２ウェイスーパースカラプロセッサの動作例では、対応するアセンブラプログラムのループを構成する６命令の実行に、スカラプロセッサと同じ６サイクルかかってしまう。この理由を以下に示す。４命令目の「ａｄｄ  ｒ４，ｒ５」は、３命令目の「ｍｏｖ  ＠ｒ１＋，ｒ５」の実行結果を待つ必要があり、そのため、３命令分の空きスロットができる。また、「ａｄｄ  ｒ４，ｒ５」の後続命令「ｂｆ／ｓ  ＿Ｌ００」は、実行リソース競合により「ａｄｄ  ｒ４，ｒ５」と同時にできないので、１命令分の空きスロットができる。更に、「ｂｆ／ｓ  ＿Ｌ００」とそのターゲット命令であるループ先頭命令「ｍｏｖ  ＠ｒ０＋，ｒ４」の距離は２であるので、２命令分の空きスロットができる。
【００３７】
従って、２ウェイスーパースカラプロセッサの動作例では、合計６つの命令発行スロットが空きスロットとなるので、図示のように、６命令の実行にスカラプロセッサと同じ６サイクルかかってしまう。このため、通常、２ウェイスーパースカラプロセッサのＩＰＣ（Ｉｎｓｔｒｕｃｔｉｏｎｓ  ｐｅｒ  ｃｙｃｌｅ）は最大２であるのに対して、対応するアセンブラプログラムではＩＰＣが１となり、プロセッサの効率が下がってしまう。尚、ＩＰＣとは、プロセッサの性能指標であって、１サイクルに何命令実行可能かを示す単位である。
【００３８】
このような場合に、空いている命令発行スロットを活用してプロセッサの効率を上げる方式として、マルチスレッド方式がある。このマルチスレッド方式は、複数のプログラムカウンタ及びレジスタファイルを用いて、複数の命令フローを同時又は時分割に実行する方式である。
【００３９】
以下、マルチスレッド方式によって、第１のプログラム実行時の空き命令発行スロットを活用して、図３に示す第２のプログラムを実行する場合を考える。第２のプログラムは、Ｃ言語で記述されているように、配列ｘのＮ要素を加算して変数ｙに代入するプログラムである。この第２のプログラムを、アセンブラで記述した場合について説明する。まず、初期設定として４つの即値転送命令「ｍｏｖ  ＃＿ｘ，ｒ０」「ｍｏｖ  ＃＿ｙ，ｒ１」「ｍｏｖ  ＃Ｎ，ｒ２」及び「ｍｏｖ  ＃０，ｒ３」によって、配列の先頭アドレス＿ｘ、変数ｙのアドレス＿ｙ、配列の要素数Ｎ、及び変数ｙの初期値０を、それぞれレジスタｒ０、ｒ１、ｒ２、及びｒ３に格納する。
【００４０】
ループ部では、ポストインクリメントロード命令「ｍｏｖ  ＠ｒ０＋，ｒ４」によって、ｒ０の指す配列ａのアドレスから配列要素をｒ４にロードすると同時に、ｒ０をインクリメントして次の配列要素を指すようにする。その後、直ちに加算をしようとしてもロードデータ待ちとなるので、加算の前にデクリメント・テスト命令「ｄｔ  ｒ２」によって、ｒ２に格納された要素数Ｎをデクリメントし、その結果がゼロかどうかをテストし、ゼロであればフラグをセットし、ゼロでなければフラグをクリアする。次に、ディレイスロット付条件分岐命令「ｂｆ／ｓ  ＿Ｌ０１」によって、フラグをチェックし、クリアされていれば、残り要素数Ｎがまだゼロではないので、ディレイスロット命令実行後に、ラベル＿Ｌ０１の指すループ部の先頭に分岐する。一方、セットされていれば、残り要素数Ｎがゼロなので、分岐せずにループ部を抜ける。ディレイスロット命令「ａｄｄ  ｒ４，ｒ３」によって、ロードされた配列要素ｒ４を変数ｙの格納されたｒ３に加算し、ｒ３を更新する。そして、残り要素数Ｎがゼロになってループ部を抜けたら、ストア命令「ｍｏｖ  ｒ３，＠ｒ１」によって、変数ｙのアドレスに加算結果ｒ３の値をストアする。
【００４１】
図４には、マルチスレッドプロセッサで、第１のプログラム実行時の空き命令発行スロットを活用して第２のプログラムを実行した場合のループ部の動作が例示される。ここでは、第１及び第２のプログラムをマルチスレッドプロセッサの第１及び第２のスレッドに割当てて実行する。また、２つのプログラムの実行優先度は、常に第１のプログラムの方が高いものとする。
【００４２】
このため、第１のプログラムのループ部は、６サイクル単位で図２と同一動作を繰り返す。一方、第２のプログラムは、実行優先度が低いので第１のプログラムが命令発行スロットを使用せず、実行リソースに空きがある場合のみ実行できる。その結果、図４に示すように、第１のプログラムのループ部の２サイクル目の空きスロットでは、同時に第１のプログラムが「ｍｏｖ  ＠ｒ１＋，ｒ５」を実行しているから、ロードストア命令の実行リソースに空きがなく、第２のプログラムのループ部の先頭命令「ｍｏｖ  ＠ｒ０＋，ｒ４」は実行できない。３サイクル目の２つの空きスロットでは、「ｍｏｖ  ＠ｒ０＋，ｒ４」及び「ｄｔ  ｒ２」を実行できる。４サイクル目の空きスロットでは、第１のプログラムが「ａｄｄ  ｒ４，ｒ５」を実行しているから、ロードストア命令以外の実行リソースに空きがなく、第２のプログラムの「ｂｆ／ｓ  ＿Ｌ０１」は実行できない。６サイクル目の２つの空きスロットでは、「ｂｆ／ｓ  ＿Ｌ０１」が実行できる。しかし、次の命令の「ａｄｄ  ｒ４，ｒ３」は、「ｂｆ／ｓ  ＿Ｌ０１」とリソースが競合するので実行できない。そして、第１のプログラムの次のループ部の２サイクル目の空きスロットでは、「ａｄｄ  ｒ４，ｒ３」を実行できる。
【００４３】
従って、第２のプログラムは、第１のプログラムと２サイクルずれた形で６つの空きスロットのうち４つを活用して、６サイクルでループ部の処理を実行できる。即ち、このマルチスレッドプロセッサでは、６サイクルで１０命令を実行しているので、図２の例では１であったＩＰＣが約１．７になり、効率が大幅に改善されている。
【００４４】
ところで、図４に示す動作例は、第１のプログラムが使用しない命令発行スロット及びリソースがあれば、第２のプログラムが活用できると仮定した上での例を示したものである。しかしながら、実際には、スレッドの優先度を厳密に守ろうとすると、最優先スレッドの命令発行が直前に不可になった場合には、命令を発行できない。そして、命令発行の可否判定は、一般に発行直前であるため、スレッドの優先度を厳密に守ると最優先スレッド以外の命令発行は困難である。
【００４５】
図５には、比較例としてのマルチスレッドプロセッサのパイプライン構造が例示される。ここでは、２つのプログラムカウンタＰＣ０及びＰＣ１、２つのレジスタファイルＲＦ０及びＲＦ１によって、２つのプログラムの並列実行を可能にしている。また、２つの命令キューＩＱ０及びＩＱ１によって、サイクル単位のプログラム切替えを可能にしている。パイプラインは、命令アドレスＩＡ、命令フェッチＩＦ、命令デコードＩＤ、演算ＥＸ１、ＥＸ２、及びライトバックＷＢの６ステージを有する。
【００４６】
命令アドレスステージＩＡでは、命令フェッチユニットＩＦＵが命令デコーダＩＤＵから供給される分岐アドレスＢＡと、２つのプログラムカウンタＰＣ０及びＰＣ１とから命令フェッチアドレスＩＦＡを生成し、命令キャッシュＩＣに供給する。
【００４７】
命令フェッチステージＩＦでは、命令キャッシュＩＣの命令フェッチアドレスＩＦＡの指すアドレスからフェッチした命令を、命令キャッシュ出力として、命令選択回路ＩＭＵＸと命令キューＩＱ０又はＩＱ１とに供給する。供給した命令を直ちに使用する場合は、命令選択回路ＩＭＵＸで命令キャッシュ出力を選択し、命令デコーダＩＤＵに供給する。一方、直ちに使用しない場合は、命令キューＩＱ０又はＩＱ１に命令ＯＰＩＣをバッファする。命令キューＩＱ０又はＩＱ１にバッファした命令は、キューの先頭から出力されて、スレッド選択回路ＴＨＭＵＸ及び命令選択回路ＩＭＵＸで選択され、命令デコーダＩＤＵに供給される。
【００４８】
命令デコードステージＩＤでは、供給された命令をデコードし、レジスタスレッド選択回路ＲＭＵＸ、フォワーディング回路ＦＷＤ、及び実行ユニットＥＸＵの制御信号を出力する。また、命令実行に必要なリソース及びオペランドが使用可能かどうかを判断し、実行不可能であれば実行可能になるまで命令発行を待つと共に、後続命令を待たせる。実行可能であれば実行開始の指示を出す。更に、レジスタスレッド選択回路ＲＭＵＸ及びフォワーディング回路ＦＷＤでは、制御情報に従ってオペランドを選択して実行ユニットＥＸＵに供給する。
【００４９】
実行ステージＥＸ１及びＥＸ２では、命令デコーダＩＤＵからの制御情報に従って実行ユニットＥＸＵが命令を実行する。特に、ＥＸ２ステージでは、データキャッシュＤＣアクセスを行う。ライトバックステージＷＢでは、命令の実行結果をレジスタファイルＲＦ０又はＲＦ１に格納する。
【００５０】
図６には、代表的な信号の生成タイミングが例示される。命令フェッチステージＩＦでは、命令キューＩＱ０又はＩＱ１出力、スレッド選択回路ＴＨＭＵＸ出力、命令キャッシュ出力、命令選択回路ＩＭＵＸの順に確定していく。命令デコードステージＩＤでは、命令コード、リソース使用可否、オペランド使用可否、フォワーディング制御情報、命令発行可否が順次確定していく。
【００５１】
図７には、スレッド優先度を厳密に守る場合のスレッド切替えが例示される。まず、命令発行可否は、命令デコードステージＩＤの終盤で判定されるので、命令デコードステージＩＤまでは優先スレッドを実行する。そして、命令デコードステージＩＤで命令発行不可であると判定されると、命令フェッチステージＩＦのスレッド選択回路ＴＨＭＵＸで非優先スレッドの命令を選択し、非優先スレッドの命令を実行する。その後、優先スレッドの命令が実行可能となったら再実行する。その結果、図示のように優先スレッドが命令を発行していない期間が３サイクルあるにもかかわらず、非優先スレッドの命令は、１サイクルしか発行できていない。そして、優先スレッドの命令を発行できない期間が２サイクル以下であると、非優先スレッドの命令は発行できない。
【００５２】
図２の動作例で、命令デコードステージＩＤにて発行されなかった命令も含めて、命令デコードステージＩＤで処理した命令を図８に例示する。図中、取消線のある命令が発行されなかった命令である。ディレイスロット付条件分岐命令「ｂｆ／ｓ  ＿Ｌ００」は、実行時に条件判定を行うものとする。このため、命令デコードステージＩＤで「ｂｆ／ｓ  ＿Ｌ００」をデコード中に、命令フェッチステージＩＦでは非分岐時に実行する命令、即ち、この例ではループ部を抜けた場合に実行する命令が選択され、命令デコードステージＩＤに供給される。図８ではこの非分岐時に実行する命令を、ＮＴ＃１及びＮＴ＃２としている。そして、ループ部を繰り返し実行している間は、これらの命令は命令デコードステージＩＤでキャンセルされ、発行されない。
【００５３】
図８では、全ての命令の発行できない期間が２サイクル以下である。例えば、加算命令「ａｄｄ  ｒ４，ｒ５」及び分岐命令「ｂｆ／ｓ  ＿Ｌ００」は、２サイクル発行できずに待たされており、他の命令は直ちに発行できている。このため、図５に示したマルチスレッドプロセッサのパイプライン構造では、図７で説明したように、非優先スレッドの命令を発行できないという問題が生じる。
【００５４】
この問題を解決する１つの方法としては、スレッド選択を遅らせることが挙げられる。即ち、命令デコードステージＩＤで命令発行可否を判定した後に、実行するスレッドを選択すればよい。
【００５５】
図９には、スレッド選択を遅らせた場合の比較例としてのパイプライン構造が例示される。まず、命令アドレスステージＩＡは、図５の方式と同一である。命令フェッチステージＩＦでは、図５のようなスレッド選択は行わず、多重化された命令選択回路ＩＭＵＸ０及びＩＭＵＸ１で、多重化された命令デコーダＩＤＵ０及びＩＤＵ１に供給する命令を選択する。命令選択回路ＩＭＵＸ０では、命令キャッシュ出力又は命令キューＩＱ０出力を選択する。また、命令選択回路ＩＭＵＸ１では、命令キャッシュ出力又は命令キューＩＱ１出力を選択する。このとき、優先スレッドの命令が命令デコーダＩＤＵ０に供給される。
【００５６】
命令デコードステージＩＤでは、多重化された命令デコーダＩＤＵ０及びＩＤＵ１が供給された命令をデコードし、多重化されたフォワーディング回路ＦＷＤ０及びＦＷＤ１の制御信号と、実行ユニットＥＸＵの制御信号を出力する。また、命令実行に必要なリソース及びオペランドが使用可能かどうかを判断し、実行不可能であれば実行可能になるまで命令発行を待つと共に、後続命令を待たせる。一方、実行可能であれば、実行開始の指示を出す。そして、命令デコーダＩＤＵ０は、実行可否判定結果をレジスタスレッド選択回路ＲＭＵＸ及び実行ユニットＥＸＵの制御信号スレッド選択回路ＴＨＭＵＸに出力する。また、フォワーディング回路ＦＷＤ０及びＦＷＤ１は、制御情報に従ってオペランドを選択して、レジスタスレッド選択回路ＲＭＵＸに供給する。
【００５７】
実行ステージＥＸ１及びＥＸ２では、実行ユニットＥＸＵの制御信号スレッド選択回路ＴＨＭＵＸが命令デコーダＩＤＵ０及びＩＤＵ１からの制御情報を、命令デコーダＩＤＵ０からの実行可否判定結果に従って選択する。また、レジスタスレッド選択回路ＲＭＵＸは、実行可否判定結果に従ってフォワーディング回路ＦＷＤ０及びＦＷＤ１からオペランドを選択する。実行可否判定結果が実行可の場合は、命令デコーダＩＤＵ０でデコードした優先スレッドの実行が可能なので、命令デコーダＩＤＵ０からの制御情報及びフォワーディング回路ＦＷＤ０の出力を選択する。一方、実行可否判定結果が実行不可の場合は、非優先スレッドの命令発行を行うので、命令デコーダＩＤＵ１からの制御情報及びフォワーディング回路ＦＷＤ１の出力を選択する。その後の動作は、図５の例と同一である。
【００５８】
従って、図９に示すパイプライン構造によれば、サイクル毎に実行スレッドを切替えることができるが、その反面、スレッド選択を命令フェッチステージＩＦから遅らせた分、多重化すべきハードウェアが増加してしまう。即ち、命令デコードステージＩＤでのハードウェアは、比較的大きくなり、このステージにおける多重化により面積が増大し、面積効率が低下してしまう。また、実行しないスレッドについても命令デコードステージＩＤの処理を行うので、命令デコードステージＩＤの消費電力が２倍になってしまう。
【００５９】
マルチスレッドプロセッサの本来の目的は、ピークＩＰＣを使い切れないシングルスレッドプロセッサに比較的少量のハードウェアを追加することで、効率を向上させることにある。このため、上記した多重化により、効率が低下することは望ましくない。更に、図９の例ではスレッド選択を実行ステージＥＸ１で行っているので、実行ステージＥＸ１のサイクルタイムが増大して、動作周波数が低下してしまう。尚、図５の例では、命令キャッシュ出力を命令キューＩＱ０又はＩＱ１にバッファした場合のみスレッド選択を行うので、サイクルタイムは増大しない。
【００６０】
以上のように、図５に示した比較例では、非優先スレッドの発行が困難であり、図９に示した比較例では、面積効率、電力効率及び動作周波数が低下するという問題があった。これに対して、以下に示す各実施形態は、命令コードに、次のサイクル以降に実行する命令の発行情報を付加することにより、これらの問題を解決するものである。
【００６１】
《実施形態１》
図１０には、本発明の実施形態１に係るプロセッサの構成が概略的に例示される。ＣＰＵ（中央処理装置であり、以下、プロセッサとも記す）１は、マルチスレッドプロセッサであって、ＣＰＵコア２と、内部バスであるＢＵＳ（Ｉｎｔｅｒｎａｌ  Ｂｕｓ）３を備えている。ＣＰＵコア２は、パイプライン構造部分４と、ＢＩＵ（Ｂｕｓ  Ｉｎｔｅｒｆａｃｅ  Ｕｎｉｔ）５とを有する。さらに、プロセッサ１は、ＩＰ（Ｉｎｔｅｌｌｅｃｔｕａｌ  Ｐｒｏｐｅｒｔｙ）モジュールと称される機能モジュール（以下、ＩＰと記す）６，７と、外部バスインタフェース部であるＥＭＩ（Ｅｘｔｅｒｎａｌ  Ｍｅｍｏｒｙ  Ｉｎｔｅｒｆａｃｅ）８とを備えている。また、プロセッサ１には、ＭＥＭ（Ｍｅｍｏｒｙ）９等が接続される。
【００６２】
パイプライン構造部分４は、高速化のためにパイプライン化された部分であって、パイプラインは、キャッシュ等の内蔵高速メモリの速度に合わせてチューニングされている。このため、ＣＰＵコア２外へのアクセスにはパイプライン化されていないＢＩＵ５が使用される。
【００６３】
図１１には、１命令に２ビットの発行情報を付加した例が示される。同図に示される命令コードの命令長に特に制限はないが、本実施形態では１６ビットとしている。また、発行情報のエンコードは、００：「次サイクル全発行スロット使用」、０１：「次サイクル後行発行スロット不使用」、１０：「次サイクル全発行スロット不使用」、１１：「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」とする。
【００６４】
図１２には、発行情報を活用するプロセッサ１のパイプライン構造部分４が例示されている。図中、説明の便宜上、命令キューＩＱ０及びＩＱ１、スレッド選択回路ＴＨＭＵＸ、命令選択回路ＩＭＵＸ、及び命令デコーダＩＤＵのラッチ部分からなる領域を太線で囲み、スレッド選択回路１０とした。このパイプライン構造部分４は、図５に示したパイプライン構造と比べると、発行情報バッファＩＳＩＮＦを付加した点が異なる。２ビットの発行情報は、命令デコードステージＩＤで生成され、命令キャッシュＩＣにバッファされた命令に付加される付加情報である。発行情報バッファＩＳＩＮＦは、命令キャッシュＩＣと独立したアレイで構成されており、２ビットの発行情報を保存する。このため、発行情報を命令に付加するときには、発行情報バッファＩＳＩＮＦのみを更新すればよい。また、発行情報バッファＩＳＩＮＦは、命令キャッシュＩＣとアレイが独立していても、書込むエントリを揃えることにより、読出し時は命令と同時に発行情報を読出すことができる。尚、命令キャッシュＩＣエントリのリプレース時には、対応する発行情報を初期化する。発行情報が不明な場合は、命令を発行できる可能性があるので、００：「次サイクル全発行スロット使用」を初期値とする。
【００６５】
図１３には、スレッド選択回路１０が例示されている。スレッド選択回路１０は、２命令同時発行のスーパースカラ方式用に２命令ｏｐ０及びｏｐ１を、その有効情報ｏｐｖ０及びｏｐｖ１と共に出力する。選択回路１０には、選択入力信号である命令キャッシュＩＣ出力の４命令ｏｐｉｃ０、ｏｐｉｃ１、ｏｐｉｃ２及びｏｐｉｃ３と、その有効信号ｏｐｖｉｃ０、ｏｐｖｉｃ１、ｏｐｖｉｃ２及びｏｐｖｉｃ３と、命令に付加されている発行情報バッファＩＳＩＮＦからの発行情報ｉｓｉｃ０、ｉｓｉｃ１、ｉｓｉｃ２及びｉｓｉｃ３が入力される。
【００６６】
４命令ｏｐｉｃ０、ｏｐｉｃ１、ｏｐｉｃ２及びｏｐｉｃ３と、その有効信号ｏｐｖｉｃ０、ｏｐｖｉｃ１、ｏｐｖｉｃ２及びｏｐｖｉｃ３は、命令キューＩＱ０又はＩＱ１に入力される。発行情報ｉｓｉｃ０、ｉｓｉｃ１、ｉｓｉｃ２及びｉｓｉｃ３は、命令キューＩＱ０に入力される。また、先行命令ｏｐｉｃ０、その有効信号ｏｐｖｉｃ０及び先行命令付加情報ｉｓｉｃ０は、命令選択回路ＩＭＵＸ０にも入力される。後行命令ｏｐｉｃ１及びその有効信号ｏｐｖｉｃ１は、命令選択回路ＩＭＵＸ１にも入力され、命令キャッシュＩＣ出力の命令を直ちに供給する場合に、命令選択回路ＩＭＵＸ０又は命令選択回路ＩＭＵＸ１で選択される。
【００６７】
命令キューＩＱ０は、バッファした命令の先頭２命令を優先スレッドの先行命令ｏｐ００及び後行命令ｏｐ０１として出力し、これらの命令が有効かどうかを示す有効信号ｏｐｖ００及びｏｐｖ０１も出力する。更に、命令キューＩＱ０は、先行命令ｏｐ００の発行情報ｉｓｉｑも出力する。命令キューＩＱ１は、バッファした命令の先頭２命令を非優先スレッドの先行命令ｏｐ１０及び後行命令ｏｐ１１として出力し、これらの命令が有効かどうかを示す有効信号ｏｐｖ１０及びｏｐｖ１１も同時に出力する。
【００６８】
スレッド選択回路ＴＨＭＵＸ０は、スレッド選択制御回路ＣＴＬから出力される先行命令スレッド選択信号ｔｈｉｆ０が０であれば、優先スレッドの先行命令ｏｐ００及びその有効信号ｏｐｖ００を選択し、先行命令スレッド選択信号ｔｈｉｆ０が１であれば、非優先スレッドの先行命令ｏｐ１０及びその有効信号ｏｐｖ１０を選択する。そして、スレッド選択回路ＴＨＭＵＸ０は、先行命令ｏｐｉｑ０及び有効信号ｏｐｖｉｑ０として出力する。発行情報ｉｓｉｑは、先行命令スレッド選択信号ｔｈｉｆ０が０の場合のみ使用されるので、先行命令スレッド選択信号ｔｈｉｆ０の値とは関係なく先行命令ｏｐｉｑ０に付加しておく。スレッド選択回路ＴＨＭＵＸ１は、スレッド選択制御回路ＣＴＬから出力される後行命令スレッド選択信号ｔｈｉｆ１が０であれば、優先スレッドの後行命令ｏｐ０１及びその有効信号ｏｐｖ０１を選択し、後行命令スレッド選択信号ｔｈｉｆ１が１であれば、非優先スレッドの後行命令命令ｏｐ１１及びその有効信号ｏｐｖ１１を選択する。そして、スレッド選択回路ＴＨＭＵＸ１は、後行命令ｏｐｉｑ１及び有効信号ｏｐｖｉｑ１として出力する。
【００６９】
命令選択回路ＩＭＵＸ０は、スレッド選択回路ＴＨＭＵＸ０出力の有効信号ｏｐｖｉｑ０が１の場合には、スレッド選択回路ＴＨＭＵＸ０出力ｏｐｉｑ０、その有効信号ｏｐｖｉｑ０、及び発行情報ｉｓｉｑを選択する。また、命令選択回路ＩＭＵＸ０は、有効信号ｏｐｖｉｑ０が０の場合には、命令キャッシュＩＣ出力命令ｏｐｉｃ０、その有効信号ｏｐｖｉｃ０、及び発行情報ｉｓｉｃ０を選択する。そして、命令選択回路ＩＭＵＸ０は、先行命令ｏｐｉｆ０、その有効信号ｏｐｖｉｆ０、及び発行情報ｉｓｉｆとして出力する。命令選択回路ＩＭＵＸ１は、スレッド選択回路ＴＨＭＵＸ１出力の有効信号ｏｐｖｉｑ１が１の場合には、スレッド選択回路ＴＨＭＵＸ１出力ｏｐｉｑ１及びその有効信号ｏｐｖｉｑ１を選択する。また、命令選択回路ＩＭＵＸ１は、有効信号ｏｐｖｉｑ１が０の場合には、命令キャッシュＩＣ出力命令ｏｐｉｃ１及びその有効信号ｏｐｖｉｃ１を選択する。そして、命令選択回路ＩＭＵＸ１は、後行命令ｏｐｉｆ１及びその有効信号ｏｐｖｉｆ１として出力する。尚、命令選択回路ＩＭＵＸ０及びＩＭＵＸ１は、本実施形態のように命令フェッチステージＩＦで命令キャッシュＩＣリードから命令デコーダＩＤＵへ供給する命令の選択までを１サイクルで行う場合に必要な回路である。このため、命令選択回路ＩＭＵＸ０及びＩＭＵＸ１は、パイプライン段数を増やして常に一旦命令キューＩＱ０及びＩＱ１に命令コードを格納する方式にした場合は不要となる。
【００７０】
命令デコーダ入力ラッチＯＰ０は、その出力が命令デコードステージＩＤで実行可能と判断され発行された場合に、命令選択回路ＩＭＵＸ０出力の先行命令ｏｐｉｆ０及びその有効信号ｏｐｖｉｆ０を次の命令デコーダ入力としてラッチし、新たな先行命令ｏｐ０及びその有効情報ｏｐｖ０として出力する。命令デコーダ入力ラッチＯＰ１は、その出力が命令デコードステージＩＤで実行可能と判断され発行された場合に、命令選択回路ＩＭＵＸ１出力の後行命令ｏｐｉｆ１及びその有効信号ｏｐｖｉｆ１を次の命令デコーダ入力としてラッチし、新たな後行命令ｏｐ１及びその有効情報ｏｐｖ１として出力する。
【００７１】
先行命令スレッドラッチＴＨは、スレッド選択制御回路ＣＴＬから出力される先行命令スレッド選択信号ｔｈｉｆ０を命令デコーダ入力ラッチＯＰ０の更新と同時にラッチし、命令デコードステージＩＤの先行命令スレッドｔｈｉｄ０として出力する。また、発行情報ラッチＩＳは、先行命令スレッドｔｈｉｆ０が０であれば、発行情報ｉｓｉｆを入力として選択する。また、発行情報ラッチＩＳは、先行命令スレッドｔｈｉｆ０が１であれば、スレッド選択制御回路ＣＴＬから出力される発行情報ｉｓｎｘｔを入力として選択する。そして、発行情報ラッチＩＳは、命令デコーダ入力ラッチＯＰ０の更新と同時にラッチし、命令デコードステージＩＤの次サイクル発行情報ｉｓｉｄとして出力する。
【００７２】
図１４には、２ビットの発行情報によるスレッド選択制御論理が例示されている。スレッド選択制御回路ＣＴＬは、命令デコードステージＩＤの先行命令有効情報ｏｐｖ０、先行命令スレッドｔｈｉｄ０、及び発行情報ｉｓｉｄを入力とし、図１４の真理値表に従って、スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１と発行情報ｉｓｎｘｔを生成して出力する。
【００７３】
図１４のケース＃１は、先行命令有効情報ｏｐｖ０が０かつスレッド選択信号ｔｈｉｆ０が０の場合である。これは、優先スレッドであるスレッド０の命令が選択されたにもかかわらず有効な命令がない場合に相当し、発行情報ｉｓｉｄも有効な情報を保持していない。このため、次のサイクルも優先スレッドであるスレッド０の命令が選択されるように、先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１を共に０とする。先行命令スレッド選択信号ｔｈｉｆ０が０なので、発行情報ｉｓｎｘｔは、先行命令スレッドラッチＴＨの入力として選択されず、生成しても使用しない信号であるので、出力は任意の値でよい。図１４では＊が任意の値を表す。
【００７４】
ケース＃２から＃５は、ｏｐｖ０が１で命令が有効であるか、ｔｈｉｄ０が１で非優先スレッドが選択されている場合である。この条件は、ｏｐｖ０が１で命令が有効かつｔｈｉｄ０が０で優先スレッドが選択されている場合と、ｔｈｉｄ０が１で非優先スレッドが選択されている場合の２つに排他的に分類できる。
【００７５】
前者の場合、発行情報ｉｓｉｄとして優先スレッドの先行命令ｏｐｉｆ０に付加された発行情報ｉｓｉｆが選択されている。この場合、図１１のエンコーディングに従って、次に優先スレッドが発行スロットを使用するかどうかが分かるので、先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１が図１４のように決定される。具体的には、ケース＃２では、発行情報ｉｓｉｄが００：「次サイクル全発行スロット使用」なので、次のサイクルは優先スレッドであるスレッド０の命令が選択されるように、先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１を共に０とする。ケース＃３では、発行情報ｉｓｉｄが０１：「次サイクル後行発行スロット不使用」なので、次のサイクルは先行命令には優先スレッドであるスレッド０の命令が、後行命令には非優先スレッドであるスレッド１の命令が選択されるように、先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１をそれぞれ０及び１とする。ケース＃４及び＃５では、発行情報ｉｓｉｄがそれぞれ１０：「次サイクル全発行スロット不使用」及び１１：「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」なので、次のサイクルは非優先スレッドのスレッド１の命令が選択されるように、先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１を共に１とする。
【００７６】
また、ケース＃４及びケース＃５では、次サイクルに非優先スレッドの命令を選択するので、発行情報ｉｓｉｆに有効な情報がない。このため、発行情報ｉｓｎｘｔを生成して次サイクルに発行情報ｉｓｉｆの代わりに使用する。ケース＃４では、次々サイクルは「全発行スロット使用」なので、発行情報ｉｓｎｘｔを００とする。ケース＃５では、次々サイクルは「後行発行スロット不使用」なので、発行情報ｉｓｎｘｔを０１とする。他のケースでは次サイクルも発行情報ｉｓｉｆに有効な情報が載ってくるのでそちらを使用する。
【００７７】
後者の場合、上記ケース＃４及びケース＃５で生成した発行情報ｉｓｎｘｔが選択されてラッチされ、次サイクル発行情報ｉｓｉｄとなっている。その結果、図１４のケース＃２及びケース＃３の状態となり、動作は前者の場合のケース＃２及びケース＃３と同一である。後者の場合でケース＃４及びケース＃５となることはない。
【００７８】
以上のスレッド選択制御論理により、スレッド選択制御信号ｔｈｉｆ０及びｔｈｉｆ１が適切に制御され、優先スレッドの使用しない発行スロットが非優先スレッドに割当てられる。
【００７９】
図１５には、優先スレッドの空き発行スロットで非優先スレッドの命令を発行しているプロセッサ１の動作が例示される。尚、ここでは、図４の例と同様に、図１に示した第１のプログラムを優先スレッドとして実行している時の空き命令発行スロットを活用して、図３に示した第２のプログラムを非優先スレッドとして実行した場合のループ部の動作例を示している。本実施形態では、初回実行時に発行情報を生成して発行情報バッファＩＳＩＮＦに格納し、２回目からは発行情報を活用して、空き発行スロットで非優先スレッドの命令を発行する。最初の６サイクルは初回実行であるので、発行情報は、初期値００で「次サイクル全発行スロット使用」なので、発行スロットは、優先スレッドに割当てられ非優先スレッドの命令は発行できない。
【００８０】
２ループ目では、発行情報が更新されているので以下のように動作する。１サイクル目は、優先スレッドである第１のプログラムの２命令を発行する。そして、１サイクル目の発行情報は０１で「次サイクル後行発行スロット不使用」なので、２サイクル目は、先行命令には優先スレッドである第１のプログラムの命令が、後行命令には非優先スレッドである第２のプログラムの命令が選択される。しかし、２命令ともロードストア命令で実行リソースが競合するので、後行の非優先スレッドの命令は発行できない。２サイクル目の発行情報は１１で「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」なので、３サイクル目では非優先スレッドである第２のプログラムの命令を選択し、４サイクル目に備えて発行情報を０１、即ち「次サイクル後行発行スロット不使用」に変更する。この優先スレッドの３サイクル目が、非優先スレッドの１サイクル目となり、以下２サイクル遅れで非優先スレッドが実行される。
【００８１】
４サイクル目では、３サイクル目の発行情報が０１になっているので、１サイクル目同様、先行命令には優先スレッドである第１のプログラムの命令が、後行命令には非優先スレッドである第２のプログラムの命令が選択される。しかし、２命令ともロードストア以外の命令で実行リソースが競合するので、後行の非優先スレッドの命令は発行できない。４サイクル目の発行情報は００で「次サイクル全発行スロット使用」であるので、５サイクル目では、優先スレッドである第１のプログラムの命令を２命令発行する。５サイクル目の発行情報は１０で「次サイクル全発行スロット不使用」なので、６サイクル目では非優先スレッドである第２のプログラムの命令を選択し、３ループ目の１サイクル目に備えて発行情報を００即ち「次サイクル全発行スロット使用」に変更する。しかし、２命令ともロードストア以外の命令で実行リソースが競合するので、後行命令は発行できない。
【００８２】
３ループ目の１サイクル目では、２ループ目の６サイクル目の発行情報が００になっているので、２ループ目の１サイクル目と同様、優先スレッドの２命令を選択し発行する。そして、１サイクル目の発行情報は０１で「次サイクル後行発行スロット不使用」なので、２サイクル目は先行命令には優先スレッドの命令が、後行命令には非優先スレッドの命令が選択され発行される。ここで、非優先スレッドの１ループ目が６サイクルで完了する。以下、優先スレッドと非優先スレッドが２サイクルずれてそれぞれ１ループ６サイクルで実行される。
【００８３】
以上のように、本実施形態によれば、優先スレッドの空き発行スロットを使って非優先スレッドの命令が発行することが可能となり、２ループ目からはスレッド選択を理想的に行えると仮定した図４と同一の命令発行が可能となっている。そして、図２の例では１であったＩＰＣが約１．７になり、効率を大幅に改善することができる。
【００８４】
《実施形態２》
本発明の実施形態２に係るプロセッサは、上記したプロセッサ１と比べると、発行情報が１ビットとなった点が異なり、パイプライン構造部分及びスレッド選択回路の構成等は、図１２及び図１３に示したものと同様となる。尚、本実施形態では、発行情報が１ビットであるので、後行スロットのみ空いている場合を活用することはできない。そこで、２つのスレッドの同時発行はしないものとして制御を簡略化している。
【００８５】
図１６には、１命令に１ビットの発行情報を付加した例が示される。命令長は、図１１に示したものと同様に１６ビットとしている。また、発行情報のエンコードは、０：「次サイクル発行スロット使用」、１：「次サイクル発行スロット不使用」とする。
【００８６】
図１７には、１ビットの発行情報によるスレッド選択制御論理が例示される。２つのスレッドの同時発行はなく、常に先行及び後行スロットに同一スレッドの命令が発行される。従って、常に先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１の値は同一である。ケース＃１は、先行命令有効情報ｏｐｖ０が０かつスレッド選択信号ｔｈｉｆ０が０の場合である。図１４と同様に、次のサイクルも優先スレッドであるスレッド０の命令が選択されるように、先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１を共に０とする。
【００８７】
ケース＃２及び＃３は、ｏｐｖ０が１で命令が有効であるか、ｔｈｉｄ０が１で非優先スレッドが選択されている場合である。この条件は、ｏｐｖ０が１で命令が有効かつｔｈｉｄ０が０で優先スレッドが選択されている場合と、ｔｈｉｄ０が１で非優先スレッドが選択されている場合の２つに排他的に分類できる。
【００８８】
前者の場合、発行情報ｉｓｉｄとして優先スレッドの先行命令ｏｐｉｆ０に付加された発行情報ｉｓｉｆが選択されている。この場合、図１６のエンコーディングに従って、次に優先スレッドが発行スロットを使用するかどうかが分かるので、先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１が図１７のように決定される。具体的には、ケース＃２では、発行情報ｉｓｉｄが０で「次サイクル発行スロット使用」なので、次のサイクルは優先スレッドであるスレッド０の命令が選択されるように、先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１を共に０とする。ケース＃３では、発行情報ｉｓｉｄが１で「次サイクル発行スロット不使用」なので、次のサイクルは非優先スレッドであるスレッド１の命令が選択されるように、先行及び後行命令スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１を共に１とする。
【００８９】
また、ケース＃３では、次サイクルに非優先スレッドの命令を選択するので、発行情報ｉｓｉｆに有効な情報がない。このため、発行情報ｉｓｎｘｔを生成して次サイクルに発行情報ｉｓｉｆの代わりに使用する。次々サイクルは発行スロットを使用するので発行情報ｉｓｎｘｔは０とする。一方、ケース＃２では、次サイクルも発行情報ｉｓｉｆに有効な情報が載ってくるのでそちらを使用する。
【００９０】
後者の場合、上記ケース＃３で生成した発行情報ｉｓｎｘｔが選択されてラッチされ、次サイクル発行情報ｉｓｉｄとなっている。その結果、図１７のケース＃２の状態となり、動作は前者の場合のケース＃２と同一である。後者の場合でケース＃３となることはない。
【００９１】
以上のスレッド選択制御論理により、スレッド選択制御信号ｔｈｉｆ０及びｔｈｉｆ１が適切に制御され、優先スレッドの使用しない発行スロットがサイクル単位で非優先スレッドに割当てられる。
【００９２】
図１８には、優先スレッドの空き発行スロットで非優先スレッドの命令を発行している実施形態２に係るプロセッサの動作が例示される。尚、ここでは、図１５の例と同様に、図１に示した第１のプログラムを優先スレッドとして実行している時の空き命令発行スロットを活用して、図３に示した第２のプログラムを非優先スレッドとして実行した場合のループ部の動作例である。本実施形態では、初回実行時に発行情報を生成して発行情報バッファＩＳＩＮＦに格納し、２回目からは発行情報を活用して、空き発行スロットで非優先スレッドの命令を発行する。最初の６サイクルは初回実行であるので、発行情報は初期値０で「次サイクル発行スロット使用」なので、発行スロットは、優先スレッドに割当てられ非優先スレッドの命令は発行できない。
【００９３】
２ループ目では発行情報が更新されているので以下のように動作する。１サイクル目は、優先スレッドである第１のプログラムの２命令を発行する。そして、１サイクル目の発行情報は０で「次サイクル発行スロット使用」なので、２サイクル目も優先スレッドの命令が選択される。しかし、レジスタ競合により後行命令は発行できない。２サイクル目の発行情報は１で「次サイクル発行スロット不使用」なので、３サイクル目では非優先スレッドである第２のプログラムの命令を選択し、４サイクル目に備えて発行情報を０、即ち「次サイクル発行スロット使用」に変更する。この優先スレッドの３サイクル目が、非優先スレッドの１サイクル目となり、以下２サイクル遅れで非優先スレッドが実行される。
【００９４】
４サイクル目では、３サイクル目の発行情報が０になっているので、１、２サイクル目と同様に、優先スレッドである第１のプログラムの命令が選択される。しかし、２命令ともロードストア以外の命令で実行リソースが競合するので、後行命令は発行できない。４サイクル目の発行情報は０で「次サイクル発行スロット使用」であるので、５サイクル目も１、２、４サイクル目と同様に、優先スレッドである第１のプログラムの命令を２命令発行する。５サイクル目の発行情報は１で「次サイクル発行スロット不使用」なので、６サイクル目では非優先スレッドである第２のプログラムの命令を選択し、３ループ目の１サイクル目に備えて発行情報を０、即ち「次サイクル発行スロット使用」に変更する。しかし、２命令ともロードストア以外の命令で実行リソースが競合するので、後行命令は発行できない。
【００９５】
３ループ目も２ループ目と同様に、１、２、４、５サイクル目で優先スレッドを選択し、３、６サイクル目で非優先スレッドを選択する。優先スレッドの動作は２ループ目と同一である。非優先スレッドは、１ループ目が終了していないので、７サイクル目の処理を優先スレッドの３サイクル目で行う。この時、後行発行スロットには非分岐側のループを抜けた場合の命令「ｍｏｖ  ｒ３，＠ｒ１」が入るが、ループを抜けていないので発行はキャンセルされる。その後、非優先スレッドは、優先スレッドの６サイクル目で２ループ目に入る。
【００９６】
その結果、優先スレッドは１ループ６サイクルで、非優先スレッドは１ループ９サイクルで実行される。従って、発行情報が有効でない優先スレッドの１ループ目を除くと、１８サイクルで優先スレッド３回、非優先スレッド２回の実行が可能となっている。優先スレッドのみの実行では１８サイクルで１８命令であるので、ＩＰＣは１であったが、本実施形態によれば、更に非優先スレッドの命令を８命令実行するのでＩＰＣが約１．４になり、効率を大幅に改善することができる。
【００９７】
《実施形態３》
本発明の実施形態３に係るプロセッサは、上記したプロセッサ１と比べると、図１３に示した命令デコーダＩＤＵのラッチ部分の構成等が異なる。図１９には、命令デコーダＩＤＵの一部の構成が例示されている。図１９の入力信号ｏｐｉｆ０、ｏｐｖｉｆ０、ｉｓｉｆ、ｏｐｉｆ１及びｏｐｖｉｆ１と、出力信号ｔｈｉｆ０及びｔｈｉｆ１とは、図１３の信号と同一である。図１３では、入力信号ｏｐｉｆ０、ｏｐｖｉｆ０、ｏｐｉｆ１及びｏｐｖｉｆ１を、命令デコーダ入力ラッチＯＰ０及びＯＰ１で単純にラッチしていた。これに対して、本実施形態では、先行命令ｏｐｉｆ０及び先行命令有効信号ｏｐｖｉｆ０を、２つの命令デコーダ入力ラッチＯＰ０ＣＴＬ及びＯＰ０ＩＳにラッチする。同様に、後行命令ｏｐｉｆ１及び後行命令有効信号ｏｐｖｉｆ１を２つの命令デコーダ入力ラッチＯＰ１ＣＴＬ及びＯＰ１ＩＳにラッチする。
【００９８】
入力ラッチＯＰ０ＩＳの更新は、発行可否判定回路活性化信号ｉｓａｃ０によって行う。発行情報が有効で優先スレッドが発行可能な場合は、活性化信号ｉｓａｃ０を０として、入力ラッチＯＰ０ＩＳを更新せずに、活性化信号ｉｓａｃ０をラッチして、ラッチした信号で発行可否判定回路ＩＳ０の出力を強制的に発行可能とし、発行信号ｉｓｓｕｅ０として出力する。他の場合は、活性化信号ｉｓａｃ０を１として発行可否判定回路ＩＳ０を活性化し、その出力を発行信号ｉｓｓｕｅ０として出力する。ここで、発行情報が有効で優先スレッドが発行不可能な場合も、優先スレッドが選択されていれば、発行可否判定回路ＩＳ０を使用しなくても発行不可能であることが判明するが、優先スレッドが発行不可能な場合は、通常非優先スレッドが選択されているので、発行可否判定回路ＩＳ０による判定が必要である。
【００９９】
入力ラッチＯＰ０ＣＴＬの出力に接続されている実行制御情報生成回路ＣＴＬ０及びオペランドフォワーディング情報生成回路ＦＷＤ０は、発行可否が発行情報によって予め判明している場合でも、実行制御情報ｅｘｅｃｔｌ０及びフォワーディング情報ｆｗｄｃｔｌ０を出力して、オペランド供給及び命令実行を制御する。従って、これらの生成回路の入力信号である入力ラッチＯＰ１ＣＴＬの出力は、活性化信号ｉｓａｃ０が０であっても更新する。以上が先行命令用の回路の説明であるが、後行命令用の回路も同様に動作する。
【０１００】
図２０には、図１９に示すスレッド選択回路ＣＴＬのスレッド選択制御論理が例示される。このスレッド選択制御論理は、図１４と類似しているが、発行情報ｉｓｉｄのエンコーディングのうち１１を「発行情報無効」に割当てている点が異なる。即ち、図１４及び図１７に示すスレッド選択制御論理では、発行情報が無効な場合は優先スレッドが実行できる可能性があるので「次サイクル全発行スロット使用」として優先スレッドを選択し、発行可否判定回路は常に使用する。一方、本実施形態では「発行情報無効」の場合は、発行可否判定回路ＩＳ０及びＩＳ１を活性化して発行可否判定を行い、発行情報が有効で「次サイクル全発行スロット使用」の場合は発行可能であることが判明しているので、発行可否判定回路ＩＳ０及びＩＳ１は使用しない。従って、これらを区別する必要があるので、図１１のエンコーディングのうち１１を「発行情報無効」に割当てている。
【０１０１】
その結果、図１１の１１：「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」という場合を記憶することができず、代わりに１０：「次サイクル全発行スロット不使用」を使用することになる。この違いを図１５の動作例に当てはめると、優先スレッドのループの２サイクル目に１１：「次サイクル全発行スロット不使用かつ次々サイクル後行発行スロット不使用」という場合があり、これが１０：「次サイクル全発行スロット不使用」となる。その結果、ループの４サイクル目の後行スロットが空いていることが分からず、４サイクル目の後行スロットに優先スレッドの命令が選択されてしまう。しかし、図１５の動作例ではここで非優先スレッドの命令が選択されてもリソース競合により実行できないので、性能は劣化しない。そして、このエンコーディングの変更による性能劣化は、他の場合も比較的小さいと考えられる。
【０１０２】
さて、図２０のスレッド選択制御論理のケース＃１から＃４の出力信号ｔｈｉｆ０、ｔｈｉｆ１及びｉｓｎｘｔは、図１４と同一であるが、図１４にはない出力信号として発行可否判定回路活性化信号ｉｓａｃ０及びｉｓａｃ１がある。これらの信号は、発行情報が有効なケース＃２から＃４では、それぞれスレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１と同じ値である。これは、優先スレッドを選択すると、発行可否判定回路ＩＳ０及びＩＳ１を活性化させないためである。一方、ケース＃１では、発行情報が無効であるので、活性化信号ｉｓａｃ０及びｉｓａｃ１を１にして、発行可否判定回路ＩＳ０及びＩＳ１を活性化させる。また、ケース＃５も発行情報が無効であるので、全ての出力信号がケース＃１と同一である。
【０１０３】
以上のように、本実施形態によれば、発行情報が有効な場合は、発行可否判定をしなくても優先スレッドの発行可否が判明するから、発行情報が有効な場合は、発行可否判定回路ＩＳ０及びＩＳ１の動作を抑止することができる。従って、近年、スーパースカラ化やスーパーパイプライン化により、リソース競合やオペランド競合の要因が増大し、それを検出して発行可否を判定する回路も肥大化しているので、発行可否判定回路ＩＳ０及びＩＳ１の動作を抑止することで、消費電力を低減できる。この発行可否判定回路ＩＳ０及びＩＳ１の動作を抑止するには、例えば、命令デコーダＩＤＵのラッチ部分に供給されているクロック、即ち、フリップフロップに不図示のクロックドライバーから供給されるクロックを停止すればよい。このような、消費電力を低減する技術は、携帯機器からサーバーシステム、スーパーコンピュータに至るまで、全ての機器のプロセッサにとって有効な技術となる。
【０１０４】
《実施形態４》
本発明の実施形態４に係るプロセッサは、上記したプロセッサ１と比べると、３２ビット命令のうち３ビットを発行情報にしている点が異なる。即ち、この発行情報は、命令に付加されているのではなく、命令コード内に入れられている。図２１には、命令コード内に３ビットの発行情報を付加した例が示される。同図に示される命令コードの命令長に特に制限はないが、本実施形態では３２ビットとしている。また、発行情報のエンコードは、不使用発行スロットが０００：「なし」、００１：「１サイクル後の後行」、０１０：「１サイクル後」、０１１：「１サイクル後と２サイクル後の後行」とする。また、１００：「１，２サイクル後」、１０１：「１，２サイクル後と３サイクル後の後行」、１１０：「１，２，３サイクル後」、１１１：「１，２，３サイクル後と４サイクル後の後行」とする。従って、最大３．５サイクル、７発行スロットの空きまで発行情報として保持することができる。
【０１０５】
本実施形態では、命令コード内に発行情報が入っているので、実施形態１、２のパイプライン構造部分に含まれる図１２に示した発行情報バッファＩＳＩＮＦは不要となる。従って、パイプライン構造部分は、図５に示す一般的な構成となり、スレッド選択回路の構成は、実施形態１、２の図１３に示したものと同様となる。
【０１０６】
図２２には、３ビットの発行情報によるスレッド選択制御論理が例示される。スレッド選択制御回路ＣＴＬは、発行情報が図２１のように３ビットでエンコードされているので、図２２のように９通りの制御になる。ケース＃１は、実施形態１、２のケース＃１と同様に発行情報が無効なので、次サイクルも優先スレッドを選択するために、スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１を０とする。そして、発行情報ｉｓｎｘｔは任意の値＊でよい。ここで、残りの発行情報が有効な８通りのうち、最も不使用発行スロットが多い１１１：「１，２，３サイクル後と４サイクル後の後行発行スロット」が不使用の場合であるケース＃９を説明する。１サイクル後の発行スロットは不使用なので、スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１を１とする。そして１サイクル後には、不使用発行スロットが１サイクル分減って、１０１：「１，２サイクル後と３サイクル後の後行発行スロットが不使用」の場合になるので、発行情報ｉｓｎｘｔを１０１とする。ケース＃４から＃８も同様に、スレッド選択信号ｔｈｉｆ０及びｔｈｉｆ１を１とし、発行情報ｉｓｎｘｔを不使用発行スロットが１サイクル分減った場合のコードにする。また、ケース＃２及び＃３の動作は、発行情報が２ビットの場合の図１４のケース＃２及び＃３と同一である。
【０１０７】
以上のように、本実施形態によれば、実施形態１、２ではハードウェアである命令デコーダＩＤＵで生成していた発行情報を、命令コード生成時にコンパイラ等のソフトウェアで生成して予め埋め込むことができる。さらに、実施形態１、２では、２回目の実行時から有効に機能した発行情報を１回目から活用することができる。このため、本実施形態は、ループ構造が少なかったり、ループ回数が少なかったりして、２回目以降の実行の割合が少ない場合に特に有効となる。また、発行情報を３ビットにして、図２１のようにエンコードしているので、命令発行間隔が開いた場合にも、空き発行スロットを有効に使用することができる。このため、本実施形態は、並列性が低かったり、メモリアクセス等によるデータ待ちが多かったりする場合に特に有効となる。
【０１０８】
《実施形態５》
本発明の実施形態５に係るプロセッサは、上記したプロセッサ１と比べると、優先スレッドの即時実行開始を保証するために、実行しているスレッドより優先度の高いスレッドがくる可能性のあるときは、マルチスレッドの１つを使用せずにホットスタンバイ状態にしておく点が異なる。本実施形態に係るプロセッサは、実施形態１から４と同様に、優先スレッドと非優先スレッドの２スレッドの発行が可能なマルチスレッドプロセッサである。図２３には、実施形態５に係るプロセッサによるホットスタンバイ動作が例示されている。この動作例では、図３に示す第２のプログラムを非優先スレッドとして実行中に、ループ部の１サイクル目で先頭２命令を実行した後に、優先スレッドとして図１に示す第１のプログラムの実行を開始している。更に、このプロセッサでは、実施形態４のように１回目の実行時から発行情報を活用できるものとする。このプロセッサでは、非優先スレッドのみを実行し、優先スレッド実行用のハードウェアを使用していないので、優先スレッドは即時実行開始可能である。
【０１０９】
具体的には、優先スレッドのプログラムは、初期化ルーチンを４サイクル実行し、ループ部を１ループ当り６サイクルで実行していく。優先スレッド実行中は、発行情報によって不使用スロットで非優先スレッドの命令を実行できる。また、この動作例では、不使用スロットを使って非優先スレッドの終了処理を開始する。例えば、優先スレッドのループ部の２、３、及び６サイクル目は、ロードストアリソース競合により後行スロットの発行はできないが、初期化ルーチンの２、３、及び４サイクル目と、ループ部の１、４、及び５サイクル目を使って、非優先スレッドの終了処理であるレジスタの退避を進めることができる。
【０１１０】
以上のように、本実施形態によれば、実行中の非優先スレッドより優先度の高いスレッドがくる可能性のあるときは、非優先スレッドの実行を終了して、再びホットスタンバイ状態にすることにより、優先度の高いスレッドの即時実行開始を保証することができる。また、実行を開始した優先スレッドより優先度の高いスレッドがくる可能性のあるときは、優先スレッドで実行を開始したプログラムを非優先スレッドで実行するように切替えることにより、より優先度の高いスレッドの即時実行開始を保証することができる。
【０１１１】
《制御系システム》
図２４には、上記した各実施形態に係るプロセッサを用いた制御系システムが例示されている。同図に示される制御システムは、特に限定されないが、自動車の制御及び情報処理を行う車載システム等を想定している。この制御系システムでは、ネットワークＮＷを介して２つの電子制御装置ＥＣＵ０及びＥＣＵ１が接続されている。電子制御装置ＥＣＵ０は、各実施形態に係るプロセッサＣＰＵ０と、メモリＭＥＭ０とを備えている。メモリＭＥＭ０には、主にプロセッサＣＰＵ０で実行されるプログラムＰＧ０及びＰＧ２が格納されている。一方、電子制御装置ＥＣＵ１は、各実施形態に係るプロセッサＣＰＵ１と、メモリＭＥＭ１とを備えている。メモリＭＥＭ１には、主にプロセッサＣＰＵ１で実行されるプログラムＰＧ１及びＰＧ２が格納されている。プログラムＰＧ２は、本来は電子制御装置ＥＣＵ０で実行すべきプログラムであるが、２つの電子制御装置ＥＣＵ０及びＥＣＵ１の双方に格納されており、実行優先度はプログラムＰＧ０及びＰＧ１より低いものとする。
【０１１２】
電子制御装置ＥＣＵ０において、プロセッサＣＰＵ０により、優先度の高いプログラムＰＧ０を優先スレッドで、優先度の低いプログラムＰＧ２を非優先スレッドで実行すれば、プログラムＰＧ０の実行時間を保証しつつ、プログラムＰＧ２の実行も進めることが可能である。しかし、場合によっては、プログラムＰＧ０が並列度の高いプログラムであり、実行中は余剰能力がなく、一方で、電子制御装置ＥＣＵ１で実行中のプログラムＰＧ１の方は並列度が低いプログラムであり、余剰能力が多いという状況も考えられる。
【０１１３】
このような場合に、本来の処理担当である電子制御装置ＥＣＵ０が、ネットワークＮＷ経由で余剰能力の多い電子制御装置ＥＣＵ１に処理を依頼すれば、プログラムＰＧ２をより速く実行することができる。このため、この制御システムでは、優先度の高いプログラムＰＧ１の実行時間を保証しつつ、プログラムＰＧ２の実行も進めることができる。その結果、２つの電子制御装置ＥＣＵ０及びＥＣＵ１の間で、余剰能力を供給することになり、負荷の効率的分散が可能となる。
【０１１４】
以上のように、この制御系システムによれば、応答時間を保証しつつ、他の電子制御装置からの処理依頼を受付けることができるから、スループットを向上させることができる。特に、車載システムでは、エンジン制御、ブレーキ制御等を行う各種電子制御装置やカーインフォメーションシステムは車内ネットワークで接続されているので、電子制御装置の余剰能力を他の電子制御装置やカーインフォメーションシステムに提供することにより、システム全体の性能を向上させることができる。
【０１１５】
以上、本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１１６】
例えば、実施形態５に係るプロセッサでは、実行しているスレッドより優先度の高いスレッドを受付ける可能性がある場合に、ホットスタンバイ状態にするようにしたが、ここでは、所定の割込み制御により優先度を判定して、より優先度の高いスレッドの即時実行開始を保証するようにしてもよい。
【０１１７】
また、図２４に示した制御システムでは、状況に応じてどちらの電子制御装置でもプログラムＰＧ２を実行可能なように、予め双方のメモリＭＥＭ０及びＭＥＭ１に格納しているが、これに限られない。即ち、プログラム転送時間が問題にならず、逆にプログラムを格納するメモリ容量が問題となるような場合には、処理を依頼するときにプログラムを、処理依頼を受付ける側の電子制御装置に転送するようにしてもよい。これは、電子制御装置が処理能力に応じたメモリ容量を有しているのが一般的であり、使用しないプログラムを格納しておく余裕がない場合であっても、使用時にはプログラムを格納するスペースを確保できるからである。
【符号の説明】
【０１１８】
１  プロセッサ（ＣＰＵ）
２  ＣＰＵコア
３  内部バス（ＢＵＳ）
４  パイプライン構造部分
５  ＢＩＳ
６，７  機能モジュール（ＩＰ）
８  ＥＭＩ
９  ＭＥＭ
１０  スレッド選択回路
ＩＦＵ  命令フェッチユニット
ＰＣ０，ＰＣ１  プログラムカウンタ
ＩＣ  命令キャッシュ
ＩＳＩＮＦ  発行情報バッファ
ＩＱ０，ＩＱ１  命令キュー
ＴＨＭＵＸ  スレッド選択回路
ＩＭＵＸ  命令選択回路
ＩＤＵ  命令デコーダ
ＲＦ０，ＲＦ１  レジスタファイル
ＲＭＵＸ  レジスタスレッド選択回路
ＦＷＤ  フォワーディング回路
ＥＸＵ  実行ユニット
ＤＣ  データキャッシュ
ＣＴＬ  スレッド選択制御回路
【図１】
2011070695.tif 000003
【図２】
2011070695.tif 000004
【図３】
2011070695.tif 000005
【図４】
2011070695.tif 000006
【図５】
2011070695.tif 000007
【図６】
2011070695.tif 000008
【図７】
2011070695.tif 000009
【図８】
2011070695.tif 000010
【図９】
2011070695.tif 000011
【図１０】
2011070695.tif 000012
【図１１】
2011070695.tif 000013
【図１２】
2011070695.tif 000014
【図１３】
2011070695.tif 000015
【図１４】
2011070695.tif 000016
【図１５】
2011070695.tif 000017
【図１６】
2011070695.tif 000018
【図１７】
2011070695.tif 000019
【図１８】
2011070695.tif 000020
【図１９】
2011070695.tif 000021
【図２０】
2011070695.tif 000022
【図２１】
2011070695.tif 000023
【図２２】
2011070695.tif 000024
【図２３】
2011070695.tif 000025
【図２４】
2011070695.tif 000026