(57)【要約】【課題】プロセッサにおいてレジスタファイルの低消費電力化を図ることのできるプロセッサを提供する。【解決手段】プロセッサ１は、複数のレジスタを有するレジスタファイル１２と、レジスタファイル１２における、電源の供給を停止する１以上のレジスタを選択可能なスイッチ素子群回路１２ａと、オブジェクトコードの実行時に、オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、レジスタファイル１２を制御するためのレジスタファイル制御信号を出力する実行部２１と、レジスタファイル制御信号に基づいて、電源の供給を停止する１以上のレジスタを選択するためのレジスタ制御信号をスイッチ素子群回路１２ａに出力するレジスタファイル制御部１６とを有する。【選択図】図１
2009193243.tif 000002
【特許請求の範囲】
【請求項１】
複数のレジスタを有するレジスタファイルと、
該レジスタファイルにおける、電源の供給を停止する１以上のレジスタを選択可能なレジスタ選択部と、
オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、
前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する１以上のレジスタを選択するためのレジスタ制御信号を前記レジスタ選択部に出力するレジスタファイル制御部と、
を有することを特徴とするプロセッサ。
【請求項２】
複数のレジスタを有するレジスタファイルと、オブジェクトコードを実行するオブジェクトコード実行部とを有するプロセッサの実行を制御する方法であって、
前記オブジェクトコード実行部による前記オブジェクトコードの実行時に、前記オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力し、
前記レジスタファイル制御信号に基づいて、前記レジスタファイルにおける、電源の供給を停止する１以上のレジスタを選択するためのレジスタ制御信号を出力する、
ことを特徴とするプロセッサの実行制御方法。
【請求項３】
複数のレジスタを有するレジスタファイルと、該レジスタファイルにおける、電源の供給を停止する１以上のレジスタを選択可能なレジスタ選択部と、オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する１以上のレジスタを選択するためのレジスタ制御信号を前記レジスタ選択部に出力するレジスタファイル制御部とを有するプロセッサのためのプログラム生成装置であって、
入力されたプログラムをコンパイルして前記プログラムの実行モジュールを生成する実行モジュール生成部と、
該実行モジュール生成部により生成された前記実行モジュールに追加する、前記使用するレジスタ数あるいは前記使用しないレジスタ数の情報を含む第１の所定のコードを生成するコード生成部と、
生成された前記第１の所定のコードを前記実行モジュールに追加して、前記オブジェクトコードを生成するコード追加部と、
を有することを特徴とするプログラム生成装置。
【請求項４】
使用可能なレジスタ数を変化させてコンパイルした結果から、最適レジスタ数を判定する最適レジスタ数判定部を有し、
前記使用するレジスタ数あるいは前記使用しないレジスタ数は、前記最適レジスタ数に基づいて決定されることを特徴とする請求項３に記載のプログラム生成装置。
【請求項５】
複数のレジスタを有するレジスタファイルと、該レジスタファイルにおける、前記複数のレジスタのそれぞれの使用しないビット幅のレジスタへ電源の供給を停止する１以上のレジスタを選択可能なレジスタ選択部と、オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報と使用するビット幅あるいは使用しないビット幅の情報とに基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する１以上のレジスタ以外のレジスタと、前記使用するビット幅とにのみ前記電源の供給をするように前記レジスタ制御信号を生成して出力するレジスタファイル制御部とを有するプロセッサのためのプログラム生成装置であって、
入力されたプログラムをコンパイルして前記プログラムの実行モジュールを生成する実行モジュール生成部と、
該実行モジュール生成部により生成された前記実行モジュールに追加する、前記使用するレジスタ数あるいは前記使用しないレジスタ数の情報と前記使用するビット幅あるいは前記使用しないビット幅の情報とを含む第１の所定のコードを生成するコード生成部と、
生成された前記第１の所定のコードを前記実行モジュールに追加して、前記オブジェクトコードを生成するコード追加部と、
を有することを特徴とするプログラム生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置に関し、特に、レジスタファイルを有するプロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置に関する。
【背景技術】
【０００２】
従来より、計算機システムにおけるメモリデバイスの省消費電力化、半導体集積回路装置内のモジュールの省消費電力化、等の種々の省電力化の技術が種々提案されている。例えば、メモリデバイスの省消費電力化のために、メモリデバイスにクロックイネーブル信号を追加して省消費電力待機機能を持たせる構成（例えば、特許文献１参照）、半導体集積回路装置内のモジュールにおいて動作しているモジュールにだけクロック信号を供給するようにする構成（例えば、特許文献２参照）、が提案されている。
【０００３】
ところで、プロセッサ内のレジスタファイルにおけるレジスタの数が３２個、６４個等、レジスタを多数個有するプロセッサにおいては、通常、高度な処理を除き、レジスタ全体が平均して使われる状況は稀である。  
例えば、音声処理におけるノイズキャンセル、エンコード等の処理では、配列データ等から総和を求めるシグマ演算がしばしば行われる。N個の数の和を取るシグマ演算のプログラムは、複数の加算器の中で並列的に演算できる場合、並列的に演算が行われるように、コンパイラによってコンパイルされる。その結果、プロセッサ上の複数の加算器のそれぞれの入力側と出力側の各レジスタには、入力データあるいは各中間結果が保持されて並列的に演算を行われ、演算のための必要なサイクル数が少なくなるため、実行速度を上げることができる。
【０００４】
しかし、並列的に演算が行われる場合でも、常にプロセッサ内の全ての演算器が使用されることはなく、全てのレジスタが使用される場合は、稀である。実行速度を上げるために、演算器の数を増やして並列度を上げるようにする場合もあるが、演算器の数を増やした場合も、全てのレジスタが使用される場合は、稀となる。
【０００５】
また、例えば、暗号処理等のように、逆演算に時間がかかるようにさせたい場合の演算において、演算の依存関係が強い。演算の依存関係が強い場合は、少ない数のレジスタを用いてその演算が行われるため、多くのレジスタが未使用のまま使われない状態となる。
【０００６】
さらにまた、ソフトウエアが高級言語により記述され、種々の演算を含む場合は、変数の依存関係が多く、かつ連鎖する。よって、ソフトウエアが高級言語により記述された場合、コンパイラが、命令の並列性を見つけることは、一般的に困難とされている。
【０００７】
ところが、各演算器に対応して設けられる複数のレジスタを含むレジスタファイルは、パイプラインステージ毎に正確にデータの入出力を行う必要があるため、レジスタファイル内の全レジスタについて動作可能状態にしておかなければならず、消費電力の無駄が多い。そして、上述した２つの提案に係る技術においても、レジスタファイルにおける消費電力の低減については何ら考慮されていない。
【特許文献１】特開2001-357672号公報
【特許文献２】特開平08-106337号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、このような問題に鑑みてなされたものであり、プロセッサにおいてレジスタファイルの低消費電力化を図ることのできるプロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、複数のレジスタを有するレジスタファイルと、該レジスタファイルにおける、電源の供給を停止する１以上のレジスタを選択可能なレジスタ選択部と、オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する１以上のレジスタを選択するためのレジスタ制御信号を前記レジスタ選択部に出力するレジスタファイル制御部と、を有するプロセッサを提供することができる。
【００１０】
本発明の一態様によれば、複数のレジスタを有するレジスタファイルと、該レジスタファイルにおける、電源の供給を停止する１以上のレジスタを選択可能なレジスタ選択部と、オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する１以上のレジスタを選択するためのレジスタ制御信号を前記レジスタ選択部に出力するレジスタファイル制御部とを有するプロセッサのためのプログラム生成装置であって、入力されたプログラムをコンパイルして前記プログラムの実行モジュールを生成する実行モジュール生成部と、該実行モジュール生成部により生成された前記実行モジュールに追加する、前記使用するレジスタ数あるいは前記使用しないレジスタ数の情報を含む第１の所定のコードを生成するコード生成部と、生成された前記第１の所定のコードを前記実行モジュールに追加して、前記オブジェクトコードを生成するコード追加部と、を有するプログラム生成装置を提供することができる。
【発明の効果】
【００１１】
本発明によれば、プロセッサにおいてレジスタファイルの低消費電力化を図ることができるプロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置を実現することができる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。  
（第１の実施の形態）
まず図１に基づき、本発明の第１の実施の形態に係わるプロセッサの構成を説明する。図１は、本実施の形態に係わるプロセッサの構成を示す構成図である。
【００１３】
マイクロプロセッサであるプロセッサ１は、プロセッサコア１１と、レジスタファイル１２と、命令メモリ１３と、データメモリ１４と、レジスタファイル１２とデータメモリ１４間のデータのロード及びストアを制御するロード／ストアユニット１５と、レジスタファイル制御部１６とを含んで構成されている。
【００１４】
プロセッサコア１１は、搭載されたオペレーティングシステム（以下、OSという）の制御下で、命令メモリ１３から読み出された命令を命令デコーダ（図示せず）によりデコードし、デコーダされた命令に基づいてデータメモリ１４から読み出されたデータに対して種々の演算処理を実行する。プロセッサコア１１は、そのために各種演算回路を含んでいる。
【００１５】
命令メモリ１３から読み出される命令は、プロセッサ１上で実行されるプログラムである実行モジュールとして命令メモリ１３に記憶され、プロセッサコア１１によって命令メモリ１３から読み出されて、実行される。  
ロード／ストアユニット１５は、データメモリ１４からのデータのロードすなわち読み出し、及びデータメモリ１４へのデータのストアすなわち記憶を行う回路である。
【００１６】
レジスタファイル１２は、プロセッサコア１１内のレジスタ群の各レジスタのデータを保持するために複数のレジスタを有する回路であり、各レジスタには、プロセッサコア１１の実行サイクル毎に変化するデータが保持される。本実施の形態では、レジスタファイル１２は、それぞれが６４ビット幅のデータを保持可能な複数のレジスタ、ここでは３２個のレジスタ、を有する。
【００１７】
レジスタファイル制御部１６は、後述するように、実行モジュールのタスクの実行時に、レジスタファイル１２中において使用されない１以上のレジスタへの電源の供給を停止することができる回路である。具体的には、本実施の形態では、レジスタファイル制御部１６は、タスクの実行において使用されない一部のレジスタへのクロック供給を停止することができる制御回路であり、レジスタ制御信号を出力する。レジスタファイル１２への電源の供給を停止させる機能は、後述するような所定のモードでプログラムをコンパイルしたときに生成された実行モジュールに追加された所定のコードが、プロセッサコア１１内の実行部２１（図２参照）によって実行されて、プロセッサコア１１がレジスタファイル制御部１６へ、後述するレジスタファイル制御信号RFCを出力することによって実現される。
【００１８】
なお、コンパイルされるプログラムは、複数の機能モジュールを含む場合が多い。例えば、携帯電話用のプログラムであれば、メール用のプログラムと、WEB閲覧用のプログラム等、複数の機能に対応して複数のプログラムが含まれる。そのため、個々の機能モジュール毎に、タスクの実行において使用されない一部のレジスタへのクロック供給を停止するように、レジスタファイル制御部１６は動作するが、以下の説明では、説明を簡単にするために、一つの機能を有するプログラム（あるいはタスク）に対して生成された実行モジュールについて、レジスタファイル１２中の使用しないレジスタに対する電源の供給の制御が行われる場合を説明する。
【００１９】
図２は、プロセッサコア１１の内部構成を示すブロック図である。プロセッサコア１１は、実行部２１と、レジスタファイル制御信号出力部２２とを含んで構成される。実行部２１は、入力されたオブジェクトコード形式の命令をデコードする命令デコーダと、入力された命令とデータに基づいて各種演算を実行する各種演算器を含む回路である。そして、実行部２１は、レジスタファイル１２のデータの読み出しおよび書き込みを行いながら、タスク内の各種命令を実行する。
【００２０】
オブジェクトコードである実行モジュールに追加された所定のコードには、実行モジュールが実行されたときに使用しないレジスタ数、すなわち不使用レジスタ数、の情報が含まれている。実行部２１が実行モジュールに追加された所定のコードを実行すると、実行部２１は、使用しないレジスタ数の情報を、レジスタファイル制御信号出力部２２に渡す。レジスタファイル制御信号出力部２２は、使用しないレジスタの数の情報を含むレジスタファイル制御信号RFCをレジスタファイル制御部１６へ出力する。よって、プロセッサコア１１は、オブジェクトコードの実行時に、オブジェクトコードに含まれる不使用レジスタ数の情報に基づいて、レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部を構成する。
【００２１】
レジスタファイル制御部１６は、そのレジスタファイル制御信号RFCに基づいて、使用しないレジスタへの電源の供給を停止するための信号を含むレジスタ制御信号RCを生成して、レジスタファイル１２へ出力する。
【００２２】
図３は、本実施の形態に係わるレジスタファイル１２の構成を説明するための図である。レジスタファイル１２には、それぞれが６４ビット幅のデータを保持可能な３２個のレジスタR1〜R32（以下、レジスタR1からR32を纏めて指す、あるいはいずれかを指す場合は、Rという）が設けられている。各レジスタRには、動作用のクロック信号CLKが信号線３１から供給可能に構成されている。各レジスタRへのクロック信号CLKの供給を制御するスイッチ素子SWが、レジスタ毎に設けられている。複数のスイッチ素子SWからなるスイッチ素子群回路１２ａが、電源の供給を停止する１以上のレジスタを選択することが可能なレジスタ選択部を構成する。すなわち、スイッチ素子群回路１２ａは、各レジスタRへのクロック信号CLKの供給を制御するための複数のスイッチ素子を含んでいる。
【００２３】
レジスタ制御信号RC1〜RC32（以下、レジスタ制御信号RC1からRC32を纏めて指す、あるいはいずれかを指す場合は、RCという）が、スイッチ素子群回路１２ａの各スイッチ素子SWへの制御信号として、レジスタファイル制御部１６からレジスタファイル１２へ供給される。後述するように、レジスタ制御信号RCは、使用する１以上のレジスタに対しては、スイッチ素子SWをオン状態のままにしてクロック信号CLKが供給され、使用しない１以上のレジスタに対しては、スイッチ素子SWをオフ状態にしてクロック信号CLKが供給しないようにする制御信号である。
【００２４】
よって、プロセッサコア１１の実行部２１は、実行モジュールのタスクが読み込まれて実行される前に追加された所定のコードを実行して使用しない１以上のレジスタに電源の供給がされないようにした後に、実行モジュールを実行する。
【００２５】
そのために、実行モジュールの先頭に追加された所定のコードは、実行部２１によって実行されると、レジスタファイル制御信号出力部２２に対してレジスタファイル制御信号RFCをレジスタファイル制御部１６へ出力させるための信号を出力するためのコードである。レジスタファイル制御信号RFCが出力された後に、実行モジュールのタスクが実行される。よって、レジスタファイル１２において、使用されない１以上のレジスタには電源の供給がされないので、プロセッサ１の低消費電力化を図ることができる。
【００２６】
さらに、後述するように、実行モジュールのタスクの実行が終了すると、電源の供給を停止した１以上のレジスタに対して、電源の供給を復帰するためのコードが実行される。
【００２７】
ここで、プログラムのコンパイルについて説明する。  
図４は、プログラムをコンパイルするときの処理の流れを説明するための図である。ユーザは、C言語等の高級言語で記述してプログラムを作成する。プロセッサ１に実行させるプログラムのソースプログラムSPは、コンパイラによってコンパイルされるが、本実施の形態では、そのコンパイル時に、どのような形式あるいはモードでのコンパイルを行うかが指定可能となっている。
【００２８】
例えば、ユーザは、プログラム実行時の性能を重視してすべてのレジスタを動作させるようにプログラムをコンパイルしたい場合は、性能重視のコンパイル形式を選択する。また、プログラムを開発する者であるユーザは、デバッグのためにプログラムをコンパイルするときは、コンパイル速度の速いモードのコンパイル形式を選択する。あるいは、ユーザは、プログラムの実行時にレジスタファイル１２中の使用しない１以上のレジスタを動作させないようにして低消費電力でプロセッサが動作するように、プログラムをコンパイルしたい場合は、低消費電力動作のコンパイル形式を選択する。
【００２９】
コンパイル処理は、図９を用いて後述するコンパイラ装置によって行われる。コンパイラ装置は、パーソナルコンピュータ（以下、PCという）等のコンピュータ装置であり、ユーザが、コンパイラ装置に対してコンパイル処理を指示すると、コンパイラ装置は、図示しない記憶装置に記憶されたソースプログラムSPを読み出して、コンパイル処理を行う。
【００３０】
コンパイル処理において、性能重視のコンパイル形式が選択されたときは、性能重視のコンパイル処理（ステップS1）が実行されて、オブジェクトコードOP(1)が生成される。オブジェクトコードOP(1)は、最適化処理が施されて、実行速度の速い形式の実行モジュールとなる。
【００３１】
コンパイル処理において、コンパイル速度重視のコンパイル形式が選択されたときは、コンパイル速度重視のコンパイル処理（ステップS2）が実行されて、オブジェクトコードOP(2)が生成される。オブジェクトコードOP(2)は、最適化処理の施されていない実行モジュールとなる。
【００３２】
コンパイル処理において、低消費電力重視のコンパイル形式が選択されたときは、低消費電力重視のコンパイル処理（ステップS3）が実行されて、オブジェクトコードOP(3)が生成される。オブジェクトコードOP(3)は、レジスタファイル１２において使用されない１以上のレジスタをオフにするための所定のコードが実行モジュールに追加されたオブジェクトコードとなる。
【００３３】
次に、低消費電力重視のコンパイル処理（S2）について説明する。  
図５は、低消費電力重視のコンパイル処理の流れの例を説明するためのフローチャートである。  
まず、低消費電力重視のコンパイル処理では、コンパイラ装置は、第１に、ソースプログラムSPに対して、通常のコンパイル処理を実行する（ステップS11）。通常のコンパイル処理は、例えば、ステップS1の性能重視のコンパイル処理である。よって、ステップS11は、入力されたソースプログラムSPをコンパイルして実行モジュールを生成する実行モジュール生成部を構成する。
【００３４】
次に、コンパイラ装置は、コンパイル処理結果である実行モジュールに追加する、不使用レジスタ数の情報を含む所定のコードの生成を実行する（ステップS12）。所定のコードは、ステップS11において生成された実行モジュール中に現れたレジスタの数に基づいて生成される。
【００３５】
C言語で書かれたプログラムから実行モジュールを生成するときに、プロセッサ１内の各レジスタがどのように使用されるかは、コンパイラによって決定される。コンパイル時、コンパイラは、レジスタファイル１２内の使用する１以上のレジスタをラベリングしながら割り当てる。従って、実行モジュール内の各レジスタのラベル番号を参照して、各実行サイクルにおいて、プログラムすなわちタスクが使用するレジスタの数からラベル番号中の最大値を検出することにより、コンパイラ装置は、使用しない１以上のレジスタの数を決定することができる。そのタスクの使用しないレジスタ数に基づいて、不使用レジスタ数の情報を含む所定のコードが生成される。
【００３６】
従って、ステップS12は、ステップS11により生成された実行モジュールに追加する、不使用レジスタ数の情報を含む所定のコードを生成するコード生成部を構成する。  
なお、後述するように、ステップS12では、実行モジュールの実行後に、電源の供給の停止を解除するためのコードも生成される。
【００３７】
そして、コンパイラ装置は、生成した所定のコードを、ステップS11においてコンパイルした実行モジュールに追加する追加処理を実行する（ステップS13）。ステップS13が、生成された所定のコードを実行モジュールに追加して、オブジェクトコードを生成するコード追加部を構成する。  
この場合、所定のコードは、ステップS11のコンパイル処理において生成された実行モジュールの最初と最後に付加されるように、追加される。図６は、実行モジュールに所定のコードが追加されたオブジェクトコードの構成を説明するための図である。
【００３８】
実行モジュール３１は、ステップS11において、上述した通常のコンパイルされた結果得られたオブジェクトコードである。その実行モジュール３１の先頭に、所定のコード（A）３２が追加される。そして、実行モジュール３１の最後尾に、別の所定のコード（B）３３も追加される。
【００３９】
追加コードの一つである所定のコード（A）は、レジスタファイル制御信号出力部２２が、タスクの実行において不使用レジスタ数をレジスタファイル制御部１６へ通知するレジスタファイル制御信号RFCを出力することができるようにするためのオブジェクトコードである。  
よって、所定のコード（A）が実行部２１によって実行されると、レジスタファイル制御信号出力部１６からレジスタファイル制御信号RFCが出力される。
【００４０】
ここで、レジスタファイル１２の中でプログラムあるいはタスクが使用しないレジスタの数が決定される処理について具体例を用いて説明する。ここでは、説明を簡単にするために簡単な演算処理例を用いて説明する。
【００４１】
例えば、C言語で書かれたソースプログラムが、８つの値を加算する加算処理を実行して８つの値の総和を求めるためのプログラム、すなわちいわゆるシグマ演算のプログラムであるとする。そして、プロセッサ１は、２つの演算器、ここでは２つの加算器を使って並列処理を実行可能であるとする。
【００４２】
加算する８つのデータは、data[0]からdata[7]であるとし、iを０から７の整数としたときに、data[i]をそれぞれ順番に加算することによってその総和を求めることも可能である。しかし、コンパイラが、プロセッサコア１１内に予め設けられた各種演算器の中から２つの加算器を用いて並列演算可能であると判断して、実行モジュールを生成する場合がある。
【００４３】
図７は、複数の加算器を用いてシグマ演算を行う場合の演算器の構成例を説明するための図である。コンパイラは、通常のコンパイル処理によって、data[0]とdata[1]の加算を加算器４１によって行い、data[2]とdata[3]の加算を加算器４２によって行い、data[4]とdata[5]の加算を加算器４３によって行い、data[6]とdata[7]の加算を加算器４４によって行い、加算器４１と４２のそれぞれの出力tmp0とtmp1の加算を加算器４５によって行い、加算器４３と４のそれぞれの出力tmp2とtmp3の加算を加算器４６によって行い、加算器４５と４６のそれぞれの出力tmp4とtmp5の加算を加算器４７によって行い、最終的に、総和sumを得るように実行モジュールを生成したとする。そして、２つの加算処理を、２つの加算器を並列に動作させて実行するように、実行モジュールが生成されたとする。  
生成された実行モジュールは、図６の実行モジュール３１の部分であり、各レジスタへデータのロード命令、各加算器による加算命令等を含む。
【００４４】
図８は、２つの加算器pipe-A、pipe-Bを用いて、生成された実行モジュールにおける処理の流れを説明するための図である。コンパイラは、実行モジュールを生成する場合に、上述の加算器４１から４７の加算処理を、それぞれがパイプライン処理を行う２つの加算器（pipe-A,pipe-B）に割り当てると共に、レジスタファイル１２内の各レジスタを、２つの加算器に必要なレジスタに割り当てる。
【００４５】
図８は、加算器４１と４２による２つの加算演算を第１のサイクル（Cycle1）において実行し、加算器４３と４４による２つの加算演算を第２のサイクル（Cycle2）において実行し、加算器４５と４６による２つの加算演算を第３のサイクル（Cycle3）において実行し、最後のサイクル（Cycle4）において、２つの加算器からの２つの出力の加算演算を行うように、プログラムは、コンパイルされたことを示している。
【００４６】
このような実行モジュールの場合、レジスタファイル１２内のレジスタをいくつ使用するかというと、最初に８つの入力データdata[0]からdata[7]を保持しておくために、レジスタは、８つ必要となる。その後に使用するレジスタの数は、２つの加算器の加算結果を保持するためのレジスタとなるので、４つ以下となる。
【００４７】
コンパイラは、各サイクルにおける演算に必要なレジスタに対して、数字の１から順番に番号を付すラベリング処理を行う。その結果、各サイクルにおいて使用されるレジスタの数は、ラベリングによって付された番号の最大値が、そのタスクの処理において必要なレジスタの数である。
【００４８】
また、コンパイラは、ラベリングによって付されたレジスタを、ラベリングによって付された番号の小さい順から、レジスタファイル１２内のレジスタの番号の小さい順から割り当てる。すなわち、レジスタファイル１２内で使用されるレジスタは、図３に示すレジスタファイル１２の場合であれば、レジスタR1から順番に割り当てられる。
【００４９】
図７のタスクの場合、最大８つのレジスタしか使用しないため、レジスタファイル１２の３２個のレジスタのうち、２４個は、使用しないことになる。すなわち、図７の場合、使用しないレジスタ数（すなわち不使用レジスタ数）は、２４個となる。よって、この２４個への電源の供給を停止することによって、省電力を図ることができる。
【００５０】
本実施の形態では、図５の追加する所定のコードの生成処理（ステップS12）において、まず、上述したコンパイルされた実行モジュールからレジスタのラベルをチェックすることによって、ラベリングによって付された番号の最大値が抽出される。よって、所定のコードの生成処理では、抽出された最大値に基づいて、不使用レジスタ数の情報をレジスタファイル制御部１６へ送信する処理を、レジスタファイル制御信号出力部２２に実行させるコードが生成される。
【００５１】
レジスタファイル制御部１６は、受信した不使用レジスタ数の情報から、使用しないレジスタへのクロックCLK供給を停止するためのレジスタ制御信号RCを生成して出力する。
【００５２】
図７の場合、３２個のレジスタ中、２４個は使用しないので、レジスタファイル制御部１６は、使用しないレジスタR9からR32のそれぞれに対応するスイッチ素子SWをオフするレジスタ制御信号RC9からRC32を生成して、スイッチ素子群回路１２ａに出力する。その結果、タスクを実行中、レジスタファイル１２のレジスタR1からR8へのクロック信号CLKの供給は継続されるが、レジスタR9からR32へのクロック信号CLKの供給は停止される。
【００５３】
また、実行モジュール３１の後に追加される所定のコード（B）３３は、所定のコード（A）３２において、クロック信号CLKの供給が停止された１以上のレジスタへのクロック信号CLKの供給を再開するためのコードである。上記の例であれば、２４個のレジスタが、所定のコード（A）３２においてオフされたので、所定のコード（B）３３は、そのクロック信号CLKの供給を停止した２４個のレジスタへのクロック信号CLKの供給を再開させるためのコードである。すなわち、所定のコード（B）３３は、電源の供給の停止の解除をさせるためのレジスタファイル制御信号RFCをレジスタファイル制御部１６へ送信する処理を、レジスタファイル制御信号出力部２２に実行させるためのコードである。所定のコード（A）３２及び所定のコード（B）３３は、言い換えると、レジスタファイル１２の動作を制御する制御プログラムであり、その制御プログラムによって、レジスタファイル１２の各レジスタへの電力供給が制御される。
【００５４】
以上の例では、コンパイル処理の中で、シグマ演算に必要な加算器の割り付けだけでなく、必要なレジスタの割り付けも行われる。レジスタの割り付けは、例えば、レジスタファイル１２のレジスタの中で、レジスタ番号の小さい順に行われる。その場合は、割り付けられたレジスタ番号の最大値が、シグマ演算に必要なレジスタの数となる。よって、ステップＳ12において、割り付けられたレジスタ番号の最大値をチェックあるいは解析することによって、シグマ演算に用いられるレジスタの数を判定することができる。上記の例であれば、上述したシグマ演算処理において使用するレジスタの最大数は、８個であることを判定することができる。図７の場合、入力データが８個であるため、最初のデータ保持のためのレジスタが８個必要となり、その後は、各加算器の加算結果の利用となるので、レジスタ数は８を超えることはない。従って、上述したシグマ演算中、使用されるレジスタ数は8個であるため、レジスタファイル１２の３２個のレジスタ中、２４個へは電源の供給を停止してもよい。
【００５５】
よって、ステップＳ12は、タスクの実行時に、使用されないレジスタへの電源の供給を停止させるための所定のコード（A）と、タスクの実行後に、電源の供給を停止したレジスタへの電源の供給を再開するための所定のコード（B）を生成する。これら生成された２つの所定のコードが実行モジュールに追加されて、プロセッサ１において実行されるので、プロセッサ１のレジスタファイル１２の省電力化を図ることができる。
【００５６】
なお、以上説明した例では、レジスタファイル制御信号出力部２２が、レジスタファイル制御信号RFCを出力しているが、実行部２１が所定のコード（A）及び（B）を実行してレジスタファイル制御信号RFCを生成して、レジスタファイル制御部１６へ直接出力するようにしてもよい。
【００５７】
また、図４及び図５のコンパイル処理は、図９に示すようなコンパイル装置によって実行される。図９は、コンパイル装置の構成を示す構成図である。プログラム生成装置としてのコンパイル装置５１は、中央処理装置（CPU）本体５２と、表示装置としてのモニタ５３と、記憶装置としてのメモリ５４とを含んで構成されている。メモリ５４には、コンパイル処理プログラム等のプログラム５４ａ、コンパイル処理対象のソースプログラムであるソースコード５４ｂ、及びコンパイル処理されて生成された実行モジュール等を含むオブジェクトコード５４ｃが記憶される。
【００５８】
プログラム５４ａが本体５２に読み込まれて実行されることによって、ソースコード５４ｂをコンパイルして実行モジュール３１を生成し、かつ所定のコード３２，３３を実行モジュール３１に追加する処理が実行される。
【００５９】
以上のように、本実施の形態によれば、レジスタファイルの低消費電力化を図ることができるプロセッサおよびそのためのプログラム生成装置を実現することができる。
【００６０】
（第２の実施の形態）
上述した第１の実施の形態では、コンパイル処理後、レジスタファイル中でいくつレジスタが使用されたかをチェックして、使用しない１以上のレジスタへの電源の供給を停止するようにしていた。
【００６１】
第２の実施の形態に係るプロセッサ及びコンパイラ装置の構成は、第１の実施の形態に係るプロセッサ及びコンパイラ装置と同様であるが、第２の実施の形態では、演算速度が低下しない範囲内で、使用するレジスタ数を出来るだけ少なくするようにコンパイル処理が行われるようにする点が、第１の実施の形態と異なる。なお、以下の説明において、第１の実施の形態と同じ構成要素については、同じ符号を付して説明は省略する。第２の実施の形態に係るコンパイル処理は、図９に示すようなコンパイル装置５１において実行される。
【００６２】
図１０は、第２の実施の形態に係るコンパイル処理の流れの例を説明するためのフローチャートである。本実施の形態では、コンパイル処理の前処理として、使用可能なレジスタ数を変化させて実行サイクル数を予測し、得られた複数の予測結果に基づいて、最適なレジスタ数を決定する処理が行われる。その前処理の後に、コンパイル処理が実行される。
【００６３】
具体的な例を挙げて説明する。図１０は、第１の実施の形態と同様に、レジスタファイル１２のレジスタ数が３２個である場合の例であり、所定の数のレジスタ数しか使用できないものとしてコンパイル処理を複数回行い、各回において実行サイクル数を予測する。
【００６４】
本実施の形態では、まず、あるプログラムをレジスタファイル１２のレジスタ数を８個としてコンパイルする（S31）。  
８個のレジスタしか使用できないものとしてコンパイル処理を実行した結果、生成されたプログラムの実行時のサイクル数を予測する（ステップS32）。
【００６５】
その予測の結果を出力、８個のレジスタを使用する場合の実行サイクル数が、５０００であったとすれば、その予測結果の情報は、メモリ５４に記憶される（ステップS33）。
【００６６】
使用できるレジスタ数を変更して、同様の処理を行う。ここでは、レジスタ数を１６個しか使用できないものとしてコンパイル処理を行い（ステップS41）、そのときの実行サイクル数を予測し（ステップS42）、そして、その予測結果をメモリ５４にストアする（ステップS43）。さらに同様に、レジスタ数を２４個しか使用できない場合と、３２個の全てを使用できる場合とについても、それぞれ、コンパイル処理（ステップS51、S61）と、実行サイクル数の予測処理（ステップS52、S62）と、予測結果の記憶処理（ステップS53、S63）を実行する。ここで、図１０に示すように、１６個のレジスタを使用する場合の実行サイクル数が、１０００であり、２４個及び３２個のレジスタを使用する場合の実行サイクル数も、１０００であったとする。
【００６７】
以上の処理の結果、離散的に変化させた使用可能なレジスタ数に基づくコンパイル処理の結果、変化させたレジスタ数毎に、実行サイクル数の予測結果の情報を得ることができる。
【００６８】
上述したサイクル数の予測処理は、例えば、後述する図１４に示すエミュレーション処理のためのプログラムを用いて行われる。エミュレーション処理のためのプログラム（すなわちエミュレータ）は、関数の実行に要するサイクル数を取得することができるものとする。
【００６９】
得られた複数の予測結果の情報の中から、離散的に変化させたレジスタ数毎に予測した実行サイクル数の中で、少ない実行サイクル数の中で最もレジスタ数の少ない場合と、その少ない実行サイクル数よりも多いサイクル数の場合であってその最も少ないレジスタ数に近いレジスタ数の場合を抽出し、その２つの場合の間に存在するレジスタ数について、上述と同様な、コンパイル処理と、実行サイクル数の予測、及び予測結果の記憶の処理を実行する。
【００７０】
具体的には、ステップS33、S43、S53及びS63において、それぞれレジスタ数が8個、１６個、２４個及び３２個の場合についての予測結果が得られている。４つの予測結果の中で、レジスタ数の近い２つの場合を選択し、その２つの場合における予測した実行サイクル数の差を算出する。例えば、レジスタ８個の場合と１６個の場合における予測実行サイクル数の差を計算すると、５０００サイクルである。同様に、レジスタ数の近い２つの場合として、レジスタ１６個の場合と２４個の場合における予測実行サイクル数の差を計算すると、０サイクルである。同様に、レジスタ数の近い２つの場合として、レジスタ２４個の場合と３２個の場合における予測実行サイクル数の差を計算すると、０サイクルである。
【００７１】
従って、レジスタ数８個と１６個の２つの場合が、離散的に変化させたレジスタ数毎に予測した実行サイクル数の中で、少ない実行サイクル数（１０００）の中で最もレジスタ数の少ない場合（１６個）と、その少ない実行サイクル数（１０００）よりも多いサイクル数（５０００）の場合であってその最も少ないレジスタ数（１６個）に近いレジスタ数（８個）の場合であることを抽出することができる。
【００７２】
次に、抽出された２つの場合（レジスタ８個でコンパイルした場合とレジスタ１６でコンパイルした場合）の間で、使用可能なレジスタ数を連続的に変化させて、それぞれの場合における実行サイクル数の予測を行う。  
具体的には、レジスタ数が８個と１６個については、実行サイクル数の予測はされているので、９，１０，１１，１２，１３，１４，１５個の７つの場合のそれぞれについてステップS31からS33までの処理と同様の処理を行う（ステップS71）。図１０では、７つの全ての場合の処理内容については省略しているが、ステップS71では、各レジスタ数の場合における実行サイクル数の予測処理が行われる。
【００７３】
７つの場合において、実行サイクル数の予測結果が、例えば、
９個：４５００サイクル
１０個：３５００サイクル
１１個：２２００サイクル
１２個：１８００サイクル
１３個：１０００サイクル
１４個：１０００サイクル
１５個：１０００サイクル
であったとする。
【００７４】
８から１６個までの連続するレジスタ数の場合の中で、予測実行サイクル数が増加する直前のサイクル数を判定する（ステップS72）。言い換えると、得られた１１個の予測実行サイクル数の中で、予測実行サイクル数が少なくかつ変化しない場合の中で、最もレジスタ数が少ない場合を、最適なレジスタ数の場合として判定する。上記の例であれば、１３個のレジスタ数の場合が、最適なレジスタ数と判定される。すなわち、最適なレジスタ数とは、タスクの実行速度を低下させない範囲内で、レジスタファイル１２の中で使用しない１以上のレジスタの数を最も少なくしたときのレジスタ数である。ステップS72が、使用可能なレジスタ数を変化させてコンパイルした結果から、最適レジスタ数を判定する最適レジスタ数判定部を構成する。
【００７５】
ステップS72の最適レジスタ数判定部によって判定された最適なレジスタ数、ここでは１３個のレジスタ数においてコンパイルされたときの実行モジュール３１と、最適数とされた値、ここでは１３を、３２から引いた数（１９）を、不使用レジスタ数の情報として所定のコード中に埋め込み、実行モジュール３１に所定のコード３２，３３を追加したオブジェクトコードを出力する（ステップS73）。
【００７６】
その結果、ステップS73において出力されたオブジェクトコードは、命令メモリ１３に記憶され、プロセッサコア１１により実行される。その結果、実行モジュール３１は、最適なレジスタ数に基づくプログラムであり、所定のコード３２，３３は、使用しないレジスタ数の情報を含むコードとして、レジスタファイル制御部１６に供給される。その結果、レジスタファイル制御部１６は、１３個のレジスタを使用するように電源の供給を行い、１９個のレジスタについては電源の供給を停止するように、レジスタ制御信号RCを出力してレジスタファイル１２を制御する。
【００７７】
以上のように、上述した例の場合であれば、コンパイラは８個,１６個,２４個,３２個の４通りのコンパイル結果および実行時の予測サイクル数を出力しさらにレジスタ１個単位でレジスタ数を変化させ、ここでは、９個、１０個、１１個、１２個、１３個、１４個、１５個の７通りのコンパイル結果および実行時の予測サイクル数を出力し、コンパイラ装置は、合計１１通りの予測サイクル数の情報を得る。そして、コンパイラ装置５１は、実行速度が低下する直前のレジスタ個数を、最適レジスタ数として、３２から引いた数を、不使用レジスタ数と判定する。  
以上のように、本実施の形態のプログラム生成装置によれば、使用可能なレジスタ数を変化させてコンパイルした結果から、最適レジスタ数を判定し、使用するレジスタ数あるいは不使用レジスタ数は、その最適レジスタ数に基づいて決定される。そして、その最適レジスタ数は、使用可能なレジスタ数を変化させてコンパイルして得られた複数の予測実行サイクル数の中で実行サイクル数が最も少なく、かつ使用可能なレジスタ数が最も少ない場合のレジスタ数である。  
よって、本実施の形態によれば、第１の実施の形態の効果に加えて、不使用レジスタの数は、性能が低下しない範囲内で、最も少ない数となるように決定される。
【００７８】
（第３の実施の形態）
上述した２つの実施の形態では、使用しないレジスタへの電源の供給を停止するものであるが、第３の実施の形態に係るプロセッサは、使用しないレジスタについては、電源の供給の停止を行うと共に、使用するレジスタの中で、演算処理に使用されるビット幅以外の部分には、電源の供給を停止するようにした。なお、以下の説明において、第１の実施の形態と同じ構成要素については、同じ符号を付して説明は省略する。
【００７９】
図１１は、第３の実施の形態に係るマイクロプロセッサ１Aにおける、レジスタファイル１２Aと、ロード／ストアユニット１５と、レジスタファイル制御部１６Aと、実行部２１の部分の構成を説明するための部分ブロック図である。
【００８０】
実行部２１は、ここでは、命令デコーダ２１ａと、２つの演算器（pipe-A,pipe-B）２１ｂ、２１ｃを有する。命令メモリ１３からロードされたオブジェクトコードのプログラムは、命令デコーダ２１ａによってデコードされて、２つの演算器２１ｂ、２１ｃを使用しながら、実行される。また、ロード／ストアユニット１５を介して、演算に必要なデータはデータメモリ１４から読み出され、演算結果は、データメモリ１４に書き込まれる。
【００８１】
上述した第１及び第２の実施の形態では、不使用レジスタ数の情報が、所定のコード中に含まれて、レジスタファイル制御部１６Aに供給されている。本実施の形態においても、不使用レジスタには電源の供給がされないように、レジスタファイル制御部１６Aは、レジスタファイル１２を制御する。レジスタファイル制御部１６Aは、使用するレジスタ数のデータを保持するために、レジスタ個数指定レジスタ１６ａを有する。
【００８２】
本実施の形態では、さらに、レジスタファイル制御部１６Aは、使用するレジスタの中で使用しないビット幅のレジスタへの電源の供給を停止するように、レジスタファイル１２を制御する。言い換えれば、第１及び第２の実施の形態に係るプロセッサは、レジスタファイルの個数を指定してレジスタファイル１２の一部をオンあるいはオフする制御機能を有していたが、本実施の形態のプロセッサは、レジスタファイル１２のレジスタ幅を指定してレジスタファイル１２の一部をオンあるいはオフする制御機能を有する。
【００８３】
コンパイルされて生成された実行モジュール３１の実行中に、処理されるデータのビット数、加算器による加算の回数等の演算内容に基づいて、使用する最大ビット幅を予測することができる。この予測処理は、上述したステップS12において行われる。すなわち、予測処理によって、入力されるデータのビット数と、そのデータに対する演算処理の内容から、使用する最大ビット幅の予測をすることができる。例えば、１６ビットのデータに対して加算器によって、図７のような演算が行われる処理であれば、３２ビット幅のレジスタで充分である。また、３２ビットのデータに対して、乗算が行われるのであれば、６４ビット幅のレジスタが必要となる。
【００８４】
例えば、使用されるビット幅の予測は、次のような方法で行われる。  
1. 関数内で使用するレジスタの個数を調べる。  
2. レジスタ個数分の利用履歴を入れるメモリ領域を確保する。  
前ビット未使用として初期化する。(ビット幅は0bit)
3. 利用レジスタ番号分(n=0〜利用個数N)だけ４〜７を繰り返す。  
4. レジスタ(n)にアクセスする命令列を探す。  
5. ４で調べた命令によりレジスタ(n)がどのビット幅を使うかを命令情報テーブルを参照しながら調べる。  
6. レジスタ(n)に必要なビットを未使用から使用に変更する。  
既に使用になっているものは使用のままにする。  
7. ４に戻る。  
8. レジスタ(n=0〜利用個数N)の利用ビット幅が分かる。    
9. n=0〜利用個数Nで最も大きなビット幅を求める。
【００８５】
例：関数A （レジスタを３個利用）
プログラムコード
void testA(short *pX, short *pY, long *pZ) {
*pZ = (long)*pX * *pY;
}
コンパイル後のコードに対する説明：
1: レジスタR0にメモリアドレスpXから16bit値を読み込む。  
2: レジスタR1にメモリアドレスpYから16bit値を読み込む。  
3: レジスタR0とレジスタR1の値を乗算した32bit値をR2に書き込む。  
4: レジスタR2の32bit値をメモリアドレスpZに書き込む。  
初期の状態 (x:未使用、！：使用済み）
63     32 31      0bit
R0: xxxx_xxxx_xxxx_xxxx
R1: xxxx_xxxx_xxxx_xxxx
R2: xxxx_xxxx_xxxx_xxxx
最終状態
63     32 31      0bit
R0: xxxx_xxxx_xxxx_!!!!
R1: xxxx_xxxx_xxxx_!!!!
R2: xxxx_xxxx_!!!!_!!!!
予測ビット幅
この関数内で利用しているレジスタ３個の最大利用ビット幅は32bitであり、64bitレジスタの上位32bitは未使用と判断できる。
【００８６】
このような予測処理によって、処理されるデータ、演算内容等に基づいて、プログラムが使用する最大ビット幅が予め予測できる場合は、その予測された最大ビット幅を超えるビット幅の部分のレジスタへの電源の供給を停止する。
【００８７】
上述した６４ビット幅のレジスタファイル１２は、６４ビット全てを使用する６４ビット幅と、６４ビットの半分を使用する３２ビット幅と、６４ビットの４分の１を使用する１６ビット幅と、６４ビットの８分の１を使用する８ビット幅の、４つのビット幅について選択的に電源の供給ができるように構成されている。
【００８８】
レジスタファイル１２において使用する最大ビット幅の情報は、コンパイル処理後に、ステップS12において、実行モジュールを解析して、上述した予測処理により得ることができる。その得られたビット幅すなわちレジスタ幅の情報は、所定のコード（A）に含められる。なお、所定のコード（B）には、使用しないビット幅の部分への電源の供給の再開を指示するコードが含まれる。よって、ステップS12は、使用する最大ビット幅を予測する予測処理部を構成する。
【００８９】
プロセッサ１Aでは、不使用レジスタ数の情報と共に、レジスタファイル１２に対するビット幅の指定は、使用するビット幅（すなわち使用する最大ビット幅）の情報として、実行部２１からレジスタファイル制御信号出力部２２（図１１では図示せず）を介してレジスタファイル制御部１６Aに供給される。レジスタファイル制御部１６Aでは、不使用レジスタの情報から、使用するレジスタ数の情報が算出され、レジスタ個数指定レジスタ１６ａに保持される。使用するビット幅すなわちレジスタ幅の情報は、レジスタ幅指定レジスタ１６ｂに保持される。
【００９０】
レジスタファイル制御部１６Aに、使用するレジスタ個数が４つで、使用するレジスタ幅が３２ビット幅である情報が供給された場合、図１１において、矢印RC及びRLで示す範囲（図１１において斜線で示す部分）のみに電源の供給が行われ、その他の範囲のレジスタには電源の供給はされない。具体的には、レジスタR0からR3の４つのレジスタが使用レジスタとされ、かつその４つのレジスタR0からR4の中の０ビットから３１ビットまでのビットが使用ビット幅とされる。
【００９１】
図１２は、その指定された範囲内のレジスタ及びビット幅には電源の供給を行い、指定されていない範囲のレジスタには電源の供給を行わないようにするための回路の例を示す図である。図１２は、各レジスタの回路構成を示すものであり、図１２に示す回路が３２個設けられている。あるレジスタの下位の８ビットのみを指定するために、その８ビットのレジスタにクロック信号CLKの供給を制御するためのスイッチ素子SW1が設けられている。そして、そのレジスタの下位の１６ビットのうち下位８ビットを除く８ビットのみを指定するために、その８ビットのレジスタにクロック信号CLKの供給を制御するためのスイッチ素子SW２が設けられている。同様に、そのレジスタの下位の３２ビットのうち下位１６ビットを除く１６ビットのみを指定するために、その１６ビットのレジスタにクロック信号CLKの供給を制御するためのスイッチ素子SW３が設けられている。そして、全てのレジスタの６４ビットのうち下位３２ビットを除く上位の３２ビットのみを指定するために、その３２ビットのレジスタにクロック信号CLKの供給を制御するためのスイッチ素子SW４が設けられている。３２個のそれぞれのレジスタに設けられたスイッチ素子SW１〜４が、レジスタ選択部としてのスイッチ素子群回路１２ｂを構成する。
【００９２】
６４ビット全てを使用する６４ビット幅の場合、使用するレジスタのスイッチ素子SW1からSW4の全てをオンにするためのレジスタ制御信号RCs１からRCs４がレジスタファイル制御部１６Aからスイッチ素子群回路１２ｂに供給される。６４ビットの半分を使用する３２ビット幅の場合、使用するレジスタのスイッチ素子SW1からSW3をオンにするためのレジスタ制御信号RCs１からRCs３がレジスタファイル制御部１６Aからスイッチ素子群回路１２ｂに供給される。６４ビットの４分の１を使用する１６ビット幅の場合、使用するレジスタのスイッチ素子SW1とSW2をオンにするための制御信号RCs１とRCs２がレジスタファイル制御部１６Aからスイッチ素子群回路１２ｂに供給される。６４ビットの８分の１を使用する８ビット幅の場合、使用するレジスタのスイッチ素子SW1をオンにするための制御信号RCs１がレジスタファイル制御部１６Aからスイッチ素子群回路１２ｂに供給される。図１１のレジスタR4からR31のように、全く使用されないレジスタについては、全てのスイッチ素子SW1からSW4がオフとなる。
【００９３】
なお、所定のコード（B）には、使用されないビット幅のレジスタへの電源の供給の停止が解除するためのコードが含まれているので、実行モジュールの実行後に、使用されないビット幅のレジスタへの電源の供給は再開される。
【００９４】
以上のようにして、本実施の形態に係るプロセッサは、不使用レジスタについては、電源の供給の停止を行うことができ、かつ、使用するレジスタの中で、予測処理部によって予測された使用する最大ビット幅以外の部分には、電源の供給を停止することができるので、低消費電力で動作する。例えば、本実施の形態に係るプロセッサは、携帯電話等の低消費電力の求められる製品に搭載されれば、特に有効である。
【００９５】
例えば、６４ビット幅のレジスタが３２個のレジスタファイル１２において、３２ビット幅レジスタを８個だけに限定し動作させた場合、レジスタファイル１２は従来の８分の１の低消費電力で動作させることができる。
【００９６】
また、プロセッサに、上述した不使用レジスタへの電源の供給を停止するモードと、不使用レジスタへの電源の供給を停止しないモードの、２つのモードを設け、プロセッサが不使用レジスタへの電源の供給を停止するモードに設定されたときのみ、上述した不使用レジスタへの電源の供給を停止するようにしてもよい。
【００９７】
以上のように、上述した各実施の形態によれば、レジスタファイルにおいて、使用されないレジスタに電源の供給を停止することのできるプロセッサ、及びそのプロセッサのためのプログラムを生成するプログラム生成装置を実現することができる。
【００９８】
なお、各実施の形態により生成された実行モジュールを実行させて、使用しないレジスタあるいは使用しないビット幅のレジスタにアクセスがあるか否かをチェックするエミュレーションを実行するエミュレーション部を、プログラム生成装置１、１Aに設けるようにしてもよい。
【００９９】
図１３は、エミュレーション機能を有するプログラム生成装置の構成例を示す図であり、図１４は、エミュレーション機能を有するプログラム生成装置のソフトウエアの構成例を示す構成図であり、図１５は、エミュレーション機能の処理の流れの例を示すフローチャートである。なお、図１３において、図９と同じ構成要素については、同じ符号を付して説明は省略する。
【０１００】
すなわち、メモリ５４には、エミュレーション処理のためのプログラム５４ｄがストアされており、図１４に示すように、OS６１上で、エミュレーションプログラム、すなわちエミュレータ６２が動作し、そのエミュレータ６２がオブジェクトコード６３に対してエミュレーション処理を実行する。
【０１０１】
図１５に示すように、エミュレーション処理が実行される（ステップS21）と、そのエミュレーション処理の中で、不使用とされたレジスタへのアクセスがあった否かが判定される（ステップS22）。もしも、不使用とされたレジスタへのアクセスがあった場合は、ステップS22において、YESとなって、不使用レジスタ、すなわちオフ状態のレジスタへのアクセスがあったことを、プログラム開発者等のユーザへ、警告等の告知をする告知処理を実行する（ステップS23）。告知は、例えば、モニタ５３にそのアクセス内容を表示する等により行われる。不使用とされたレジスタへのアクセスがなければ、ステップS22において、NOとなって、処理は終了する。  
なお、第３の実施の形態のように、使用範囲を超えたレジスタ幅の使用あるいはアクセスがあった場合も同様に、告知処理を行うようにしてもよい。
【０１０２】
よって、このようなエミュレーション機能を有するプログラム生成装置５１Aは、実際にターゲットのプロセッサを動作させることなく、シミュレーションにより、その使用しないレジスタあるいはビット幅の非動作を確認することができる。
【０１０３】
言い換えれば、図１３から図１５に示すプログラム生成装置５１Aは、生成されたオブジェクトコードをエミュレーションにより実行し、動作がオフ状態のレジスタ等へのアクセスに対し警告をすることができるシミュレータシステムを構成する。
【０１０４】
以上のように、上述した各実施の形態に係るプロセッサによれば、使用されないレジスタに電源の供給をしないようにして、プロセッサの低消費電力化を図るので、プロセッサ自体の発熱量も低下し、ファン等によるプロセッサの冷却能力の低減を図ることにも繋がるというメリットもある。
【０１０５】
また、上述したプログラム生成装置によれば、ソフトウエア記述者であるプログラム開発者は、レジスタファイルの消費電力に注意を払わずにプログラムを記述することができる。かつ性能すなわち実行速度を落とさず記述することができる。
【０１０６】
また、上述した各実施の形態に係るプロセッサでは、動作周波数及び電源電圧を動的に変化させる、従来のfV制御に比べて、ハードウエア構成が簡素で、消費電力の低減が可能になる。
【０１０７】
また、上述した各実施の形態では、使用しないレジスタ数の情報が、所定のコード中に含まれて、レジスタファイル制御部へ供給されているが、使用するレジスタ数の情報を、所定のコード中に含むようにして、レジスタファイル制御部に供給するようにしてもよい。その場合、レジスタファイル制御部では、使用するレジスタ数の情報に基づいて、電源を供給するレジスタと、電源を供給しないレジスタを決定して、レジスタファイルを制御する。
【０１０８】
なお、以上の説明では、説明を簡単にするために、一つの機能を有するプログラムに対して生成された実行モジュールについて、レジスタファイル中の使用しないレジスタ等に対する電源の供給の制御に説明したが、プログラムが複数の機能モジュールを含む場合は、機能モジュール毎に、使用しないレジスタの数等を判定して、各機能モジュールに対応するタスクの実行において使用されない一部のレジスタ等へのクロック供給を停止するようにしてもよい。例えば、高級言語における関数毎に、使用するあるいは使用しないレジスタの数を判定して、レジスタファイルへの電源の供給を制御するようにしてもよい。その場合、プロセッサは、プログラムの実行時に、レジスタファイルの一部を動的にオン及びオフするプロセッサであり、プログラム生成装置は、プロセッサのレジスタファイルの一部を動的にオン及びオフする制御コードを埋め込む機能を持つコンパイルシステムであるということができる。
【０１０９】
なお、以上説明した動作を実行するプログラムは、コンピュータプログラム製品として、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ等の可搬媒体や、ハードディスク等の記憶装置等に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明のプログラム生成装置を実現することができる。
【０１１０】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【０１１１】
【図１】本発明の第１の実施の形態に係わるプロセッサの構成を示す構成図である。
【図２】第１の実施の形態に係わるプロセッサコアの内部構成を示すブロック図である。
【図３】第１の実施の形態に係わるレジスタファイルの構成を説明するための図である。
【図４】第１の実施の形態に係わる、プログラムをコンパイルするときの処理の流れを説明するための図である。
【図５】第１の実施の形態に係わる、低消費電力重視のコンパイル処理の流れの例を説明するためのフローチャートである。
【図６】第１の実施の形態に係わる、実行モジュールをに所定のコードが追加されたオブジェクトコードの構成を説明するための図である。
【図７】複数の加算器を用いてシグマ演算を行う場合の演算器の構成例を説明するための図である。
【図８】２つの加算器pipe-A、pipe-Bを用いて、生成された実行モジュールにおける処理の流れを説明するための図である。
【図９】第１の実施の形態に係わる、コンパイル装置の構成を示す構成図である。
【図１０】本発明の第２の実施の形態に係るコンパイル処理の流れの例を説明するためのフローチャートである。
【図１１】本発明の第３の実施の形態に係るマイクロプロセッサの構成を説明するための部分ブロック図である。
【図１２】第３の実施の形態に係る、指定された範囲内のレジスタ及びビット幅には電源の供給を行い、指定されていない範囲のレジスタには電源の供給を行わないようにするための回路の例を示す図である。
【図１３】エミュレーション機能を有するプログラム生成装置の構成例を示す図である。
【図１４】エミュレーション機能を有するプログラム生成装置のソフトウエアの構成例を示す構成図である。
【図１５】エミュレーション機能の処理の流れの例を示すフローチャートである。
【符号の説明】
【０１１２】
１、１A  プロセッサ、１１  プロセッサコア、１２  レジスタファイル、１３  命令メモリ、１４  データメモリ、１５  ロード／ストアユニット、１６、１６A  レジスタファイル制御部、５１、５１A  コンパイル装置
【図１】
2009193243.tif 000003
【図２】
2009193243.tif 000004
【図３】
2009193243.tif 000005
【図４】
2009193243.tif 000006
【図５】
2009193243.tif 000007
【図６】
2009193243.tif 000008
【図７】
2009193243.tif 000009
【図８】
2009193243.tif 000010
【図９】
2009193243.tif 000011
【図１０】
2009193243.tif 000012
【図１１】
2009193243.tif 000013
【図１２】
2009193243.tif 000014
【図１３】
2009193243.tif 000015
【図１４】
2009193243.tif 000016
【図１５】
2009193243.tif 000017