(57)【要約】      （修正有）【課題】各プロセッサ間で効率的に演算結果を共有可能な情報処理装置を提供する。【解決手段】プログラムを記憶するプログラム記憶手段１１と、コア毎の演算結果を記憶する演算結果記憶手段４５と、コア数分の命令の命令セットを実行順にプログラム記憶手段から読み出し一次記憶部に記憶する命令読み出し手段２１と、命令セットに含まれる命令を各コアの命令キューに記憶する命令配信手段３２と、一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を演算対象とする命令が第一の命令セットよりも後に実行される第二の命令セットに含まれ第一のコアと異なる第二のコアが実行するか否かを判定する命令依存関係判定手段３３と、命令依存関係判定手段が第二のコアが第二の命令セットに含まれる命令を実行すると判定した場合第一のコアの演算結果記憶手段の値を第二のコアの演算結果記憶手段に複写する複写手段３４と、を有する。【選択図】図２
2013054625.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアが並列に命令を実行する情報処理装置において、
プログラムを記憶するプログラム記憶手段と、
コア毎の演算結果を記憶する演算結果記憶手段と、
コア数分の命令が含まれる命令セットを実行順に前記プログラム記憶手段から読み出し一次記憶部に記憶する命令読み出し手段と、
命令セットに含まれる命令を各コアの命令キューに記憶する命令配信手段と、
前記一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を、演算対象とする依存命令が、第一の命令セットよりも後に実行される第二の命令セットに含まれ、第一のコアと異なる第二のコアが実行するか否かを判定する命令依存関係判定手段と、
前記命令依存関係判定手段が、第二のコアが前記第二の命令セットに含まれる前記依存命令を実行すると判定した場合、第一のコアの前記演算結果記憶手段の値を、前記第二のコアの前記演算結果記憶手段に複写する複写手段と、
を有する情報処理装置。
【請求項２】
複数の各コアが、前記命令キューからの命令読み出し、命令デコード、命令実行、前記演算結果記憶手段への記憶、の各ステージを同期させながら各命令を実行するようにステージの進行を制御するステージ同期手段を有し、
前記ステージ同期手段は、前記第一のコアが、前記第二のコアが演算対象とする演算結果を前記第一のコアの前記演算結果記憶手段に記憶させるまで、複数のコアが実行する前記第一の命令セットよりも後の命令セットの各命令のステージが命令実行のステージに到達しないように、複数のコアのステージを停止させる、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記命令依存関係判定手段が、命令セットに含まれる第二の命令が、同じ命令セット内の第一の命令の演算結果を演算対象とすると判定した場合、
前記命令配信手段は、命令セットに含まれる前記第一の命令を複数のコアのいずれか１つの前記命令キューに記憶し、
前記ステージ同期手段は前記命令キューに前記第一の命令が記憶されたコア以外のコアのステージを停止させた状態で、前記命令キューに前記第一の命令が記憶されたコアに命令読み出しのステージを実行させ、
前記命令配信手段は、前記第二の命令を、前記第一の命令を実行したコアの前記命令キューに記憶すると共に、前記第二の命令を先頭とする命令セットの残りの命令を他のコアの前記命令キューに記憶し、
前記ステージ同期手段は、複数のコアのステージを同期させながら各コアに前記第二の命令以降の命令を実行させる、
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
命令セットに命令実行のステージに必要な処理レイテンシが異なる命令が含まれる場合、
前記ステージ同期手段は、処理レイテンシが異なる命令を実行するコアが、命令実行のステージを終えるまで、処理レイテンシが異なる命令を含む命令セットの次の命令セットの各命令のステージが命令実行のステージに到達しないように、複数のコアのステージを停止させる、
ことを特徴とする請求項２記載の情報処理装置。
【請求項５】
コア毎に故障を検出する故障検出手段を有し、
故障検出手段がコアの故障を検出した場合、故障が検出されたコアと、前記プログラム記憶手段、前記命令読み出し手段、前記命令配信手段、及び、前記ステージ同期手段とを切断する切断手段を有し、
前記命令読み出し手段は、切断されたコアを除くコア数分の命令を含む命令セットを前記プログラム記憶手段から読み出し一次記憶部に記憶し、
前記命令配信手段は、命令セットに含まれる、切断されたコアを除くコア数分の命令を各コアの命令キューに記憶する、
ことを特徴とする請求項２〜４いずれか１項記載の情報処理装置。
【請求項６】
プログラムを記憶するプログラム記憶手段と、
コア毎の演算結果を記憶する演算結果記憶手段と、を有し、
複数のコアが並列に命令を実行する情報処理装置の命令実行方法において、
命令読み出し手段が、コア数分の命令が含まれる命令セットを実行順に前記プログラム記憶手段から読み出し一次記憶部に記憶するステップと、
命令配信手段が、命令セットに含まれる命令を各コアの命令キューに記憶するステップと、
命令依存関係判定手段が、前記一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を演算対象とする依存命令が、第一の命令セットよりも後に実行される第二の命令セットに含まれ、第一のコアと異なる第二のコアが実行するか否かを判定するステップと、
前記命令依存関係判定手段が、第二のコアが前記第二の命令セットに含まれる前記依存命令を実行すると判定した場合、複写手段が、第一のコアの前記演算結果記憶手段の値を、前記第二のコアの前記演算結果記憶手段に複写するステップと、
を有する情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコアが並列に命令を実行する情報処理装置に関する。
【背景技術】
【０００２】
プロセッサの処理速度を向上させるアプローチとして動作周波数の高速化だけでなく、複数のプロセッサを搭載するマルチプロセッサ化やプロセッサに複数のＣＰＵコアを搭載するマルチコア化が知られている。マルチプロセッサやマルチコアでは、処理の並列度が高いほど処理効率が向上するため、並列度が増すように処理を分散させることが重要になる。従来から、並列度を向上させる技術が提案されている（例えば、特許文献１参照。）。特許文献１には、タスク単位で複数のプロセッサにタスクを割り当て、実行可能状態にあるタスクを、いずれのタスクも実行していないプロセッサに割り当てるマルチプロセッサが開示されている。
【０００３】
しかしながら、従来の技術ではタスク単位で処理を実行するため、タスク処理間のバス結合、共有メモリアクセスなどにより実際には並列動作の実現が難しく、マルチコアの性能を最大限引き出すことは困難である。また、余力のあるプロセッサにタスクを割り当てるためには、プロセッサの処理負荷を監視するＯＳの負荷が増大し、また、割り当てのための制御も複雑になる。
【０００４】
また、あるプロセッサが別の複数のプロセッサを制御して並列に処理を実行する技術が提案されている（例えば、特許文献２参照。）。特許文献２には、１つのＲＩＳＣ型プロセッサが複数のＶＬＩＷプロセッサを制御するマイクロプロセッサシステムが開示されている。ＲＩＳＣ型プロセッサは、命令を解読してＶＬＩＷプロセッサに、制御信号、動作クロック周波数、電源電圧を指示する。各ＶＬＩＷプロセッサはそれぞれアプリケーションプログラムを実行する。
【０００５】
また、タスク単位でなく命令単位で処理を分散させる技術も提案されている（例えば、特許文献３参照。）。特許文献３には、命令バッファに格納された命令の依存関係をチェックし、依存関係のない命令を複数のプロセッサに発行し、依存関係がある場合、一方の命令の実行ユニットの実行サイクルを遅延させるスーパースカラプロセッサが開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−１４６５０３号公報
【特許文献２】特開２００２−０３２２１８号公報
【特許文献３】特開２０１１−１２８６７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献２に記載された技術は、各プロセッサ間でデータを利用する必要がある場合について考慮されていないという問題がある。特許文献２では、複数のＶＬＩＷプロセッサのうちの１つが行った演算結果を他のプロセッサが他の演算で用いる際に、他のプロセッサのレジスタに演算結果が格納されていないので、そのための処理が必要になる。すなわち、他のプロセッサは演算結果を持っているプロセッサから演算結果を取得する必要がある。これは、１つのプロセッサで逐次処理を行う処理方法では考慮する必要のない処理である。
【０００８】
一方、特許文献３では、２つの実行ユニットの演算結果が共通のレジスタファイルに格納されるので、プロセッサ間のデータの交換は可能である。しかしながら、レジスタファイルが共通だとレジスタファイルへの書き込みや読み出しがボトルネックとなるおそれがあり、マルチプロセッサシステムでは各プロセッサが独立のレジスタファイルを有する方が処理効率を向上させやすいといえる。特許文献３では、レジスタファイルが独立の場合にプロセッサ間で演算結果をどのように共有するかについて考慮されていない。
【０００９】
本発明は、上記課題に鑑み、各プロセッサ間で効率的に演算結果を共有可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題に鑑み、本発明は、複数のコアが並列に命令を実行する情報処理装置において、コア毎の演算結果を記憶する演算結果記憶手段と、プログラムを記憶するプログラム記憶手段と、コア数分の命令が含まれる命令セットを実行順に前記プログラム記憶手段から読み出し一次記憶部に記憶する命令読み出し手段、命令セットに含まれる命令を各コアの命令キューに記憶する命令配信手段と、前記一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を、演算対象とする依存命令が、第一の命令セットよりも後に実行される第二の命令セットに含まれ、第一のコアと異なる第二のコアが実行するか否かを判定する命令依存関係判定手段と、前記命令依存関係判定手段が、第二のコアが第二の命令セットに含まれる依存命令を実行すると判定した場合、第一のコアの前記演算結果記憶手段の値を、前記第二のコアの前記演算結果記憶手段に複写する複写手段と、を有する。
【発明の効果】
【００１１】
各プロセッサ間で効率的に演算結果を共有可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】本実施形態の概略的な特徴を説明する図の一例である。
【図２】ＥＣＵに搭載されるマルチコアマイコンのハードウェア構成図の一例である。
【図３】ＣＰＵ１〜３による命令の実行を模式的に説明する図の一例である。
【図４】故障が検出された場合のＣＰＵ１〜３による命令の実行を模式的に説明する図の一例である。
【図５】動作シーケンス制御回路の動作手順の一例を示す図である。
【図６】命令依存関係によるＣＰＵのＷａｉｔを説明する図の一例である。
【図７】命令依存関係が検出された場合の動作シーケンス制御回路の動作手順の一例を示す図である。
【図８】処理レイテンシとＷａｉｔによる調整を説明する図の一例である。
【図９】各ＣＰＵが処理レイテンシの異なる命令を実行した場合の動作シーケンス制御回路の動作手順の一例を示す。
【図１０】レジスタのリフレッシュを説明する図の一例である。
【図１１】命令セット間の命令依存関係がある場合の、動作シーケンス制御回路の動作手順の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について図面を参照しながら実施例を挙げて説明する。
【００１４】
図１は、本実施形態の概略的な特徴を説明する図の一例である。マルチコアマイコンは３つのＣＰＵ（ＣＰＵ１〜ＣＰＵ３）を有しているものとする。それぞれが１つのプログラムの連続した命令コード（以下、単に命令という）を分散して実行しており、図１では、以下のような命令を実行している。
ＣＰＵ１：Ａ＋Ｂ→Ｃ
ＣＰＵ２：Ｚ＋Ｄ→Ｅ
ＣＰＵ３：Ｆ＋Ｇ→Ｈ
矢印の先のアルファベットが演算結果であり、この演算結果は各ＣＰＵのレジスタに格納されている。
【００１５】
ＣＰＵ１が実行するプログラムの次の命令が下記のような命令であったとする。
Ａ＋Ｅ→Ｉ
被演算子ＡはＣＰＵ１のレジスタ内に記憶されているが、被演算子ＥはＣＰＵ２のレジスタ内に記憶されている。このため、このままではＣＰＵ１は演算を実行できない。そこで、動作シーケンス制御回路がＣＰＵ１のレジスタに、ＣＰＵ２のレジスタに記憶されている演算結果Ｅをコピーする。以下では、この操作をレジスタのリフレッシュという場合がある。
【００１６】
このように、命令単位で処理を分散することで、タスク単位で処理を分散するよりも処理の並列度を向上させることができる。また、処理の並列度を向上させたために、演算結果が各ＣＰＵに分散する状況が生じても、レジスタをリフレッシュすることで、命令の依存性を解消できる。
【実施例１】
【００１７】
まず、マルチコアマイコンは、一般に、複数のコアがあるにも拘わらず、１つのコアが故障した場合、バスなどを経由し故障コアの影響が正常コアに波及してしまうため、正常コアも含めて全てのコア（すなわちマイコン全体）を停止する必要があると言われている。エンジン制御などではマルチコアマイコンを停止してもユーザに与える影響は少ないが、ＥＰＳ（Electric  Power  Steering）やＥＣＢ（Electric  Control  Braking  system）などのマルチコアマイコンが急に停止されると、運転者に大きな違和感を感じさせてしまう。このため、車両にはＥＰＳやＥＣＢが故障した時のバックアップ装置を用意しておくことが一般的になっており、機能を冗長して搭載することがコスト増をもたらしている。そこで、マルチコアマイコンは、フォールトトレラントな設計方針（故障しても必要な機能を提供することができる）により設計されることが望まれているが、そのためにはマルチコアマイコンの特性を利用することが有効だと考えられている。
【００１８】
なお、従来から、複数コアで同じ処理を実行するロックステップ機能が搭載されたマルチコアマイコンが知られている。しかしロックステップ機能は信頼性や故障検出率の向上のための技術であり、複数コアで１つの演算結果しか得られず、マルチコアによる性能向上は期待できない。
【００１９】
本実施例では、マルチコアマイコンの特性を利用して、故障時に故障したコアのみを停止させ、正常コアによる演算を継続することでロバスト性を向上させるマルチコアマイコンについて説明する。
【００２０】
図２は、ＥＣＵに搭載されるマルチコアマイコン１００のハードウェア構成図の一例を示す。このマルチコアマイコン１００は、上述したエンジンＥＣＵ、ＥＰＳ‐ＥＣＵ、ＥＣＢ‐ＥＣＵだけでなく、ＨＶ（ハイブリッド）‐ＥＣＵ、ゲートウェイＥＣＵなど、種々のものに搭載されうる。また、複数のＥＣＵの機能が統合された統合ＥＣＵに搭載されてもよい。
【００２１】
マルチコアマイコン１００は、命令バス１２に接続されたフラッシュＲＯＭ１１及び動作シーケンス制御回路１３、データバス１５に接続された複数のＣＰＵ１４（区別する場合、ＣＰＵ１〜ｎという）、故障診断装置１６、Ｉ／Ｏ１７、ＲＡＭ１８、ＤＭＡＣ１９、及び、ＩＮＴＣ２０、を有する。
【００２２】
マルチコアマイコン１００は、複数のＣＰＵ１〜ｎを有する。したがって、このマルチコアマイコン１００のプロセッサはマルチＣＰＵと呼ばれることがあるが、マイコン自体が１チップに実装されることも多く、マルチコアと区別する意義は小さい。コアが複数個、搭載されていれば、マルチＣＰＵ又はマルチコアのいずれと呼ばれているプロセッサでも、本実施例のマルチコアマイコン１００に適用することができる。また、マルチコアマイコン１００には、同じプロセッサコアを複数搭載するホモジニアスマルチコアと異なる種類のコアを複数搭載するヘテロジニアスマルチコアがあるが、本実施例では各コアが１つのプログラムを命令単位で分散して実行するという点でホモジニアスマルチコアである。しかし、一部のコアが異なる構成を有していてもよい。
【００２３】
ＣＰＵ１４は、データバス１５に接続されたレジスタセット４４、ＣＰＵレジスタ４５、レジスタセット４４及びＣＰＵレジスタ４５に接続された演算装置４６、プログラムカウンタ４１、命令キュー４２、並びに、命令デコーダ４３、を有する。レジスタセット４４には、ＲＡＭ１８に記憶されているデータやＩ／Ｏ１７に入力されたセンサの検出値等が、データバス１５を介して読み出される。ＣＰＵレジスタ４５には、演算装置４６の演算結果がライトバックされる。レジスタセット４４及びＣＰＵレジスタ４５は、複数のレジスタの集合である。
【００２４】
プログラムカウンタ４１には、フラッシュＲＯＭ１１に記憶されたＣＰＵが実行する命令のアドレスが記憶される。本実施例では、動作シーケンス制御回路１３が命令を各ＣＰＵ１〜ｎに設定するため、プログラムカウンタ４１はなくてもよい。なお、ＣＰＵ１４は、動作シーケンス制御回路１３に関係なく単独でプログラムを実行することも可能である。この場合、プログラムカウンタ４１はアドレスを命令バス１２に出力して、そのアドレスの命令を命令キュー４２に読み出す。プログラムカウンタ４１は、１つの命令が読み出される毎に、記憶しているアドレスの値を大きくして次の命令の読み出しに備える。
【００２５】
命令キュー４２は、ＦＩＦＯ（First  In，First  Out）型の記憶手段で、複数の命令（例えば、５〜２０程度）を保持させておくことができる。命令キュー４２には実行順に命令が読み込まれる。命令デコーダ４３は、命令キュー４２の命令をデコードして、演算装置４６や周辺の回路等に、制御線を介して信号を出力する。デコード結果に応じて、例えば、演算装置４６に対し、加算、乗算、減算、シフト、除算等を指示する。また、デコードにより命令が演算対象とするオペランドが特定されるので、デコード結果に応じてレジスタセット４４及びＣＰＵレジスタ４５から演算装置４６にデータが入力される。
【００２６】
演算装置４６は、ＡＬＵ（Arithmetic  and  Logic  Unit）、ＬＳＵ（Load  Store  Unit）、ＭＵＬ（乗算器）、及び、ＤＩＶ（除算器）を有する。演算装置４６は、レジスタセット４４，ＣＰＵレジスタ４５から入力されたデータに各種の演算を施す。演算結果は、ＣＰＵレジスタ４５にライトバックされ、再度、演算の対象となったり、ＲＡＭ１８に書き込まれる。
【００２７】
演算装置４６は、１つの命令の実行手順をステージ毎に分け、各ステージを同時に実行するパイプライン制御を備えている。ステージの区分数は設計によって様々だが、ＩＦ（Instruction  Fetch）、ＩＤ（Instruction  Decode）、ＥＸ（Execute）、ＭＡ（Memory  Access）、ＷＢ(Write  Back)の各ステージを有する。パイプライン制御により、１クロックで１つの命令を実行することができる。
【００２８】
動作シーケンス制御回路１３は、共通命令キュー２１、ＣＰＵバス制御部２２、及び、命令スケジューラ２３を有する。動作シーケンス制御回路１３は、命令単位で各ＣＰＵを並列動作させる。また、レジスタのリフレッシュが必要か否かを判定し、必要ならばＣＰＵ１〜ｎの間でデータを交換する。
【００２９】
動作シーケンス制御回路１３とＣＰＵ１〜ｎは断接可能に接続されており、動作シーケンス制御回路１３は故障が検出されたＣＰＵ１４を物理的に切断する。この場合、正常なＣＰＵ１４のみでプログラムの実行を継続できる。故障部位を特定できない場合はマイコン全体を停止する。
【００３０】
共通命令キュー２１は、フラッシュＲＯＭ１１から、各ＣＰＵ１〜ｎが実行する命令（図では命令コード１〜ｎ）を読み出して記憶する。共通命令キュー２１は、各ＣＰＵのパイプラインステージを監視し、パイプラインステージが進行する毎に、ＣＰＵの数分の命令（ＣＰＵが３つの場合は３つの命令。以下、ＣＰＵの数の命令を「命令セット」という）をフラッシュＲＯＭ１１から読み出す。命令セットの各命令は、命令キュー制御部３２によりＣＰＵ１〜ＣＰＵｎの命令キュー４２にセットされる。
【００３１】
ＣＰＵバス制御部２２は、パイプライン同期部３１、命令キュー制御部３２、命令依存判定部３３、ＣＰＵレジスタ同期部３４、及び、外部アクセス制御部３５を有する。パイプライン同期部３１は、各ＣＰＵ１〜ｎのパイプラインステージを同期させる。この制御により、ＣＰＵ１がＩＦのステージを実行する場合は、他のＣＰＵ２〜ｎもＩＦを実行し、ＩＤのステージを実行する場合は、他のＣＰＵ２〜ｎもＩＤを実行する等、命令の実行タイミングや実行結果が得られるタイミングを同期させることができる。なお、ＥＸのステージは命令によって消費するクロック数（処理レイテンシ）が異なる。このため、実施例３で説明するように、パイプライン同期部３１は、各ＣＰＵの消費クロックが同一になるように、処理レイテンシの最も大きい命令を実行するＣＰＵが実行完了するまで、他のＣＰＵをＷａｉｔ（ストール）させる。これにより、各ＣＰＵは同じタイミングでＩＦからのステージを同期して実行することができる。
【００３２】
命令キュー制御部３２は、共通命令キュー２１から取得した命令セットを命令に分解して、各ＣＰＵ１〜ｎの命令キュー４２に設定する。ＣＰＵ１４の数が３つだとすると、ＣＰＵ１には命令コード１がセットされ、ＣＰＵ２には命令コード２がセットされ、ＣＰＵ３には命令コード３がセットされる。そして、次のサイクルでは、命令キュー制御部３２は、ＣＰＵ１に命令コード４をセットし、ＣＰＵ２に命令コード５をセットし、ＣＰＵ３に命令コード６をセットする。このように、命令の順番と、ＣＰＵへの割り当て順は固定であるが、必ずしも固定である必要はない。
【００３３】
命令依存判定部３３は、各命令がそれよりも前の命令の実行結果を必要とする命令依存関係にある命令か否かを判定する。命令依存判定部３３は、命令依存関係の命令と、該命令が実行結果を必要とする命令をパイプライン同期部３１に通知する。
【００３４】
ＣＰＵレジスタ同期部３４は、各ＣＰＵ１〜ｎのレジスタセット４４又はＣＰＵレジスタ４５を同じデータにリフレッシュする。すなわち、ＣＰＵ１のレジスタセット４４又はＣＰＵレジスタ４５のデータが、ＣＰＵ２の演算に必要な場合、ＣＰＵレジスタ同期部３４は、ＣＰＵ１のレジスタセット４４又はＣＰＵレジスタ４５のデータをＣＰＵ２のレジスタセット４４又はＣＰＵレジスタ４５にコピーする。
【００３５】
外部アクセス制御部３５は、各ＣＰＵ１〜ｎからの外部アクセス（バスアクセス）を調停し、１つのＣＰＵにアクセス権を与える。調停方法は、優先度順、ラウンドロビンなど予め定められている。
【００３６】
命令スケジューラ２３は、ＩＮＴＣ２０から外部割り込みの通知を取得した場合に、共通命令キュー２１を更新する。すなわち、外部割り込みが発生した場合、ＣＰＵ１４は割込み内容に応じたタスクを実行する必要があるので、該タスクのプログラムが記憶されたアドレスから命令セットを読み出し、共通命令キュー２１にセットする。
【００３７】
また、命令スケジューラ２３は、分岐命令などに対しても共通命令キュー２１を更新する。すなわち、命令キュー制御部３２は、ＣＰＵ１４が実行した命令が分岐命令である場合には分岐先のアドレスを、比較命令であった場合にはＣＰＵがステータスフラグを参照して決定したアドレスを、命令スケジューラ２３に通知する。命令スケジューラ２３は分岐先のアドレスから、命令セットを読み出し、共通命令キュー２１にセットする。
【００３８】
故障診断装置１６は、例えばＷＤＴが例として挙げられる。ＷＤＴはＣＰＵ１〜ｎ毎にプログラムの実行状態を監視するタイマであり、予め決められた時間内にＣＰＵ１〜ｎがタイマをリセットしないことから、ＣＰＵ１〜ｎの異常を検出する。また、一時的に命令単位の分散実行を停止し、各ＣＰＵ１〜ｎが同じ命令を実行して結果が同じなるか否かに基づき、故障を検出してもよい。また、一時的に命令単位の分散実行を停止し、各ＣＰＵ１〜ｎがアプリケーションとは別に自己診断プログラムを実行し、その値が期待値と一致するか否かに基づき、ＣＰＵ１〜ｎの故障を検出してもよい。
【００３９】
Ｉ／Ｏ１７には各種のセンサ、ＡＤＣ、ＤＡＣ、ＣＡＮＣ（ＣＡＮ  Controller）、アクチュエータやアクチュエータのドライバ回路等が接続されている。ＤＭＡＣ１９は、Ｉ／Ｏ１７から入力されたデータを、ＣＰＵ１〜ｎを介さずにＲＡＭ１８に記録し、ＣＰＵ１〜ｎからの要求を受け付けてＲＡＭ１８の指定アドレスからセンサやアクチュエータにデータを転送する。
【００４０】
ＩＮＴＣ２０は、故障診断装置１６、Ｉ／Ｏ１７などから割込みを受け付けて、動作シーケンス制御回路１３に割り込む。割込みにより、動作シーケンス制御回路１３は各ＣＰＵ１〜ｎが実行する処理を切り換えることができる。
【００４１】
〔実行態様〕
図３は、ＣＰＵ１〜３による命令の実行を模式的に説明する図の一例である。縦方向の命令１〜１５は１つのプログラムの実行順である。また、横方向の１〜１０は時間の経過を意味し、例えばクロック数やサイクル数を単位とする。
【００４２】
時間１：ＣＰＵ１が命令キュー４２から命令１をフェッチし、ＣＰＵ２が命令キュー４２から命令２をフェッチし、ＣＰＵ３が命令キュー４２から命令３をフェッチしている。
【００４３】
時間２：ＣＰＵ１が命令１をデコードし、ＣＰＵ２が命令２をデコードし、ＣＰＵ３が命令３をデコードしている。
【００４４】
また、パイプライン制御により、ＣＰＵ１が命令キュー４２から命令４をフェッチし、ＣＰＵ２が命令キュー４２から命令５をフェッチし、ＣＰＵ３が命令キュー４２から命令６をフェッチしている。
【００４５】
時間３〜５では、ＣＰＵ１〜３が各ステージを進行させ、時間５ではＩＦ，ＩＤ，ＥＣ，ＭＡ，ＷＢの５つのステージが同時に実行されるようになる。したがって、時間５以降は、１クロック毎にＣＰＵ１〜３の３つの命令の実行結果が得られる。すなわち、時間５〜９の間に、合計１５個の実行結果が得られる。このように、ＣＰＵ１〜３が３命令ずつ並列に命令を実行することで、マルチコアの性能を最大限引き出すことができる。
【００４６】
図４は、故障が検出された場合のＣＰＵ１〜３による命令の実行を模式的に説明する図の一例である。命令１〜６については、図３と同様に正常に実行されている。故障診断装置１６は、故障したＣＰＵを動作シーケンス制御回路１３に通知する。これにより、動作シーケンス制御回路１３は故障が検出されたＣＰＵ１４を物理的に切断することで、命令の実行対象から除外する。
【００４７】
ＣＰＵ１が故障した場合、動作シーケンス制御回路１３はＣＰＵ２，３のみで命令を分散して実行する。このため、ＣＰＵ１が故障した以降は、１クロック毎に２つの命令の実行結果が得られる。
【００４８】
なお、ＣＰＵ１の故障が検出された時に、すでに命令キュー制御部３２がＣＰＵ１に割り当てた命令はどのＣＰＵも実行しないことになる。このため、命令キュー制御部３２は、ＣＰＵ１が故障するまでに、ＣＰＵ１〜３が実行した最後の命令の次の命令から、ＣＰＵ２，３に再度、割り当てる。例えば、ＣＰＵ１が故障するまでに、ＣＰＵ１〜３が命令６まで実行した場合、命令キュー制御部３２は命令７、８から、ＣＰＵ２，３に割り当てる。これにより、図示するように、命令７，９，１１，１３はＣＰＵ２により、命令８，１０，１２，１４はＣＰＵ３により、並列に実行される。
【００４９】
したがって、全てのＣＰＵ１４の故障が検出されない限り、処理速度は低下してもマルチコアマイコン１００は動作を継続することができる。
【００５０】
図５は、動作シーケンス制御回路１３の動作手順の一例を示す図である。動作シーケンス制御回路１３は例えば、クロック毎に、故障診断装置１６から故障が通知されたか否かを判定する（Ｓ１０）。
【００５１】
故障が検出されない場合、命令スケジューラ２３が共通命令キュー２１にＣＰＵ１４の数分の命令セットを読み出す（Ｓ２０）。
【００５２】
一方、故障が検出された場合（Ｓ２０のＹｅｓ）、動作シーケンス制御回路１３は故障したＣＰＵ１４を切断する（Ｓ５０）。また、動作シーケンス制御回路１３は、命令スケジューラ２３及び共通命令キュー２１に、故障していないＣＰＵの数、又は、故障したＣＰＵの数を通知することで、命令セットとして一度に読み出す命令数を調整する。また、動作シーケンス制御回路１３は、命令キュー制御部３２に、切断されていないＣＰＵ１４を通知する。
【００５３】
この後の処理は、ＣＰＵ１４の故障の有無に関係なく共通である。すなわち、共通命令キュー２１は命令セットとしてＣＰＵ１４の数分の命令を読み出す（Ｓ２０）。
【００５４】
次に、命令キュー制御部３２は共通命令キュー２１から読み出した命令セットの各命令をＣＰＵ１〜ｎに割り当てる（Ｓ３０）。
【００５５】
パイプライン同期部３１は、各ＣＰＵ１〜ｎの実行ステージを同期させながら、１ステージ進行させる（Ｓ４０）。以降は、ステップＳ１０からの繰り返しとなる。
【００５６】
本実施例のマルチコアマイコン１００によれば、故障したＣＰＵを物理的に切断可能であり、正常なＣＰＵのみで処理を継続できる。また、動作するＣＰＵ１４の数が変わっても、命令セットに含まれる命令の数と、命令を割り当て先のＣＰＵを調整すれば演算を継続できる。したがって、タスク単位で処理を分散する場合のように、タスクの入れ替え（コンテキストスイッチ）などの複雑な制御が不要である。
【００５７】
また、本実施例のマルチコアマイコン１００は、命令単位で処理を分散できるので、タスク単位の処理の分散では並列動作の実現が難しいのに対し、マルチコアの性能を最大限引き出すことができる。また、命令単位で分散できるので、すでに使用されているシングルコアのプログラムを流用しやすい。
【実施例２】
【００５８】
命令単位で処理を分散した場合、命令の依存関係により、各ＣＰＵが並列に命令を実行できない場合がある。例えば、命令１〜３が次のような場合、命令２は命令１との間に命令依存関係を有しているため、並列に実行できない。
命令１：Ａ＋Ｂ→Ｃ
命令２：Ｃ＋Ｄ→Ｅ
命令３：Ｆ＋Ｇ→Ｈ
この命令１〜３をＣＰＵ１〜３がそれぞれ実行する場合、ＣＰＵ２が命令２を実行するには、ＣＰＵ１の命令１の実行結果が必要である。このため、ＣＰＵ１とＣＰＵ２は、並列に処理を実行できない。
【００５９】
本実施例では、このような命令依存関係を命令依存判定部３３が検出し、パイプライン同期部３１が命令依存関係の命令を実行するＣＰＵ１４をWaitさせるマルチコアマイコン１００について説明する。
【００６０】
命令依存判定部３３は、同時に実行される命令セットに含まれる命令１〜３に命令依存関係があるか否かを判定する。判定方法は、例えば以下のようになる。命令依存判定部３３は、１つの命令セットの中で、命令順に１つの命令に着目し演算結果が格納されるレジスタ名又は変数名（アドレス番地）を特定する。そして、このレジスタ名又は変数名が、後の命令の演算対象のオペランドに記述されているか否かを判定する。記述されていれば、後の命令には命令依存関係があることになる。上記の例では、命令１の演算結果が格納されるレジスタ名が“Ｃ”であり、“Ｃ”というレジスタ名が、後の命令２の演算対象のオペランド（Ｃ＋Ｄの“Ｃ”）に記述されている。よって、命令２は命令１に対し命令依存関係がある。以下、命令２を「命令依存関係がある命令」、命令１を「先行命令」と称す。
【００６１】
図６は、命令依存関係によるＣＰＵ１４のＷａｉｔを説明する図の一例を、図７は命令依存関係が検出された場合の動作シーケンス制御回路１３の動作手順の一例をそれぞれ示す。ここでは、ステップＳ２５において、命令依存判定部３３が命令２は、命令１との間に命令依存関係があると判定したとする。
(S25‐1)  命令キュー制御部３２は、命令２が実行結果を必要とする先行命令の命令１をＣＰＵ１に割り当てる。こうすることで、ＣＰＵ１は命令２よりも先に命令１を実行完了できる。
(S25‐2)  命令キュー制御部３２は、ＣＰＵ１以外のＣＰＵ２，３をＷａｉｔさせる。
(S25‐3)  パイプライン同期部３１は、各ＣＰＵ１〜３を1ステージ実行させる。ＣＰＵ２，３はＷａｉｔしているので何もしない。これにより、ＣＰＵ１だけ先行命令の命令１のステージを進めることができる。
(S25‐4)  命令キュー制御部３２は、命令２〜４を命令セットとして、その中の命令依存関係のある命令２を、先行命令を実行するＣＰＵであるＣＰＵ１に割り当てる。これにより同じＣＰＵ１が命令依存関係のある命令２と先行命令である命令１を実行できる。
【００６２】
また、命令キュー制御部３２は、命令セットのうち残りの命令３，４をＣＰＵ２，３に割り当てる。すなわち、ＣＰＵ２，３は命令２，３ではなく、命令３，４を実行する。
【００６３】
以降の処理は、実施例１と同様であり、パイプライン同期部３１は、各ＣＰＵ１〜３の実行ステージを一致させながら１ステージ実行させる（Ｓ４０）。以降は、ステップＳ１０からの繰り返しとなる。
【００６４】
本実施例のマルチコアマイコン１００は、ＣＰＵ１が先行命令を実行している間、他のＣＰＵ２，３をＷａｉｔさせ、命令依存関係の命令２を、先行命令である命令１を実行するＣＰＵと同じＣＰＵ１に割り当てる。これにより、命令セット内に命令依存関係が検出されても、命令単位で処理を分散させることができる。
【００６５】
なお、本実施例は実施例１と共にマルチコアマイコン１００に適用することができる。
【実施例３】
【００６６】
本実施例では、ＣＰＵ毎の命令の処理レイテンシの違いを調整するマルチコアマイコン１００について説明する。すでに説明したように、ＡＬＵがシフト命令を実行するために必要なクロック数と、ＭＵＬが乗算命令を実行するために必要なクロック数、又は、ＤＩＶが除算命令を実行するために必要なクロック数は大きく異なる。このクロック数を処理レイテンシと呼び、１つの命令セットで処理レイテンシが異なれば、ＣＰＵ１〜ｎが命令を実行完了する時間が異なってしまう。
【００６７】
ＣＰＵ毎に命令の実行完了時間が異なる場合の不都合を説明する。例えば、ＣＰＵ１〜３が命令１〜３を実行した後、命令４〜６を実行する場合を考える。ＣＰＵ１が命令１を実行するために大きな遅延があり、ＣＰＵ１が実行する命令４が命令１と命令依存関係にある場合、ＣＰＵ１が命令４のＥＸステージを実行する際に、命令１の実行が完了していないおそれがある。
【００６８】
また、ＣＰＵ１〜ｎが実行する命令の実行完了時間が異なる場合、各ＣＰＵ１〜ｎが実行結果に応じて非同期にバスの獲得要求を出力する。例えば、処理レイテンシの違いにより、ＣＰＵ２がＣＰＵ１よりも先に命令２を実行完了させバスの獲得要求を出力したとする。しかし、ＣＰＵ１が命令１の実行のためにバスを使用することが必要な場合、ＣＰＵ１はさらに命令１の実行完了が遅れてしまう。
【００６９】
そこで、本実施例では、各ＣＰＵ１〜ｎが実行する命令の処理レイテンシに応じて、ステージにＷａｉｔを挿入する。すなわち、各ＣＰＵ１〜ｎが実行する命令の実行完了のタイミングがずれた場合、パイプライン同期部３１は、処理レイテンシが短いＣＰＵにＷａｉｔを挿入することで、各ＣＰＵ１〜ｎが同期して命令セットを実行完了するように調整する。
【００７０】
図８は、処理レイテンシとＷａｉｔによる調整を説明する図の一例である。命令１〜３は次の処理レイテンシであるとする。なお、各命令の処理レイテンシは、動作シーケンス制御回路１３にとって既知である。
命令1：処理レイテンシが２
命令２：処理レイテンシが３
命令３：処理レイテンシが１
パイプライン同期部３１は、命令１〜３で最も処理レイテンシが大きい命令２を実行したＣＰＵ２のＥＸステージ（時間３〜５）を特定する。時間６以降であれば、各ＣＰＵ１〜３は次の命令セットのＥＸステージを実行可能である。よって、パイプライン同期部３１は、時間６にＣＰＵ１〜３の命令４〜６のＥＸステージを揃える。
【００７１】
同様に、時間６に、ＣＰＵ１〜３の命令７〜９のＩＤステージを揃える。同様に、時間６に、ＣＰＵ１〜３の命令１０〜１２のＩＦステージを揃える。時間６に揃えるステージが、後続の命令セット毎に早まるのは、パイプライン制御によるものである。
【００７２】
このように、処理レイテンシが大きい命令を実行したＣＰＵ２の命令の実行完了に合わせて、後続の命令セットのステージを遅らせることで、各ＣＰＵ１〜３のステージを同期させることができる。本実施例において、命令１〜３の命令セットを「検出命令セット」、命令４〜６の命令セットを「次命令セット」、命令７〜９の命令セットを「次〃命令セット」、命令１０〜１２の命令セットを「次〃〃命令セット」という。
【００７３】
図９は、各ＣＰＵ１〜３が処理レイテンシの異なる命令を実行した場合の動作シーケンス制御回路の動作手順の一例を示す。図９の手順は、例えば図５，７のステップＳ３０に続いて実行される。
【００７４】
パイプライン同期部３１は、各ＣＰＵ１〜３のＥＸステージの実行結果を監視し、処理レイテンシが異なるか否かを判定する（Ｓ１１０）。処理レイテンシは完全に一致している必要はなく、ある程度のずれは許容することができる。
【００７５】
処理レイテンシが異ならない場合、パイプライン同期部３１はＷａｉｔを挿入することなく、図９の処理は終了され、各ＣＰＵ１〜３のステージを進行させる（Ｓ４０）。
【００７６】
処理レイテンシが異なる命令がある場合（Ｓ１１０のＹｅｓ）、パイプライン同期部３１は、次命令セットの、ＥＸステージの前にＷａｉｔを挿入する（Ｓ１２０）。図８では、時間４の命令４〜６のＷａｉｔが対応する。
【００７７】
同様に、パイプライン同期部３１は、次〃命令セットの、ＩＤステージの前にＷａｉｔを挿入する（Ｓ１３０）。図８では、時間４の命令７〜９のＷａｉｔが対応する。
【００７８】
同様に、パイプライン同期部３１は、次〃〃命令セットの、ＩＦステージの前にＷａｉｔを挿入する（Ｓ１４０）。図８では、時間４の命令１０〜１２のＷａｉｔが対応する。
【００７９】
そして、パイプライン同期部３１は各ＣＰＵ１〜３のステージを１つ進める（Ｓ１５０）。命令４〜１２はＷａｉｔなのでステージは進まないが、命令１〜３は１ステージ又は1ステージ内の処理が進行する。
【００８０】
次に、パイプライン同期部３１は、処理レイテンシが異なる命令が検出された検出命令セットのうち、最も処理レイテンシが大きい命令が実行完了したか否かを判定する（Ｓ１６０）。すなわち、図８ではＣＰＵ２が命令２を実行完了したか否かを判定する。ここでは、同じＣＰＵ内で演算結果を利用できればよいので、実行完了とはＥＸステージが終わることである。
【００８１】
最も処理レイテンシが大きい命令が実行完了していない場合（Ｓ１６０のＮｏ）、パイプライン同期部３１は、次命令セットの、ＥＸステージの前にＷａｉｔを挿入する（Ｓ１２０）。図８では、時間５の命令４〜６のＷａｉｔが対応する。
【００８２】
同様に、パイプライン同期部３１は、次〃命令セットの、ＩＤステージの前にＷａｉｔを挿入する（Ｓ１３０）。図８では、時間５の命令７〜９のＷａｉｔが対応する。
【００８３】
同様に、パイプライン同期部３１は、次〃〃命令セットの、ＩＦステージの前にＷａｉｔを挿入する（Ｓ１４０）。図８では、時間５の命令１０〜１２のＷａｉｔが対応する。
【００８４】
そして、パイプライン同期部３１は各ＣＰＵのステージを１つ進める（Ｓ１５０）。これにより、ＣＰＵ２が命令２を実行完了させることができる。
【００８５】
最も処理レイテンシが大きい命令が実行完了した場合（Ｓ１６０のＹｅｓ）、図9の処理は終了する。すなわち、パイプライン同期部３１は、Ｗａｉｔを挿入しないので、各ＣＰＵ１〜３の命令１〜１２のステージが１つ進行される（Ｓ４０）。
【００８６】
本実施例のマルチコアマイコン１００は、各ＣＰＵ１〜ｎが命令セット内で処理する命令の処理レイテンシが異なっても、各ステージにＷａｉｔを挿入することで、各ＣＰＵの実行ステージを同期させることができる。したがって、命令セット内に処理レイテンシの異なる命令があってもＣＰＵ１〜３のステージを同期させ、命令依存関係の発生を抑制できる。
【００８７】
なお、本実施例は実施例１，２と共にマルチコアマイコン１００に適用することができる。
【実施例４】
【００８８】
本実施例では異なるＣＰＵ１〜ｎが演算結果を同期するマルチコアマイコン１００について説明する。図１において説明したように、ＣＰＵ１が実行する命令の被演算子が、ＣＰＵ２など他のＣＰＵのＣＰＵレジスタ４５に記憶されている場合がある。このままではＣＰＵ１は演算を実行できないので、ＣＰＵレジスタ同期部３４はＣＰＵ１に、ＣＰＵ２のレジスタに記憶されている演算結果をコピーする。
【００８９】
図１０は、レジスタのリフレッシュを説明する図の一例である。説明のため、命令セットを順番に命令セットＡ〜Ｄという。
【００９０】
(i)  命令依存判定部３３は、命令セットＢの命令が、直前の命令セットＡの命令と命令依存関係にあるか否かを判定する。具体的には、以下の命令依存関係を判定する。
ＣＰＵ１が実行する命令４が、命令２，３と命令依存関係にあるか否か
ＣＰＵ２が実行する命令５が、命令１，３と命令依存関係にあるか否か
ＣＰＵ３が実行する命令６が、命令１，２と命令依存関係にあるか否か
同様の関係が、命令セットＣとＢ、命令セットＤとＣ、のように前後の命令セット毎に生じる。例えば、命令セットＣとＢでは、
ＣＰＵ１が実行する命令７が、命令５，６と命令依存関係にあるか否か
ＣＰＵ２が実行する命令８が、命令４，６と命令依存関係にあるか否か
ＣＰＵ３が実行する命令９が、命令４，５と命令依存関係にあるか否か
が判定される。
【００９１】
判定方法は、例えば以下のようになる。命令４の演算対象のオペランドに、命令２，３の演算結果が格納されるレジスタ名又は変数名（アドレス番地）が記述されているか否かを判定する。記述されていれば、命令４には命令２又は命令３と命令依存関係があることになる。また、命令２又は３は先行命令となる。ここでは命令４が命令依存関係の命令であり、命令２が先行命令であるとする。
【００９２】
(ii)  パイプライン同期部３１は、先行命令の命令２の実行が完了したタイミングで、ＣＰＵ２のＣＰＵレジスタ４５のデータをＣＰＵ１のレジスタにコピーする。コピーするまではＣＰＵ１は命令４を実行できないので、パイプライン同期部３１は実施例３と同様に各ステージにＷａｉｔを挿入する。Ｗａｉｔの間に、ＣＰＵ２のＣＰＵレジスタ４５のデータをＣＰＵ１のレジスタにコピーすればよい。
【００９３】
具体的には、例えば、ＣＰＵ２のＣＰＵレジスタ４５とＣＰＵ１のレジスタセット４４を直接、接続しておく。ＣＰＵレジスタ同期部３４は、ＣＰＵ２が命令２を実行完了したタイミングで、ＣＰＵ２のＣＰＵレジスタ４５のデータをＣＰＵ１にコピーする。
【００９４】
図１１は、命令セット間の命令依存関係がある場合の、動作シーケンス制御回路１３の動作手順の一例を示す。なお、図１１の手順は、例えば図５，７のステップＳ３０に続いて実行される。
【００９５】
なお、命令依存判定部３３は、予め、命令セット間に命令依存関係があるか否かを判定しておく。例えば、２つ以上の命令セットＡ，Ｂを命令キュー４２に読み出し、命令セットＢと直前の命令セットＡとの間の命令依存関係を判定しておく。命令依存関係がある場合、命令依存関係がある命令を実行するＣＰＵ、及び、先行命令を実行するＣＰＵを記録しておく。
【００９６】
本実施例において、命令依存関係がある命令４が含まれる命令４〜６の命令セットの次の命令セット（命令７〜９）を「次命令セット」、命令１０〜１２の命令セットを「次〃命令セット」という。
【００９７】
パイプライン同期部３１は、先行命令を実行しているか否かを判定する（Ｓ２１０）。この判定は、先行命令のＥＸステージよりも前で行えばよい。先行命令を実行していない場合（Ｓ２１０のＮｏ）、パイプライン同期部３１はＷａｉｔを挿入することなく、各ＣＰＵ１〜３のステージを進行させる（Ｓ４０）。
【００９８】
先行命令を実行している場合（Ｓ２１０のＹｅｓ）、パイプライン同期部３１は、命令依存関係がある命令を含む命令セットのＥＸステージの前にＷａｉｔを挿入する（Ｓ２２０）。図１０では、時間４の命令４〜６のＷａｉｔが対応する。
【００９９】
同様に、パイプライン同期部３１は、命令依存関係がある命令を含む命令セットの次の命令セットである次命令セットの、ＩＤステージの前にＷａｉｔを挿入する（Ｓ２３０）。図１０では、時間４の命令７〜９のＷａｉｔが対応する。
【０１００】
同様に、パイプライン同期部３１は、次〃命令セットの、ＩＦステージの前にＷａｉｔを挿入する（Ｓ２４０）。図１０では、時間４の命令１０〜１２のＷａｉｔが対応する。
【０１０１】
そして、パイプライン同期部３１は各ＣＰＵ１〜３のステージを１つ進める（Ｓ２５０）。命令４〜１２はＷａｉｔなのでステージは進まないが、命令１〜３は１ステージ又は1ステージ内の処理が進行する。
【０１０２】
次に、パイプライン同期部３１は、先行命令の実行が完了したか否かを判定する（Ｓ２６０）。すなわち、図１０ではＣＰＵ２が命令２を実行完了したか否かを判定する。命令依存関係のある命令４を実行するＣＰＵ１と、先行命令の命令２を実行するＣＰＵ２とでＣＰＵが異なるため、実行完了したか否はライトバックされたか否かにより判定される。
【０１０３】
先行命令を実行している場合（Ｓ２１０のＹｅｓ）、パイプライン同期部３１は、命令依存関係がある命令を含む命令セットのＥＸステージの前にＷａｉｔを挿入する（Ｓ２２０）。図１０では、時間５の命令４〜６のＷａｉｔが対応する。
【０１０４】
同様に、パイプライン同期部３１は、次命令セットの、ＩＤステージの前にＷａｉｔを挿入する（Ｓ２３０）。図１０では、時間５の命令７〜９のＷａｉｔが対応する。
【０１０５】
同様に、パイプライン同期部３１は、次〃命令セットの、ＩＦステージの前にＷａｉｔを挿入する（Ｓ２４０）。図１０では、時間５の命令１０〜１２のＷａｉｔが対応する。
【０１０６】
そして、先行命令の実行が完了した場合（Ｓ２６０のＹｅｓ）、ＣＰＵレジスタ同期部３４はレジスタをリフレッシュする（Ｓ２７０）。すなわち、ＣＰＵレジスタ同期部３４は、ＣＰＵ２のＣＰＵレジスタ４５のデータをＣＰＵ１のレジスタセット４４にコピーする。これにより、ＣＰＵ１はＣＰＵ２の演算結果を利用して命令４を実行できる。以降は、図５，７のステップＳ４０に進み、Ｗａｉｔが挿入されることなく、各ＣＰＵ１〜３が命令４〜１２のステージを進行させる。
【０１０７】
本実施例のマルチコアマイコン１００は、命令セット間で異なるＣＰＵ間に命令依存関係があっても、レジスタをリフレッシュすることで、命令単位で命令を分散して実行することを可能にできる。
【０１０８】
なお、本実施例は実施例１〜３と共にマルチコアマイコン１００に適用することができる。
【符号の説明】
【０１０９】
１３      動作シーケンス制御回路
１４      ＣＰＵ
１６      故障診断装置
２１      共通命令キュー
２２      ＣＰＵバス制御部
２３      命令スケジューラ
３１      パイプライン同期部
３２      命令キュー制御部
３３      命令依存判定部
３４      ＣＰＵレジスタ同期部
３５      外部アクセス制御部
１００    マルチコアマイコン
【図１】
2013054625.tif 000003
【図２】
2013054625.tif 000004
【図３】
2013054625.tif 000005
【図４】
2013054625.tif 000006
【図５】
2013054625.tif 000007
【図６】
2013054625.tif 000008
【図７】
2013054625.tif 000009
【図８】
2013054625.tif 000010
【図９】
2013054625.tif 000011
【図１０】
2013054625.tif 000012
【図１１】
2013054625.tif 000013