情報処理装置、情報処理方法
【課題】各プロセッサ間で効率的に演算結果を共有可能な情報処理装置を提供する。
【解決手段】プログラムを記憶するプログラム記憶手段11と、コア毎の演算結果を記憶する演算結果記憶手段45と、コア数分の命令の命令セットを実行順にプログラム記憶手段から読み出し一次記憶部に記憶する命令読み出し手段21と、命令セットに含まれる命令を各コアの命令キューに記憶する命令配信手段32と、一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を演算対象とする命令が第一の命令セットよりも後に実行される第二の命令セットに含まれ第一のコアと異なる第二のコアが実行するか否かを判定する命令依存関係判定手段33と、命令依存関係判定手段が第二のコアが第二の命令セットに含まれる命令を実行すると判定した場合第一のコアの演算結果記憶手段の値を第二のコアの演算結果記憶手段に複写する複写手段34と、を有する。
【解決手段】プログラムを記憶するプログラム記憶手段11と、コア毎の演算結果を記憶する演算結果記憶手段45と、コア数分の命令の命令セットを実行順にプログラム記憶手段から読み出し一次記憶部に記憶する命令読み出し手段21と、命令セットに含まれる命令を各コアの命令キューに記憶する命令配信手段32と、一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を演算対象とする命令が第一の命令セットよりも後に実行される第二の命令セットに含まれ第一のコアと異なる第二のコアが実行するか否かを判定する命令依存関係判定手段33と、命令依存関係判定手段が第二のコアが第二の命令セットに含まれる命令を実行すると判定した場合第一のコアの演算結果記憶手段の値を第二のコアの演算結果記憶手段に複写する複写手段34と、を有する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のコアが並列に命令を実行する情報処理装置に関する。
【背景技術】
【0002】
プロセッサの処理速度を向上させるアプローチとして動作周波数の高速化だけでなく、複数のプロセッサを搭載するマルチプロセッサ化やプロセッサに複数のCPUコアを搭載するマルチコア化が知られている。マルチプロセッサやマルチコアでは、処理の並列度が高いほど処理効率が向上するため、並列度が増すように処理を分散させることが重要になる。従来から、並列度を向上させる技術が提案されている(例えば、特許文献1参照。)。特許文献1には、タスク単位で複数のプロセッサにタスクを割り当て、実行可能状態にあるタスクを、いずれのタスクも実行していないプロセッサに割り当てるマルチプロセッサが開示されている。
【0003】
しかしながら、従来の技術ではタスク単位で処理を実行するため、タスク処理間のバス結合、共有メモリアクセスなどにより実際には並列動作の実現が難しく、マルチコアの性能を最大限引き出すことは困難である。また、余力のあるプロセッサにタスクを割り当てるためには、プロセッサの処理負荷を監視するOSの負荷が増大し、また、割り当てのための制御も複雑になる。
【0004】
また、あるプロセッサが別の複数のプロセッサを制御して並列に処理を実行する技術が提案されている(例えば、特許文献2参照。)。特許文献2には、1つのRISC型プロセッサが複数のVLIWプロセッサを制御するマイクロプロセッサシステムが開示されている。RISC型プロセッサは、命令を解読してVLIWプロセッサに、制御信号、動作クロック周波数、電源電圧を指示する。各VLIWプロセッサはそれぞれアプリケーションプログラムを実行する。
【0005】
また、タスク単位でなく命令単位で処理を分散させる技術も提案されている(例えば、特許文献3参照。)。特許文献3には、命令バッファに格納された命令の依存関係をチェックし、依存関係のない命令を複数のプロセッサに発行し、依存関係がある場合、一方の命令の実行ユニットの実行サイクルを遅延させるスーパースカラプロセッサが開示されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2008−146503号公報
【特許文献2】特開2002−032218号公報
【特許文献3】特開2011−128672号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、特許文献2に記載された技術は、各プロセッサ間でデータを利用する必要がある場合について考慮されていないという問題がある。特許文献2では、複数のVLIWプロセッサのうちの1つが行った演算結果を他のプロセッサが他の演算で用いる際に、他のプロセッサのレジスタに演算結果が格納されていないので、そのための処理が必要になる。すなわち、他のプロセッサは演算結果を持っているプロセッサから演算結果を取得する必要がある。これは、1つのプロセッサで逐次処理を行う処理方法では考慮する必要のない処理である。
【0008】
一方、特許文献3では、2つの実行ユニットの演算結果が共通のレジスタファイルに格納されるので、プロセッサ間のデータの交換は可能である。しかしながら、レジスタファイルが共通だとレジスタファイルへの書き込みや読み出しがボトルネックとなるおそれがあり、マルチプロセッサシステムでは各プロセッサが独立のレジスタファイルを有する方が処理効率を向上させやすいといえる。特許文献3では、レジスタファイルが独立の場合にプロセッサ間で演算結果をどのように共有するかについて考慮されていない。
【0009】
本発明は、上記課題に鑑み、各プロセッサ間で効率的に演算結果を共有可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0010】
上記課題に鑑み、本発明は、複数のコアが並列に命令を実行する情報処理装置において、コア毎の演算結果を記憶する演算結果記憶手段と、プログラムを記憶するプログラム記憶手段と、コア数分の命令が含まれる命令セットを実行順に前記プログラム記憶手段から読み出し一次記憶部に記憶する命令読み出し手段、命令セットに含まれる命令を各コアの命令キューに記憶する命令配信手段と、前記一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を、演算対象とする依存命令が、第一の命令セットよりも後に実行される第二の命令セットに含まれ、第一のコアと異なる第二のコアが実行するか否かを判定する命令依存関係判定手段と、前記命令依存関係判定手段が、第二のコアが第二の命令セットに含まれる依存命令を実行すると判定した場合、第一のコアの前記演算結果記憶手段の値を、前記第二のコアの前記演算結果記憶手段に複写する複写手段と、を有する。
【発明の効果】
【0011】
各プロセッサ間で効率的に演算結果を共有可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【0012】
【図1】本実施形態の概略的な特徴を説明する図の一例である。
【図2】ECUに搭載されるマルチコアマイコンのハードウェア構成図の一例である。
【図3】CPU1〜3による命令の実行を模式的に説明する図の一例である。
【図4】故障が検出された場合のCPU1〜3による命令の実行を模式的に説明する図の一例である。
【図5】動作シーケンス制御回路の動作手順の一例を示す図である。
【図6】命令依存関係によるCPUのWaitを説明する図の一例である。
【図7】命令依存関係が検出された場合の動作シーケンス制御回路の動作手順の一例を示す図である。
【図8】処理レイテンシとWaitによる調整を説明する図の一例である。
【図9】各CPUが処理レイテンシの異なる命令を実行した場合の動作シーケンス制御回路の動作手順の一例を示す。
【図10】レジスタのリフレッシュを説明する図の一例である。
【図11】命令セット間の命令依存関係がある場合の、動作シーケンス制御回路の動作手順の一例を示す図である。
【発明を実施するための形態】
【0013】
以下、本発明を実施するための形態について図面を参照しながら実施例を挙げて説明する。
【0014】
図1は、本実施形態の概略的な特徴を説明する図の一例である。マルチコアマイコンは3つのCPU(CPU1〜CPU3)を有しているものとする。それぞれが1つのプログラムの連続した命令コード(以下、単に命令という)を分散して実行しており、図1では、以下のような命令を実行している。
CPU1:A+B→C
CPU2:Z+D→E
CPU3:F+G→H
矢印の先のアルファベットが演算結果であり、この演算結果は各CPUのレジスタに格納されている。
【0015】
CPU1が実行するプログラムの次の命令が下記のような命令であったとする。
A+E→I
被演算子AはCPU1のレジスタ内に記憶されているが、被演算子EはCPU2のレジスタ内に記憶されている。このため、このままではCPU1は演算を実行できない。そこで、動作シーケンス制御回路がCPU1のレジスタに、CPU2のレジスタに記憶されている演算結果Eをコピーする。以下では、この操作をレジスタのリフレッシュという場合がある。
【0016】
このように、命令単位で処理を分散することで、タスク単位で処理を分散するよりも処理の並列度を向上させることができる。また、処理の並列度を向上させたために、演算結果が各CPUに分散する状況が生じても、レジスタをリフレッシュすることで、命令の依存性を解消できる。
【実施例1】
【0017】
まず、マルチコアマイコンは、一般に、複数のコアがあるにも拘わらず、1つのコアが故障した場合、バスなどを経由し故障コアの影響が正常コアに波及してしまうため、正常コアも含めて全てのコア(すなわちマイコン全体)を停止する必要があると言われている。エンジン制御などではマルチコアマイコンを停止してもユーザに与える影響は少ないが、EPS(Electric Power Steering)やECB(Electric Control Braking system)などのマルチコアマイコンが急に停止されると、運転者に大きな違和感を感じさせてしまう。このため、車両にはEPSやECBが故障した時のバックアップ装置を用意しておくことが一般的になっており、機能を冗長して搭載することがコスト増をもたらしている。そこで、マルチコアマイコンは、フォールトトレラントな設計方針(故障しても必要な機能を提供することができる)により設計されることが望まれているが、そのためにはマルチコアマイコンの特性を利用することが有効だと考えられている。
【0018】
なお、従来から、複数コアで同じ処理を実行するロックステップ機能が搭載されたマルチコアマイコンが知られている。しかしロックステップ機能は信頼性や故障検出率の向上のための技術であり、複数コアで1つの演算結果しか得られず、マルチコアによる性能向上は期待できない。
【0019】
本実施例では、マルチコアマイコンの特性を利用して、故障時に故障したコアのみを停止させ、正常コアによる演算を継続することでロバスト性を向上させるマルチコアマイコンについて説明する。
【0020】
図2は、ECUに搭載されるマルチコアマイコン100のハードウェア構成図の一例を示す。このマルチコアマイコン100は、上述したエンジンECU、EPS‐ECU、ECB‐ECUだけでなく、HV(ハイブリッド)‐ECU、ゲートウェイECUなど、種々のものに搭載されうる。また、複数のECUの機能が統合された統合ECUに搭載されてもよい。
【0021】
マルチコアマイコン100は、命令バス12に接続されたフラッシュROM11及び動作シーケンス制御回路13、データバス15に接続された複数のCPU14(区別する場合、CPU1〜nという)、故障診断装置16、I/O17、RAM18、DMAC19、及び、INTC20、を有する。
【0022】
マルチコアマイコン100は、複数のCPU1〜nを有する。したがって、このマルチコアマイコン100のプロセッサはマルチCPUと呼ばれることがあるが、マイコン自体が1チップに実装されることも多く、マルチコアと区別する意義は小さい。コアが複数個、搭載されていれば、マルチCPU又はマルチコアのいずれと呼ばれているプロセッサでも、本実施例のマルチコアマイコン100に適用することができる。また、マルチコアマイコン100には、同じプロセッサコアを複数搭載するホモジニアスマルチコアと異なる種類のコアを複数搭載するヘテロジニアスマルチコアがあるが、本実施例では各コアが1つのプログラムを命令単位で分散して実行するという点でホモジニアスマルチコアである。しかし、一部のコアが異なる構成を有していてもよい。
【0023】
CPU14は、データバス15に接続されたレジスタセット44、CPUレジスタ45、レジスタセット44及びCPUレジスタ45に接続された演算装置46、プログラムカウンタ41、命令キュー42、並びに、命令デコーダ43、を有する。レジスタセット44には、RAM18に記憶されているデータやI/O17に入力されたセンサの検出値等が、データバス15を介して読み出される。CPUレジスタ45には、演算装置46の演算結果がライトバックされる。レジスタセット44及びCPUレジスタ45は、複数のレジスタの集合である。
【0024】
プログラムカウンタ41には、フラッシュROM11に記憶されたCPUが実行する命令のアドレスが記憶される。本実施例では、動作シーケンス制御回路13が命令を各CPU1〜nに設定するため、プログラムカウンタ41はなくてもよい。なお、CPU14は、動作シーケンス制御回路13に関係なく単独でプログラムを実行することも可能である。この場合、プログラムカウンタ41はアドレスを命令バス12に出力して、そのアドレスの命令を命令キュー42に読み出す。プログラムカウンタ41は、1つの命令が読み出される毎に、記憶しているアドレスの値を大きくして次の命令の読み出しに備える。
【0025】
命令キュー42は、FIFO(First In,First Out)型の記憶手段で、複数の命令(例えば、5〜20程度)を保持させておくことができる。命令キュー42には実行順に命令が読み込まれる。命令デコーダ43は、命令キュー42の命令をデコードして、演算装置46や周辺の回路等に、制御線を介して信号を出力する。デコード結果に応じて、例えば、演算装置46に対し、加算、乗算、減算、シフト、除算等を指示する。また、デコードにより命令が演算対象とするオペランドが特定されるので、デコード結果に応じてレジスタセット44及びCPUレジスタ45から演算装置46にデータが入力される。
【0026】
演算装置46は、ALU(Arithmetic and Logic Unit)、LSU(Load Store Unit)、MUL(乗算器)、及び、DIV(除算器)を有する。演算装置46は、レジスタセット44,CPUレジスタ45から入力されたデータに各種の演算を施す。演算結果は、CPUレジスタ45にライトバックされ、再度、演算の対象となったり、RAM18に書き込まれる。
【0027】
演算装置46は、1つの命令の実行手順をステージ毎に分け、各ステージを同時に実行するパイプライン制御を備えている。ステージの区分数は設計によって様々だが、IF(Instruction Fetch)、ID(Instruction Decode)、EX(Execute)、MA(Memory Access)、WB(Write Back)の各ステージを有する。パイプライン制御により、1クロックで1つの命令を実行することができる。
【0028】
動作シーケンス制御回路13は、共通命令キュー21、CPUバス制御部22、及び、命令スケジューラ23を有する。動作シーケンス制御回路13は、命令単位で各CPUを並列動作させる。また、レジスタのリフレッシュが必要か否かを判定し、必要ならばCPU1〜nの間でデータを交換する。
【0029】
動作シーケンス制御回路13とCPU1〜nは断接可能に接続されており、動作シーケンス制御回路13は故障が検出されたCPU14を物理的に切断する。この場合、正常なCPU14のみでプログラムの実行を継続できる。故障部位を特定できない場合はマイコン全体を停止する。
【0030】
共通命令キュー21は、フラッシュROM11から、各CPU1〜nが実行する命令(図では命令コード1〜n)を読み出して記憶する。共通命令キュー21は、各CPUのパイプラインステージを監視し、パイプラインステージが進行する毎に、CPUの数分の命令(CPUが3つの場合は3つの命令。以下、CPUの数の命令を「命令セット」という)をフラッシュROM11から読み出す。命令セットの各命令は、命令キュー制御部32によりCPU1〜CPUnの命令キュー42にセットされる。
【0031】
CPUバス制御部22は、パイプライン同期部31、命令キュー制御部32、命令依存判定部33、CPUレジスタ同期部34、及び、外部アクセス制御部35を有する。パイプライン同期部31は、各CPU1〜nのパイプラインステージを同期させる。この制御により、CPU1がIFのステージを実行する場合は、他のCPU2〜nもIFを実行し、IDのステージを実行する場合は、他のCPU2〜nもIDを実行する等、命令の実行タイミングや実行結果が得られるタイミングを同期させることができる。なお、EXのステージは命令によって消費するクロック数(処理レイテンシ)が異なる。このため、実施例3で説明するように、パイプライン同期部31は、各CPUの消費クロックが同一になるように、処理レイテンシの最も大きい命令を実行するCPUが実行完了するまで、他のCPUをWait(ストール)させる。これにより、各CPUは同じタイミングでIFからのステージを同期して実行することができる。
【0032】
命令キュー制御部32は、共通命令キュー21から取得した命令セットを命令に分解して、各CPU1〜nの命令キュー42に設定する。CPU14の数が3つだとすると、CPU1には命令コード1がセットされ、CPU2には命令コード2がセットされ、CPU3には命令コード3がセットされる。そして、次のサイクルでは、命令キュー制御部32は、CPU1に命令コード4をセットし、CPU2に命令コード5をセットし、CPU3に命令コード6をセットする。このように、命令の順番と、CPUへの割り当て順は固定であるが、必ずしも固定である必要はない。
【0033】
命令依存判定部33は、各命令がそれよりも前の命令の実行結果を必要とする命令依存関係にある命令か否かを判定する。命令依存判定部33は、命令依存関係の命令と、該命令が実行結果を必要とする命令をパイプライン同期部31に通知する。
【0034】
CPUレジスタ同期部34は、各CPU1〜nのレジスタセット44又はCPUレジスタ45を同じデータにリフレッシュする。すなわち、CPU1のレジスタセット44又はCPUレジスタ45のデータが、CPU2の演算に必要な場合、CPUレジスタ同期部34は、CPU1のレジスタセット44又はCPUレジスタ45のデータをCPU2のレジスタセット44又はCPUレジスタ45にコピーする。
【0035】
外部アクセス制御部35は、各CPU1〜nからの外部アクセス(バスアクセス)を調停し、1つのCPUにアクセス権を与える。調停方法は、優先度順、ラウンドロビンなど予め定められている。
【0036】
命令スケジューラ23は、INTC20から外部割り込みの通知を取得した場合に、共通命令キュー21を更新する。すなわち、外部割り込みが発生した場合、CPU14は割込み内容に応じたタスクを実行する必要があるので、該タスクのプログラムが記憶されたアドレスから命令セットを読み出し、共通命令キュー21にセットする。
【0037】
また、命令スケジューラ23は、分岐命令などに対しても共通命令キュー21を更新する。すなわち、命令キュー制御部32は、CPU14が実行した命令が分岐命令である場合には分岐先のアドレスを、比較命令であった場合にはCPUがステータスフラグを参照して決定したアドレスを、命令スケジューラ23に通知する。命令スケジューラ23は分岐先のアドレスから、命令セットを読み出し、共通命令キュー21にセットする。
【0038】
故障診断装置16は、例えばWDTが例として挙げられる。WDTはCPU1〜n毎にプログラムの実行状態を監視するタイマであり、予め決められた時間内にCPU1〜nがタイマをリセットしないことから、CPU1〜nの異常を検出する。また、一時的に命令単位の分散実行を停止し、各CPU1〜nが同じ命令を実行して結果が同じなるか否かに基づき、故障を検出してもよい。また、一時的に命令単位の分散実行を停止し、各CPU1〜nがアプリケーションとは別に自己診断プログラムを実行し、その値が期待値と一致するか否かに基づき、CPU1〜nの故障を検出してもよい。
【0039】
I/O17には各種のセンサ、ADC、DAC、CANC(CAN Controller)、アクチュエータやアクチュエータのドライバ回路等が接続されている。DMAC19は、I/O17から入力されたデータを、CPU1〜nを介さずにRAM18に記録し、CPU1〜nからの要求を受け付けてRAM18の指定アドレスからセンサやアクチュエータにデータを転送する。
【0040】
INTC20は、故障診断装置16、I/O17などから割込みを受け付けて、動作シーケンス制御回路13に割り込む。割込みにより、動作シーケンス制御回路13は各CPU1〜nが実行する処理を切り換えることができる。
【0041】
〔実行態様〕
図3は、CPU1〜3による命令の実行を模式的に説明する図の一例である。縦方向の命令1〜15は1つのプログラムの実行順である。また、横方向の1〜10は時間の経過を意味し、例えばクロック数やサイクル数を単位とする。
【0042】
時間1:CPU1が命令キュー42から命令1をフェッチし、CPU2が命令キュー42から命令2をフェッチし、CPU3が命令キュー42から命令3をフェッチしている。
【0043】
時間2:CPU1が命令1をデコードし、CPU2が命令2をデコードし、CPU3が命令3をデコードしている。
【0044】
また、パイプライン制御により、CPU1が命令キュー42から命令4をフェッチし、CPU2が命令キュー42から命令5をフェッチし、CPU3が命令キュー42から命令6をフェッチしている。
【0045】
時間3〜5では、CPU1〜3が各ステージを進行させ、時間5ではIF,ID,EC,MA,WBの5つのステージが同時に実行されるようになる。したがって、時間5以降は、1クロック毎にCPU1〜3の3つの命令の実行結果が得られる。すなわち、時間5〜9の間に、合計15個の実行結果が得られる。このように、CPU1〜3が3命令ずつ並列に命令を実行することで、マルチコアの性能を最大限引き出すことができる。
【0046】
図4は、故障が検出された場合のCPU1〜3による命令の実行を模式的に説明する図の一例である。命令1〜6については、図3と同様に正常に実行されている。故障診断装置16は、故障したCPUを動作シーケンス制御回路13に通知する。これにより、動作シーケンス制御回路13は故障が検出されたCPU14を物理的に切断することで、命令の実行対象から除外する。
【0047】
CPU1が故障した場合、動作シーケンス制御回路13はCPU2,3のみで命令を分散して実行する。このため、CPU1が故障した以降は、1クロック毎に2つの命令の実行結果が得られる。
【0048】
なお、CPU1の故障が検出された時に、すでに命令キュー制御部32がCPU1に割り当てた命令はどのCPUも実行しないことになる。このため、命令キュー制御部32は、CPU1が故障するまでに、CPU1〜3が実行した最後の命令の次の命令から、CPU2,3に再度、割り当てる。例えば、CPU1が故障するまでに、CPU1〜3が命令6まで実行した場合、命令キュー制御部32は命令7、8から、CPU2,3に割り当てる。これにより、図示するように、命令7,9,11,13はCPU2により、命令8,10,12,14はCPU3により、並列に実行される。
【0049】
したがって、全てのCPU14の故障が検出されない限り、処理速度は低下してもマルチコアマイコン100は動作を継続することができる。
【0050】
図5は、動作シーケンス制御回路13の動作手順の一例を示す図である。動作シーケンス制御回路13は例えば、クロック毎に、故障診断装置16から故障が通知されたか否かを判定する(S10)。
【0051】
故障が検出されない場合、命令スケジューラ23が共通命令キュー21にCPU14の数分の命令セットを読み出す(S20)。
【0052】
一方、故障が検出された場合(S20のYes)、動作シーケンス制御回路13は故障したCPU14を切断する(S50)。また、動作シーケンス制御回路13は、命令スケジューラ23及び共通命令キュー21に、故障していないCPUの数、又は、故障したCPUの数を通知することで、命令セットとして一度に読み出す命令数を調整する。また、動作シーケンス制御回路13は、命令キュー制御部32に、切断されていないCPU14を通知する。
【0053】
この後の処理は、CPU14の故障の有無に関係なく共通である。すなわち、共通命令キュー21は命令セットとしてCPU14の数分の命令を読み出す(S20)。
【0054】
次に、命令キュー制御部32は共通命令キュー21から読み出した命令セットの各命令をCPU1〜nに割り当てる(S30)。
【0055】
パイプライン同期部31は、各CPU1〜nの実行ステージを同期させながら、1ステージ進行させる(S40)。以降は、ステップS10からの繰り返しとなる。
【0056】
本実施例のマルチコアマイコン100によれば、故障したCPUを物理的に切断可能であり、正常なCPUのみで処理を継続できる。また、動作するCPU14の数が変わっても、命令セットに含まれる命令の数と、命令を割り当て先のCPUを調整すれば演算を継続できる。したがって、タスク単位で処理を分散する場合のように、タスクの入れ替え(コンテキストスイッチ)などの複雑な制御が不要である。
【0057】
また、本実施例のマルチコアマイコン100は、命令単位で処理を分散できるので、タスク単位の処理の分散では並列動作の実現が難しいのに対し、マルチコアの性能を最大限引き出すことができる。また、命令単位で分散できるので、すでに使用されているシングルコアのプログラムを流用しやすい。
【実施例2】
【0058】
命令単位で処理を分散した場合、命令の依存関係により、各CPUが並列に命令を実行できない場合がある。例えば、命令1〜3が次のような場合、命令2は命令1との間に命令依存関係を有しているため、並列に実行できない。
命令1:A+B→C
命令2:C+D→E
命令3:F+G→H
この命令1〜3をCPU1〜3がそれぞれ実行する場合、CPU2が命令2を実行するには、CPU1の命令1の実行結果が必要である。このため、CPU1とCPU2は、並列に処理を実行できない。
【0059】
本実施例では、このような命令依存関係を命令依存判定部33が検出し、パイプライン同期部31が命令依存関係の命令を実行するCPU14をWaitさせるマルチコアマイコン100について説明する。
【0060】
命令依存判定部33は、同時に実行される命令セットに含まれる命令1〜3に命令依存関係があるか否かを判定する。判定方法は、例えば以下のようになる。命令依存判定部33は、1つの命令セットの中で、命令順に1つの命令に着目し演算結果が格納されるレジスタ名又は変数名(アドレス番地)を特定する。そして、このレジスタ名又は変数名が、後の命令の演算対象のオペランドに記述されているか否かを判定する。記述されていれば、後の命令には命令依存関係があることになる。上記の例では、命令1の演算結果が格納されるレジスタ名が“C”であり、“C”というレジスタ名が、後の命令2の演算対象のオペランド(C+Dの“C”)に記述されている。よって、命令2は命令1に対し命令依存関係がある。以下、命令2を「命令依存関係がある命令」、命令1を「先行命令」と称す。
【0061】
図6は、命令依存関係によるCPU14のWaitを説明する図の一例を、図7は命令依存関係が検出された場合の動作シーケンス制御回路13の動作手順の一例をそれぞれ示す。ここでは、ステップS25において、命令依存判定部33が命令2は、命令1との間に命令依存関係があると判定したとする。
(S25‐1) 命令キュー制御部32は、命令2が実行結果を必要とする先行命令の命令1をCPU1に割り当てる。こうすることで、CPU1は命令2よりも先に命令1を実行完了できる。
(S25‐2) 命令キュー制御部32は、CPU1以外のCPU2,3をWaitさせる。
(S25‐3) パイプライン同期部31は、各CPU1〜3を1ステージ実行させる。CPU2,3はWaitしているので何もしない。これにより、CPU1だけ先行命令の命令1のステージを進めることができる。
(S25‐4) 命令キュー制御部32は、命令2〜4を命令セットとして、その中の命令依存関係のある命令2を、先行命令を実行するCPUであるCPU1に割り当てる。これにより同じCPU1が命令依存関係のある命令2と先行命令である命令1を実行できる。
【0062】
また、命令キュー制御部32は、命令セットのうち残りの命令3,4をCPU2,3に割り当てる。すなわち、CPU2,3は命令2,3ではなく、命令3,4を実行する。
【0063】
以降の処理は、実施例1と同様であり、パイプライン同期部31は、各CPU1〜3の実行ステージを一致させながら1ステージ実行させる(S40)。以降は、ステップS10からの繰り返しとなる。
【0064】
本実施例のマルチコアマイコン100は、CPU1が先行命令を実行している間、他のCPU2,3をWaitさせ、命令依存関係の命令2を、先行命令である命令1を実行するCPUと同じCPU1に割り当てる。これにより、命令セット内に命令依存関係が検出されても、命令単位で処理を分散させることができる。
【0065】
なお、本実施例は実施例1と共にマルチコアマイコン100に適用することができる。
【実施例3】
【0066】
本実施例では、CPU毎の命令の処理レイテンシの違いを調整するマルチコアマイコン100について説明する。すでに説明したように、ALUがシフト命令を実行するために必要なクロック数と、MULが乗算命令を実行するために必要なクロック数、又は、DIVが除算命令を実行するために必要なクロック数は大きく異なる。このクロック数を処理レイテンシと呼び、1つの命令セットで処理レイテンシが異なれば、CPU1〜nが命令を実行完了する時間が異なってしまう。
【0067】
CPU毎に命令の実行完了時間が異なる場合の不都合を説明する。例えば、CPU1〜3が命令1〜3を実行した後、命令4〜6を実行する場合を考える。CPU1が命令1を実行するために大きな遅延があり、CPU1が実行する命令4が命令1と命令依存関係にある場合、CPU1が命令4のEXステージを実行する際に、命令1の実行が完了していないおそれがある。
【0068】
また、CPU1〜nが実行する命令の実行完了時間が異なる場合、各CPU1〜nが実行結果に応じて非同期にバスの獲得要求を出力する。例えば、処理レイテンシの違いにより、CPU2がCPU1よりも先に命令2を実行完了させバスの獲得要求を出力したとする。しかし、CPU1が命令1の実行のためにバスを使用することが必要な場合、CPU1はさらに命令1の実行完了が遅れてしまう。
【0069】
そこで、本実施例では、各CPU1〜nが実行する命令の処理レイテンシに応じて、ステージにWaitを挿入する。すなわち、各CPU1〜nが実行する命令の実行完了のタイミングがずれた場合、パイプライン同期部31は、処理レイテンシが短いCPUにWaitを挿入することで、各CPU1〜nが同期して命令セットを実行完了するように調整する。
【0070】
図8は、処理レイテンシとWaitによる調整を説明する図の一例である。命令1〜3は次の処理レイテンシであるとする。なお、各命令の処理レイテンシは、動作シーケンス制御回路13にとって既知である。
命令1:処理レイテンシが2
命令2:処理レイテンシが3
命令3:処理レイテンシが1
パイプライン同期部31は、命令1〜3で最も処理レイテンシが大きい命令2を実行したCPU2のEXステージ(時間3〜5)を特定する。時間6以降であれば、各CPU1〜3は次の命令セットのEXステージを実行可能である。よって、パイプライン同期部31は、時間6にCPU1〜3の命令4〜6のEXステージを揃える。
【0071】
同様に、時間6に、CPU1〜3の命令7〜9のIDステージを揃える。同様に、時間6に、CPU1〜3の命令10〜12のIFステージを揃える。時間6に揃えるステージが、後続の命令セット毎に早まるのは、パイプライン制御によるものである。
【0072】
このように、処理レイテンシが大きい命令を実行したCPU2の命令の実行完了に合わせて、後続の命令セットのステージを遅らせることで、各CPU1〜3のステージを同期させることができる。本実施例において、命令1〜3の命令セットを「検出命令セット」、命令4〜6の命令セットを「次命令セット」、命令7〜9の命令セットを「次〃命令セット」、命令10〜12の命令セットを「次〃〃命令セット」という。
【0073】
図9は、各CPU1〜3が処理レイテンシの異なる命令を実行した場合の動作シーケンス制御回路の動作手順の一例を示す。図9の手順は、例えば図5,7のステップS30に続いて実行される。
【0074】
パイプライン同期部31は、各CPU1〜3のEXステージの実行結果を監視し、処理レイテンシが異なるか否かを判定する(S110)。処理レイテンシは完全に一致している必要はなく、ある程度のずれは許容することができる。
【0075】
処理レイテンシが異ならない場合、パイプライン同期部31はWaitを挿入することなく、図9の処理は終了され、各CPU1〜3のステージを進行させる(S40)。
【0076】
処理レイテンシが異なる命令がある場合(S110のYes)、パイプライン同期部31は、次命令セットの、EXステージの前にWaitを挿入する(S120)。図8では、時間4の命令4〜6のWaitが対応する。
【0077】
同様に、パイプライン同期部31は、次〃命令セットの、IDステージの前にWaitを挿入する(S130)。図8では、時間4の命令7〜9のWaitが対応する。
【0078】
同様に、パイプライン同期部31は、次〃〃命令セットの、IFステージの前にWaitを挿入する(S140)。図8では、時間4の命令10〜12のWaitが対応する。
【0079】
そして、パイプライン同期部31は各CPU1〜3のステージを1つ進める(S150)。命令4〜12はWaitなのでステージは進まないが、命令1〜3は1ステージ又は1ステージ内の処理が進行する。
【0080】
次に、パイプライン同期部31は、処理レイテンシが異なる命令が検出された検出命令セットのうち、最も処理レイテンシが大きい命令が実行完了したか否かを判定する(S160)。すなわち、図8ではCPU2が命令2を実行完了したか否かを判定する。ここでは、同じCPU内で演算結果を利用できればよいので、実行完了とはEXステージが終わることである。
【0081】
最も処理レイテンシが大きい命令が実行完了していない場合(S160のNo)、パイプライン同期部31は、次命令セットの、EXステージの前にWaitを挿入する(S120)。図8では、時間5の命令4〜6のWaitが対応する。
【0082】
同様に、パイプライン同期部31は、次〃命令セットの、IDステージの前にWaitを挿入する(S130)。図8では、時間5の命令7〜9のWaitが対応する。
【0083】
同様に、パイプライン同期部31は、次〃〃命令セットの、IFステージの前にWaitを挿入する(S140)。図8では、時間5の命令10〜12のWaitが対応する。
【0084】
そして、パイプライン同期部31は各CPUのステージを1つ進める(S150)。これにより、CPU2が命令2を実行完了させることができる。
【0085】
最も処理レイテンシが大きい命令が実行完了した場合(S160のYes)、図9の処理は終了する。すなわち、パイプライン同期部31は、Waitを挿入しないので、各CPU1〜3の命令1〜12のステージが1つ進行される(S40)。
【0086】
本実施例のマルチコアマイコン100は、各CPU1〜nが命令セット内で処理する命令の処理レイテンシが異なっても、各ステージにWaitを挿入することで、各CPUの実行ステージを同期させることができる。したがって、命令セット内に処理レイテンシの異なる命令があってもCPU1〜3のステージを同期させ、命令依存関係の発生を抑制できる。
【0087】
なお、本実施例は実施例1,2と共にマルチコアマイコン100に適用することができる。
【実施例4】
【0088】
本実施例では異なるCPU1〜nが演算結果を同期するマルチコアマイコン100について説明する。図1において説明したように、CPU1が実行する命令の被演算子が、CPU2など他のCPUのCPUレジスタ45に記憶されている場合がある。このままではCPU1は演算を実行できないので、CPUレジスタ同期部34はCPU1に、CPU2のレジスタに記憶されている演算結果をコピーする。
【0089】
図10は、レジスタのリフレッシュを説明する図の一例である。説明のため、命令セットを順番に命令セットA〜Dという。
【0090】
(i) 命令依存判定部33は、命令セットBの命令が、直前の命令セットAの命令と命令依存関係にあるか否かを判定する。具体的には、以下の命令依存関係を判定する。
CPU1が実行する命令4が、命令2,3と命令依存関係にあるか否か
CPU2が実行する命令5が、命令1,3と命令依存関係にあるか否か
CPU3が実行する命令6が、命令1,2と命令依存関係にあるか否か
同様の関係が、命令セットCとB、命令セットDとC、のように前後の命令セット毎に生じる。例えば、命令セットCとBでは、
CPU1が実行する命令7が、命令5,6と命令依存関係にあるか否か
CPU2が実行する命令8が、命令4,6と命令依存関係にあるか否か
CPU3が実行する命令9が、命令4,5と命令依存関係にあるか否か
が判定される。
【0091】
判定方法は、例えば以下のようになる。命令4の演算対象のオペランドに、命令2,3の演算結果が格納されるレジスタ名又は変数名(アドレス番地)が記述されているか否かを判定する。記述されていれば、命令4には命令2又は命令3と命令依存関係があることになる。また、命令2又は3は先行命令となる。ここでは命令4が命令依存関係の命令であり、命令2が先行命令であるとする。
【0092】
(ii) パイプライン同期部31は、先行命令の命令2の実行が完了したタイミングで、CPU2のCPUレジスタ45のデータをCPU1のレジスタにコピーする。コピーするまではCPU1は命令4を実行できないので、パイプライン同期部31は実施例3と同様に各ステージにWaitを挿入する。Waitの間に、CPU2のCPUレジスタ45のデータをCPU1のレジスタにコピーすればよい。
【0093】
具体的には、例えば、CPU2のCPUレジスタ45とCPU1のレジスタセット44を直接、接続しておく。CPUレジスタ同期部34は、CPU2が命令2を実行完了したタイミングで、CPU2のCPUレジスタ45のデータをCPU1にコピーする。
【0094】
図11は、命令セット間の命令依存関係がある場合の、動作シーケンス制御回路13の動作手順の一例を示す。なお、図11の手順は、例えば図5,7のステップS30に続いて実行される。
【0095】
なお、命令依存判定部33は、予め、命令セット間に命令依存関係があるか否かを判定しておく。例えば、2つ以上の命令セットA,Bを命令キュー42に読み出し、命令セットBと直前の命令セットAとの間の命令依存関係を判定しておく。命令依存関係がある場合、命令依存関係がある命令を実行するCPU、及び、先行命令を実行するCPUを記録しておく。
【0096】
本実施例において、命令依存関係がある命令4が含まれる命令4〜6の命令セットの次の命令セット(命令7〜9)を「次命令セット」、命令10〜12の命令セットを「次〃命令セット」という。
【0097】
パイプライン同期部31は、先行命令を実行しているか否かを判定する(S210)。この判定は、先行命令のEXステージよりも前で行えばよい。先行命令を実行していない場合(S210のNo)、パイプライン同期部31はWaitを挿入することなく、各CPU1〜3のステージを進行させる(S40)。
【0098】
先行命令を実行している場合(S210のYes)、パイプライン同期部31は、命令依存関係がある命令を含む命令セットのEXステージの前にWaitを挿入する(S220)。図10では、時間4の命令4〜6のWaitが対応する。
【0099】
同様に、パイプライン同期部31は、命令依存関係がある命令を含む命令セットの次の命令セットである次命令セットの、IDステージの前にWaitを挿入する(S230)。図10では、時間4の命令7〜9のWaitが対応する。
【0100】
同様に、パイプライン同期部31は、次〃命令セットの、IFステージの前にWaitを挿入する(S240)。図10では、時間4の命令10〜12のWaitが対応する。
【0101】
そして、パイプライン同期部31は各CPU1〜3のステージを1つ進める(S250)。命令4〜12はWaitなのでステージは進まないが、命令1〜3は1ステージ又は1ステージ内の処理が進行する。
【0102】
次に、パイプライン同期部31は、先行命令の実行が完了したか否かを判定する(S260)。すなわち、図10ではCPU2が命令2を実行完了したか否かを判定する。命令依存関係のある命令4を実行するCPU1と、先行命令の命令2を実行するCPU2とでCPUが異なるため、実行完了したか否はライトバックされたか否かにより判定される。
【0103】
先行命令を実行している場合(S210のYes)、パイプライン同期部31は、命令依存関係がある命令を含む命令セットのEXステージの前にWaitを挿入する(S220)。図10では、時間5の命令4〜6のWaitが対応する。
【0104】
同様に、パイプライン同期部31は、次命令セットの、IDステージの前にWaitを挿入する(S230)。図10では、時間5の命令7〜9のWaitが対応する。
【0105】
同様に、パイプライン同期部31は、次〃命令セットの、IFステージの前にWaitを挿入する(S240)。図10では、時間5の命令10〜12のWaitが対応する。
【0106】
そして、先行命令の実行が完了した場合(S260のYes)、CPUレジスタ同期部34はレジスタをリフレッシュする(S270)。すなわち、CPUレジスタ同期部34は、CPU2のCPUレジスタ45のデータをCPU1のレジスタセット44にコピーする。これにより、CPU1はCPU2の演算結果を利用して命令4を実行できる。以降は、図5,7のステップS40に進み、Waitが挿入されることなく、各CPU1〜3が命令4〜12のステージを進行させる。
【0107】
本実施例のマルチコアマイコン100は、命令セット間で異なるCPU間に命令依存関係があっても、レジスタをリフレッシュすることで、命令単位で命令を分散して実行することを可能にできる。
【0108】
なお、本実施例は実施例1〜3と共にマルチコアマイコン100に適用することができる。
【符号の説明】
【0109】
13 動作シーケンス制御回路
14 CPU
16 故障診断装置
21 共通命令キュー
22 CPUバス制御部
23 命令スケジューラ
31 パイプライン同期部
32 命令キュー制御部
33 命令依存判定部
34 CPUレジスタ同期部
35 外部アクセス制御部
100 マルチコアマイコン
【技術分野】
【0001】
本発明は、複数のコアが並列に命令を実行する情報処理装置に関する。
【背景技術】
【0002】
プロセッサの処理速度を向上させるアプローチとして動作周波数の高速化だけでなく、複数のプロセッサを搭載するマルチプロセッサ化やプロセッサに複数のCPUコアを搭載するマルチコア化が知られている。マルチプロセッサやマルチコアでは、処理の並列度が高いほど処理効率が向上するため、並列度が増すように処理を分散させることが重要になる。従来から、並列度を向上させる技術が提案されている(例えば、特許文献1参照。)。特許文献1には、タスク単位で複数のプロセッサにタスクを割り当て、実行可能状態にあるタスクを、いずれのタスクも実行していないプロセッサに割り当てるマルチプロセッサが開示されている。
【0003】
しかしながら、従来の技術ではタスク単位で処理を実行するため、タスク処理間のバス結合、共有メモリアクセスなどにより実際には並列動作の実現が難しく、マルチコアの性能を最大限引き出すことは困難である。また、余力のあるプロセッサにタスクを割り当てるためには、プロセッサの処理負荷を監視するOSの負荷が増大し、また、割り当てのための制御も複雑になる。
【0004】
また、あるプロセッサが別の複数のプロセッサを制御して並列に処理を実行する技術が提案されている(例えば、特許文献2参照。)。特許文献2には、1つのRISC型プロセッサが複数のVLIWプロセッサを制御するマイクロプロセッサシステムが開示されている。RISC型プロセッサは、命令を解読してVLIWプロセッサに、制御信号、動作クロック周波数、電源電圧を指示する。各VLIWプロセッサはそれぞれアプリケーションプログラムを実行する。
【0005】
また、タスク単位でなく命令単位で処理を分散させる技術も提案されている(例えば、特許文献3参照。)。特許文献3には、命令バッファに格納された命令の依存関係をチェックし、依存関係のない命令を複数のプロセッサに発行し、依存関係がある場合、一方の命令の実行ユニットの実行サイクルを遅延させるスーパースカラプロセッサが開示されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2008−146503号公報
【特許文献2】特開2002−032218号公報
【特許文献3】特開2011−128672号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、特許文献2に記載された技術は、各プロセッサ間でデータを利用する必要がある場合について考慮されていないという問題がある。特許文献2では、複数のVLIWプロセッサのうちの1つが行った演算結果を他のプロセッサが他の演算で用いる際に、他のプロセッサのレジスタに演算結果が格納されていないので、そのための処理が必要になる。すなわち、他のプロセッサは演算結果を持っているプロセッサから演算結果を取得する必要がある。これは、1つのプロセッサで逐次処理を行う処理方法では考慮する必要のない処理である。
【0008】
一方、特許文献3では、2つの実行ユニットの演算結果が共通のレジスタファイルに格納されるので、プロセッサ間のデータの交換は可能である。しかしながら、レジスタファイルが共通だとレジスタファイルへの書き込みや読み出しがボトルネックとなるおそれがあり、マルチプロセッサシステムでは各プロセッサが独立のレジスタファイルを有する方が処理効率を向上させやすいといえる。特許文献3では、レジスタファイルが独立の場合にプロセッサ間で演算結果をどのように共有するかについて考慮されていない。
【0009】
本発明は、上記課題に鑑み、各プロセッサ間で効率的に演算結果を共有可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0010】
上記課題に鑑み、本発明は、複数のコアが並列に命令を実行する情報処理装置において、コア毎の演算結果を記憶する演算結果記憶手段と、プログラムを記憶するプログラム記憶手段と、コア数分の命令が含まれる命令セットを実行順に前記プログラム記憶手段から読み出し一次記憶部に記憶する命令読み出し手段、命令セットに含まれる命令を各コアの命令キューに記憶する命令配信手段と、前記一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を、演算対象とする依存命令が、第一の命令セットよりも後に実行される第二の命令セットに含まれ、第一のコアと異なる第二のコアが実行するか否かを判定する命令依存関係判定手段と、前記命令依存関係判定手段が、第二のコアが第二の命令セットに含まれる依存命令を実行すると判定した場合、第一のコアの前記演算結果記憶手段の値を、前記第二のコアの前記演算結果記憶手段に複写する複写手段と、を有する。
【発明の効果】
【0011】
各プロセッサ間で効率的に演算結果を共有可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【0012】
【図1】本実施形態の概略的な特徴を説明する図の一例である。
【図2】ECUに搭載されるマルチコアマイコンのハードウェア構成図の一例である。
【図3】CPU1〜3による命令の実行を模式的に説明する図の一例である。
【図4】故障が検出された場合のCPU1〜3による命令の実行を模式的に説明する図の一例である。
【図5】動作シーケンス制御回路の動作手順の一例を示す図である。
【図6】命令依存関係によるCPUのWaitを説明する図の一例である。
【図7】命令依存関係が検出された場合の動作シーケンス制御回路の動作手順の一例を示す図である。
【図8】処理レイテンシとWaitによる調整を説明する図の一例である。
【図9】各CPUが処理レイテンシの異なる命令を実行した場合の動作シーケンス制御回路の動作手順の一例を示す。
【図10】レジスタのリフレッシュを説明する図の一例である。
【図11】命令セット間の命令依存関係がある場合の、動作シーケンス制御回路の動作手順の一例を示す図である。
【発明を実施するための形態】
【0013】
以下、本発明を実施するための形態について図面を参照しながら実施例を挙げて説明する。
【0014】
図1は、本実施形態の概略的な特徴を説明する図の一例である。マルチコアマイコンは3つのCPU(CPU1〜CPU3)を有しているものとする。それぞれが1つのプログラムの連続した命令コード(以下、単に命令という)を分散して実行しており、図1では、以下のような命令を実行している。
CPU1:A+B→C
CPU2:Z+D→E
CPU3:F+G→H
矢印の先のアルファベットが演算結果であり、この演算結果は各CPUのレジスタに格納されている。
【0015】
CPU1が実行するプログラムの次の命令が下記のような命令であったとする。
A+E→I
被演算子AはCPU1のレジスタ内に記憶されているが、被演算子EはCPU2のレジスタ内に記憶されている。このため、このままではCPU1は演算を実行できない。そこで、動作シーケンス制御回路がCPU1のレジスタに、CPU2のレジスタに記憶されている演算結果Eをコピーする。以下では、この操作をレジスタのリフレッシュという場合がある。
【0016】
このように、命令単位で処理を分散することで、タスク単位で処理を分散するよりも処理の並列度を向上させることができる。また、処理の並列度を向上させたために、演算結果が各CPUに分散する状況が生じても、レジスタをリフレッシュすることで、命令の依存性を解消できる。
【実施例1】
【0017】
まず、マルチコアマイコンは、一般に、複数のコアがあるにも拘わらず、1つのコアが故障した場合、バスなどを経由し故障コアの影響が正常コアに波及してしまうため、正常コアも含めて全てのコア(すなわちマイコン全体)を停止する必要があると言われている。エンジン制御などではマルチコアマイコンを停止してもユーザに与える影響は少ないが、EPS(Electric Power Steering)やECB(Electric Control Braking system)などのマルチコアマイコンが急に停止されると、運転者に大きな違和感を感じさせてしまう。このため、車両にはEPSやECBが故障した時のバックアップ装置を用意しておくことが一般的になっており、機能を冗長して搭載することがコスト増をもたらしている。そこで、マルチコアマイコンは、フォールトトレラントな設計方針(故障しても必要な機能を提供することができる)により設計されることが望まれているが、そのためにはマルチコアマイコンの特性を利用することが有効だと考えられている。
【0018】
なお、従来から、複数コアで同じ処理を実行するロックステップ機能が搭載されたマルチコアマイコンが知られている。しかしロックステップ機能は信頼性や故障検出率の向上のための技術であり、複数コアで1つの演算結果しか得られず、マルチコアによる性能向上は期待できない。
【0019】
本実施例では、マルチコアマイコンの特性を利用して、故障時に故障したコアのみを停止させ、正常コアによる演算を継続することでロバスト性を向上させるマルチコアマイコンについて説明する。
【0020】
図2は、ECUに搭載されるマルチコアマイコン100のハードウェア構成図の一例を示す。このマルチコアマイコン100は、上述したエンジンECU、EPS‐ECU、ECB‐ECUだけでなく、HV(ハイブリッド)‐ECU、ゲートウェイECUなど、種々のものに搭載されうる。また、複数のECUの機能が統合された統合ECUに搭載されてもよい。
【0021】
マルチコアマイコン100は、命令バス12に接続されたフラッシュROM11及び動作シーケンス制御回路13、データバス15に接続された複数のCPU14(区別する場合、CPU1〜nという)、故障診断装置16、I/O17、RAM18、DMAC19、及び、INTC20、を有する。
【0022】
マルチコアマイコン100は、複数のCPU1〜nを有する。したがって、このマルチコアマイコン100のプロセッサはマルチCPUと呼ばれることがあるが、マイコン自体が1チップに実装されることも多く、マルチコアと区別する意義は小さい。コアが複数個、搭載されていれば、マルチCPU又はマルチコアのいずれと呼ばれているプロセッサでも、本実施例のマルチコアマイコン100に適用することができる。また、マルチコアマイコン100には、同じプロセッサコアを複数搭載するホモジニアスマルチコアと異なる種類のコアを複数搭載するヘテロジニアスマルチコアがあるが、本実施例では各コアが1つのプログラムを命令単位で分散して実行するという点でホモジニアスマルチコアである。しかし、一部のコアが異なる構成を有していてもよい。
【0023】
CPU14は、データバス15に接続されたレジスタセット44、CPUレジスタ45、レジスタセット44及びCPUレジスタ45に接続された演算装置46、プログラムカウンタ41、命令キュー42、並びに、命令デコーダ43、を有する。レジスタセット44には、RAM18に記憶されているデータやI/O17に入力されたセンサの検出値等が、データバス15を介して読み出される。CPUレジスタ45には、演算装置46の演算結果がライトバックされる。レジスタセット44及びCPUレジスタ45は、複数のレジスタの集合である。
【0024】
プログラムカウンタ41には、フラッシュROM11に記憶されたCPUが実行する命令のアドレスが記憶される。本実施例では、動作シーケンス制御回路13が命令を各CPU1〜nに設定するため、プログラムカウンタ41はなくてもよい。なお、CPU14は、動作シーケンス制御回路13に関係なく単独でプログラムを実行することも可能である。この場合、プログラムカウンタ41はアドレスを命令バス12に出力して、そのアドレスの命令を命令キュー42に読み出す。プログラムカウンタ41は、1つの命令が読み出される毎に、記憶しているアドレスの値を大きくして次の命令の読み出しに備える。
【0025】
命令キュー42は、FIFO(First In,First Out)型の記憶手段で、複数の命令(例えば、5〜20程度)を保持させておくことができる。命令キュー42には実行順に命令が読み込まれる。命令デコーダ43は、命令キュー42の命令をデコードして、演算装置46や周辺の回路等に、制御線を介して信号を出力する。デコード結果に応じて、例えば、演算装置46に対し、加算、乗算、減算、シフト、除算等を指示する。また、デコードにより命令が演算対象とするオペランドが特定されるので、デコード結果に応じてレジスタセット44及びCPUレジスタ45から演算装置46にデータが入力される。
【0026】
演算装置46は、ALU(Arithmetic and Logic Unit)、LSU(Load Store Unit)、MUL(乗算器)、及び、DIV(除算器)を有する。演算装置46は、レジスタセット44,CPUレジスタ45から入力されたデータに各種の演算を施す。演算結果は、CPUレジスタ45にライトバックされ、再度、演算の対象となったり、RAM18に書き込まれる。
【0027】
演算装置46は、1つの命令の実行手順をステージ毎に分け、各ステージを同時に実行するパイプライン制御を備えている。ステージの区分数は設計によって様々だが、IF(Instruction Fetch)、ID(Instruction Decode)、EX(Execute)、MA(Memory Access)、WB(Write Back)の各ステージを有する。パイプライン制御により、1クロックで1つの命令を実行することができる。
【0028】
動作シーケンス制御回路13は、共通命令キュー21、CPUバス制御部22、及び、命令スケジューラ23を有する。動作シーケンス制御回路13は、命令単位で各CPUを並列動作させる。また、レジスタのリフレッシュが必要か否かを判定し、必要ならばCPU1〜nの間でデータを交換する。
【0029】
動作シーケンス制御回路13とCPU1〜nは断接可能に接続されており、動作シーケンス制御回路13は故障が検出されたCPU14を物理的に切断する。この場合、正常なCPU14のみでプログラムの実行を継続できる。故障部位を特定できない場合はマイコン全体を停止する。
【0030】
共通命令キュー21は、フラッシュROM11から、各CPU1〜nが実行する命令(図では命令コード1〜n)を読み出して記憶する。共通命令キュー21は、各CPUのパイプラインステージを監視し、パイプラインステージが進行する毎に、CPUの数分の命令(CPUが3つの場合は3つの命令。以下、CPUの数の命令を「命令セット」という)をフラッシュROM11から読み出す。命令セットの各命令は、命令キュー制御部32によりCPU1〜CPUnの命令キュー42にセットされる。
【0031】
CPUバス制御部22は、パイプライン同期部31、命令キュー制御部32、命令依存判定部33、CPUレジスタ同期部34、及び、外部アクセス制御部35を有する。パイプライン同期部31は、各CPU1〜nのパイプラインステージを同期させる。この制御により、CPU1がIFのステージを実行する場合は、他のCPU2〜nもIFを実行し、IDのステージを実行する場合は、他のCPU2〜nもIDを実行する等、命令の実行タイミングや実行結果が得られるタイミングを同期させることができる。なお、EXのステージは命令によって消費するクロック数(処理レイテンシ)が異なる。このため、実施例3で説明するように、パイプライン同期部31は、各CPUの消費クロックが同一になるように、処理レイテンシの最も大きい命令を実行するCPUが実行完了するまで、他のCPUをWait(ストール)させる。これにより、各CPUは同じタイミングでIFからのステージを同期して実行することができる。
【0032】
命令キュー制御部32は、共通命令キュー21から取得した命令セットを命令に分解して、各CPU1〜nの命令キュー42に設定する。CPU14の数が3つだとすると、CPU1には命令コード1がセットされ、CPU2には命令コード2がセットされ、CPU3には命令コード3がセットされる。そして、次のサイクルでは、命令キュー制御部32は、CPU1に命令コード4をセットし、CPU2に命令コード5をセットし、CPU3に命令コード6をセットする。このように、命令の順番と、CPUへの割り当て順は固定であるが、必ずしも固定である必要はない。
【0033】
命令依存判定部33は、各命令がそれよりも前の命令の実行結果を必要とする命令依存関係にある命令か否かを判定する。命令依存判定部33は、命令依存関係の命令と、該命令が実行結果を必要とする命令をパイプライン同期部31に通知する。
【0034】
CPUレジスタ同期部34は、各CPU1〜nのレジスタセット44又はCPUレジスタ45を同じデータにリフレッシュする。すなわち、CPU1のレジスタセット44又はCPUレジスタ45のデータが、CPU2の演算に必要な場合、CPUレジスタ同期部34は、CPU1のレジスタセット44又はCPUレジスタ45のデータをCPU2のレジスタセット44又はCPUレジスタ45にコピーする。
【0035】
外部アクセス制御部35は、各CPU1〜nからの外部アクセス(バスアクセス)を調停し、1つのCPUにアクセス権を与える。調停方法は、優先度順、ラウンドロビンなど予め定められている。
【0036】
命令スケジューラ23は、INTC20から外部割り込みの通知を取得した場合に、共通命令キュー21を更新する。すなわち、外部割り込みが発生した場合、CPU14は割込み内容に応じたタスクを実行する必要があるので、該タスクのプログラムが記憶されたアドレスから命令セットを読み出し、共通命令キュー21にセットする。
【0037】
また、命令スケジューラ23は、分岐命令などに対しても共通命令キュー21を更新する。すなわち、命令キュー制御部32は、CPU14が実行した命令が分岐命令である場合には分岐先のアドレスを、比較命令であった場合にはCPUがステータスフラグを参照して決定したアドレスを、命令スケジューラ23に通知する。命令スケジューラ23は分岐先のアドレスから、命令セットを読み出し、共通命令キュー21にセットする。
【0038】
故障診断装置16は、例えばWDTが例として挙げられる。WDTはCPU1〜n毎にプログラムの実行状態を監視するタイマであり、予め決められた時間内にCPU1〜nがタイマをリセットしないことから、CPU1〜nの異常を検出する。また、一時的に命令単位の分散実行を停止し、各CPU1〜nが同じ命令を実行して結果が同じなるか否かに基づき、故障を検出してもよい。また、一時的に命令単位の分散実行を停止し、各CPU1〜nがアプリケーションとは別に自己診断プログラムを実行し、その値が期待値と一致するか否かに基づき、CPU1〜nの故障を検出してもよい。
【0039】
I/O17には各種のセンサ、ADC、DAC、CANC(CAN Controller)、アクチュエータやアクチュエータのドライバ回路等が接続されている。DMAC19は、I/O17から入力されたデータを、CPU1〜nを介さずにRAM18に記録し、CPU1〜nからの要求を受け付けてRAM18の指定アドレスからセンサやアクチュエータにデータを転送する。
【0040】
INTC20は、故障診断装置16、I/O17などから割込みを受け付けて、動作シーケンス制御回路13に割り込む。割込みにより、動作シーケンス制御回路13は各CPU1〜nが実行する処理を切り換えることができる。
【0041】
〔実行態様〕
図3は、CPU1〜3による命令の実行を模式的に説明する図の一例である。縦方向の命令1〜15は1つのプログラムの実行順である。また、横方向の1〜10は時間の経過を意味し、例えばクロック数やサイクル数を単位とする。
【0042】
時間1:CPU1が命令キュー42から命令1をフェッチし、CPU2が命令キュー42から命令2をフェッチし、CPU3が命令キュー42から命令3をフェッチしている。
【0043】
時間2:CPU1が命令1をデコードし、CPU2が命令2をデコードし、CPU3が命令3をデコードしている。
【0044】
また、パイプライン制御により、CPU1が命令キュー42から命令4をフェッチし、CPU2が命令キュー42から命令5をフェッチし、CPU3が命令キュー42から命令6をフェッチしている。
【0045】
時間3〜5では、CPU1〜3が各ステージを進行させ、時間5ではIF,ID,EC,MA,WBの5つのステージが同時に実行されるようになる。したがって、時間5以降は、1クロック毎にCPU1〜3の3つの命令の実行結果が得られる。すなわち、時間5〜9の間に、合計15個の実行結果が得られる。このように、CPU1〜3が3命令ずつ並列に命令を実行することで、マルチコアの性能を最大限引き出すことができる。
【0046】
図4は、故障が検出された場合のCPU1〜3による命令の実行を模式的に説明する図の一例である。命令1〜6については、図3と同様に正常に実行されている。故障診断装置16は、故障したCPUを動作シーケンス制御回路13に通知する。これにより、動作シーケンス制御回路13は故障が検出されたCPU14を物理的に切断することで、命令の実行対象から除外する。
【0047】
CPU1が故障した場合、動作シーケンス制御回路13はCPU2,3のみで命令を分散して実行する。このため、CPU1が故障した以降は、1クロック毎に2つの命令の実行結果が得られる。
【0048】
なお、CPU1の故障が検出された時に、すでに命令キュー制御部32がCPU1に割り当てた命令はどのCPUも実行しないことになる。このため、命令キュー制御部32は、CPU1が故障するまでに、CPU1〜3が実行した最後の命令の次の命令から、CPU2,3に再度、割り当てる。例えば、CPU1が故障するまでに、CPU1〜3が命令6まで実行した場合、命令キュー制御部32は命令7、8から、CPU2,3に割り当てる。これにより、図示するように、命令7,9,11,13はCPU2により、命令8,10,12,14はCPU3により、並列に実行される。
【0049】
したがって、全てのCPU14の故障が検出されない限り、処理速度は低下してもマルチコアマイコン100は動作を継続することができる。
【0050】
図5は、動作シーケンス制御回路13の動作手順の一例を示す図である。動作シーケンス制御回路13は例えば、クロック毎に、故障診断装置16から故障が通知されたか否かを判定する(S10)。
【0051】
故障が検出されない場合、命令スケジューラ23が共通命令キュー21にCPU14の数分の命令セットを読み出す(S20)。
【0052】
一方、故障が検出された場合(S20のYes)、動作シーケンス制御回路13は故障したCPU14を切断する(S50)。また、動作シーケンス制御回路13は、命令スケジューラ23及び共通命令キュー21に、故障していないCPUの数、又は、故障したCPUの数を通知することで、命令セットとして一度に読み出す命令数を調整する。また、動作シーケンス制御回路13は、命令キュー制御部32に、切断されていないCPU14を通知する。
【0053】
この後の処理は、CPU14の故障の有無に関係なく共通である。すなわち、共通命令キュー21は命令セットとしてCPU14の数分の命令を読み出す(S20)。
【0054】
次に、命令キュー制御部32は共通命令キュー21から読み出した命令セットの各命令をCPU1〜nに割り当てる(S30)。
【0055】
パイプライン同期部31は、各CPU1〜nの実行ステージを同期させながら、1ステージ進行させる(S40)。以降は、ステップS10からの繰り返しとなる。
【0056】
本実施例のマルチコアマイコン100によれば、故障したCPUを物理的に切断可能であり、正常なCPUのみで処理を継続できる。また、動作するCPU14の数が変わっても、命令セットに含まれる命令の数と、命令を割り当て先のCPUを調整すれば演算を継続できる。したがって、タスク単位で処理を分散する場合のように、タスクの入れ替え(コンテキストスイッチ)などの複雑な制御が不要である。
【0057】
また、本実施例のマルチコアマイコン100は、命令単位で処理を分散できるので、タスク単位の処理の分散では並列動作の実現が難しいのに対し、マルチコアの性能を最大限引き出すことができる。また、命令単位で分散できるので、すでに使用されているシングルコアのプログラムを流用しやすい。
【実施例2】
【0058】
命令単位で処理を分散した場合、命令の依存関係により、各CPUが並列に命令を実行できない場合がある。例えば、命令1〜3が次のような場合、命令2は命令1との間に命令依存関係を有しているため、並列に実行できない。
命令1:A+B→C
命令2:C+D→E
命令3:F+G→H
この命令1〜3をCPU1〜3がそれぞれ実行する場合、CPU2が命令2を実行するには、CPU1の命令1の実行結果が必要である。このため、CPU1とCPU2は、並列に処理を実行できない。
【0059】
本実施例では、このような命令依存関係を命令依存判定部33が検出し、パイプライン同期部31が命令依存関係の命令を実行するCPU14をWaitさせるマルチコアマイコン100について説明する。
【0060】
命令依存判定部33は、同時に実行される命令セットに含まれる命令1〜3に命令依存関係があるか否かを判定する。判定方法は、例えば以下のようになる。命令依存判定部33は、1つの命令セットの中で、命令順に1つの命令に着目し演算結果が格納されるレジスタ名又は変数名(アドレス番地)を特定する。そして、このレジスタ名又は変数名が、後の命令の演算対象のオペランドに記述されているか否かを判定する。記述されていれば、後の命令には命令依存関係があることになる。上記の例では、命令1の演算結果が格納されるレジスタ名が“C”であり、“C”というレジスタ名が、後の命令2の演算対象のオペランド(C+Dの“C”)に記述されている。よって、命令2は命令1に対し命令依存関係がある。以下、命令2を「命令依存関係がある命令」、命令1を「先行命令」と称す。
【0061】
図6は、命令依存関係によるCPU14のWaitを説明する図の一例を、図7は命令依存関係が検出された場合の動作シーケンス制御回路13の動作手順の一例をそれぞれ示す。ここでは、ステップS25において、命令依存判定部33が命令2は、命令1との間に命令依存関係があると判定したとする。
(S25‐1) 命令キュー制御部32は、命令2が実行結果を必要とする先行命令の命令1をCPU1に割り当てる。こうすることで、CPU1は命令2よりも先に命令1を実行完了できる。
(S25‐2) 命令キュー制御部32は、CPU1以外のCPU2,3をWaitさせる。
(S25‐3) パイプライン同期部31は、各CPU1〜3を1ステージ実行させる。CPU2,3はWaitしているので何もしない。これにより、CPU1だけ先行命令の命令1のステージを進めることができる。
(S25‐4) 命令キュー制御部32は、命令2〜4を命令セットとして、その中の命令依存関係のある命令2を、先行命令を実行するCPUであるCPU1に割り当てる。これにより同じCPU1が命令依存関係のある命令2と先行命令である命令1を実行できる。
【0062】
また、命令キュー制御部32は、命令セットのうち残りの命令3,4をCPU2,3に割り当てる。すなわち、CPU2,3は命令2,3ではなく、命令3,4を実行する。
【0063】
以降の処理は、実施例1と同様であり、パイプライン同期部31は、各CPU1〜3の実行ステージを一致させながら1ステージ実行させる(S40)。以降は、ステップS10からの繰り返しとなる。
【0064】
本実施例のマルチコアマイコン100は、CPU1が先行命令を実行している間、他のCPU2,3をWaitさせ、命令依存関係の命令2を、先行命令である命令1を実行するCPUと同じCPU1に割り当てる。これにより、命令セット内に命令依存関係が検出されても、命令単位で処理を分散させることができる。
【0065】
なお、本実施例は実施例1と共にマルチコアマイコン100に適用することができる。
【実施例3】
【0066】
本実施例では、CPU毎の命令の処理レイテンシの違いを調整するマルチコアマイコン100について説明する。すでに説明したように、ALUがシフト命令を実行するために必要なクロック数と、MULが乗算命令を実行するために必要なクロック数、又は、DIVが除算命令を実行するために必要なクロック数は大きく異なる。このクロック数を処理レイテンシと呼び、1つの命令セットで処理レイテンシが異なれば、CPU1〜nが命令を実行完了する時間が異なってしまう。
【0067】
CPU毎に命令の実行完了時間が異なる場合の不都合を説明する。例えば、CPU1〜3が命令1〜3を実行した後、命令4〜6を実行する場合を考える。CPU1が命令1を実行するために大きな遅延があり、CPU1が実行する命令4が命令1と命令依存関係にある場合、CPU1が命令4のEXステージを実行する際に、命令1の実行が完了していないおそれがある。
【0068】
また、CPU1〜nが実行する命令の実行完了時間が異なる場合、各CPU1〜nが実行結果に応じて非同期にバスの獲得要求を出力する。例えば、処理レイテンシの違いにより、CPU2がCPU1よりも先に命令2を実行完了させバスの獲得要求を出力したとする。しかし、CPU1が命令1の実行のためにバスを使用することが必要な場合、CPU1はさらに命令1の実行完了が遅れてしまう。
【0069】
そこで、本実施例では、各CPU1〜nが実行する命令の処理レイテンシに応じて、ステージにWaitを挿入する。すなわち、各CPU1〜nが実行する命令の実行完了のタイミングがずれた場合、パイプライン同期部31は、処理レイテンシが短いCPUにWaitを挿入することで、各CPU1〜nが同期して命令セットを実行完了するように調整する。
【0070】
図8は、処理レイテンシとWaitによる調整を説明する図の一例である。命令1〜3は次の処理レイテンシであるとする。なお、各命令の処理レイテンシは、動作シーケンス制御回路13にとって既知である。
命令1:処理レイテンシが2
命令2:処理レイテンシが3
命令3:処理レイテンシが1
パイプライン同期部31は、命令1〜3で最も処理レイテンシが大きい命令2を実行したCPU2のEXステージ(時間3〜5)を特定する。時間6以降であれば、各CPU1〜3は次の命令セットのEXステージを実行可能である。よって、パイプライン同期部31は、時間6にCPU1〜3の命令4〜6のEXステージを揃える。
【0071】
同様に、時間6に、CPU1〜3の命令7〜9のIDステージを揃える。同様に、時間6に、CPU1〜3の命令10〜12のIFステージを揃える。時間6に揃えるステージが、後続の命令セット毎に早まるのは、パイプライン制御によるものである。
【0072】
このように、処理レイテンシが大きい命令を実行したCPU2の命令の実行完了に合わせて、後続の命令セットのステージを遅らせることで、各CPU1〜3のステージを同期させることができる。本実施例において、命令1〜3の命令セットを「検出命令セット」、命令4〜6の命令セットを「次命令セット」、命令7〜9の命令セットを「次〃命令セット」、命令10〜12の命令セットを「次〃〃命令セット」という。
【0073】
図9は、各CPU1〜3が処理レイテンシの異なる命令を実行した場合の動作シーケンス制御回路の動作手順の一例を示す。図9の手順は、例えば図5,7のステップS30に続いて実行される。
【0074】
パイプライン同期部31は、各CPU1〜3のEXステージの実行結果を監視し、処理レイテンシが異なるか否かを判定する(S110)。処理レイテンシは完全に一致している必要はなく、ある程度のずれは許容することができる。
【0075】
処理レイテンシが異ならない場合、パイプライン同期部31はWaitを挿入することなく、図9の処理は終了され、各CPU1〜3のステージを進行させる(S40)。
【0076】
処理レイテンシが異なる命令がある場合(S110のYes)、パイプライン同期部31は、次命令セットの、EXステージの前にWaitを挿入する(S120)。図8では、時間4の命令4〜6のWaitが対応する。
【0077】
同様に、パイプライン同期部31は、次〃命令セットの、IDステージの前にWaitを挿入する(S130)。図8では、時間4の命令7〜9のWaitが対応する。
【0078】
同様に、パイプライン同期部31は、次〃〃命令セットの、IFステージの前にWaitを挿入する(S140)。図8では、時間4の命令10〜12のWaitが対応する。
【0079】
そして、パイプライン同期部31は各CPU1〜3のステージを1つ進める(S150)。命令4〜12はWaitなのでステージは進まないが、命令1〜3は1ステージ又は1ステージ内の処理が進行する。
【0080】
次に、パイプライン同期部31は、処理レイテンシが異なる命令が検出された検出命令セットのうち、最も処理レイテンシが大きい命令が実行完了したか否かを判定する(S160)。すなわち、図8ではCPU2が命令2を実行完了したか否かを判定する。ここでは、同じCPU内で演算結果を利用できればよいので、実行完了とはEXステージが終わることである。
【0081】
最も処理レイテンシが大きい命令が実行完了していない場合(S160のNo)、パイプライン同期部31は、次命令セットの、EXステージの前にWaitを挿入する(S120)。図8では、時間5の命令4〜6のWaitが対応する。
【0082】
同様に、パイプライン同期部31は、次〃命令セットの、IDステージの前にWaitを挿入する(S130)。図8では、時間5の命令7〜9のWaitが対応する。
【0083】
同様に、パイプライン同期部31は、次〃〃命令セットの、IFステージの前にWaitを挿入する(S140)。図8では、時間5の命令10〜12のWaitが対応する。
【0084】
そして、パイプライン同期部31は各CPUのステージを1つ進める(S150)。これにより、CPU2が命令2を実行完了させることができる。
【0085】
最も処理レイテンシが大きい命令が実行完了した場合(S160のYes)、図9の処理は終了する。すなわち、パイプライン同期部31は、Waitを挿入しないので、各CPU1〜3の命令1〜12のステージが1つ進行される(S40)。
【0086】
本実施例のマルチコアマイコン100は、各CPU1〜nが命令セット内で処理する命令の処理レイテンシが異なっても、各ステージにWaitを挿入することで、各CPUの実行ステージを同期させることができる。したがって、命令セット内に処理レイテンシの異なる命令があってもCPU1〜3のステージを同期させ、命令依存関係の発生を抑制できる。
【0087】
なお、本実施例は実施例1,2と共にマルチコアマイコン100に適用することができる。
【実施例4】
【0088】
本実施例では異なるCPU1〜nが演算結果を同期するマルチコアマイコン100について説明する。図1において説明したように、CPU1が実行する命令の被演算子が、CPU2など他のCPUのCPUレジスタ45に記憶されている場合がある。このままではCPU1は演算を実行できないので、CPUレジスタ同期部34はCPU1に、CPU2のレジスタに記憶されている演算結果をコピーする。
【0089】
図10は、レジスタのリフレッシュを説明する図の一例である。説明のため、命令セットを順番に命令セットA〜Dという。
【0090】
(i) 命令依存判定部33は、命令セットBの命令が、直前の命令セットAの命令と命令依存関係にあるか否かを判定する。具体的には、以下の命令依存関係を判定する。
CPU1が実行する命令4が、命令2,3と命令依存関係にあるか否か
CPU2が実行する命令5が、命令1,3と命令依存関係にあるか否か
CPU3が実行する命令6が、命令1,2と命令依存関係にあるか否か
同様の関係が、命令セットCとB、命令セットDとC、のように前後の命令セット毎に生じる。例えば、命令セットCとBでは、
CPU1が実行する命令7が、命令5,6と命令依存関係にあるか否か
CPU2が実行する命令8が、命令4,6と命令依存関係にあるか否か
CPU3が実行する命令9が、命令4,5と命令依存関係にあるか否か
が判定される。
【0091】
判定方法は、例えば以下のようになる。命令4の演算対象のオペランドに、命令2,3の演算結果が格納されるレジスタ名又は変数名(アドレス番地)が記述されているか否かを判定する。記述されていれば、命令4には命令2又は命令3と命令依存関係があることになる。また、命令2又は3は先行命令となる。ここでは命令4が命令依存関係の命令であり、命令2が先行命令であるとする。
【0092】
(ii) パイプライン同期部31は、先行命令の命令2の実行が完了したタイミングで、CPU2のCPUレジスタ45のデータをCPU1のレジスタにコピーする。コピーするまではCPU1は命令4を実行できないので、パイプライン同期部31は実施例3と同様に各ステージにWaitを挿入する。Waitの間に、CPU2のCPUレジスタ45のデータをCPU1のレジスタにコピーすればよい。
【0093】
具体的には、例えば、CPU2のCPUレジスタ45とCPU1のレジスタセット44を直接、接続しておく。CPUレジスタ同期部34は、CPU2が命令2を実行完了したタイミングで、CPU2のCPUレジスタ45のデータをCPU1にコピーする。
【0094】
図11は、命令セット間の命令依存関係がある場合の、動作シーケンス制御回路13の動作手順の一例を示す。なお、図11の手順は、例えば図5,7のステップS30に続いて実行される。
【0095】
なお、命令依存判定部33は、予め、命令セット間に命令依存関係があるか否かを判定しておく。例えば、2つ以上の命令セットA,Bを命令キュー42に読み出し、命令セットBと直前の命令セットAとの間の命令依存関係を判定しておく。命令依存関係がある場合、命令依存関係がある命令を実行するCPU、及び、先行命令を実行するCPUを記録しておく。
【0096】
本実施例において、命令依存関係がある命令4が含まれる命令4〜6の命令セットの次の命令セット(命令7〜9)を「次命令セット」、命令10〜12の命令セットを「次〃命令セット」という。
【0097】
パイプライン同期部31は、先行命令を実行しているか否かを判定する(S210)。この判定は、先行命令のEXステージよりも前で行えばよい。先行命令を実行していない場合(S210のNo)、パイプライン同期部31はWaitを挿入することなく、各CPU1〜3のステージを進行させる(S40)。
【0098】
先行命令を実行している場合(S210のYes)、パイプライン同期部31は、命令依存関係がある命令を含む命令セットのEXステージの前にWaitを挿入する(S220)。図10では、時間4の命令4〜6のWaitが対応する。
【0099】
同様に、パイプライン同期部31は、命令依存関係がある命令を含む命令セットの次の命令セットである次命令セットの、IDステージの前にWaitを挿入する(S230)。図10では、時間4の命令7〜9のWaitが対応する。
【0100】
同様に、パイプライン同期部31は、次〃命令セットの、IFステージの前にWaitを挿入する(S240)。図10では、時間4の命令10〜12のWaitが対応する。
【0101】
そして、パイプライン同期部31は各CPU1〜3のステージを1つ進める(S250)。命令4〜12はWaitなのでステージは進まないが、命令1〜3は1ステージ又は1ステージ内の処理が進行する。
【0102】
次に、パイプライン同期部31は、先行命令の実行が完了したか否かを判定する(S260)。すなわち、図10ではCPU2が命令2を実行完了したか否かを判定する。命令依存関係のある命令4を実行するCPU1と、先行命令の命令2を実行するCPU2とでCPUが異なるため、実行完了したか否はライトバックされたか否かにより判定される。
【0103】
先行命令を実行している場合(S210のYes)、パイプライン同期部31は、命令依存関係がある命令を含む命令セットのEXステージの前にWaitを挿入する(S220)。図10では、時間5の命令4〜6のWaitが対応する。
【0104】
同様に、パイプライン同期部31は、次命令セットの、IDステージの前にWaitを挿入する(S230)。図10では、時間5の命令7〜9のWaitが対応する。
【0105】
同様に、パイプライン同期部31は、次〃命令セットの、IFステージの前にWaitを挿入する(S240)。図10では、時間5の命令10〜12のWaitが対応する。
【0106】
そして、先行命令の実行が完了した場合(S260のYes)、CPUレジスタ同期部34はレジスタをリフレッシュする(S270)。すなわち、CPUレジスタ同期部34は、CPU2のCPUレジスタ45のデータをCPU1のレジスタセット44にコピーする。これにより、CPU1はCPU2の演算結果を利用して命令4を実行できる。以降は、図5,7のステップS40に進み、Waitが挿入されることなく、各CPU1〜3が命令4〜12のステージを進行させる。
【0107】
本実施例のマルチコアマイコン100は、命令セット間で異なるCPU間に命令依存関係があっても、レジスタをリフレッシュすることで、命令単位で命令を分散して実行することを可能にできる。
【0108】
なお、本実施例は実施例1〜3と共にマルチコアマイコン100に適用することができる。
【符号の説明】
【0109】
13 動作シーケンス制御回路
14 CPU
16 故障診断装置
21 共通命令キュー
22 CPUバス制御部
23 命令スケジューラ
31 パイプライン同期部
32 命令キュー制御部
33 命令依存判定部
34 CPUレジスタ同期部
35 外部アクセス制御部
100 マルチコアマイコン
【特許請求の範囲】
【請求項1】
複数のコアが並列に命令を実行する情報処理装置において、
プログラムを記憶するプログラム記憶手段と、
コア毎の演算結果を記憶する演算結果記憶手段と、
コア数分の命令が含まれる命令セットを実行順に前記プログラム記憶手段から読み出し一次記憶部に記憶する命令読み出し手段と、
命令セットに含まれる命令を各コアの命令キューに記憶する命令配信手段と、
前記一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を、演算対象とする依存命令が、第一の命令セットよりも後に実行される第二の命令セットに含まれ、第一のコアと異なる第二のコアが実行するか否かを判定する命令依存関係判定手段と、
前記命令依存関係判定手段が、第二のコアが前記第二の命令セットに含まれる前記依存命令を実行すると判定した場合、第一のコアの前記演算結果記憶手段の値を、前記第二のコアの前記演算結果記憶手段に複写する複写手段と、
を有する情報処理装置。
【請求項2】
複数の各コアが、前記命令キューからの命令読み出し、命令デコード、命令実行、前記演算結果記憶手段への記憶、の各ステージを同期させながら各命令を実行するようにステージの進行を制御するステージ同期手段を有し、
前記ステージ同期手段は、前記第一のコアが、前記第二のコアが演算対象とする演算結果を前記第一のコアの前記演算結果記憶手段に記憶させるまで、複数のコアが実行する前記第一の命令セットよりも後の命令セットの各命令のステージが命令実行のステージに到達しないように、複数のコアのステージを停止させる、
ことを特徴とする請求項1記載の情報処理装置。
【請求項3】
前記命令依存関係判定手段が、命令セットに含まれる第二の命令が、同じ命令セット内の第一の命令の演算結果を演算対象とすると判定した場合、
前記命令配信手段は、命令セットに含まれる前記第一の命令を複数のコアのいずれか1つの前記命令キューに記憶し、
前記ステージ同期手段は前記命令キューに前記第一の命令が記憶されたコア以外のコアのステージを停止させた状態で、前記命令キューに前記第一の命令が記憶されたコアに命令読み出しのステージを実行させ、
前記命令配信手段は、前記第二の命令を、前記第一の命令を実行したコアの前記命令キューに記憶すると共に、前記第二の命令を先頭とする命令セットの残りの命令を他のコアの前記命令キューに記憶し、
前記ステージ同期手段は、複数のコアのステージを同期させながら各コアに前記第二の命令以降の命令を実行させる、
ことを特徴とする請求項2記載の情報処理装置。
【請求項4】
命令セットに命令実行のステージに必要な処理レイテンシが異なる命令が含まれる場合、
前記ステージ同期手段は、処理レイテンシが異なる命令を実行するコアが、命令実行のステージを終えるまで、処理レイテンシが異なる命令を含む命令セットの次の命令セットの各命令のステージが命令実行のステージに到達しないように、複数のコアのステージを停止させる、
ことを特徴とする請求項2記載の情報処理装置。
【請求項5】
コア毎に故障を検出する故障検出手段を有し、
故障検出手段がコアの故障を検出した場合、故障が検出されたコアと、前記プログラム記憶手段、前記命令読み出し手段、前記命令配信手段、及び、前記ステージ同期手段とを切断する切断手段を有し、
前記命令読み出し手段は、切断されたコアを除くコア数分の命令を含む命令セットを前記プログラム記憶手段から読み出し一次記憶部に記憶し、
前記命令配信手段は、命令セットに含まれる、切断されたコアを除くコア数分の命令を各コアの命令キューに記憶する、
ことを特徴とする請求項2〜4いずれか1項記載の情報処理装置。
【請求項6】
プログラムを記憶するプログラム記憶手段と、
コア毎の演算結果を記憶する演算結果記憶手段と、を有し、
複数のコアが並列に命令を実行する情報処理装置の命令実行方法において、
命令読み出し手段が、コア数分の命令が含まれる命令セットを実行順に前記プログラム記憶手段から読み出し一次記憶部に記憶するステップと、
命令配信手段が、命令セットに含まれる命令を各コアの命令キューに記憶するステップと、
命令依存関係判定手段が、前記一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を演算対象とする依存命令が、第一の命令セットよりも後に実行される第二の命令セットに含まれ、第一のコアと異なる第二のコアが実行するか否かを判定するステップと、
前記命令依存関係判定手段が、第二のコアが前記第二の命令セットに含まれる前記依存命令を実行すると判定した場合、複写手段が、第一のコアの前記演算結果記憶手段の値を、前記第二のコアの前記演算結果記憶手段に複写するステップと、
を有する情報処理方法。
【請求項1】
複数のコアが並列に命令を実行する情報処理装置において、
プログラムを記憶するプログラム記憶手段と、
コア毎の演算結果を記憶する演算結果記憶手段と、
コア数分の命令が含まれる命令セットを実行順に前記プログラム記憶手段から読み出し一次記憶部に記憶する命令読み出し手段と、
命令セットに含まれる命令を各コアの命令キューに記憶する命令配信手段と、
前記一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を、演算対象とする依存命令が、第一の命令セットよりも後に実行される第二の命令セットに含まれ、第一のコアと異なる第二のコアが実行するか否かを判定する命令依存関係判定手段と、
前記命令依存関係判定手段が、第二のコアが前記第二の命令セットに含まれる前記依存命令を実行すると判定した場合、第一のコアの前記演算結果記憶手段の値を、前記第二のコアの前記演算結果記憶手段に複写する複写手段と、
を有する情報処理装置。
【請求項2】
複数の各コアが、前記命令キューからの命令読み出し、命令デコード、命令実行、前記演算結果記憶手段への記憶、の各ステージを同期させながら各命令を実行するようにステージの進行を制御するステージ同期手段を有し、
前記ステージ同期手段は、前記第一のコアが、前記第二のコアが演算対象とする演算結果を前記第一のコアの前記演算結果記憶手段に記憶させるまで、複数のコアが実行する前記第一の命令セットよりも後の命令セットの各命令のステージが命令実行のステージに到達しないように、複数のコアのステージを停止させる、
ことを特徴とする請求項1記載の情報処理装置。
【請求項3】
前記命令依存関係判定手段が、命令セットに含まれる第二の命令が、同じ命令セット内の第一の命令の演算結果を演算対象とすると判定した場合、
前記命令配信手段は、命令セットに含まれる前記第一の命令を複数のコアのいずれか1つの前記命令キューに記憶し、
前記ステージ同期手段は前記命令キューに前記第一の命令が記憶されたコア以外のコアのステージを停止させた状態で、前記命令キューに前記第一の命令が記憶されたコアに命令読み出しのステージを実行させ、
前記命令配信手段は、前記第二の命令を、前記第一の命令を実行したコアの前記命令キューに記憶すると共に、前記第二の命令を先頭とする命令セットの残りの命令を他のコアの前記命令キューに記憶し、
前記ステージ同期手段は、複数のコアのステージを同期させながら各コアに前記第二の命令以降の命令を実行させる、
ことを特徴とする請求項2記載の情報処理装置。
【請求項4】
命令セットに命令実行のステージに必要な処理レイテンシが異なる命令が含まれる場合、
前記ステージ同期手段は、処理レイテンシが異なる命令を実行するコアが、命令実行のステージを終えるまで、処理レイテンシが異なる命令を含む命令セットの次の命令セットの各命令のステージが命令実行のステージに到達しないように、複数のコアのステージを停止させる、
ことを特徴とする請求項2記載の情報処理装置。
【請求項5】
コア毎に故障を検出する故障検出手段を有し、
故障検出手段がコアの故障を検出した場合、故障が検出されたコアと、前記プログラム記憶手段、前記命令読み出し手段、前記命令配信手段、及び、前記ステージ同期手段とを切断する切断手段を有し、
前記命令読み出し手段は、切断されたコアを除くコア数分の命令を含む命令セットを前記プログラム記憶手段から読み出し一次記憶部に記憶し、
前記命令配信手段は、命令セットに含まれる、切断されたコアを除くコア数分の命令を各コアの命令キューに記憶する、
ことを特徴とする請求項2〜4いずれか1項記載の情報処理装置。
【請求項6】
プログラムを記憶するプログラム記憶手段と、
コア毎の演算結果を記憶する演算結果記憶手段と、を有し、
複数のコアが並列に命令を実行する情報処理装置の命令実行方法において、
命令読み出し手段が、コア数分の命令が含まれる命令セットを実行順に前記プログラム記憶手段から読み出し一次記憶部に記憶するステップと、
命令配信手段が、命令セットに含まれる命令を各コアの命令キューに記憶するステップと、
命令依存関係判定手段が、前記一次記憶部に記憶された第一の命令セットに含まれる命令を第一のコアが演算した演算結果を演算対象とする依存命令が、第一の命令セットよりも後に実行される第二の命令セットに含まれ、第一のコアと異なる第二のコアが実行するか否かを判定するステップと、
前記命令依存関係判定手段が、第二のコアが前記第二の命令セットに含まれる前記依存命令を実行すると判定した場合、複写手段が、第一のコアの前記演算結果記憶手段の値を、前記第二のコアの前記演算結果記憶手段に複写するステップと、
を有する情報処理方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2013−54625(P2013−54625A)
【公開日】平成25年3月21日(2013.3.21)
【国際特許分類】
【出願番号】特願2011−193582(P2011−193582)
【出願日】平成23年9月6日(2011.9.6)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【Fターム(参考)】
【公開日】平成25年3月21日(2013.3.21)
【国際特許分類】
【出願日】平成23年9月6日(2011.9.6)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【Fターム(参考)】
[ Back to top ]