(58)【調査した分野】(Int.Cl.,DB名)
前記切替え処理コードは、前記電力管理部から前記第1のプロセッサコアに前記準備完了の通知が出力され、前記第1のレジスタセットに格納されているデータが前記バッファ領域に保存された後に、自コアへの電源供給の停止要求を前記第1のプロセッサコアに出力させるように構成されている、請求項3に記載の情報処理装置。
【発明を実施するための形態】
【0013】
以下、一実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰り返さない。
【0014】
[非対称マルチコアCPU装置の全体構成]
図1は、一実施の形態による情報処理装置として非対称マルチコアCPU装置の構成を示すブロック図である。
【0015】
図1を参照して、非対称マルチコアCPU装置1は、低電力志向のコア1(20)と、高性能志向のコア2(30)と、電力管理部10とを含む。コア1(20)は、コア2(30)に比べて低動作周波数で動作するとともに低電源電圧で動作するために消費電力が低い。
【0016】
コア1(20)に実装されている命令セットアーキテクチャ(ISA1)(21)と、コア2(30)に実装されている命令セットアーキテクチャ(ISA2)(22)とには、互換性がなくてもよい。さらに、コア1(20)に備えられたレジスタセット1(22)と、コア2(30)に備えられたレジスタセット2(32)とにも互換性がなくてよい。
【0017】
たとえば、低電力志向のコア1(20)のレジスタ幅を16ビットとし、高性能志向のコア2(30)のレジスタ幅を32ビットとすることができる。コア1(20)のレジスタ幅をコア2(30)のレジスタ幅に比べて抑えることによって、コア1(20)の回路面積およびレジスタ数を削減することができるため、コア1(20)とコア2(30)との性能差もしくは電力効率差をより大きくすることができる。
【0018】
電力管理部10は、コア1(20)に対して電力供給線11を介して電力(電源電圧)を供給し、コア2(30)に対して電力供給線12を介して電力(電源電圧)を供給する。各コアに対する電力供給は、電力管理部10によって独立に制御される。電力管理部10は、割込み信号線13を介してコア1(20)に割込み通知を発行することができる。
【0019】
非対称マルチコアCPU装置1は、さらに、メモリ50、周辺デバイス40、およびバス41を含む。コア1(20)、コア2(30)、電力管理部10、メモリ50、および周辺デバイス40は、バス41を介して相互に接続される。コア1(20)とコア2(30)とは、バス41を介してメモリ50および周辺デバイス40と結合されることによって、メモリ50および周辺デバイス40を共有する。
【0020】
[メモリ上のソフトウェアの構成]
図2は、
図1のメモリに格納されるソフトウェアの構成を示す図である。
図2には、コンパイラ60によってソースコード61をコア1(20)用の実行コードおよびコア2(30)用の実行コード(以下では、命令コードまたは処理コードとも称する)に変換する過程が併せて示されている。
【0021】
図1および
図2を参照して、アプリケーション処理が記述されたソースコード61は、コンパイラ60によってコア1(20)の命令コードに翻訳されたコア1用アプリケーション処理コード51、コア2(30)の命令コードに翻訳されたコア2用アプリケーション処理コード52、および両処理コード51,52から共通に参照されるデータ53に変換される。このとき、コア1用アプリケーション処理コード51とコア2用アプリケーション処理コード52のアドレスの対応関係を示す命令アドレス変換テーブル54が併せて生成される。これらのソフトウェア51〜54は実行時にはメモリ50上に配置される。
【0022】
メモリ50上には他に、コア1用アプリケーション処理コード51をコア1(20)で実行する際に使用するコア1用スタック領域55と、コア2用アプリケーション処理コード52をコア2(30)で実行する際に使用するコア2用スタック領域56とが確保される。メモリ50上には、さらに、コア1(20)の実行状態をコア2(30)に移送し継続実行するために必要な仕組みを実装した実行コンテキスト移送処理コード57と、コア1(20)の実行状態であるレジスタセット1(22)の内容を一時的に保存するためのレジスタセット変換バッファ58とが配置される。
【0023】
[コンパイル処理]
1.字句解析
図3は、コンパイル処理の手順を示すフローチャートである。
図2および
図3を参照して、コンパイル処理では、最初にソースコード61を文法上の基本単位であるトークンの列に変換する字句解析処理(ステップS100)が行われる。
【0024】
2.構文解析・中間表現翻訳処理
次に、プログラミング言語の文法規則に従ってトークン列を解析する構文解析処理(ステップS105)が行われ、続いて構文解析結果に基づいて中間表現コード63を生成する中間表現翻訳処理62が行われる(ステップS110)。このように、アプリケーション処理の記述されたソースコード61は、各コア用の処理コード51,52に変換する際に、中間表現翻訳処理62によって、特定のISAに依存しない命令コードである中間表現コード63に一旦変換される。
【0025】
中間表現コード63は、コンパイラ60によって字句解析および構文解析を行った結果である、ソフトウェアの論理構造を示している中間データを明示的に具現化したものである。一般的なコンパイラでは、中間表現コードという形で明示的に出力していなくても、中間表現コードに相当する中間データを内部的に保持している。中間表現コードは、例えばJava(登録商標)のバイトコードのような、ISAに依存しない命令形式であり、ロード、ストア、算術演算、論理演算、および分岐などの汎用的な命令コード体系となっている。なお、コンパイラにおいて、一旦中間表現コードに翻訳して最適化した後、それをターゲット命令コードに変換する方式は、コンパイラ基盤のLLVM(Low Level Virtual Machine)などで用いられている既存の技術である。
【0026】
ここで、一般にプログラムは、分岐命令(ジャンプ命令)を区切りとしていくつかの基本ブロックに分割することができる。基本ブロックとは、(i)実行制御が基本ブロックを構成する文の並びの最初から最後に順に進み、(ii)分岐命令(ジャンプ命令)が基本ブロックの最後にのみ置かれ、(iii)他の基本ブロックからはその基本ブロックの最初にしか入ることができないものを言う。以下のステップは、基本ブロックを単位として実行される。
【0027】
3.コード最適化処理・実行コンテキスト状態制御処理
次に、コンパイラ60は、コード最適化処理および実行コンテキスト状態制御処理64を行う(ステップS115)。コード最適化処理とは、より効率のよいコードを生成するために、中間表現コード63に対して行われる各コアのアーキテクチャ特有の処理のことである。たとえば、変数や一時的な計算途中結果を特定の汎用レジスタに割り付ける処理などが行われる。
【0028】
実行コンテキスト状態制御処理64は、このコード最適化処理に制約を加えるものである。本実施の形態では、アプリケーションプログラムの実行時にコア1からコア2に処理が切り替えられる際、コア1によって現在の実行中の基本ブロックの最後の分岐命令まで処理が実行され、基本ブロックの境界において、コア1からコア2に処理が引き渡される。このとき、次の基本ブロックの先頭位置をチェックポイントとし、チェックポイントにおいて、コア1のレジスタ状態およびスタック状態(いわゆる、実行コンテキスト)がコア2用に変換される。この実行コンテキストの変換処理を可能とするため、コード最適化処理では以下の制約が課される。
【0029】
(制約1) 基本ブロックの境界では、コア1(20)用スタック領域55に退避されているデータの内容および順序と、コア2(30)用スタック領域56に退避されている内容および順序とを一致させる。なお、スタック領域に退避されるデータの単位(レジスタ幅)は一致させる必要はない。
【0030】
(制約2) 基本ブロックの境界では、コア1(20)用のレジスタセット1(22)およびコア2(30)用のレジスタセット2(32)のうちで、両コアで共通の使用目的を持った汎用レジスタに保持されているデータの内容を一致させる。なお、基本ブロックの内部の処理においては、コードの最適化のために汎用レジスタを自由に使用してよい。
【0031】
(制約3) スタック領域に命令コードのアドレス情報(例えば、プログラムカウンタ(PC))を退避する場合には、スタックに退避された他のデータとは区別可能とする。この制約3は、コア1からコア2に処理を引き渡す際に、命令アドレス変換テーブル54に従ってアドレス情報を書き直す処理を容易に実行できるようにするために必要である。
【0032】
上記の制約1,2に関して、たとえば、基本ブロックをまたがって使用される一時的な計算途中結果は、汎用レジスタの数に余裕があるプロセッサコアではレジスタに保持されたまま次の基本ブロックに引き継ぐことができる。一方、汎用レジスタの数が限られたプロセッサコアでは、一時的なデータはスタックに退避した後、次の基本ブロックで取り出すか、あるいは一旦破棄した後、次の基本ブロックで再度計算してデータを再生成しなければならない。このようなプロセッサコアのアーキテクチャの違いに起因する処理の差異を、チェックポイント(基本ブロックの境界)で吸収するために、実行コンテキスト状態制御処理64では、レジスタおよびスタックの状態(実行コンテキスト)を一致させるための追加処理が行われる。たとえば、あるデータを一方のコアは汎用レジスタに保持しており、他方のコアはスタック上に保持している場合、前者のデータを一旦スタックに退避する処理が挿入される。
【0033】
上記の制約3に関して、スタック領域に退避されたアドレス情報を区別するために、別途付加情報を記録する操作が行われる。たとえば、ある特定の形式のデータ(マジックコード)を命令コードのアドレス情報との組でスタック上に退避する方法、もしくは、アドレス情報の退避位置を示すポインタ情報を別途生成する方法などが考えられる。後者の方法に関しては、
図6〜
図8を参照して後述する。
【0034】
4.命令コード翻訳処理
次のステップで、最適化処理および実行コンテキスト状態制御処理64が施された中間表現コード63は、コア1用命令コード翻訳処理65によってコア1用命令コード(コア1用アプリケーション処理コード51)に変換され、コア2用命令コード翻訳処理66によってコア2用命令コード(コア2用アプリケーション処理コード52)に変換される(ステップS120)。これらの命令コード翻訳処理65,66は、基本ブロックを単位として実行される。
【0035】
実行コンテキスト状態制御処理64が予め実行されているので、命令コード翻訳処理65,66は、共通のルールに従った命令コードを生成する。具体的に、コア1用アプリケーション処理コード51の各基本ブロックの先頭においてレジスタセット1(22)に割当てられるデータの内容は、コア2用アプリケーション処理コード52の対応する基本ブロックの先頭においてレジスタセット2(32)に割当てられるデータの内容に一致する。さらに、コア1用アプリケーション処理コード51の各基本ブロックの先頭においてコア1用スタック領域(55)に退避するように割当てられているデータの内容は、コア2用アプリケーション処理コード52の対応する基本ブロックの先頭においてコア2用スタック領域(56)に退避するように割当てられているデータの内容に一致する。
【0036】
5.リンク処理・命令アドレス変換テーブルの生成
次に、リンク処理67によって、コア1用命令コード、コア2用命令コード、およびデータが、メモリ50のアドレス空間に配置される(ステップS125)。このとき、コンパイラ60は、アドレス配置後のコア1用命令コード(コア1用アプリケーション処理コード51)と、アドレス配置後のコア2用命令コード(コア2用アプリケーション処理コード52)とのアドレス対応関係を記録した命令アドレス変換テーブル54を併せて生成する(ステップS130)。
【0037】
[命令アドレス変換テーブルの具体例]
以下、
図2の命令アドレス変換テーブル54の具体例について説明する。
【0038】
図4は、中間表現コードと各コア用アプリケーション処理コードとの対応関係を示す図である。
図2および
図4を参照して、中間表現コード63は、分岐命令までの連続命令列を単位とした、基本ブロックに分割されている。たとえば、
図4の例において、中間表現コード63は、基本ブロックA,B,Cに分割されている。
【0039】
コンパイラ60は、命令コード翻訳処理65,66において、中間表現コード63を各コア用の命令コードに翻訳する際に、基本ブロックの単位で翻訳する。たとえば、
図4の例において、中間表現コードの基本ブロックAに対応する処理内容は、コア1用の命令コードに翻訳された場合は翻訳済み基本ブロック1Aとなり、コア2用の命令コードに翻訳された場合は翻訳済み基本ブロック2Aとなる。同様に、中間表現コードの基本ブロックBは、翻訳済み基本ブロック1Bおよび翻訳済み基本ブロック2Bに対応し、中間表現コードの基本ブロックCは、翻訳済み基本ブロック1Cおよび翻訳済み基本ブロック2Cに対応する。
【0040】
これらの翻訳済み基本ブロック1A〜1Cおよび2A〜2Cは、リンク処理67によって各々のアドレス空間に割り付けられる。このとき、対応する翻訳済み基本ブロックの先頭アドレスの組が、命令アドレス変換テーブル54に記録される。
【0041】
図5は、
図4の例において、命令アドレス変換テーブルに記録されるアドレス情報について説明するための図である。
図4、
図5を参照して、コア1用の翻訳済み基本ブロック1Aの先頭アドレス0x1000と、対応するコア2用の翻訳済み基本ブロック2Aの先頭アドレス0x8000との組み合わせが、命令アドレス変換テーブル54に記録される。基本ブロックB,Cについても同様である。
【0042】
なお、各々のアプリケーション処理の命令コードは、コア用に割り当てられた領域に別々に割り付けられるが、データはコア間で共通の領域に割り当てられ、各々のコアから同一アドレスで参照可能となる。
【0043】
[実行コンテキスト状態制御処理の制約3の具体例]
以下、実行コンテキスト状態制御処理64の制約3を実現した具体例として、アドレス情報の退避位置を示すポインタ情報を別途生成する方法について説明する。
【0044】
図6は、サンプルコードを示す図である。
図6のサンプルコードでは、分岐のない単純な処理1、処理3、および処理2を順に実行する例が示されている。
【0045】
図7は、
図6のサンプルコードに対応するコア1用アプリケーション処理コードの基本ブロックの構成例を示す図である。
【0046】
図6および
図7を参照して、基本ブロックは分岐命令を境界として分割されるため、関数func_mainは関数func_aの呼出しの前後で別々の基本ブロックとなる。前半を基本ブロック1とし、後半を基本ブロック2とする。関数func_aは単一の基本ブロック3となる。基本ブロック1の最後の命令は、基本ブロック3にジャンプする分岐命令で、基本ブロック3の最後は基本ブロック2の先頭にリターンする分岐命令である。処理の実行順序は、処理1(基本ブロック1)、処理3(基本ブロック3)、および処理2(基本ブロック2)の順となる。なお、この例ではレジスタ幅は16ビットで、関数呼出しの引数パラメータは全てスタック経由で渡すものとする。
【0047】
図8は、
図6のサンプルコードの処理が実行される際のスタックの状態を示す図である。
【0048】
図8(A)には、基本ブロック1の先頭のスタックの状態が示されている。スタックポインタ(SP)はスタック領域の先頭を示している。
【0049】
図8(B)を参照して、関数func_aを呼び出す場合、スタックには引数パラメータ(0x0004,0x0008)を積んだ後、戻り先の命令コードのアドレス(基本ブロック2の先頭アドレス:0x103C)が積まれる。これは関数func_aを呼び出す前処理として、基本ブロック1の最後で行われる処理である。
【0050】
この処理に加えて、戻り先の命令コードのアドレスが格納されるSPの位置情報(アドレス0xBFFA)が、スタック領域とは別の領域に設けた退避アドレス情報領域に保存される。退避アドレス情報領域もまた、スタック領域と同様に伸張する領域である。
【0051】
したがって、関数func_aへの分岐直後である基本ブロック3の先頭では、
図8(B)に示すスタック状態となる。スタック領域に退避されたデータのうち、アドレス0xBFFAの内容が命令コードのアドレスであるが、これは退避アドレス情報領域を走査することで検出可能となっている。
【0052】
図8(C)を参照して、基本ブロック3の最後では、スタックから戻り先アドレス(アドレス0xBFFA)を取り出し、そのアドレスにリターンするが、その際には退避アドレス情報領域に保存した内容も併せて破棄する。この結果、基本ブロック2の先頭では、
図8(C)に示すスタック状態となる。
【0053】
上記に示す退避アドレス情報領域に対する操作は、実行コンテキスト状態制御処理64(
図3のステップS115)によって挿入され、コア1用命令コード翻訳処理65(
図3のステップS120)によって基本ブロック中に自動的に追加される。なお、スタックへの戻り先アドレスの退避と同時にSPの内容を退避アドレス情報領域にも退避する処理をハードウェアで実現してもよい。
【0054】
[実行コンテキスト移送処理]
次に、コア1(20)の実行状態をコア2(30)に移送し継続実行するための処理である
図2の実行コンテキスト移送処理57について説明する。実行コンテキスト移送処理57は、コア1用アプリケーションの実行中に時間的制約が変化した場合、すなわち、高性能なコア2(30)で短時間に結果を出す必要がある場合(高い演算能力が必要とされる場合)に起動される。
【0055】
たとえば、
図1の周辺デバイス40として設けられた画像センサを例に挙げる。画像センサに画像入力のない通常時にはCPUの演算能力は必要ない。一方、画像センサに画像が入力され画像センサが反応した場合には、CPUは、ある決まった時間以内に画像データ解析処理を行って結果を出力する必要があり、高い演算能力が必要とされる。この場合、画像センサからの割込み通知に応答して、コア1(20)において割込みハンドラ処理が実行され、この割込みハンドラ処理からの要求に応答して、実行コンテキスト移送処理57がコア1,2(20,30)において実行される。
【0056】
他の例として、普段は入力データをバッファに格納するだけの単純な処理をゆっくり行っていればよいが、入力データがバッファに所定量蓄積された時点で、一気に演算して結果を出力するような処理が挙げられる。この場合、コア1(20)で実行されている入力データのバッファを管理している処理プログラムからの要求によって、実行コンテキスト移送処理57がコア1,2(20,30)で実行される。
【0057】
さらに他の例として、OS(Operating System)が起動されたタスクの負荷情報に応じてスケジューリング可能かどうかを判断し、OSからの要求によって実行コンテキスト移送処理57が実行される場合も考えられる。
【0058】
図9は、実行コンテキスト移送処理の具体的な処理内容について説明するための図である。
図9では、コア1(20)で実行されている処理コードが時間的制約の変化を判断し、コア1(20)からコア2(30)への処理の切替え要求を発生させる例が示されている。
【0059】
1.コア1側処理
図9に示すように、実行コンテキスト移送処理57は、コア1,2(20,30)で機能分担されている。コア1側処理70として、コア2の起動要求処理71、基本ブロック実行完了処理72、レジスタ保存処理73、およびコア1の停止処理74が順に実行される。
【0060】
1−1.コア2の起動要求処理
図1および
図9を参照して、最初に、コア2の起動要求処理71として、電源供給が停止された状態であるコア2(30)を起動するため、コア1(20)から電力管理部10に対してコア2(30)への電源供給を要求する。そして、コア1(20)はコア1用アプリケーション処理の続きを実行する。
【0061】
1−2.基本ブロックの実行完了処理
コア2(30)が起動し実行可能な電力状態となったとき、電力管理部10は、コア1(20)に対し、コア2(30)が実行可能状態となったことを割込み信号によって通知する。その割込み通知を受けたコア1(20)は、割込み処理として基本ブロックの実行完了処理72を行う。
【0062】
図10は、
図9の基本ブロックの実行完了処理の手順を示すフローチャートである。
図9および
図10を参照して、まず、コア1(20)は、実行中のアプリケーション処理において、現在のプログラムカウンタ(PC)の値を取得する(ステップS200)。
【0063】
次にコア1(20)は、命令アドレス変換テーブル54を走査して現在実行中の基本ブロックを特定する(ステップS205)。命令アドレス変換テーブル54の探索は、別途ハッシュテーブルを設けることで探索時間を削減することができる。
【0064】
次に、コア1(20)は、特定した基本ブロックの最後の分岐命令まで処理を進めることによって、現在実行中の基本ブロックの処理を完了し、次に実行される基本ブロックの先頭の命令の直前で処理を停止する(ステップS210)。コア1の機能として、ハードウェアブレークポイントやステップ命令実行のようなデバッグ機能を有する場合は、これを利用することによって、次に実行される基本ブロックの先頭の命令の直前まで処理を進めて、その時点で処理を停止することができる。もしくは、分岐命令の分岐先アドレスを考慮してソフトウェアブレークポイントを設定することによっても上記の機能を実現できる。
【0065】
なお、コア2(30)への電源供給を電力管理部10に要求した際に、電力管理部10からの割込み通知を待たずに、現在のアプリケーション処理のPC(プログラムカウンタ)が示す命令から実行中の基本ブロックの最後の分岐命令まで(次に実行される基本ブロックの先頭命令の直前まで)処理を進めておくようにしてもよい。この場合、コア1(20)は、現在実行中の基本ブロックの最後の分岐命令まで処理を実行した後に、コア2(30)が実行可能状態となったことを通知する割込みを待つことになる。
【0066】
1−3.レジスタ保存処理
再び
図9を参照して、次に、コア1(20)は、レジスタ保存処理73を実行する。具体的にコア1(20)は、アプリケーション処理コードで次の基本ブロックの先頭の命令を実行する直前のレジスタの内容をレジスタセット変換バッファ58に保存する。
【0067】
1−4.コア1の停止処理
次に、コア1(20)は、コア1停止処理74として、コア2(30)の実行開始(リセット状態解除)を要求するとともに、コア1(20)自身の電源供給を停止するように電力管理部10に要求する。
【0068】
2.コア2側処理
コア2(30)のリセット状態が解除されると、実行に必要な最小限の初期化処理を行った後、コア2側の実行コンテキスト移送処理57が起動される。コア2側処理80として、スタック変換処理81、レジスタ変換処理82、およびコンテキストディスパッチ処理83が順に実行される。
【0069】
2−1.スタック変換処理
図11は、
図9のスタック変換処理の手順を示すフローチャートである。
【0070】
図9および
図11を参照して、スタック変換処理81では、コア2(30)は、メモリ50のコア1用スタック領域55の内容を読み出し(ステップS300)、データ幅を拡張して(ステップS305)、コア2用スタック領域56にデータを再配置する(ステップS315)。その際、コア2(30)は、コア1用スタック領域55から読み出したデータが、関数呼出しの戻り値など、命令コードのアドレスの場合には、命令アドレス変換テーブル54を走査し、対応するコア2(30)の命令コードのアドレスに置き換えて(ステップS310)、コア2用スタック領域56に配置する(ステップS315)。
【0071】
以上の各ステップは、コア1用スタック領域55に格納された全てのデータについて(ステップS320でYESとなるまで)繰り返される。なお、
図11において、ステップS305とS310は実行される順序が逆でもよい。
【0072】
2−2.レジスタ変換処理
図12は、
図9のレジスタ変換処理の手順を示すフローチャートである。
図9および
図12を参照して、コア2(30)は、レジスタ変換処理82では、レジスタセット変換バッファ58に保存されたコア1(20)の汎用レジスタの内容を、コア2(30)の汎用レジスタの形式に変換する。
【0073】
具体的には、コア2(30)は、実行コンテキスト状態制御処理64において与えた制約条件のとおり、データを保持するために用いた汎用レジスタの対応関係が一致するよう、レジスタの内容を移動する(ステップS400)。さらに、コア2(30)は、PCの内容を、命令アドレス変換テーブル54を走査して得られたコア2(30)の命令コードアドレスに変換する(ステップS405)。さらに、コア2(30)は、SPの内容を、スタック変換処理81によって生成されたコア2用スタック領域56の最上位に積まれたデータのアドレスに置換する(ステップS410)。なお、以上のステップS400,S405,S410の実行順序は、どのステップから実行してもよい。
【0074】
2−3.コンテキストディスパッチ処理
コンテキストディスパッチ処理83では、コア2(30)は、レジスタ変換処理82によってレジスタセット変換バッファ58に生成された汎用レジスタの内容を、コア2(30)のレジスタセット32にセットする。これにより、コア1(20)で中断した処理の続きを、コア2(30)で再開できるようになる。
【0075】
コア2(30)は、コア2用のレジスタセット32に含まれるプログラムカウンタ(PC)の値に従って、現在実行中の基本ブロックの次に実行される基本ブロックの先頭の命令からコア2用アプリケーション処理コード52の実行を開始する。
【0076】
[センサシステムへの適用例]
上記の非対称マルチコアCPU装置1が適用されるシステムの例として、バッテリー駆動で長期間稼働し続けるセンサシステムが考えられる。以下、センサシステムの動作について説明する。
【0077】
図13は、センサシステムの動作例を示すフローチャートである。
図1、
図13を参照して、センサシステムでは、CPU(コア1(20)およびコア2(30)の両方とも)は、間欠動作により定常時は待機状態となって停止している。定期的、あるいは外部からの要求によって(ステップS500でYES)、電力管理部10がコア1(20)への電源供給を開始する。待機状態からの起点は、必ずコア1(20)となる。
【0078】
コア1(20)は、電力管理部10から電源供給を受けると、初期化処理(ステップS600)を実行した後、アプリケーションプログラムの実行を開始する(ステップS605)。CPUの処理負荷が増大しなければ(ステップS610でNO)、コア1(20)はアプリケーションプログラムの終了まで(ステップS620でYESとなるまで)処理を実行する。その後、コア1(20)は、電力管理部10にコア1(20)への電源供給の停止を要求し、電力管理部10がコア1(20)への電源供給を停止することにより、待機状態に戻る。
【0079】
一方、アプリケーションプログラムの実行中にCPUの処理負荷が増大した場合には(ステップS610でYES)、コア1(20)の処理は、
図9で説明した実行コンテキスト移送処理57に移行する(ステップS615)。CPUの処理負荷が増大する場合として、たとえば、センシングした入力データが所定量バッファに蓄積され、蓄積されたデータを用いて演算を行い、演算結果を通信回線で出力する場合が挙げられる。
【0080】
図14は、
図13の実行コンテキスト移送処理(ステップS615)の手順を示すフローチャートである。
【0081】
図1、
図9、
図14を参照して、実行コンテキスト移送処理では、コア1(20)は、電力管理部10にコア2(30)の起動を要求する(ステップS630、
図9の71)。コア1(20)からの要求を受けて、電力管理部10は、コア2(30)への電源供給を開始する(ステップS515)。電力管理部10は、コア2(30)へ供給している電源電圧が、コア2(30)が動作可能な電圧レベルに達すると、コア2(30)が実行可能状態になったことを割込み信号でコア1(20)に通知する(ステップS520)。
【0082】
コア1(20)は、電力管理部10からの割込み通知を受けると、
図10で説明したように、現在実行中の基本ブロックの実行を完了し、次に実行する基本ブロックの先頭の直前まで処理を進める基本ブロック実行完了処理72(ステップS635)を行う。さらに、コア1(20)は、レジスタセット1(22)の内容をレジスタセット変換バッファ58に保存するレジスタ保存処理73(ステップS640)を実行する。
【0083】
その後、コア1(20)は、
図9で説明したようにコア1停止処理74(ステップS645)を実行する。具体的にコア1(20)は、コア2(30)のリセット状態解除を要求する(ステップS650)とともに、コア1(20)自身の電源供給を停止するように電力管理部10に要求する(ステップS655)。電力管理部10は、コア1(20)からの電源停止要求(ステップS655)に応答して、コア1(20)への電源供給を停止する(ステップS525)。
【0084】
コア2(30)は、リセット状態が解除されると、初期化処理(ステップS700)を実行する。その後、コア2(30)は、
図11で説明したように、メモリ50のコア1用スタック領域55の内容を読出し、自コア用にデータ変換した後にコア2用スタック領域56に配置するスタック変換処理81(ステップS705)を実行する。
【0085】
続いてコア2(30)は、
図12で説明したように、レジスタセット変換バッファ58に保存されたコア1(20)の汎用レジスタの内容を、コア2(30)の汎用レジスタの形式に変換するレジスタ変換処理82(ステップS710)を行う。さらにコア2(30)は、レジスタ変換処理82によってレジスタセット変換バッファ58に生成された汎用レジスタの内容をコア2(30)のレジスタセット32にセットするコンテキストディスパッチ処理83(ステップS715)を実行する。
【0086】
その後、コア2(30)は、コア1(20)で実行終了した基本ブロックの次に実行される基本ブロックから、アプリケーションプログラムの実行を再開する(ステップS720)。コア2(30)は、アプリケーションプログラムが終了するまで処理を続ける。
【0087】
アプリケーションプログラムの終了後に(ステップS725でYES)、コア2(30)は、コア2(30)自身の電源供給を停止するように電力管理部10に要求する(ステップS730)。電力管理部10は、コア2(30)からの電源停止要求に応答して、コア2(30)への電源供給を停止する(ステップS530)。これによって、非対称マルチコアCPU装置1は、再度、待機状態に移行する。
【0088】
上記のように、コア1(20)からコア2(30)に処理が移行した後は、コア2(30)からコア1(20)への移送は行わない。この理由は、コア2(30)の起動にはエネルギー的、あるいは処理性能的なオーバーヘッドがかかるため、コア2(30)に処理を移送した後は残りの処理を全て行い、出来る限り素早く待機状態に遷移させることが望ましいためである。なお、待機状態からの起点は、必ずコア1(20)となる。
【0089】
上記のシステム構成により、間欠動作時における高度な処理能力を必要としない単純な操作を、エネルギー効率の良い低性能なコア1(20)で実行することにより、定常動作時のエネルギー消費量を抑えることが可能となる。この結果、バッテリー駆動の機器において長期間の連続稼働が可能となる。一方、データの解析処理や通信処理など、一時的に計算性能が必要とされる場合に対して、高性能なコア2(30)に切り替えて処理を引き継ぐことで、実時間性能を満足することが可能となる。本構成によれば、システム設計時、あるいは実装時において、処理を実行するコアを事前に決めておく必要がなくなるとともに、システム運用時に時間制約、あるいはエネルギー制約が変化する場合に、それに応じて処理を行うコアを動的にスケジューリングするシステムの実現が可能になる。
【0090】
[実施の形態の効果]
以上のとおり、この実施の形態によれば、ISAに互換性のない非対称コア間でアプリケーション処理を切り替えて継続実行が可能になる。ISAおよびレジスタセットの互換性が不要となるため、例えば、レジスタ幅が16ビットの低電力志向のコアと、レジスタ幅が32ビットの高性能志向のコアの組み合わせが可能となる。低電力指向のコアのレジスタ幅を16ビットに抑えることで、コアの面積やトランジスタ数が削減されるため、性能、あるいは電力効率の差をより大きく確保することができる。さらに、アプリケーション処理をコアに固定せず、透過的に実行可能となるため、処理性能と電力に関する事前の設計が不要であるとともに、実行時において外的要因の発生状況に応じて、処理を割り当てるコアを柔軟に切り替えることが可能となる。
【0091】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。