(57)【特許請求の範囲】
【請求項１】
同一のアーキテクチャであり、それぞれプログラムを実行する複数のプロセッサと、
前記プロセッサの外部に設けられ、前記複数のプロセッサそれぞれに接続され、共有される外部レジスタと
を有し、
前記複数のプロセッサのそれぞれは、
前記プログラムの実行を制御する制御回路と、
前記外部レジスタを用いて前記プログラムに関する演算を行う演算回路と、
前記複数のプロセッサそれぞれの内部に設けられた少なくとも１つの内部記憶回路と
を有し、
前記外部レジスタは、前記演算回路における演算に関する演算データを記憶し、
前記内部記憶回路は、前記プログラムの実行の状態に関する実行状態データを記憶し、
前記プログラムの実行途中に前記プログラムの実行主体が前記複数のプロセッサの間で移行するときは、移行元のプロセッサの前記内部記憶回路の実行状態データが移行先のプロセッサの前記内部記憶回路へ転送され、移行元のプロセッサが保存した前記外部レジスタの演算データは転送されずに移行先のプロセッサによって使用される
半導体装置。
【請求項２】
前記制御回路は、少なくとも１つの前記内部記憶回路に記憶されている前記実行状態データを用いて、前記プログラムの実行を制御する
請求項１に記載の半導体装置。
【請求項３】
前記プログラムの実行主体が移行した後、
前記移行先のプロセッサの前記制御回路は、前記移行元のプロセッサから転送された前記実行状態データを用いて前記プログラムの実行を制御し、
前記移行先のプロセッサの前記演算回路は、前記外部レジスタに記憶されていた前記演算データを用いて演算を行う
請求項２に記載の半導体装置。
【請求項４】
前記外部レジスタは、複数のレジスタ回路、又は複数の記憶領域を有する１つの回路で構成されている
請求項１に記載の半導体装置。
【請求項５】
前記複数のプロセッサは、
第１のプロセッサと、
前記第１のプロセッサよりも処理性能が低く前記第１のプロセッサよりも電力効率が高い第２のプロセッサと
を含む
請求項１に記載の半導体装置。
【請求項６】
前記外部レジスタは、第１の記憶領域と、前記第１の記憶領域のコピーである少なくとも１つの第２の記憶領域とを有する
請求項１に記載の半導体装置。
【請求項７】
前記外部レジスタは、前記外部レジスタの電力を制御するための情報を記憶するための電力制御レジスタを有し、
前記電力制御レジスタに記憶された情報を用いて、前記外部レジスタの電力を制御する電力制御回路
をさらに有する請求項１に記載の半導体装置。
【請求項８】
前記電力制御回路は、前記外部レジスタの使用状態に応じて、前記外部レジスタの電力を制御する
請求項７に記載の半導体装置。
【請求項９】
前記複数のプロセッサそれぞれとバスを介して接続され、前記プログラムを少なくとも記憶するメインメモリ
をさらに有する請求項１に記載の半導体装置。
【請求項１０】
前記外部レジスタは、前記複数のプロセッサのそれぞれと、互いに異なるバスを介して接続されている
請求項１に記載の半導体装置。
【請求項１１】
同一のアーキテクチャである複数のプロセッサのうちの第１のプロセッサがプログラムを実行しているときに、前記第１のプロセッサに設けられた第１の演算回路は、前記複数のプロセッサの外部に設けられ前記複数のプロセッサそれぞれに接続され共有される外部レジスタであって、前記第１の演算回路における演算に関する演算データを記憶する外部レジスタを用いて前記プログラムに関する演算を行い、
前記プログラムの実行途中に前記プログラムの実行主体が前記第１のプロセッサから前記複数のプロセッサのうちの第２のプロセッサに移行するときは、前記第１のプロセッサの内部に設けられた第１の内部記憶回路に記憶され前記プログラムの実行の状態に関する実行状態データが前記第２のプロセッサの内部に設けられた第２の内部記憶回路へ転送され、前記第１のプロセッサが保存した前記外部レジスタの演算データは転送されずに前記第２のプロセッサによって使用される
半導体装置の制御方法。
【請求項１２】
前記第１のプロセッサが前記プログラムを実行しているときに、前記第１のプロセッサに設けられた第１の制御回路は、前記第１の内部記憶回路に記憶された前記実行状態データを用いて前記プログラムの実行を制御する
請求項１１に記載の半導体装置の制御方法。
【請求項１３】
前記プログラムの実行主体が前記第１のプロセッサから前記第２のプロセッサに移行した後、
前記第２のプロセッサに設けられた第２の制御回路は、前記第１のプロセッサから転送された前記実行状態データを用いて前記プログラムの実行を制御し、
前記第２のプロセッサに設けられた第２の演算回路は、前記外部レジスタに記憶されていた前記演算データを用いて演算を行う
請求項１２に記載の半導体装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置及びその制御方法に関し、例えば複数のプロセッサを有する半導体装置及びその制御方法に関する。
【背景技術】
【０００２】
１つのマイクロコンピュータ等の半導体装置に、複数のプロセッサが設けられることが多くなっている。この技術に関連し、特許文献１及び特許文献２には、２つの処理回路を有するデータ処理装置が開示されている。特許文献１及び特許文献２においては、一方の処理回路は、他方の処理回路よりも高い性能で動作する。一方、高性能の処理回路は、低性能の処理回路よりもエネルギー効率が低い。また、特許文献１及び特許文献２においては、２つの処理回路のうちの一方のみが作業負荷を処理する。そして、一方の処理回路で作業負荷を実行中に移転刺激が発生した場合に、作業効率又は電力消費効率を向上させるため、作業負荷が、一方の処理回路から他方の処理回路に移転する。また、非特許文献１にも、このような技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２０１３−５２１５５６号公報
【特許文献２】特表２０１３−５２１５５７号公報
【非特許文献】
【０００４】
【非特許文献１】Peter Greenhalgh, ARM、「Big.LITTLE Processing with ARM CortexTM−A15 & Cortex-A7」、September 2011
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述した文献においては、作業負荷（タスク）が一方の処理回路から他方の処理回路に移転する際に、作業負荷を実行中の処理回路内の状態が、作業負荷を実行中の処理回路から、他方の処理回路に移転される。具体的には、作業負荷を実行している処理回路は、自身が備えるローカルの記憶装置に記憶されているデータを全て、他方の処理回路に転送する。
【０００６】
一方、処理回路が多くのリソースを備える場合、処理回路が記憶しているデータ量が多くなる。この場合、作業負荷が一方の処理回路から他方の処理回路に移転する際に、転送されるデータが大量となる。したがって、作業負荷を実行している処理回路のローカルの記憶装置に記憶されているデータを他方の処理回路に転送するのに多くの時間を要する。これにより、作業負荷の実行に影響を及ぼすおそれがある。また、大量のデータを転送するため、電力消費量が大きくなるおそれがある。つまり、上述した文献においては、作業負荷が一方の処理回路から他方の処理回路に移転する際に、その移転が効率的に行われないおそれがあった。
【０００７】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００８】
一実施の形態によれば、半導体装置は、それぞれプログラムを実行する複数のプロセッサと、前記プロセッサの外部に設けられ、前記複数のプロセッサそれぞれに接続された外部レジスタとを有し、前記複数のプロセッサのそれぞれは、前記プログラムの実行を制御する制御回路と、前記外部レジスタを用いて前記プログラムに関する演算を行う演算回路と、前記複数のプロセッサそれぞれの内部に設けられた少なくとも１つの内部記憶回路とを有し、前記外部レジスタは、前記演算回路における演算に関する演算データを記憶し、前記内部記憶回路は、前記プログラムの実行の状態に関する実行状態データであって、前記プログラムの実行途中に前記プログラムの実行主体が前記複数のプロセッサの間で移行するときに移行元の前記プロセッサから移行先の前記プロセッサへと転送される実行状態データを記憶する。
【０００９】
なお、上記実施の形態の装置を方法やシステムに置き換えて表現したもの、該装置または該装置の一部の処理をコンピュータに実行せしめるプログラム、該装置を備えた撮像装置なども、本実施の形態の態様としては有効である。
【発明の効果】
【００１０】
前記一実施の形態によれば、複数のプロセッサ間におけるプログラムの実行主体の移行を、効率的に行うことができる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態にかかる半導体装置の概要を示す図である。
【図２】実施の形態１にかかる半導体装置の構成を示す図である。
【図３】実施の形態１にかかる移行処理の手順を示すシーケンス図である。
【図４】実施の形態１にかかる演算処理の具体例を示す図である。
【図５】実施の形態１にかかる演算処理の具体例を示す図である。
【図６】図４及び図５に例示した演算処理におけるデータの移動の例を示す図である。
【図７】図４及び図５に例示した演算処理におけるデータの移動の例を示す図である。
【図８】図４及び図５に例示した演算処理におけるデータの移動の例を示す図である。
【図９】図４及び図５に例示した演算処理におけるデータの移動の例を示す図である。
【図１０】実施の形態２にかかる半導体装置の構成を示す図である。
【図１１】実施の形態３にかかる半導体装置の構成を示す図である。
【図１２】変形例にかかる半導体装置を示す図である。
【発明を実施するための形態】
【００１２】
以下、実施形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１３】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１４】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００１５】
また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
【００１６】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１７】
（実施の形態の概要）
本実施の形態の説明に先立って、本実施の形態の概要について説明する。
図１は、本実施の形態にかかる半導体装置１の概要を示す図である。半導体装置１は、複数のプロセッサである第１プロセッサ１０及び第２プロセッサ２０と、外部レジスタ４とを有する。第１プロセッサ１０と第２プロセッサ２０とは、バス２を介して接続されている。外部レジスタ４は、第１プロセッサ１０及び第２プロセッサ２０の外部に設けられ、第１プロセッサ１０及び第２プロセッサ２０のそれぞれに接続されている。つまり、外部レジスタ４は、第１プロセッサ１０及び第２プロセッサ２０に共有されている。
【００１８】
第１プロセッサ１０及び第２プロセッサ２０は、それぞれ、プログラムを実行する。第１プロセッサ１０は、制御回路１２と、演算回路１４と、第１プロセッサ１０の内部に設けられた内部記憶回路１６を有する。同様に、第２プロセッサ２０は、制御回路２２と、演算回路２４と、第２プロセッサ２０の内部に設けられた内部記憶回路２６を有する。制御回路１２及び制御回路２２は、プログラムの実行を制御する。演算回路１４及び演算回路２４は、外部レジスタ４を用いてプログラムに関する演算を行う。なお、内部記憶回路１６は、制御回路１２の内部に設けられていてもよい。同様に、内部記憶回路２６は、制御回路２２の内部に設けられていてもよい。
【００１９】
外部レジスタ４は、演算回路１４，２４における演算に関する演算データを記憶する。一方、内部記憶回路１６，２６は、プログラムの実行の状態に関する実行状態データを記憶する。ここで、実行状態データは、プログラムの実行途中にプログラムの実行主体が第１プロセッサ１０と第２プロセッサ２０との間で移行するときに、移行元のプロセッサから移行先のプロセッサへと転送される。
【００２０】
本実施の形態にかかる半導体装置１は、プロセッサの外部に設けられた外部レジスタ４が演算データを記憶し、演算回路１４，２４は、この外部レジスタ４を用いて演算を行う。したがって、プログラムの実行主体が第１プロセッサ１０と第２プロセッサ２０との間で移行するときに、外部レジスタ４に記憶された演算データを転送する必要はない。したがって、プログラムの実行主体が第１プロセッサ１０と第２プロセッサ２０との間で移行するときに転送されるデータ量が削減される。これにより、本実施の形態においては、第１プロセッサ１０と第２プロセッサ２０との間におけるプログラムの実行主体の移行を、効率的に行うことができる。
【００２１】
（実施の形態１）
図２は、実施の形態１にかかる半導体装置５０の構成を示す図である。半導体装置５０は、メインメモリ７０、割込コントローラ８０、高性能プロセッサ１００、低性能プロセッサ２００及び外部レジスタ３００を有する。
【００２２】
高性能プロセッサ１００の処理性能（例えば処理速度等）は、低性能プロセッサ２００の処理性能よりも高い。言い換えると、低性能プロセッサ２００の処理性能は、高性能プロセッサ１００の処理性能よりも低い。ここで、「高性能」とは、例えば処理速度が速いことであって、さらに具体的には、例えば、同時に動作するリソースが多いこと、又はクロック周波数が高いことをいう。
【００２３】
また、好ましくは、低性能プロセッサ２００の消費電力は、高性能プロセッサ１００の消費電力よりも低い。言い換えると、低性能プロセッサ２００の電力効率は、高性能プロセッサ１００の電力効率よりも高い。また、好ましくは、高性能プロセッサ１００がプログラムを実行している間、低性能プロセッサ２００は、動作を停止している。逆に、低性能プロセッサ２００がプログラムを実行している間、高性能プロセッサ１００は、動作を停止している。つまり、ある時間（後述する移行処理の間を除く）において、高性能プロセッサ１００及び低性能プロセッサ２００のうち、どちらか一方が、プログラムを実行することとなる。
【００２４】
ここで、高性能プロセッサ１００のアーキテクチャは、低性能プロセッサ２００のアーキテクチャと同じである。したがって、高性能プロセッサ１００及び低性能プロセッサ２００は、同じプログラム（命令セット）を実行することができる。そして、本実施の形態においては、高性能プロセッサ１００がプログラムを実行している間に高性能プロセッサ１００の処理負荷状態が低下した場合には、より電力効率の高い低性能プロセッサ２００に、プログラムの実行主体を移行することが行われる。逆に、低性能プロセッサ２００がプログラムを実行している間に低性能プロセッサ２００の処理負荷状態が上昇した場合には、より高性能な高性能プロセッサ１００に、プログラムの実行主体を移行することが行われる。
【００２５】
このように、プログラムの実行主体を移行元のプロセッサから移行先のプロセッサに移行することを、「マイグレーション（migration）」という。ここで、「実行主体」とは、プログラムを実行しているプロセッサのことである。そして、「プログラムの実行主体が移行する」とは、プログラムを実行しているプロセッサが、あるプロセッサから別のプロセッサに切り替わることである。例えば、「プログラムの実行主体が高性能プロセッサ１００（第１のプロセッサ）から低性能プロセッサ２００（第２のプロセッサ）に移行する」とは、高性能プロセッサ１００（第１のプロセッサ）がプログラムを実行している途中で低性能プロセッサ２００（第２のプロセッサ）がプログラムを実行するようになることである。また、例えば、「プログラムの実行主体が低性能プロセッサ２００（第１のプロセッサ）から高性能プロセッサ１００（第２のプロセッサ）に移行する」とは、低性能プロセッサ２００（第１のプロセッサ）がプログラムを実行している途中で高性能プロセッサ１００（第２のプロセッサ）がプログラムを実行するようになることである。また、移行のきっかけとなる事項を「移行刺激」という。本実施の形態においては、高性能プロセッサ１００から低性能プロセッサ２００への移行の場合の移行刺激は、「処理負荷状態の低下（又はこれに伴う電力値の低下）」である。一方、低性能プロセッサ２００から高性能プロセッサ１００への移行の場合の移行刺激は、「処理負荷状態の上昇（又はこれに伴う電力値の上昇）」である。しかしながら、移行刺激は、「処理負荷状態」に限られない。
【００２６】
高性能プロセッサ１００は、制御回路１２０、電力算出部１３２、電力制御部１３４、演算回路１４０、レジスタアクセス制御回路１５０、内部レジスタ１６０及び内部メモリ１７０を有する。また、制御回路１２０は、汎用レジスタ１２２を有する。ここで、内部レジスタ１６０、内部メモリ１７０及び汎用レジスタ１２２は、高性能プロセッサ１００の内部に設けられている内部記憶回路である。
【００２７】
同様に、低性能プロセッサ２００は、制御回路２２０、電力算出部２３２、電力制御部２３４、演算回路２４０、レジスタアクセス制御回路２５０、内部レジスタ２６０及び内部メモリ２７０を有する。また、制御回路２２０は、汎用レジスタ２２２を有する。ここで、内部レジスタ２６０、内部メモリ２７０及び汎用レジスタ２２２は、低性能プロセッサ２００の内部に設けられている内部記憶回路である。
【００２８】
ここで、制御回路２２０、電力算出部２３２、電力制御部２３４、演算回路２４０、レジスタアクセス制御回路２５０、内部レジスタ２６０及び内部メモリ２７０は、それぞれ、制御回路１２０、電力算出部１３２、電力制御部１３４、演算回路１４０、レジスタアクセス制御回路１５０、内部レジスタ１６０及び内部メモリ１７０に対応する。また、汎用レジスタ２２２は、汎用レジスタ１２２に対応する。したがって、以下、低性能プロセッサ２００の内部構成の説明のうち、高性能プロセッサ１００と共通の部分については、適宜、省略される。
【００２９】
メインメモリ７０は、高性能プロセッサ１００及び低性能プロセッサ２００と、バス６０を介して接続されている。メインメモリ７０は、高性能プロセッサ１００又は低性能プロセッサ２００で実行されるプログラムを格納している。さらに、メインメモリ７０は、高性能プロセッサ１００又は低性能プロセッサ２００における演算結果の集合を記憶し得る。
【００３０】
割込コントローラ８０は、制御回路１２０又は制御回路２２０に対する割込みに関する制御を行う。詳しくは後述する。また、割込コントローラ８０は、複数の割込みがあった場合に、どの割込みを優先するかを制御してもよい。
【００３１】
外部レジスタ３００は、高性能プロセッサ１００及び低性能プロセッサ２００の外部に設けられている。外部レジスタ３００は、高性能プロセッサ１００とバス６２を介して接続されている。また、外部レジスタ３００は、低性能プロセッサ２００とバス６４を介して接続されている。外部レジスタ３００は、演算回路１４０及び演算回路２４０における演算処理で用いられる。外部レジスタ３００は、好ましくは、複数のレジスタ回路からなるレジスタ群である。また、外部レジスタ３００は、複数の記憶領域を有する１つの記憶回路であってもよい。
【００３２】
制御回路１２０は、高性能プロセッサ１００の内部で演算回路１４０と接続されている。レジスタアクセス制御回路１５０は、高性能プロセッサ１００の内部で制御回路１２０及び演算回路１４０と接続されている。同様に、制御回路２２０は、低性能プロセッサ２００の内部で演算回路２４０と接続されている。レジスタアクセス制御回路２５０は、低性能プロセッサ２００の内部で制御回路２２０及び演算回路２４０と接続されている。さらに、レジスタアクセス制御回路１５０及びレジスタアクセス制御回路２５０は、それぞれ外部レジスタ３００と接続されている。また、制御回路１２０及び制御回路２２０は、バス６０及び割込コントローラ８０を介して互いに接続されている。
【００３３】
内部レジスタ１６０は、高性能プロセッサ１００の内部に設けられたレジスタである。また、内部メモリ１７０は、高性能プロセッサ１００の内部に設けられたメモリである。したがって、内部レジスタ１６０及び内部メモリ１７０は、高性能プロセッサ１００の内部に設けられた内部記憶回路である。
【００３４】
内部レジスタ１６０は、高性能プロセッサ１００の各構成リソースの内部に設けられていてもよいし、各構成リソースの外部に設けられていてもよい。例えば、内部レジスタ１６０は、制御回路１２０又はレジスタアクセス制御回路１５０の内部に設けられていてもよい。ここで、内部レジスタ１６０は、例えば、プログラムカウンタ等の制御レジスタであってもよいが、これに限られない。また、好ましくは、内部レジスタ１６０は、演算回路１４０の内部には設けられていない。本実施の形態においては、演算回路１４０の内部にあるべきレジスタの役割は、外部レジスタ３００が担う。
なお、内部レジスタ２６０及び内部メモリ２７０についても、それぞれ内部レジスタ１６０及び内部メモリ１７０と同様である。
【００３５】
制御回路１２０は、例えばＣＰＵ等である。制御回路１２０は、メインメモリ７０に格納されたプログラムの実行を制御する。具体的には、制御回路１２０は、メインメモリ７０からプログラムを読み取って、プログラムの命令セットに応じた制御を行う。また、制御回路１２０は、プログラムの実行の際に、高性能プロセッサ１００の内部の構成リソースの動作を制御する。ここで、制御回路１２０は、プログラムの実行を制御する際に、例えば汎用レジスタ１２２に、プログラムの実行状態に関する実行状態データを記憶する。つまり、制御回路１２０は、汎用レジスタ１２２等の内部記憶回路に記憶された実行状態データを用いてプログラムの実行を制御している。
【００３６】
ここで、「実行状態」とは、例えば、プログラムの進行状態（例えばプログラムがどこまで進んだか、プログラムのどこを実行しているか等）を示すものであるが、これに限らない。また、実行状態データは、内部レジスタ１６０及び内部メモリ１７０にも記憶され得る。つまり、「実行状態データ」とは、汎用レジスタ１２２、内部レジスタ１６０及び内部メモリ１７０等の内部記憶回路に記憶され得る全てのデータである。さらに言い換えると、「実行状態データ」は、外部レジスタ３００に記憶される演算データ（後述する）以外のデータである。
【００３７】
また、制御回路１２０は、ＤＶＦＳ（Ｄｙｎａｍｉｃ  Ｖｏｌｔａｇｅ  ａｎｄ  Ｆｒｅｑｕｅｎｃｙ  Ｓｃａｌｉｎｇ：動的電圧・周波数制御）の機能を有している。ここで、このＤＶＦＳは、プロセッサの負荷状態に応じて、電圧及び周波数を動的に変化させる機能である。制御回路１２０は、プログラムの実行における負荷状態を判断し、負荷状態に応じた電力状態を判定する。ここで、「電力状態」とは、プロセッサ（制御回路１２０であれば高性能プロセッサ１００）の内部の全てのリソースの電力の状態を示すものである。電力状態は、例えば、「周波数を下げる」、「クロックの供給を停止」、及び「演算回路の電力を遮断」等がある。制御回路１２０は、制御している周波数、電圧、及び電力状態を示す情報を出力する。
なお、制御回路２２０についても、制御回路１２０と同様である。
【００３８】
電力算出部１３２は、制御回路１２０から出力された周波数、電圧、及び電力状態を示す情報を用いて、高性能プロセッサ１００の電力値を算出（推定）する。ここで、この電力値は、ＤＶＦＳの機能により、負荷状態が高くなるにつれて高くなるので、高性能プロセッサ１００の負荷状態を示しているといえる。
【００３９】
電力算出部１３２は、算出された電力値が、規定時間の間、閾値以下である場合、制御回路１２０に対して割込みを行う。ここで、「規定時間」及び「閾値」は、それぞれ予め定められた値である。このとき、制御回路１２０は、プログラムの実行主体を、低性能プロセッサ２００に移行するための処理を行う。つまり、制御回路１２０は、高性能プロセッサ１００の負荷状態が予め定められた閾値（上記電力値の閾値に対応する値）以下に低下した場合に、低性能プロセッサ２００への移行処理を行う。この移行処理の詳細については後述する。
【００４０】
電力算出部２３２は、制御回路２２０から出力された周波数、電圧、及び電力状態を示す情報を用いて、低性能プロセッサ２００の電力値を算出（推定）する。ここで、この電力値は、ＤＶＦＳの機能により、負荷状態が高くなるにつれて高くなるので、高性能プロセッサ１００の場合と同様に、低性能プロセッサ２００の負荷状態を示しているといえる。
【００４１】
電力算出部２３２は、算出された電力値が、規定時間の間、閾値以上である場合、制御回路２２０に対して割込みを行う。ここで、「規定時間」及び「閾値」は、それぞれ予め定められた値であるが、電力算出部１３２（高性能プロセッサ１００）の場合と同じとは限らない。このとき、制御回路２２０は、プログラムの実行主体を、高性能プロセッサ１００に移行するための処理を行う。つまり、制御回路２２０は、低性能プロセッサ２００の負荷状態が予め定められた閾値（上記電力値の閾値に対応する値）以上に上昇した場合に、高性能プロセッサ１００への移行処理を行う。この移行処理については、高性能プロセッサ１００から低性能プロセッサ２００への移行処理の逆の処理であるので、詳細については省略する。
【００４２】
電力制御部１３４は、制御回路１２０の制御に応じて、高性能プロセッサ１００の内部の電力を制御する。具体的には、電力制御部１３４は、制御回路１２０から出力された周波数、電圧、及び電力状態を示す情報に応じて、高性能プロセッサ１００の内部の電力を制御する。
なお、電力制御部２３４についても、電力制御部１３４と同様である。
【００４３】
演算回路１４０は、制御回路１２０の制御によって、制御回路１２０において制御されているプログラムに関する演算を実行するための回路である。ここで、演算回路１４０は、制御回路１２０よりも高速な演算処理が可能である。演算回路１４０は、例えばＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）方式で、並列処理（ベクトル演算）を行うことが可能である。演算回路１４０は、例えば、画像処理又は物理演算のような、膨大なデータに対する演算を行い得る。
【００４４】
ここで、本実施の形態においては、演算回路１４０は、外部レジスタ３００を用いて演算を行う。具体的には、演算回路１４０は、演算を行う際に、外部レジスタ３００にアクセスする。そして、演算回路１４０は、外部レジスタ３００に記憶された、演算に関するデータ（演算データ）を用いて演算を行う。そして、演算回路１４０は、演算結果を外部レジスタ３００に記憶する。演算回路１４０における演算の具体例については後述する。
なお、演算回路２４０についても、演算回路１４０と同様である。
【００４５】
レジスタアクセス制御回路１５０は、演算回路１４０が外部レジスタ３００にアクセスするために必要な処理を行う。例えば、レジスタアクセス制御回路１５０は、制御回路１２０によって、外部レジスタ３００のアドレスを指定される。そして、レジスタアクセス制御回路１５０は、外部レジスタ３００の指定されたアドレスに演算回路１４０がアクセスするための制御を行う。
なお、レジスタアクセス制御回路２５０についても、レジスタアクセス制御回路１５０と同様である。
【００４６】
図３は、実施の形態１にかかる移行処理の手順を示すシーケンス図である。図３には、実施の形態１にかかる半導体装置５０の制御方法が示されている。図３においては、まず、高性能プロセッサ１００においてプログラムが実行されており、その後、プログラムの実行主体が高性能プロセッサ１００から低性能プロセッサ２００に移行する例が示されている。
【００４７】
まず、高性能プロセッサ１００が、プログラムを実行している（Ｓ１００）。このとき、高性能プロセッサ１００において、制御回路１２０は、汎用レジスタ１２２（又は、内部レジスタ１６０及び内部メモリ１７０）を用いてプログラムの実行を制御している。つまり、制御回路１２０は、汎用レジスタ１２２等の内部記憶回路に実行状態データを記憶し、汎用レジスタ１２２等の内部記憶回路に記憶された実行状態データを用いてプログラムの実行を制御している。一方、演算回路１４０は、外部レジスタ３００を用いて、上記プログラムに関する演算を実行している。つまり、演算回路１４０は、外部レジスタ３００に記憶された演算データを用いて演算を行い、演算結果を外部レジスタ３００に記憶している。なお、制御回路１２０は、適宜、外部レジスタ３００に記憶された演算結果の集合を、メインメモリ７０に転送するように制御してもよい。
【００４８】
そして、高性能プロセッサ１００における処理負荷が低下する（Ｓ１０２）。具体的には、高性能プロセッサ１００におけるプログラムの処理負荷が低下し、ＤＶＦＳの機能によって、高性能プロセッサ１００における電圧及び周波数が低下する。したがって、このとき、電力算出部１３２によって算出される電力値が、閾値以下に低下する。つまり、このとき、高性能プロセッサ１００において移行刺激があったことになる。
【００４９】
そして、高性能プロセッサ１００は、プログラムの実行主体の移行処理を開始する（Ｓ１０４）。具体的には、上述したように、電力算出部１３２によって算出された電力値が閾値以下である状態が規定時間継続した場合に、電力算出部１３２は、制御回路１２０に対して割込みを行う。
【００５０】
制御回路１２０は、電力算出部１３２からの割込みに応じて、低性能プロセッサ２００に対して起動割込みを行う（Ｓ１０６）。具体的には、制御回路１２０は、電力算出部１３２からの割込みを受けると、割込コントローラ８０を介して、制御回路２２０に起動割込みを行う。さらに具体的には、制御回路１２０は、割込コントローラ８０に起動割込みの要求を出力する。これにより、割込コントローラ８０は、制御回路２２０に対して、起動割込みを行う。
【００５１】
低性能プロセッサ２００の制御回路２２０は、起動割込みを受けると、低性能プロセッサ２００が起動をするための起動処理（Ｐｏｗｅｒ−ｏｎ  ＆  Ｒｅｓｅｔ）を行う（Ｓ１０８）。例えば、起動処理は、低性能プロセッサ２００内のキャッシュを無効にしたり、スヌープを有効にしたりする処理である。一方、高性能プロセッサ１００は、後述する移行準備割込みを低性能プロセッサ２００から受けるまで、通常の処理を継続する（Ｓ１１０）。
【００５２】
制御回路２２０は、起動後、制御回路１２０からの実行状態を受け付け可能になったときに、高性能プロセッサ１００に対して、移行準備割込み（Ｒｅａｄｙ  ｆｏｒ  Ｔａｓｋ  Ｍｉｇｒａｔｉｏｎ）を行う（Ｓ１１２）。具体的には、制御回路２２０は、Ｓ１０６の処理と同様に、割込コントローラ８０を介して、制御回路１２０に対して移行準備割込みを行う。
【００５３】
このとき、高性能プロセッサ１００は、実行状態を低性能プロセッサ２００に移行する（Ｓ１１４）。具体的には、制御回路１２０は、移行準備割込みを受けると、バス６０を介して、高性能プロセッサ１００の内部記憶回路に記憶されていた実行状態データを、低性能プロセッサ２００に転送する。さらに具体的には、制御回路１２０は、汎用レジスタ１２２に記憶されていた実行状態データを汎用レジスタ２２２に転送するように制御する。また、制御回路１２０は、内部レジスタ１６０及び内部メモリ１７０に記憶されていた実行状態データを、それぞれ、内部レジスタ２６０及び内部メモリ２７０に転送するように制御する。これによって、高性能プロセッサ１００における実行状態が、低性能プロセッサ２００に移行する。
【００５４】
このとき、本実施の形態においては、演算回路１４０における演算に関する演算データは、高性能プロセッサ１００及び低性能プロセッサ２００に共有されている外部レジスタ３００に記憶されている。ここで、外部レジスタ３００は、演算回路２４０からもアクセス可能である。言い換えると、演算回路２４０は、外部レジスタ３００を使用して演算を行い得る。したがって、外部レジスタ３００に記憶されている演算データは、転送されない。
【００５５】
実行状態が移行されると、低性能プロセッサ２００は、移行されたプログラムの実行を開始する（Ｓ１１６）。具体的には、制御回路２２０は、移行された実行状態データによって、実行状態を復元する。これによって、移行後、低性能プロセッサ２００において、プログラムの実行を開始することが可能となる。このとき、制御回路２２０は、移行元のプロセッサである高性能プロセッサ１００から転送された実行状態データを用いてプログラムの実行を制御することが可能となる。一方、移行後、低性能プロセッサ２００の演算回路２４０は、移行前から外部レジスタ３００に記憶されていた演算データを用いて、移行前に実行されていた演算を継続することが可能となる。
【００５６】
低性能プロセッサ２００においてプログラムの実行が開始されると、低性能プロセッサ２００は、高性能プロセッサ１００に対して、停止割込みを行う（Ｓ１１８）。具体的には、このとき、制御回路２２０は、Ｓ１１２の処理と同様に、割込コントローラ８０を介して、制御回路１２０に対して停止割込みを行う。
【００５７】
停止割込みを受けると、高性能プロセッサ１００は、停止処理を行う（Ｓ１２０）。具体的には、制御回路１２０は、停止割込みを受けると、電力制御部１３４に対して、電力遮断状態にするように命令する。これによって、電力制御部１３４は、高性能プロセッサ１００の電力を遮断するように制御する。なお、このとき、高性能プロセッサ１００は、高性能プロセッサ１００の内部のキャッシュを消去し、スヌープを無効にする処理を行ってもよい。
【００５８】
なお、プログラムの実行主体が低性能プロセッサ２００から高性能プロセッサ１００に移行する手順については、Ｓ１０２の「処理負荷の低下」を「処理負荷の上昇」とし、高性能プロセッサ１００の処理と低性能プロセッサ２００の処理とを入れ替えたものと実質的に同様である。したがって、低性能プロセッサ２００から高性能プロセッサ１００への移行処理については、説明を省略する。
【００５９】
（演算処理の具体例）
図４及び図５は、実施の形態１にかかる演算処理の具体例を示す図である。図４は、フィルタプログラムの例を示す図である。また、図５は、フィルタプログラムの計算を説明するための図である。なお、以下、高性能プロセッサ１００において演算処理が実行される例について説明するが、低性能プロセッサ２００においても同様である。
【００６０】
図４及び図５に例示した演算処理では、配列ａ［０］〜ａ［２１］に演算対象の値が入力されて、演算結果である配列ｘ［１］〜ｘ［２０］の値が計算される。例えば、画像処理の場合では、配列ａ［０］〜ａ［２１］には画像処理前の画像データを示す値が入力されて、画像処理後の値である配列ｘ［１］〜ｘ［２０］の値が計算される。
【００６１】
図４及び図５に例示した演算処理では、ｉ＝１からｉ＝２０について、以下の式１がそれぞれ計算される。
（式１）
ｘ［ｉ］＝ｃ０＊ａ［ｉ−１］＋ｃ１＊ａ［ｉ］＋ｃ２＊ａ［ｉ＋１］
なお、ｃ０、ｃ１及びｃ２は定数である。これによって、配列ｘ［１］〜ｘ［２０］の値が計算される。
【００６２】
例えば、ｉ＝０について、演算回路１４０は、配列ａ［０］，ａ［１］，ａ［２］に、それぞれｃ０，ｃ１，ｃ２を乗算して、乗算結果の和を計算する。これによって、演算回路１４０は、ｘ［１］を算出する。演算回路１４０は、このような計算をｉ＝２０まで行い、ｘ［２０］まで算出する。ここで、演算回路１４０は、ＳＩＭＤ方式でベクトル演算を行うことが可能である。したがって、演算回路１４０は、例えばｉ＝１〜１０について一度に演算を行い、ｉ＝１１〜２０について一度に演算を行うことが可能である。
【００６３】
図６〜図９は、図４及び図５に例示した演算処理におけるデータの移動の例を示す図である。まず、図６に示すように、メインメモリ７０には、配列ａ［０］〜ａ［２１］、配列ｘ［１］〜ｘ［２０］、定数ｃ０，ｃ１，ｃ２が記憶されている。さらに、メインメモリ７０には、インデックスの初期値ｉ＝１、及び配列ｘ［ｉ］の要素数ｉ＝２０が記憶されている。なお、配列ａ［０］〜ａ［２１］には演算対象のデータ（例えば画像処理の対象となる画像データ）の値が入力されている。一方、配列ｘ［１］〜ｘ［２０］は演算結果が入力される配列であるので、初期状態において、配列ｘ［１］〜ｘ［２０］には値が入力されていない（又は値０が入力されている）。なお、図６〜図９において、例えば配列ｘ［ｉ］について値が入力されていない場合は、「（ｘ［ｉ］）」と示されている。
【００６４】
図４に示されたプログラムを実行するとき、まず、制御回路１２０は、図６に示すように、ｉ＝１〜１０についての演算を行うように制御する。このとき、図６の矢印（Ａ）に示すように、制御回路１２０は、メインメモリ７０に記憶されている、演算対象のデータの値が入力された配列ａ［０］〜ａ［１１］、配列ｘ［１］〜ｘ［１０］、定数ｃ０，ｃ１，ｃ２を、外部レジスタ３００に記憶させる。また、矢印（Ｂ）に示すように、制御回路１２０は、インデックスの初期値ｉ＝１、及び配列ｘ［ｉ］の要素数ｉ＝２０を、汎用レジスタ１２２に記憶させる。これにより、汎用レジスタ１２２の領域１２２ａには初期値「１」が入力され、領域１２２ｂには要素数「２０」が入力される。そして、演算回路１４０は、外部レジスタ３００に記憶されたデータを用いて、ｉ＝１〜１０について、式１の計算を行う。これによって、演算回路１４０は、配列ｘ［１］〜ｘ［１０］の値を算出する。
【００６５】
図７に示すように、演算回路１４０によって算出された配列ｘ［１］〜ｘ［１０］の値は、外部レジスタ３００の配列ｘ［１］〜ｘ［１０］に対応する領域に記憶される。このとき、制御回路１２０は、汎用レジスタ１２２の領域１２２ａに、ｉ＝１０まで演算が終了したことを示す「１０」を入力する。また、矢印（Ｃ）に示すように、制御回路１２０は、配列ｘ［１］〜ｘ［１０］の値をメインメモリ７０に記憶させる。なお、外部レジスタ３００には、ｉ＝１１以降の演算で用いられるため、配列ａ［１０］，ａ［１１］の値が記憶されている。一方、配列ａ［０］〜ａ［９］及び配列ｘ［１］〜ｘ［１０］については、以降の配列のために消去されても（書き換えられても）よい。
【００６６】
次に、制御回路１２０は、図８に示すように、ｉ＝１１〜２０についての演算を行うように制御する。このとき、制御回路１２０は、汎用レジスタ１２２の領域１２２ａに、ｉ＝１１から演算を行うことを示す「１１」を入力する。また、図８の矢印（Ｄ）に示すように、制御回路１２０は、メインメモリ７０に記憶されている、演算対象のデータの値が入力された配列ａ［１２］〜ａ［２１］、配列ｘ［１１］〜ｘ［２０］を、外部レジスタ３００に記憶させる。そして、演算回路１４０は、外部レジスタ３００に記憶されたデータを用いて、ｉ＝１１〜２０について、式１の計算を行う。これによって、演算回路１４０は、配列ｘ［１１］〜ｘ［２０］の値を算出する。
【００６７】
図９に示すように、演算回路１４０によって算出された配列ｘ［１１］〜ｘ［２０］の値は、外部レジスタ３００の配列ｘ［１１］〜ｘ［２０］に対応する領域に記憶される。このとき、制御回路１２０は、汎用レジスタ１２２の領域１２２ａに、ｉ＝２０まで演算が終了したことを示す「２０」を入力する。また、矢印（Ｅ）に示すように、制御回路１２０は、配列ｘ［１１］〜ｘ［２０］の値をメインメモリ７０に記憶させる。このとき、制御回路１２０は、領域１２２ａの値と領域１２２ｂの値とが等しくなったので、この演算処理を終了するように制御する。この場合、制御回路１２０は、外部レジスタ３００に記憶されている配列ａ［１０］〜ａ［２１］及び配列ｘ［１１］〜ｘ［２０］を消去してもよい。
【００６８】
なお、図７に示した状態のときに高性能プロセッサ１００から低性能プロセッサ２００へのプログラムの実行主体が移行する場合、上述したように、汎用レジスタ１２２に記憶されているデータ（領域１２２ａに記憶された値「１０」及び領域１２２ｂに記憶された値「２０」）は、低性能プロセッサ２００に転送される。一方、外部レジスタ３００に記憶されている演算データは、転送されない。そして、低性能プロセッサ２００の演算回路２４０は、外部レジスタ３００に記憶されているデータ（図７に示す）を用いて、ｉ＝１１からの演算を行う。
【００６９】
複数のプロセッサを有する半導体装置において、各プロセッサの演算回路によって使用される演算データを記憶するレジスタが各プロセッサに設けられている場合、一方のプロセッサから他方のプロセッサへの実行主体が移行するときに、実行状態データだけでなく、演算データも、移行元のプロセッサから移行先のプロセッサに転送される必要がある。この場合、特に演算データのデータ量が多いと、転送されるデータ量が多くなってしまう。
【００７０】
一方、本実施の形態にかかる半導体装置５０は、高性能プロセッサ１００及び低性能プロセッサ２００の外部に設けられた外部レジスタ３００が演算データを記憶し、演算回路１４０及び演算回路２４０は、この外部レジスタ３００を用いて演算を行う。したがって、プログラムの実行主体が高性能プロセッサ１００と低性能プロセッサ２００との間で移行するときに、外部レジスタ３００に記憶された演算データを転送する必要はない。したがって、プログラムの実行主体が高性能プロセッサ１００と低性能プロセッサ２００との間で移行するときに転送されるデータ量が削減される。したがって、実行主体の移行に要する時間が削減される。さらに転送されるデータ量が削減されるので、移行の際の半導体装置５０における電力消費量を抑制することが可能となる。つまり、本実施の形態においては、高性能プロセッサ１００と低性能プロセッサ２００との間におけるプログラムの実行主体の移行を、効率的に行うことができる。
【００７１】
また、本実施の形態においては、制御回路１２０は、高性能プロセッサ１００の内部に設けられた内部記憶回路（汎用レジスタ１２２等）に記憶されている実行状態データを用いて、プログラムの実行を制御する。言い換えると、実行状態データは、外部に設けられた記憶回路に記憶されない。このような構成によって、制御回路１２０は、プログラムの実行の際に、高性能プロセッサ１００の内部の記憶回路にアクセスするのみでよい。したがって、実行状態データが外部の記憶回路に記憶される場合と比較して、制御回路１２０は、プログラムの実行の際の処理速度を速くすることが可能となる。なお、このことは、制御回路２２０についても同様である。
【００７２】
また、本実施の形態においては、プログラムの実行主体が例えば高性能プロセッサ１００から低性能プロセッサ２００へと移行した後、制御回路２２０は、高性能プロセッサ１００から転送された実行状態データを用いてプログラムの実行を制御する。一方、移行後、演算回路２４０は、移行前から外部レジスタ３００に記憶されていた演算データを用いて、移行前に実行されていた演算を行う。ここで、一般的に、図６〜図９に例示したように、実行状態データのデータ量は、演算データのデータ量と比較して少ない。したがって、プログラムの実行主体を移行する際に実行状態データを転送したとしても、それほど時間を要しない。一方、特に演算回路がＳＩＭＤ方式によるベクトル演算を行う場合等に、演算データのデータ量は膨大となる。本実施の形態においては、上述した構成によって、このような膨大な演算データを移行の際に転送しなくても、移行後のプロセッサ（低性能プロセッサ２００）の演算回路２４０において、引き続き演算を継続することが可能となる。
【００７３】
また、本実施の形態においては、外部レジスタ３００は、複数のレジスタ回路からなるレジスタ群、又は、複数の記憶領域を有するレジスタ群を有する１つの記憶回路である。これによって、演算回路における演算がベクトル演算である場合に、複数の配列の値を一度に記憶することが可能となる。そして、外部レジスタ３００に記憶された演算データは実行主体の移行の際に転送されないので、実行主体の移行の際に、これらレジスタ群に記憶された膨大な演算データ（配列の値）を転送することが不要となる。
【００７４】
また、本実施の形態にかかる半導体装置５０は、高性能のプロセッサである高性能プロセッサ１００と、低性能のプロセッサである低性能プロセッサ２００とを有している。そして、低性能プロセッサ２００の電力効率は、高性能プロセッサ１００の電力効率よりも高い。したがって、本実施の形態にかかる半導体装置５０は、高性能プロセッサ１００と低性能プロセッサ２００とを組み合わせて、低負荷のときの電力を抑えつつ高負荷のときに高いパフォーマンスを発揮させるようなシステムに対しても適用可能である。そして、本実施の形態においては、このようなシステムにおいても、プログラムの実行主体の移行を効率的に行うことが可能となる。
【００７５】
また、本実施の形態においては、メインメモリ７０とは異なる外部レジスタ３００が設けられている。したがって、本実施の形態においては、この、メインメモリ７０とは異なる外部レジスタ３００を、高性能プロセッサ１００及び低性能プロセッサ２００で共有するようにすることが可能となる。さらに、メインメモリ７０は、共通バスを介して高性能プロセッサ１００及び低性能プロセッサ２００と接続されているが、外部レジスタ３００は、高性能プロセッサ１００及び低性能プロセッサ２００のそれぞれと、互いに異なるバス６２，６４を介して接続されている。このため、メインメモリ７０に演算データを記憶する場合と比較して、外部レジスタ３００へのアクセス速度を向上させることが可能となる。
【００７６】
（実施の形態２）
次に、実施の形態２について説明する。
図１０は、実施の形態２にかかる半導体装置５０の構成を示す図である。実施の形態２は、外部レジスタ３００が、第１の記憶領域である外部レジスタ記憶領域３０２と、第１の記憶領域のコピーである第２の記憶領域である外部レジスタ記憶領域コピー３０４とを有している点で、実施の形態１と異なる。その他の構成については、実施の形態１と実質的に同様であるので、説明を省略する。なお、外部レジスタ記憶領域３０２及び外部レジスタ記憶領域コピー３０４は、物理的に１つの記憶回路の内部における別個の記憶領域として実現してもよいし、それぞれ互いに別個の記憶回路として実現してもよい。
【００７７】
外部レジスタ記憶領域コピー３０４の例として、例えば、以下の２つの例が挙げられる。外部レジスタ記憶領域コピー３０４の第１の例は、割込みの際に外部レジスタ記憶領域３０２に記憶されたデータを退避しておくためのレジスタバンクとしての用途である。また、外部レジスタ記憶領域コピー３０４の第２の例は、仮想マシンで用いられるレジスタのコピーとしての用途である。
【００７８】
まず、第１の例（レジスタバンク）について説明する。外部レジスタ記憶領域３０２は、演算回路１４０（演算回路２４０についても同様。以下同じ）における通常の演算処理において、上述した実施の形態１と同様に使用される。つまり、演算回路１４０は、通常、外部レジスタ記憶領域３０２を用いて演算処理を行う。一方、外部レジスタ記憶領域コピー３０４は、演算回路１４０がある演算処理を行っているときに割込みがあった場合に、外部レジスタ記憶領域３０２に記憶されていたデータを退避するために使用される。
【００７９】
具体例を挙げて説明する。例えば、演算回路１４０が、外部レジスタ記憶領域３０２を用いて画像処理を行っていたとする。このとき、カメラに関する処理（カメラ処理）の割込みがあったとする。このとき、制御回路１２０（又は演算回路１４０）は、外部レジスタ記憶領域３０２に記憶されていた画像処理に関する演算データを、外部レジスタ記憶領域コピー３０４にコピー（退避）する。そして、演算回路１４０は、外部レジスタ記憶領域３０２を用いて、カメラ処理を行う。なお、内部記憶回路に記憶されていた実行状態データ（演算データ以外のデータ）については、それぞれの内部記憶回路に対応するレジスタバンクに退避され得る。
【００８０】
そして、カメラ処理が終了すると、制御回路１２０（又は演算回路１４０）は、外部レジスタ記憶領域コピー３０４に退避されていた画像処理に関する演算データを、外部レジスタ記憶領域３０２に戻す。そして、演算回路１４０は、外部レジスタ記憶領域３０２に戻された画像処理に関する演算データを用いて、画像処理を再開する。なお、演算回路１４０は、外部レジスタ記憶領域３０２に演算データを戻す代わりに、外部レジスタ記憶領域コピー３０４に記憶された（退避されていた）演算データをそのまま用いて、画像処理を再開してもよい。
【００８１】
次に、第１の例（仮想マシン）について説明する。この場合、高性能プロセッサ１００及び低性能プロセッサ２００のそれぞれは、複数の仮想マシンを実現しうる。そこで、本実施の形態においては、複数の仮想マシンそれぞれについて、外部レジスタ記憶領域コピー３０４を設けることとする。例えば、仮想マシンが１つであれば、外部レジスタ記憶領域３０２のみでよいが、仮想マシンが２つの場合は、外部レジスタ記憶領域３０２の他に、外部レジスタ記憶領域コピー３０４を１つ設ける。同様に、仮想マシンが３つの場合、外部レジスタ記憶領域３０２の他に、外部レジスタ記憶領域コピー３０４を２つ設けるようにしてもよい。これにより、各仮想マシンは、演算回路１４０が行うべき演算処理を、各外部レジスタ記憶領域３０２及び外部レジスタ記憶領域コピー３０４を用いて行う。
【００８２】
演算回路１４０及び演算回路２４０のためのレジスタをそれぞれ高性能プロセッサ１００及び低性能プロセッサ２００に設けるようにすると、上述したレジスタのコピーが必要となる場合に、高性能プロセッサ１００及び低性能プロセッサ２００それぞれについて、回路面積を増大させる必要がある。この場合、システム全体として回路面積が増大する。一方、実施の形態２においては、高性能プロセッサ１００及び低性能プロセッサ２００とで外部レジスタ３００を共有しているので、レジスタのコピーが必要である場合でも、その共有されている外部レジスタ３００の回路面積を増大させるだけでよい。したがって、システム全体の回路面積の増大を抑制することが可能となる。
【００８３】
（実施の形態３）
次に、実施の形態３について説明する。
図１１は、実施の形態３にかかる半導体装置５０の構成を示す図である。実施の形態３は、外部レジスタ３００について、高性能プロセッサ１００及び低性能プロセッサ２００とは独立して電力制御を行うための構成が設けられている点で、実施の形態１とは異なる。その他の構成については、実施の形態１と実質的に同様であるので、説明を省略する。
【００８４】
外部レジスタ３００は、外部レジスタ記憶領域３０２及び電力制御レジスタ３１０を有する。また、半導体装置５０は、外部レジスタ３００の電力を制御する電力制御回路４００をさらに有する。電力制御レジスタ３１０は、外部レジスタ３００の電力を制御するための情報を記憶する。例えば、電力制御レジスタ３１０は、制御すべき電力状態を示す情報（外部レジスタ電力状態情報）を記憶する。ここで、外部レジスタ電力状態情報とは、制御すべき外部レジスタ３００の電力状態を示すものであり、例えば、「５０％の電力状態に制御せよ」といったことを示す。
【００８５】
高性能プロセッサ１００が動作しているときは、制御回路１２０が、この外部レジスタ電力状態を記憶する。つまり、制御回路１２０は、外部レジスタ３００の電力を制御するための命令を行う。このとき、制御回路１２０は、外部レジスタ３００の使用状態（負荷状態）に応じて、外部レジスタ電力状態情報を、電力制御レジスタ３１０に記憶する。例えば、外部レジスタ３００を全く使用しないときは、制御回路１２０は、「０％の電力状態に制御せよ」といったことを示す外部レジスタ電力状態情報を、電力制御レジスタ３１０に記憶してもよい。
【００８６】
電力制御回路４００は、電力制御レジスタ３１０に記憶された外部レジスタ電力状態情報に応じて、外部レジスタ３００の電力を制御する。例えば、外部レジスタ電力状態情報が「５０％の電力状態に制御せよ」といったことを示す場合、電力制御回路４００は、電力状態が５０％となるように、外部レジスタ３００の電力を制御する。また、例えば、外部レジスタ電力状態情報が「０％の電力状態に制御せよ」といったことを示す場合、外部レジスタ３００の電力を遮断してもよい。
【００８７】
外部レジスタ３００の電力を高性能プロセッサ１００及び低性能プロセッサ２００の電力と別個に制御しない場合、外部レジスタ３００の電力は、高性能プロセッサ１００及び低性能プロセッサ２００のうち動作している方のプロセッサに依存する可能性がある。ここで、各プロセッサ（高性能プロセッサ１００及び低性能プロセッサ２００）は、起動する際、一時的に、各プロセッサが制御する全てのリソース（外部レジスタ３００も含む）の周波数を最大にする可能性がある。この場合、例えば低性能プロセッサ２００を起動したとき、低性能プロセッサ２００に合わせて外部レジスタ３００も高い電力状態となってしまう。したがって、外部レジスタ３００の消費電力量が増大する。このときに外部レジスタ３００の使用状態が少なければ、外部レジスタ３００は無駄な電力を消費することとなってしまう。
【００８８】
一方、実施の形態３においては、各プロセッサとは別個に外部レジスタ３００の電力を制御するように構成されている。つまり、実施の形態３においては、電力制御レジスタ３１０及び電力制御回路４００が設けられている。したがって、実施の形態３においては、各プロセッサの電力状態に依存することなく、外部レジスタ３００の電力を制御することが可能となる。また、実施の形態３においては、電力制御レジスタ３１０に記憶される外部レジスタ電力状態情報を用いて、外部レジスタ３００の電力を制御することが可能となる。したがって、外部レジスタ３００の使用状態に応じて、外部レジスタ３００の電力を制御することが可能となる。
【００８９】
（変形例）
なお、本実施の形態は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、以下に説明するように変更してもよい。
【００９０】
図１２は、変形例にかかる半導体装置５０を示す図である。上述した実施の形態においては、外部レジスタ３００は、高性能プロセッサ１００とはバス６２を介して接続され、低性能プロセッサ２００とはバス６４を介して接続されている。つまり、上述した実施の形態においては、外部レジスタ３００は、高性能プロセッサ１００及び低性能プロセッサ２００と異なるバスで接続されている。しかしながら、変形例にかかる半導体装置５０のように、外部レジスタ３００は、高性能プロセッサ１００及び低性能プロセッサ２００と、共通バス６６を介して接続されてもよい。
【００９１】
なお、外部レジスタ３００が共通バス６６で高性能プロセッサ１００及び低性能プロセッサ２００と接続されることで、演算回路１４０及び演算回路２４０が外部レジスタ３００にアクセスする速度が遅くなる。言い換えると、上述した実施の形態のように、外部レジスタ３００が、高性能プロセッサ１００及び低性能プロセッサ２００のそれぞれと、互いに異なるバス６２，６４を介して接続されることによって、演算回路１４０及び演算回路２４０が外部レジスタ３００にアクセスする速度が速くなる。したがって、演算回路１４０及び演算回路２４０の演算速度を速くすることが可能となる。
【００９２】
また、上述した説明では、実施の形態２と実施の形態３とを別に説明したが、このような構成に限られない。実施の形態２に実施の形態３を適用してもよい。つまり、外部レジスタ３００が外部レジスタ記憶領域コピー３０４を有し、さらに電力制御レジスタ３１０を有してもよい。
【００９３】
また、上述した実施の形態においては、プログラムの実行主体が移行するきっかけとなる移行刺激が電力値の低下又は上昇である例について説明したが、移行刺激は電力値の低下又は上昇に限られない。例えば、動作中のプロセッサの温度の低下又は上昇であってもよい。
【００９４】
また、上述した実施の形態においては、高性能プロセッサ１００及び低性能プロセッサ２００と、外部レジスタ３００との物理的な位置関係について言及していないが、外部レジスタ３００は、物理的に高性能プロセッサ１００の側にあってもよい。この場合、例えば、高性能プロセッサ１００と外部レジスタ３００との間のバス６２は、比較的短い専用のバスであってもよく、低性能プロセッサ２００と外部レジスタ３００との間のバス６４は、共通バスであってもよい。このように構成することによって、高性能プロセッサ１００における演算回路１４０が外部レジスタ３００にアクセスする速度が上昇するので、高性能プロセッサ１００における演算回路１４０の演算速度を上げることが可能となる。
【００９５】
また、本実施の形態においては、プログラムに関する演算を行う回路は演算回路１４０及び演算回路２４０としたが、これに限られない。制御回路１２０及び制御回路２２０が、演算を行ってもよい。但し、上述したように、演算回路１４０及び演算回路２４０の方が、制御回路１２０及び制御回路２２０よりもより高速な演算処理が可能であるので、制御回路１２０及び制御回路２２０が行う演算は、ごく単純なものであり得る。
【００９６】
また、本実施の形態においては、「第１のプロセッサ」が「高性能プロセッサ１００」に対応し、「第２のプロセッサ」が「低性能プロセッサ２００」に対応する例について説明したが、このような構成に限られない。つまり、「第１のプロセッサ」が「低性能プロセッサ２００」に対応し、「第２のプロセッサ」が「高性能プロセッサ１００」に対応するとしてもよい。このことは、「第１の制御回路」及び「第２の制御回路」、「第１の演算回路」及び「第２の演算回路」、及び、「第１の内部記憶回路」及び「第２の内部記憶回路」についても同様である。
【００９７】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【００９８】
なお、上記実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
それぞれプログラムを実行する複数のプロセッサと、
前記プロセッサの外部に設けられ、前記複数のプロセッサそれぞれに接続された外部レジスタと
を有し、
前記複数のプロセッサのそれぞれは、
前記プログラムの実行を制御する制御回路と、
前記外部レジスタを用いて前記プログラムに関する演算を行う演算回路と、
前記複数のプロセッサそれぞれの内部に設けられた少なくとも１つの内部記憶回路と
を有し、
前記外部レジスタは、前記演算回路における演算に関する演算データを記憶し、
前記内部記憶回路は、前記プログラムの実行の状態に関する実行状態データであって、前記複数のプロセッサのうちの第１のプロセッサが前記プログラムを実行している途中で前記複数のプロセッサのうちの第２のプロセッサが前記プログラムを実行するようになる場合に前記第１のプロセッサから前記第２のプロセッサへと転送される実行状態データを記憶する
半導体装置。
【符号の説明】
【００９９】
１  半導体装置
４  外部レジスタ
１０  第１プロセッサ
１２  制御回路
１４  演算回路
１６  内部記憶回路
２０  第２プロセッサ
２２  制御回路
２４  演算回路
２６  内部記憶回路
５０  半導体装置
７０  メインメモリ
８０  割込コントローラ
１００  高性能プロセッサ
１２０  制御回路
１２２  汎用レジスタ
１３２  電力算出部
１３４  電力制御部
１４０  演算回路
１５０  レジスタアクセス制御回路
１６０  内部レジスタ
１７０  内部メモリ
２００  低性能プロセッサ
２２０  制御回路
２２２  汎用レジスタ
２３２  電力算出部
２３４  電力制御部
２４０  演算回路
２５０  レジスタアクセス制御回路
２６０  内部レジスタ
２７０  内部メモリ
３００  外部レジスタ
３０２  外部レジスタ記憶領域
３０４  外部レジスタ記憶領域コピー
３１０  電力制御レジスタ
４００  電力制御回路
【図１】
0006478762.tif 000002
【図２】
0006478762.tif 000003
【図３】
0006478762.tif 000004
【図４】
0006478762.tif 000005
【図５】
0006478762.tif 000006
【図６】
0006478762.tif 000007
【図７】
0006478762.tif 000008
【図８】
0006478762.tif 000009
【図９】
0006478762.tif 000010
【図１０】
0006478762.tif 000011
【図１１】
0006478762.tif 000012
【図１２】
0006478762.tif 000013