JP2009193243A - プロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置 - Google Patents
プロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置 Download PDFInfo
- Publication number
- JP2009193243A JP2009193243A JP2008032089A JP2008032089A JP2009193243A JP 2009193243 A JP2009193243 A JP 2009193243A JP 2008032089 A JP2008032089 A JP 2008032089A JP 2008032089 A JP2008032089 A JP 2008032089A JP 2009193243 A JP2009193243 A JP 2009193243A
- Authority
- JP
- Japan
- Prior art keywords
- registers
- register
- register file
- execution
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Power Sources (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【課題】プロセッサにおいてレジスタファイルの低消費電力化を図ることのできるプロセッサを提供する。
【解決手段】プロセッサ1は、複数のレジスタを有するレジスタファイル12と、レジスタファイル12における、電源の供給を停止する1以上のレジスタを選択可能なスイッチ素子群回路12aと、オブジェクトコードの実行時に、オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、レジスタファイル12を制御するためのレジスタファイル制御信号を出力する実行部21と、レジスタファイル制御信号に基づいて、電源の供給を停止する1以上のレジスタを選択するためのレジスタ制御信号をスイッチ素子群回路12aに出力するレジスタファイル制御部16とを有する。
【選択図】図1
【解決手段】プロセッサ1は、複数のレジスタを有するレジスタファイル12と、レジスタファイル12における、電源の供給を停止する1以上のレジスタを選択可能なスイッチ素子群回路12aと、オブジェクトコードの実行時に、オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、レジスタファイル12を制御するためのレジスタファイル制御信号を出力する実行部21と、レジスタファイル制御信号に基づいて、電源の供給を停止する1以上のレジスタを選択するためのレジスタ制御信号をスイッチ素子群回路12aに出力するレジスタファイル制御部16とを有する。
【選択図】図1
Description
本発明は、プロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置に関し、特に、レジスタファイルを有するプロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置に関する。
従来より、計算機システムにおけるメモリデバイスの省消費電力化、半導体集積回路装置内のモジュールの省消費電力化、等の種々の省電力化の技術が種々提案されている。例えば、メモリデバイスの省消費電力化のために、メモリデバイスにクロックイネーブル信号を追加して省消費電力待機機能を持たせる構成(例えば、特許文献1参照)、半導体集積回路装置内のモジュールにおいて動作しているモジュールにだけクロック信号を供給するようにする構成(例えば、特許文献2参照)、が提案されている。
ところで、プロセッサ内のレジスタファイルにおけるレジスタの数が32個、64個等、レジスタを多数個有するプロセッサにおいては、通常、高度な処理を除き、レジスタ全体が平均して使われる状況は稀である。
例えば、音声処理におけるノイズキャンセル、エンコード等の処理では、配列データ等から総和を求めるシグマ演算がしばしば行われる。N個の数の和を取るシグマ演算のプログラムは、複数の加算器の中で並列的に演算できる場合、並列的に演算が行われるように、コンパイラによってコンパイルされる。その結果、プロセッサ上の複数の加算器のそれぞれの入力側と出力側の各レジスタには、入力データあるいは各中間結果が保持されて並列的に演算を行われ、演算のための必要なサイクル数が少なくなるため、実行速度を上げることができる。
例えば、音声処理におけるノイズキャンセル、エンコード等の処理では、配列データ等から総和を求めるシグマ演算がしばしば行われる。N個の数の和を取るシグマ演算のプログラムは、複数の加算器の中で並列的に演算できる場合、並列的に演算が行われるように、コンパイラによってコンパイルされる。その結果、プロセッサ上の複数の加算器のそれぞれの入力側と出力側の各レジスタには、入力データあるいは各中間結果が保持されて並列的に演算を行われ、演算のための必要なサイクル数が少なくなるため、実行速度を上げることができる。
しかし、並列的に演算が行われる場合でも、常にプロセッサ内の全ての演算器が使用されることはなく、全てのレジスタが使用される場合は、稀である。実行速度を上げるために、演算器の数を増やして並列度を上げるようにする場合もあるが、演算器の数を増やした場合も、全てのレジスタが使用される場合は、稀となる。
また、例えば、暗号処理等のように、逆演算に時間がかかるようにさせたい場合の演算において、演算の依存関係が強い。演算の依存関係が強い場合は、少ない数のレジスタを用いてその演算が行われるため、多くのレジスタが未使用のまま使われない状態となる。
さらにまた、ソフトウエアが高級言語により記述され、種々の演算を含む場合は、変数の依存関係が多く、かつ連鎖する。よって、ソフトウエアが高級言語により記述された場合、コンパイラが、命令の並列性を見つけることは、一般的に困難とされている。
ところが、各演算器に対応して設けられる複数のレジスタを含むレジスタファイルは、パイプラインステージ毎に正確にデータの入出力を行う必要があるため、レジスタファイル内の全レジスタについて動作可能状態にしておかなければならず、消費電力の無駄が多い。そして、上述した2つの提案に係る技術においても、レジスタファイルにおける消費電力の低減については何ら考慮されていない。
特開2001-357672号公報
特開平08-106337号公報
本発明は、このような問題に鑑みてなされたものであり、プロセッサにおいてレジスタファイルの低消費電力化を図ることのできるプロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置を提供することを目的とする。
本発明の一態様によれば、複数のレジスタを有するレジスタファイルと、該レジスタファイルにおける、電源の供給を停止する1以上のレジスタを選択可能なレジスタ選択部と、オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する1以上のレジスタを選択するためのレジスタ制御信号を前記レジスタ選択部に出力するレジスタファイル制御部と、を有するプロセッサを提供することができる。
本発明の一態様によれば、複数のレジスタを有するレジスタファイルと、該レジスタファイルにおける、電源の供給を停止する1以上のレジスタを選択可能なレジスタ選択部と、オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する1以上のレジスタを選択するためのレジスタ制御信号を前記レジスタ選択部に出力するレジスタファイル制御部とを有するプロセッサのためのプログラム生成装置であって、入力されたプログラムをコンパイルして前記プログラムの実行モジュールを生成する実行モジュール生成部と、該実行モジュール生成部により生成された前記実行モジュールに追加する、前記使用するレジスタ数あるいは前記使用しないレジスタ数の情報を含む第1の所定のコードを生成するコード生成部と、生成された前記第1の所定のコードを前記実行モジュールに追加して、前記オブジェクトコードを生成するコード追加部と、を有するプログラム生成装置を提供することができる。
本発明によれば、プロセッサにおいてレジスタファイルの低消費電力化を図ることができるプロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置を実現することができる。
以下、図面を参照して本発明の実施の形態を説明する。
(第1の実施の形態)
まず図1に基づき、本発明の第1の実施の形態に係わるプロセッサの構成を説明する。図1は、本実施の形態に係わるプロセッサの構成を示す構成図である。
(第1の実施の形態)
まず図1に基づき、本発明の第1の実施の形態に係わるプロセッサの構成を説明する。図1は、本実施の形態に係わるプロセッサの構成を示す構成図である。
マイクロプロセッサであるプロセッサ1は、プロセッサコア11と、レジスタファイル12と、命令メモリ13と、データメモリ14と、レジスタファイル12とデータメモリ14間のデータのロード及びストアを制御するロード/ストアユニット15と、レジスタファイル制御部16とを含んで構成されている。
プロセッサコア11は、搭載されたオペレーティングシステム(以下、OSという)の制御下で、命令メモリ13から読み出された命令を命令デコーダ(図示せず)によりデコードし、デコーダされた命令に基づいてデータメモリ14から読み出されたデータに対して種々の演算処理を実行する。プロセッサコア11は、そのために各種演算回路を含んでいる。
命令メモリ13から読み出される命令は、プロセッサ1上で実行されるプログラムである実行モジュールとして命令メモリ13に記憶され、プロセッサコア11によって命令メモリ13から読み出されて、実行される。
ロード/ストアユニット15は、データメモリ14からのデータのロードすなわち読み出し、及びデータメモリ14へのデータのストアすなわち記憶を行う回路である。
ロード/ストアユニット15は、データメモリ14からのデータのロードすなわち読み出し、及びデータメモリ14へのデータのストアすなわち記憶を行う回路である。
レジスタファイル12は、プロセッサコア11内のレジスタ群の各レジスタのデータを保持するために複数のレジスタを有する回路であり、各レジスタには、プロセッサコア11の実行サイクル毎に変化するデータが保持される。本実施の形態では、レジスタファイル12は、それぞれが64ビット幅のデータを保持可能な複数のレジスタ、ここでは32個のレジスタ、を有する。
レジスタファイル制御部16は、後述するように、実行モジュールのタスクの実行時に、レジスタファイル12中において使用されない1以上のレジスタへの電源の供給を停止することができる回路である。具体的には、本実施の形態では、レジスタファイル制御部16は、タスクの実行において使用されない一部のレジスタへのクロック供給を停止することができる制御回路であり、レジスタ制御信号を出力する。レジスタファイル12への電源の供給を停止させる機能は、後述するような所定のモードでプログラムをコンパイルしたときに生成された実行モジュールに追加された所定のコードが、プロセッサコア11内の実行部21(図2参照)によって実行されて、プロセッサコア11がレジスタファイル制御部16へ、後述するレジスタファイル制御信号RFCを出力することによって実現される。
なお、コンパイルされるプログラムは、複数の機能モジュールを含む場合が多い。例えば、携帯電話用のプログラムであれば、メール用のプログラムと、WEB閲覧用のプログラム等、複数の機能に対応して複数のプログラムが含まれる。そのため、個々の機能モジュール毎に、タスクの実行において使用されない一部のレジスタへのクロック供給を停止するように、レジスタファイル制御部16は動作するが、以下の説明では、説明を簡単にするために、一つの機能を有するプログラム(あるいはタスク)に対して生成された実行モジュールについて、レジスタファイル12中の使用しないレジスタに対する電源の供給の制御が行われる場合を説明する。
図2は、プロセッサコア11の内部構成を示すブロック図である。プロセッサコア11は、実行部21と、レジスタファイル制御信号出力部22とを含んで構成される。実行部21は、入力されたオブジェクトコード形式の命令をデコードする命令デコーダと、入力された命令とデータに基づいて各種演算を実行する各種演算器を含む回路である。そして、実行部21は、レジスタファイル12のデータの読み出しおよび書き込みを行いながら、タスク内の各種命令を実行する。
オブジェクトコードである実行モジュールに追加された所定のコードには、実行モジュールが実行されたときに使用しないレジスタ数、すなわち不使用レジスタ数、の情報が含まれている。実行部21が実行モジュールに追加された所定のコードを実行すると、実行部21は、使用しないレジスタ数の情報を、レジスタファイル制御信号出力部22に渡す。レジスタファイル制御信号出力部22は、使用しないレジスタの数の情報を含むレジスタファイル制御信号RFCをレジスタファイル制御部16へ出力する。よって、プロセッサコア11は、オブジェクトコードの実行時に、オブジェクトコードに含まれる不使用レジスタ数の情報に基づいて、レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部を構成する。
レジスタファイル制御部16は、そのレジスタファイル制御信号RFCに基づいて、使用しないレジスタへの電源の供給を停止するための信号を含むレジスタ制御信号RCを生成して、レジスタファイル12へ出力する。
図3は、本実施の形態に係わるレジスタファイル12の構成を説明するための図である。レジスタファイル12には、それぞれが64ビット幅のデータを保持可能な32個のレジスタR1〜R32(以下、レジスタR1からR32を纏めて指す、あるいはいずれかを指す場合は、Rという)が設けられている。各レジスタRには、動作用のクロック信号CLKが信号線31から供給可能に構成されている。各レジスタRへのクロック信号CLKの供給を制御するスイッチ素子SWが、レジスタ毎に設けられている。複数のスイッチ素子SWからなるスイッチ素子群回路12aが、電源の供給を停止する1以上のレジスタを選択することが可能なレジスタ選択部を構成する。すなわち、スイッチ素子群回路12aは、各レジスタRへのクロック信号CLKの供給を制御するための複数のスイッチ素子を含んでいる。
レジスタ制御信号RC1〜RC32(以下、レジスタ制御信号RC1からRC32を纏めて指す、あるいはいずれかを指す場合は、RCという)が、スイッチ素子群回路12aの各スイッチ素子SWへの制御信号として、レジスタファイル制御部16からレジスタファイル12へ供給される。後述するように、レジスタ制御信号RCは、使用する1以上のレジスタに対しては、スイッチ素子SWをオン状態のままにしてクロック信号CLKが供給され、使用しない1以上のレジスタに対しては、スイッチ素子SWをオフ状態にしてクロック信号CLKが供給しないようにする制御信号である。
よって、プロセッサコア11の実行部21は、実行モジュールのタスクが読み込まれて実行される前に追加された所定のコードを実行して使用しない1以上のレジスタに電源の供給がされないようにした後に、実行モジュールを実行する。
そのために、実行モジュールの先頭に追加された所定のコードは、実行部21によって実行されると、レジスタファイル制御信号出力部22に対してレジスタファイル制御信号RFCをレジスタファイル制御部16へ出力させるための信号を出力するためのコードである。レジスタファイル制御信号RFCが出力された後に、実行モジュールのタスクが実行される。よって、レジスタファイル12において、使用されない1以上のレジスタには電源の供給がされないので、プロセッサ1の低消費電力化を図ることができる。
さらに、後述するように、実行モジュールのタスクの実行が終了すると、電源の供給を停止した1以上のレジスタに対して、電源の供給を復帰するためのコードが実行される。
ここで、プログラムのコンパイルについて説明する。
図4は、プログラムをコンパイルするときの処理の流れを説明するための図である。ユーザは、C言語等の高級言語で記述してプログラムを作成する。プロセッサ1に実行させるプログラムのソースプログラムSPは、コンパイラによってコンパイルされるが、本実施の形態では、そのコンパイル時に、どのような形式あるいはモードでのコンパイルを行うかが指定可能となっている。
図4は、プログラムをコンパイルするときの処理の流れを説明するための図である。ユーザは、C言語等の高級言語で記述してプログラムを作成する。プロセッサ1に実行させるプログラムのソースプログラムSPは、コンパイラによってコンパイルされるが、本実施の形態では、そのコンパイル時に、どのような形式あるいはモードでのコンパイルを行うかが指定可能となっている。
例えば、ユーザは、プログラム実行時の性能を重視してすべてのレジスタを動作させるようにプログラムをコンパイルしたい場合は、性能重視のコンパイル形式を選択する。また、プログラムを開発する者であるユーザは、デバッグのためにプログラムをコンパイルするときは、コンパイル速度の速いモードのコンパイル形式を選択する。あるいは、ユーザは、プログラムの実行時にレジスタファイル12中の使用しない1以上のレジスタを動作させないようにして低消費電力でプロセッサが動作するように、プログラムをコンパイルしたい場合は、低消費電力動作のコンパイル形式を選択する。
コンパイル処理は、図9を用いて後述するコンパイラ装置によって行われる。コンパイラ装置は、パーソナルコンピュータ(以下、PCという)等のコンピュータ装置であり、ユーザが、コンパイラ装置に対してコンパイル処理を指示すると、コンパイラ装置は、図示しない記憶装置に記憶されたソースプログラムSPを読み出して、コンパイル処理を行う。
コンパイル処理において、性能重視のコンパイル形式が選択されたときは、性能重視のコンパイル処理(ステップS1)が実行されて、オブジェクトコードOP(1)が生成される。オブジェクトコードOP(1)は、最適化処理が施されて、実行速度の速い形式の実行モジュールとなる。
コンパイル処理において、コンパイル速度重視のコンパイル形式が選択されたときは、コンパイル速度重視のコンパイル処理(ステップS2)が実行されて、オブジェクトコードOP(2)が生成される。オブジェクトコードOP(2)は、最適化処理の施されていない実行モジュールとなる。
コンパイル処理において、低消費電力重視のコンパイル形式が選択されたときは、低消費電力重視のコンパイル処理(ステップS3)が実行されて、オブジェクトコードOP(3)が生成される。オブジェクトコードOP(3)は、レジスタファイル12において使用されない1以上のレジスタをオフにするための所定のコードが実行モジュールに追加されたオブジェクトコードとなる。
次に、低消費電力重視のコンパイル処理(S2)について説明する。
図5は、低消費電力重視のコンパイル処理の流れの例を説明するためのフローチャートである。
まず、低消費電力重視のコンパイル処理では、コンパイラ装置は、第1に、ソースプログラムSPに対して、通常のコンパイル処理を実行する(ステップS11)。通常のコンパイル処理は、例えば、ステップS1の性能重視のコンパイル処理である。よって、ステップS11は、入力されたソースプログラムSPをコンパイルして実行モジュールを生成する実行モジュール生成部を構成する。
図5は、低消費電力重視のコンパイル処理の流れの例を説明するためのフローチャートである。
まず、低消費電力重視のコンパイル処理では、コンパイラ装置は、第1に、ソースプログラムSPに対して、通常のコンパイル処理を実行する(ステップS11)。通常のコンパイル処理は、例えば、ステップS1の性能重視のコンパイル処理である。よって、ステップS11は、入力されたソースプログラムSPをコンパイルして実行モジュールを生成する実行モジュール生成部を構成する。
次に、コンパイラ装置は、コンパイル処理結果である実行モジュールに追加する、不使用レジスタ数の情報を含む所定のコードの生成を実行する(ステップS12)。所定のコードは、ステップS11において生成された実行モジュール中に現れたレジスタの数に基づいて生成される。
C言語で書かれたプログラムから実行モジュールを生成するときに、プロセッサ1内の各レジスタがどのように使用されるかは、コンパイラによって決定される。コンパイル時、コンパイラは、レジスタファイル12内の使用する1以上のレジスタをラベリングしながら割り当てる。従って、実行モジュール内の各レジスタのラベル番号を参照して、各実行サイクルにおいて、プログラムすなわちタスクが使用するレジスタの数からラベル番号中の最大値を検出することにより、コンパイラ装置は、使用しない1以上のレジスタの数を決定することができる。そのタスクの使用しないレジスタ数に基づいて、不使用レジスタ数の情報を含む所定のコードが生成される。
従って、ステップS12は、ステップS11により生成された実行モジュールに追加する、不使用レジスタ数の情報を含む所定のコードを生成するコード生成部を構成する。
なお、後述するように、ステップS12では、実行モジュールの実行後に、電源の供給の停止を解除するためのコードも生成される。
なお、後述するように、ステップS12では、実行モジュールの実行後に、電源の供給の停止を解除するためのコードも生成される。
そして、コンパイラ装置は、生成した所定のコードを、ステップS11においてコンパイルした実行モジュールに追加する追加処理を実行する(ステップS13)。ステップS13が、生成された所定のコードを実行モジュールに追加して、オブジェクトコードを生成するコード追加部を構成する。
この場合、所定のコードは、ステップS11のコンパイル処理において生成された実行モジュールの最初と最後に付加されるように、追加される。図6は、実行モジュールに所定のコードが追加されたオブジェクトコードの構成を説明するための図である。
この場合、所定のコードは、ステップS11のコンパイル処理において生成された実行モジュールの最初と最後に付加されるように、追加される。図6は、実行モジュールに所定のコードが追加されたオブジェクトコードの構成を説明するための図である。
実行モジュール31は、ステップS11において、上述した通常のコンパイルされた結果得られたオブジェクトコードである。その実行モジュール31の先頭に、所定のコード(A)32が追加される。そして、実行モジュール31の最後尾に、別の所定のコード(B)33も追加される。
追加コードの一つである所定のコード(A)は、レジスタファイル制御信号出力部22が、タスクの実行において不使用レジスタ数をレジスタファイル制御部16へ通知するレジスタファイル制御信号RFCを出力することができるようにするためのオブジェクトコードである。
よって、所定のコード(A)が実行部21によって実行されると、レジスタファイル制御信号出力部16からレジスタファイル制御信号RFCが出力される。
よって、所定のコード(A)が実行部21によって実行されると、レジスタファイル制御信号出力部16からレジスタファイル制御信号RFCが出力される。
ここで、レジスタファイル12の中でプログラムあるいはタスクが使用しないレジスタの数が決定される処理について具体例を用いて説明する。ここでは、説明を簡単にするために簡単な演算処理例を用いて説明する。
例えば、C言語で書かれたソースプログラムが、8つの値を加算する加算処理を実行して8つの値の総和を求めるためのプログラム、すなわちいわゆるシグマ演算のプログラムであるとする。そして、プロセッサ1は、2つの演算器、ここでは2つの加算器を使って並列処理を実行可能であるとする。
加算する8つのデータは、data[0]からdata[7]であるとし、iを0から7の整数としたときに、data[i]をそれぞれ順番に加算することによってその総和を求めることも可能である。しかし、コンパイラが、プロセッサコア11内に予め設けられた各種演算器の中から2つの加算器を用いて並列演算可能であると判断して、実行モジュールを生成する場合がある。
図7は、複数の加算器を用いてシグマ演算を行う場合の演算器の構成例を説明するための図である。コンパイラは、通常のコンパイル処理によって、data[0]とdata[1]の加算を加算器41によって行い、data[2]とdata[3]の加算を加算器42によって行い、data[4]とdata[5]の加算を加算器43によって行い、data[6]とdata[7]の加算を加算器44によって行い、加算器41と42のそれぞれの出力tmp0とtmp1の加算を加算器45によって行い、加算器43と4のそれぞれの出力tmp2とtmp3の加算を加算器46によって行い、加算器45と46のそれぞれの出力tmp4とtmp5の加算を加算器47によって行い、最終的に、総和sumを得るように実行モジュールを生成したとする。そして、2つの加算処理を、2つの加算器を並列に動作させて実行するように、実行モジュールが生成されたとする。
生成された実行モジュールは、図6の実行モジュール31の部分であり、各レジスタへデータのロード命令、各加算器による加算命令等を含む。
生成された実行モジュールは、図6の実行モジュール31の部分であり、各レジスタへデータのロード命令、各加算器による加算命令等を含む。
図8は、2つの加算器pipe-A、pipe-Bを用いて、生成された実行モジュールにおける処理の流れを説明するための図である。コンパイラは、実行モジュールを生成する場合に、上述の加算器41から47の加算処理を、それぞれがパイプライン処理を行う2つの加算器(pipe-A,pipe-B)に割り当てると共に、レジスタファイル12内の各レジスタを、2つの加算器に必要なレジスタに割り当てる。
図8は、加算器41と42による2つの加算演算を第1のサイクル(Cycle1)において実行し、加算器43と44による2つの加算演算を第2のサイクル(Cycle2)において実行し、加算器45と46による2つの加算演算を第3のサイクル(Cycle3)において実行し、最後のサイクル(Cycle4)において、2つの加算器からの2つの出力の加算演算を行うように、プログラムは、コンパイルされたことを示している。
このような実行モジュールの場合、レジスタファイル12内のレジスタをいくつ使用するかというと、最初に8つの入力データdata[0]からdata[7]を保持しておくために、レジスタは、8つ必要となる。その後に使用するレジスタの数は、2つの加算器の加算結果を保持するためのレジスタとなるので、4つ以下となる。
コンパイラは、各サイクルにおける演算に必要なレジスタに対して、数字の1から順番に番号を付すラベリング処理を行う。その結果、各サイクルにおいて使用されるレジスタの数は、ラベリングによって付された番号の最大値が、そのタスクの処理において必要なレジスタの数である。
また、コンパイラは、ラベリングによって付されたレジスタを、ラベリングによって付された番号の小さい順から、レジスタファイル12内のレジスタの番号の小さい順から割り当てる。すなわち、レジスタファイル12内で使用されるレジスタは、図3に示すレジスタファイル12の場合であれば、レジスタR1から順番に割り当てられる。
図7のタスクの場合、最大8つのレジスタしか使用しないため、レジスタファイル12の32個のレジスタのうち、24個は、使用しないことになる。すなわち、図7の場合、使用しないレジスタ数(すなわち不使用レジスタ数)は、24個となる。よって、この24個への電源の供給を停止することによって、省電力を図ることができる。
本実施の形態では、図5の追加する所定のコードの生成処理(ステップS12)において、まず、上述したコンパイルされた実行モジュールからレジスタのラベルをチェックすることによって、ラベリングによって付された番号の最大値が抽出される。よって、所定のコードの生成処理では、抽出された最大値に基づいて、不使用レジスタ数の情報をレジスタファイル制御部16へ送信する処理を、レジスタファイル制御信号出力部22に実行させるコードが生成される。
レジスタファイル制御部16は、受信した不使用レジスタ数の情報から、使用しないレジスタへのクロックCLK供給を停止するためのレジスタ制御信号RCを生成して出力する。
図7の場合、32個のレジスタ中、24個は使用しないので、レジスタファイル制御部16は、使用しないレジスタR9からR32のそれぞれに対応するスイッチ素子SWをオフするレジスタ制御信号RC9からRC32を生成して、スイッチ素子群回路12aに出力する。その結果、タスクを実行中、レジスタファイル12のレジスタR1からR8へのクロック信号CLKの供給は継続されるが、レジスタR9からR32へのクロック信号CLKの供給は停止される。
また、実行モジュール31の後に追加される所定のコード(B)33は、所定のコード(A)32において、クロック信号CLKの供給が停止された1以上のレジスタへのクロック信号CLKの供給を再開するためのコードである。上記の例であれば、24個のレジスタが、所定のコード(A)32においてオフされたので、所定のコード(B)33は、そのクロック信号CLKの供給を停止した24個のレジスタへのクロック信号CLKの供給を再開させるためのコードである。すなわち、所定のコード(B)33は、電源の供給の停止の解除をさせるためのレジスタファイル制御信号RFCをレジスタファイル制御部16へ送信する処理を、レジスタファイル制御信号出力部22に実行させるためのコードである。所定のコード(A)32及び所定のコード(B)33は、言い換えると、レジスタファイル12の動作を制御する制御プログラムであり、その制御プログラムによって、レジスタファイル12の各レジスタへの電力供給が制御される。
以上の例では、コンパイル処理の中で、シグマ演算に必要な加算器の割り付けだけでなく、必要なレジスタの割り付けも行われる。レジスタの割り付けは、例えば、レジスタファイル12のレジスタの中で、レジスタ番号の小さい順に行われる。その場合は、割り付けられたレジスタ番号の最大値が、シグマ演算に必要なレジスタの数となる。よって、ステップS12において、割り付けられたレジスタ番号の最大値をチェックあるいは解析することによって、シグマ演算に用いられるレジスタの数を判定することができる。上記の例であれば、上述したシグマ演算処理において使用するレジスタの最大数は、8個であることを判定することができる。図7の場合、入力データが8個であるため、最初のデータ保持のためのレジスタが8個必要となり、その後は、各加算器の加算結果の利用となるので、レジスタ数は8を超えることはない。従って、上述したシグマ演算中、使用されるレジスタ数は8個であるため、レジスタファイル12の32個のレジスタ中、24個へは電源の供給を停止してもよい。
よって、ステップS12は、タスクの実行時に、使用されないレジスタへの電源の供給を停止させるための所定のコード(A)と、タスクの実行後に、電源の供給を停止したレジスタへの電源の供給を再開するための所定のコード(B)を生成する。これら生成された2つの所定のコードが実行モジュールに追加されて、プロセッサ1において実行されるので、プロセッサ1のレジスタファイル12の省電力化を図ることができる。
なお、以上説明した例では、レジスタファイル制御信号出力部22が、レジスタファイル制御信号RFCを出力しているが、実行部21が所定のコード(A)及び(B)を実行してレジスタファイル制御信号RFCを生成して、レジスタファイル制御部16へ直接出力するようにしてもよい。
また、図4及び図5のコンパイル処理は、図9に示すようなコンパイル装置によって実行される。図9は、コンパイル装置の構成を示す構成図である。プログラム生成装置としてのコンパイル装置51は、中央処理装置(CPU)本体52と、表示装置としてのモニタ53と、記憶装置としてのメモリ54とを含んで構成されている。メモリ54には、コンパイル処理プログラム等のプログラム54a、コンパイル処理対象のソースプログラムであるソースコード54b、及びコンパイル処理されて生成された実行モジュール等を含むオブジェクトコード54cが記憶される。
プログラム54aが本体52に読み込まれて実行されることによって、ソースコード54bをコンパイルして実行モジュール31を生成し、かつ所定のコード32,33を実行モジュール31に追加する処理が実行される。
以上のように、本実施の形態によれば、レジスタファイルの低消費電力化を図ることができるプロセッサおよびそのためのプログラム生成装置を実現することができる。
(第2の実施の形態)
上述した第1の実施の形態では、コンパイル処理後、レジスタファイル中でいくつレジスタが使用されたかをチェックして、使用しない1以上のレジスタへの電源の供給を停止するようにしていた。
上述した第1の実施の形態では、コンパイル処理後、レジスタファイル中でいくつレジスタが使用されたかをチェックして、使用しない1以上のレジスタへの電源の供給を停止するようにしていた。
第2の実施の形態に係るプロセッサ及びコンパイラ装置の構成は、第1の実施の形態に係るプロセッサ及びコンパイラ装置と同様であるが、第2の実施の形態では、演算速度が低下しない範囲内で、使用するレジスタ数を出来るだけ少なくするようにコンパイル処理が行われるようにする点が、第1の実施の形態と異なる。なお、以下の説明において、第1の実施の形態と同じ構成要素については、同じ符号を付して説明は省略する。第2の実施の形態に係るコンパイル処理は、図9に示すようなコンパイル装置51において実行される。
図10は、第2の実施の形態に係るコンパイル処理の流れの例を説明するためのフローチャートである。本実施の形態では、コンパイル処理の前処理として、使用可能なレジスタ数を変化させて実行サイクル数を予測し、得られた複数の予測結果に基づいて、最適なレジスタ数を決定する処理が行われる。その前処理の後に、コンパイル処理が実行される。
具体的な例を挙げて説明する。図10は、第1の実施の形態と同様に、レジスタファイル12のレジスタ数が32個である場合の例であり、所定の数のレジスタ数しか使用できないものとしてコンパイル処理を複数回行い、各回において実行サイクル数を予測する。
本実施の形態では、まず、あるプログラムをレジスタファイル12のレジスタ数を8個としてコンパイルする(S31)。
8個のレジスタしか使用できないものとしてコンパイル処理を実行した結果、生成されたプログラムの実行時のサイクル数を予測する(ステップS32)。
8個のレジスタしか使用できないものとしてコンパイル処理を実行した結果、生成されたプログラムの実行時のサイクル数を予測する(ステップS32)。
その予測の結果を出力、8個のレジスタを使用する場合の実行サイクル数が、5000であったとすれば、その予測結果の情報は、メモリ54に記憶される(ステップS33)。
使用できるレジスタ数を変更して、同様の処理を行う。ここでは、レジスタ数を16個しか使用できないものとしてコンパイル処理を行い(ステップS41)、そのときの実行サイクル数を予測し(ステップS42)、そして、その予測結果をメモリ54にストアする(ステップS43)。さらに同様に、レジスタ数を24個しか使用できない場合と、32個の全てを使用できる場合とについても、それぞれ、コンパイル処理(ステップS51、S61)と、実行サイクル数の予測処理(ステップS52、S62)と、予測結果の記憶処理(ステップS53、S63)を実行する。ここで、図10に示すように、16個のレジスタを使用する場合の実行サイクル数が、1000であり、24個及び32個のレジスタを使用する場合の実行サイクル数も、1000であったとする。
以上の処理の結果、離散的に変化させた使用可能なレジスタ数に基づくコンパイル処理の結果、変化させたレジスタ数毎に、実行サイクル数の予測結果の情報を得ることができる。
上述したサイクル数の予測処理は、例えば、後述する図14に示すエミュレーション処理のためのプログラムを用いて行われる。エミュレーション処理のためのプログラム(すなわちエミュレータ)は、関数の実行に要するサイクル数を取得することができるものとする。
得られた複数の予測結果の情報の中から、離散的に変化させたレジスタ数毎に予測した実行サイクル数の中で、少ない実行サイクル数の中で最もレジスタ数の少ない場合と、その少ない実行サイクル数よりも多いサイクル数の場合であってその最も少ないレジスタ数に近いレジスタ数の場合を抽出し、その2つの場合の間に存在するレジスタ数について、上述と同様な、コンパイル処理と、実行サイクル数の予測、及び予測結果の記憶の処理を実行する。
具体的には、ステップS33、S43、S53及びS63において、それぞれレジスタ数が8個、16個、24個及び32個の場合についての予測結果が得られている。4つの予測結果の中で、レジスタ数の近い2つの場合を選択し、その2つの場合における予測した実行サイクル数の差を算出する。例えば、レジスタ8個の場合と16個の場合における予測実行サイクル数の差を計算すると、5000サイクルである。同様に、レジスタ数の近い2つの場合として、レジスタ16個の場合と24個の場合における予測実行サイクル数の差を計算すると、0サイクルである。同様に、レジスタ数の近い2つの場合として、レジスタ24個の場合と32個の場合における予測実行サイクル数の差を計算すると、0サイクルである。
従って、レジスタ数8個と16個の2つの場合が、離散的に変化させたレジスタ数毎に予測した実行サイクル数の中で、少ない実行サイクル数(1000)の中で最もレジスタ数の少ない場合(16個)と、その少ない実行サイクル数(1000)よりも多いサイクル数(5000)の場合であってその最も少ないレジスタ数(16個)に近いレジスタ数(8個)の場合であることを抽出することができる。
次に、抽出された2つの場合(レジスタ8個でコンパイルした場合とレジスタ16でコンパイルした場合)の間で、使用可能なレジスタ数を連続的に変化させて、それぞれの場合における実行サイクル数の予測を行う。
具体的には、レジスタ数が8個と16個については、実行サイクル数の予測はされているので、9,10,11,12,13,14,15個の7つの場合のそれぞれについてステップS31からS33までの処理と同様の処理を行う(ステップS71)。図10では、7つの全ての場合の処理内容については省略しているが、ステップS71では、各レジスタ数の場合における実行サイクル数の予測処理が行われる。
具体的には、レジスタ数が8個と16個については、実行サイクル数の予測はされているので、9,10,11,12,13,14,15個の7つの場合のそれぞれについてステップS31からS33までの処理と同様の処理を行う(ステップS71)。図10では、7つの全ての場合の処理内容については省略しているが、ステップS71では、各レジスタ数の場合における実行サイクル数の予測処理が行われる。
7つの場合において、実行サイクル数の予測結果が、例えば、
9個:4500サイクル
10個:3500サイクル
11個:2200サイクル
12個:1800サイクル
13個:1000サイクル
14個:1000サイクル
15個:1000サイクル
であったとする。
9個:4500サイクル
10個:3500サイクル
11個:2200サイクル
12個:1800サイクル
13個:1000サイクル
14個:1000サイクル
15個:1000サイクル
であったとする。
8から16個までの連続するレジスタ数の場合の中で、予測実行サイクル数が増加する直前のサイクル数を判定する(ステップS72)。言い換えると、得られた11個の予測実行サイクル数の中で、予測実行サイクル数が少なくかつ変化しない場合の中で、最もレジスタ数が少ない場合を、最適なレジスタ数の場合として判定する。上記の例であれば、13個のレジスタ数の場合が、最適なレジスタ数と判定される。すなわち、最適なレジスタ数とは、タスクの実行速度を低下させない範囲内で、レジスタファイル12の中で使用しない1以上のレジスタの数を最も少なくしたときのレジスタ数である。ステップS72が、使用可能なレジスタ数を変化させてコンパイルした結果から、最適レジスタ数を判定する最適レジスタ数判定部を構成する。
ステップS72の最適レジスタ数判定部によって判定された最適なレジスタ数、ここでは13個のレジスタ数においてコンパイルされたときの実行モジュール31と、最適数とされた値、ここでは13を、32から引いた数(19)を、不使用レジスタ数の情報として所定のコード中に埋め込み、実行モジュール31に所定のコード32,33を追加したオブジェクトコードを出力する(ステップS73)。
その結果、ステップS73において出力されたオブジェクトコードは、命令メモリ13に記憶され、プロセッサコア11により実行される。その結果、実行モジュール31は、最適なレジスタ数に基づくプログラムであり、所定のコード32,33は、使用しないレジスタ数の情報を含むコードとして、レジスタファイル制御部16に供給される。その結果、レジスタファイル制御部16は、13個のレジスタを使用するように電源の供給を行い、19個のレジスタについては電源の供給を停止するように、レジスタ制御信号RCを出力してレジスタファイル12を制御する。
以上のように、上述した例の場合であれば、コンパイラは8個,16個,24個,32個の4通りのコンパイル結果および実行時の予測サイクル数を出力しさらにレジスタ1個単位でレジスタ数を変化させ、ここでは、9個、10個、11個、12個、13個、14個、15個の7通りのコンパイル結果および実行時の予測サイクル数を出力し、コンパイラ装置は、合計11通りの予測サイクル数の情報を得る。そして、コンパイラ装置51は、実行速度が低下する直前のレジスタ個数を、最適レジスタ数として、32から引いた数を、不使用レジスタ数と判定する。
以上のように、本実施の形態のプログラム生成装置によれば、使用可能なレジスタ数を変化させてコンパイルした結果から、最適レジスタ数を判定し、使用するレジスタ数あるいは不使用レジスタ数は、その最適レジスタ数に基づいて決定される。そして、その最適レジスタ数は、使用可能なレジスタ数を変化させてコンパイルして得られた複数の予測実行サイクル数の中で実行サイクル数が最も少なく、かつ使用可能なレジスタ数が最も少ない場合のレジスタ数である。
よって、本実施の形態によれば、第1の実施の形態の効果に加えて、不使用レジスタの数は、性能が低下しない範囲内で、最も少ない数となるように決定される。
以上のように、本実施の形態のプログラム生成装置によれば、使用可能なレジスタ数を変化させてコンパイルした結果から、最適レジスタ数を判定し、使用するレジスタ数あるいは不使用レジスタ数は、その最適レジスタ数に基づいて決定される。そして、その最適レジスタ数は、使用可能なレジスタ数を変化させてコンパイルして得られた複数の予測実行サイクル数の中で実行サイクル数が最も少なく、かつ使用可能なレジスタ数が最も少ない場合のレジスタ数である。
よって、本実施の形態によれば、第1の実施の形態の効果に加えて、不使用レジスタの数は、性能が低下しない範囲内で、最も少ない数となるように決定される。
(第3の実施の形態)
上述した2つの実施の形態では、使用しないレジスタへの電源の供給を停止するものであるが、第3の実施の形態に係るプロセッサは、使用しないレジスタについては、電源の供給の停止を行うと共に、使用するレジスタの中で、演算処理に使用されるビット幅以外の部分には、電源の供給を停止するようにした。なお、以下の説明において、第1の実施の形態と同じ構成要素については、同じ符号を付して説明は省略する。
上述した2つの実施の形態では、使用しないレジスタへの電源の供給を停止するものであるが、第3の実施の形態に係るプロセッサは、使用しないレジスタについては、電源の供給の停止を行うと共に、使用するレジスタの中で、演算処理に使用されるビット幅以外の部分には、電源の供給を停止するようにした。なお、以下の説明において、第1の実施の形態と同じ構成要素については、同じ符号を付して説明は省略する。
図11は、第3の実施の形態に係るマイクロプロセッサ1Aにおける、レジスタファイル12Aと、ロード/ストアユニット15と、レジスタファイル制御部16Aと、実行部21の部分の構成を説明するための部分ブロック図である。
実行部21は、ここでは、命令デコーダ21aと、2つの演算器(pipe-A,pipe-B)21b、21cを有する。命令メモリ13からロードされたオブジェクトコードのプログラムは、命令デコーダ21aによってデコードされて、2つの演算器21b、21cを使用しながら、実行される。また、ロード/ストアユニット15を介して、演算に必要なデータはデータメモリ14から読み出され、演算結果は、データメモリ14に書き込まれる。
上述した第1及び第2の実施の形態では、不使用レジスタ数の情報が、所定のコード中に含まれて、レジスタファイル制御部16Aに供給されている。本実施の形態においても、不使用レジスタには電源の供給がされないように、レジスタファイル制御部16Aは、レジスタファイル12を制御する。レジスタファイル制御部16Aは、使用するレジスタ数のデータを保持するために、レジスタ個数指定レジスタ16aを有する。
本実施の形態では、さらに、レジスタファイル制御部16Aは、使用するレジスタの中で使用しないビット幅のレジスタへの電源の供給を停止するように、レジスタファイル12を制御する。言い換えれば、第1及び第2の実施の形態に係るプロセッサは、レジスタファイルの個数を指定してレジスタファイル12の一部をオンあるいはオフする制御機能を有していたが、本実施の形態のプロセッサは、レジスタファイル12のレジスタ幅を指定してレジスタファイル12の一部をオンあるいはオフする制御機能を有する。
コンパイルされて生成された実行モジュール31の実行中に、処理されるデータのビット数、加算器による加算の回数等の演算内容に基づいて、使用する最大ビット幅を予測することができる。この予測処理は、上述したステップS12において行われる。すなわち、予測処理によって、入力されるデータのビット数と、そのデータに対する演算処理の内容から、使用する最大ビット幅の予測をすることができる。例えば、16ビットのデータに対して加算器によって、図7のような演算が行われる処理であれば、32ビット幅のレジスタで充分である。また、32ビットのデータに対して、乗算が行われるのであれば、64ビット幅のレジスタが必要となる。
例えば、使用されるビット幅の予測は、次のような方法で行われる。
1. 関数内で使用するレジスタの個数を調べる。
2. レジスタ個数分の利用履歴を入れるメモリ領域を確保する。
前ビット未使用として初期化する。(ビット幅は0bit)
3. 利用レジスタ番号分(n=0〜利用個数N)だけ4〜7を繰り返す。
4. レジスタ(n)にアクセスする命令列を探す。
5. 4で調べた命令によりレジスタ(n)がどのビット幅を使うかを命令情報テーブルを参照しながら調べる。
6. レジスタ(n)に必要なビットを未使用から使用に変更する。
既に使用になっているものは使用のままにする。
7. 4に戻る。
8. レジスタ(n=0〜利用個数N)の利用ビット幅が分かる。
9. n=0〜利用個数Nで最も大きなビット幅を求める。
1. 関数内で使用するレジスタの個数を調べる。
2. レジスタ個数分の利用履歴を入れるメモリ領域を確保する。
前ビット未使用として初期化する。(ビット幅は0bit)
3. 利用レジスタ番号分(n=0〜利用個数N)だけ4〜7を繰り返す。
4. レジスタ(n)にアクセスする命令列を探す。
5. 4で調べた命令によりレジスタ(n)がどのビット幅を使うかを命令情報テーブルを参照しながら調べる。
6. レジスタ(n)に必要なビットを未使用から使用に変更する。
既に使用になっているものは使用のままにする。
7. 4に戻る。
8. レジスタ(n=0〜利用個数N)の利用ビット幅が分かる。
9. n=0〜利用個数Nで最も大きなビット幅を求める。
例:関数A (レジスタを3個利用)
プログラムコード
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_!!!!_!!!!
予測ビット幅
この関数内で利用しているレジスタ3個の最大利用ビット幅は32bitであり、64bitレジスタの上位32bitは未使用と判断できる。
このような予測処理によって、処理されるデータ、演算内容等に基づいて、プログラムが使用する最大ビット幅が予め予測できる場合は、その予測された最大ビット幅を超えるビット幅の部分のレジスタへの電源の供給を停止する。
上述した64ビット幅のレジスタファイル12は、64ビット全てを使用する64ビット幅と、64ビットの半分を使用する32ビット幅と、64ビットの4分の1を使用する16ビット幅と、64ビットの8分の1を使用する8ビット幅の、4つのビット幅について選択的に電源の供給ができるように構成されている。
レジスタファイル12において使用する最大ビット幅の情報は、コンパイル処理後に、ステップS12において、実行モジュールを解析して、上述した予測処理により得ることができる。その得られたビット幅すなわちレジスタ幅の情報は、所定のコード(A)に含められる。なお、所定のコード(B)には、使用しないビット幅の部分への電源の供給の再開を指示するコードが含まれる。よって、ステップS12は、使用する最大ビット幅を予測する予測処理部を構成する。
プロセッサ1Aでは、不使用レジスタ数の情報と共に、レジスタファイル12に対するビット幅の指定は、使用するビット幅(すなわち使用する最大ビット幅)の情報として、実行部21からレジスタファイル制御信号出力部22(図11では図示せず)を介してレジスタファイル制御部16Aに供給される。レジスタファイル制御部16Aでは、不使用レジスタの情報から、使用するレジスタ数の情報が算出され、レジスタ個数指定レジスタ16aに保持される。使用するビット幅すなわちレジスタ幅の情報は、レジスタ幅指定レジスタ16bに保持される。
レジスタファイル制御部16Aに、使用するレジスタ個数が4つで、使用するレジスタ幅が32ビット幅である情報が供給された場合、図11において、矢印RC及びRLで示す範囲(図11において斜線で示す部分)のみに電源の供給が行われ、その他の範囲のレジスタには電源の供給はされない。具体的には、レジスタR0からR3の4つのレジスタが使用レジスタとされ、かつその4つのレジスタR0からR4の中の0ビットから31ビットまでのビットが使用ビット幅とされる。
図12は、その指定された範囲内のレジスタ及びビット幅には電源の供給を行い、指定されていない範囲のレジスタには電源の供給を行わないようにするための回路の例を示す図である。図12は、各レジスタの回路構成を示すものであり、図12に示す回路が32個設けられている。あるレジスタの下位の8ビットのみを指定するために、その8ビットのレジスタにクロック信号CLKの供給を制御するためのスイッチ素子SW1が設けられている。そして、そのレジスタの下位の16ビットのうち下位8ビットを除く8ビットのみを指定するために、その8ビットのレジスタにクロック信号CLKの供給を制御するためのスイッチ素子SW2が設けられている。同様に、そのレジスタの下位の32ビットのうち下位16ビットを除く16ビットのみを指定するために、その16ビットのレジスタにクロック信号CLKの供給を制御するためのスイッチ素子SW3が設けられている。そして、全てのレジスタの64ビットのうち下位32ビットを除く上位の32ビットのみを指定するために、その32ビットのレジスタにクロック信号CLKの供給を制御するためのスイッチ素子SW4が設けられている。32個のそれぞれのレジスタに設けられたスイッチ素子SW1〜4が、レジスタ選択部としてのスイッチ素子群回路12bを構成する。
64ビット全てを使用する64ビット幅の場合、使用するレジスタのスイッチ素子SW1からSW4の全てをオンにするためのレジスタ制御信号RCs1からRCs4がレジスタファイル制御部16Aからスイッチ素子群回路12bに供給される。64ビットの半分を使用する32ビット幅の場合、使用するレジスタのスイッチ素子SW1からSW3をオンにするためのレジスタ制御信号RCs1からRCs3がレジスタファイル制御部16Aからスイッチ素子群回路12bに供給される。64ビットの4分の1を使用する16ビット幅の場合、使用するレジスタのスイッチ素子SW1とSW2をオンにするための制御信号RCs1とRCs2がレジスタファイル制御部16Aからスイッチ素子群回路12bに供給される。64ビットの8分の1を使用する8ビット幅の場合、使用するレジスタのスイッチ素子SW1をオンにするための制御信号RCs1がレジスタファイル制御部16Aからスイッチ素子群回路12bに供給される。図11のレジスタR4からR31のように、全く使用されないレジスタについては、全てのスイッチ素子SW1からSW4がオフとなる。
なお、所定のコード(B)には、使用されないビット幅のレジスタへの電源の供給の停止が解除するためのコードが含まれているので、実行モジュールの実行後に、使用されないビット幅のレジスタへの電源の供給は再開される。
以上のようにして、本実施の形態に係るプロセッサは、不使用レジスタについては、電源の供給の停止を行うことができ、かつ、使用するレジスタの中で、予測処理部によって予測された使用する最大ビット幅以外の部分には、電源の供給を停止することができるので、低消費電力で動作する。例えば、本実施の形態に係るプロセッサは、携帯電話等の低消費電力の求められる製品に搭載されれば、特に有効である。
例えば、64ビット幅のレジスタが32個のレジスタファイル12において、32ビット幅レジスタを8個だけに限定し動作させた場合、レジスタファイル12は従来の8分の1の低消費電力で動作させることができる。
また、プロセッサに、上述した不使用レジスタへの電源の供給を停止するモードと、不使用レジスタへの電源の供給を停止しないモードの、2つのモードを設け、プロセッサが不使用レジスタへの電源の供給を停止するモードに設定されたときのみ、上述した不使用レジスタへの電源の供給を停止するようにしてもよい。
以上のように、上述した各実施の形態によれば、レジスタファイルにおいて、使用されないレジスタに電源の供給を停止することのできるプロセッサ、及びそのプロセッサのためのプログラムを生成するプログラム生成装置を実現することができる。
なお、各実施の形態により生成された実行モジュールを実行させて、使用しないレジスタあるいは使用しないビット幅のレジスタにアクセスがあるか否かをチェックするエミュレーションを実行するエミュレーション部を、プログラム生成装置1、1Aに設けるようにしてもよい。
図13は、エミュレーション機能を有するプログラム生成装置の構成例を示す図であり、図14は、エミュレーション機能を有するプログラム生成装置のソフトウエアの構成例を示す構成図であり、図15は、エミュレーション機能の処理の流れの例を示すフローチャートである。なお、図13において、図9と同じ構成要素については、同じ符号を付して説明は省略する。
すなわち、メモリ54には、エミュレーション処理のためのプログラム54dがストアされており、図14に示すように、OS61上で、エミュレーションプログラム、すなわちエミュレータ62が動作し、そのエミュレータ62がオブジェクトコード63に対してエミュレーション処理を実行する。
図15に示すように、エミュレーション処理が実行される(ステップS21)と、そのエミュレーション処理の中で、不使用とされたレジスタへのアクセスがあった否かが判定される(ステップS22)。もしも、不使用とされたレジスタへのアクセスがあった場合は、ステップS22において、YESとなって、不使用レジスタ、すなわちオフ状態のレジスタへのアクセスがあったことを、プログラム開発者等のユーザへ、警告等の告知をする告知処理を実行する(ステップS23)。告知は、例えば、モニタ53にそのアクセス内容を表示する等により行われる。不使用とされたレジスタへのアクセスがなければ、ステップS22において、NOとなって、処理は終了する。
なお、第3の実施の形態のように、使用範囲を超えたレジスタ幅の使用あるいはアクセスがあった場合も同様に、告知処理を行うようにしてもよい。
なお、第3の実施の形態のように、使用範囲を超えたレジスタ幅の使用あるいはアクセスがあった場合も同様に、告知処理を行うようにしてもよい。
よって、このようなエミュレーション機能を有するプログラム生成装置51Aは、実際にターゲットのプロセッサを動作させることなく、シミュレーションにより、その使用しないレジスタあるいはビット幅の非動作を確認することができる。
言い換えれば、図13から図15に示すプログラム生成装置51Aは、生成されたオブジェクトコードをエミュレーションにより実行し、動作がオフ状態のレジスタ等へのアクセスに対し警告をすることができるシミュレータシステムを構成する。
以上のように、上述した各実施の形態に係るプロセッサによれば、使用されないレジスタに電源の供給をしないようにして、プロセッサの低消費電力化を図るので、プロセッサ自体の発熱量も低下し、ファン等によるプロセッサの冷却能力の低減を図ることにも繋がるというメリットもある。
また、上述したプログラム生成装置によれば、ソフトウエア記述者であるプログラム開発者は、レジスタファイルの消費電力に注意を払わずにプログラムを記述することができる。かつ性能すなわち実行速度を落とさず記述することができる。
また、上述した各実施の形態に係るプロセッサでは、動作周波数及び電源電圧を動的に変化させる、従来のfV制御に比べて、ハードウエア構成が簡素で、消費電力の低減が可能になる。
また、上述した各実施の形態では、使用しないレジスタ数の情報が、所定のコード中に含まれて、レジスタファイル制御部へ供給されているが、使用するレジスタ数の情報を、所定のコード中に含むようにして、レジスタファイル制御部に供給するようにしてもよい。その場合、レジスタファイル制御部では、使用するレジスタ数の情報に基づいて、電源を供給するレジスタと、電源を供給しないレジスタを決定して、レジスタファイルを制御する。
なお、以上の説明では、説明を簡単にするために、一つの機能を有するプログラムに対して生成された実行モジュールについて、レジスタファイル中の使用しないレジスタ等に対する電源の供給の制御に説明したが、プログラムが複数の機能モジュールを含む場合は、機能モジュール毎に、使用しないレジスタの数等を判定して、各機能モジュールに対応するタスクの実行において使用されない一部のレジスタ等へのクロック供給を停止するようにしてもよい。例えば、高級言語における関数毎に、使用するあるいは使用しないレジスタの数を判定して、レジスタファイルへの電源の供給を制御するようにしてもよい。その場合、プロセッサは、プログラムの実行時に、レジスタファイルの一部を動的にオン及びオフするプロセッサであり、プログラム生成装置は、プロセッサのレジスタファイルの一部を動的にオン及びオフする制御コードを埋め込む機能を持つコンパイルシステムであるということができる。
なお、以上説明した動作を実行するプログラムは、コンピュータプログラム製品として、フロッピー(登録商標)ディスク、CD−ROM等の可搬媒体や、ハードディスク等の記憶装置等に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明のプログラム生成装置を実現することができる。
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
1、1A プロセッサ、11 プロセッサコア、12 レジスタファイル、13 命令メモリ、14 データメモリ、15 ロード/ストアユニット、16、16A レジスタファイル制御部、51、51A コンパイル装置
Claims (5)
- 複数のレジスタを有するレジスタファイルと、
該レジスタファイルにおける、電源の供給を停止する1以上のレジスタを選択可能なレジスタ選択部と、
オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、
前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する1以上のレジスタを選択するためのレジスタ制御信号を前記レジスタ選択部に出力するレジスタファイル制御部と、
を有することを特徴とするプロセッサ。 - 複数のレジスタを有するレジスタファイルと、オブジェクトコードを実行するオブジェクトコード実行部とを有するプロセッサの実行を制御する方法であって、
前記オブジェクトコード実行部による前記オブジェクトコードの実行時に、前記オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力し、
前記レジスタファイル制御信号に基づいて、前記レジスタファイルにおける、電源の供給を停止する1以上のレジスタを選択するためのレジスタ制御信号を出力する、
ことを特徴とするプロセッサの実行制御方法。 - 複数のレジスタを有するレジスタファイルと、該レジスタファイルにおける、電源の供給を停止する1以上のレジスタを選択可能なレジスタ選択部と、オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報に基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する1以上のレジスタを選択するためのレジスタ制御信号を前記レジスタ選択部に出力するレジスタファイル制御部とを有するプロセッサのためのプログラム生成装置であって、
入力されたプログラムをコンパイルして前記プログラムの実行モジュールを生成する実行モジュール生成部と、
該実行モジュール生成部により生成された前記実行モジュールに追加する、前記使用するレジスタ数あるいは前記使用しないレジスタ数の情報を含む第1の所定のコードを生成するコード生成部と、
生成された前記第1の所定のコードを前記実行モジュールに追加して、前記オブジェクトコードを生成するコード追加部と、
を有することを特徴とするプログラム生成装置。 - 使用可能なレジスタ数を変化させてコンパイルした結果から、最適レジスタ数を判定する最適レジスタ数判定部を有し、
前記使用するレジスタ数あるいは前記使用しないレジスタ数は、前記最適レジスタ数に基づいて決定されることを特徴とする請求項3に記載のプログラム生成装置。 - 複数のレジスタを有するレジスタファイルと、該レジスタファイルにおける、前記複数のレジスタのそれぞれの使用しないビット幅のレジスタへ電源の供給を停止する1以上のレジスタを選択可能なレジスタ選択部と、オブジェクトコードの実行時に、該オブジェクトコードに含まれる、使用するレジスタ数あるいは使用しないレジスタ数の情報と使用するビット幅あるいは使用しないビット幅の情報とに基づいて、前記レジスタファイルを制御するためのレジスタファイル制御信号を出力するオブジェクトコード実行部と、前記レジスタファイル制御信号に基づいて、前記電源の供給を停止する1以上のレジスタ以外のレジスタと、前記使用するビット幅とにのみ前記電源の供給をするように前記レジスタ制御信号を生成して出力するレジスタファイル制御部とを有するプロセッサのためのプログラム生成装置であって、
入力されたプログラムをコンパイルして前記プログラムの実行モジュールを生成する実行モジュール生成部と、
該実行モジュール生成部により生成された前記実行モジュールに追加する、前記使用するレジスタ数あるいは前記使用しないレジスタ数の情報と前記使用するビット幅あるいは前記使用しないビット幅の情報とを含む第1の所定のコードを生成するコード生成部と、
生成された前記第1の所定のコードを前記実行モジュールに追加して、前記オブジェクトコードを生成するコード追加部と、
を有することを特徴とするプログラム生成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008032089A JP2009193243A (ja) | 2008-02-13 | 2008-02-13 | プロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008032089A JP2009193243A (ja) | 2008-02-13 | 2008-02-13 | プロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009193243A true JP2009193243A (ja) | 2009-08-27 |
Family
ID=41075211
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008032089A Pending JP2009193243A (ja) | 2008-02-13 | 2008-02-13 | プロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009193243A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024154477A1 (ja) * | 2023-01-16 | 2024-07-25 | 富士通株式会社 | パイプライン数縮退コンパイラおよびパイプライン数縮退方法 |
-
2008
- 2008-02-13 JP JP2008032089A patent/JP2009193243A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024154477A1 (ja) * | 2023-01-16 | 2024-07-25 | 富士通株式会社 | パイプライン数縮退コンパイラおよびパイプライン数縮退方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4496255B2 (ja) | マシン・コード・ビルダによって得られる電力消費低減 | |
US10248395B2 (en) | Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control | |
US7543282B2 (en) | Method and apparatus for selectively executing different executable code versions which are optimized in different ways | |
US20060026578A1 (en) | Programmable processor architecture hirarchical compilation | |
JP2006509290A (ja) | マイクロプロセッサ電力消費低減のためのレジスタファイルゲーティング | |
US20040002823A1 (en) | Method and apparatus for compiler assisted power management | |
JP2006509291A (ja) | マイクロプロセッサ電力消費のソフトウェアベースの制御 | |
US20150150019A1 (en) | Scheduling computing tasks for multi-processor systems | |
US20100050184A1 (en) | Multitasking processor and task switching method thereof | |
Thuresson et al. | FlexCore: Utilizing exposed datapath control for efficient computing | |
JP2002323982A (ja) | 命令処理方法 | |
US20070011440A1 (en) | Processor and processing method | |
JP2009193243A (ja) | プロセッサ、プロセッサの実行制御方法及びそのプロセッサのためのプログラム生成装置 | |
JP4800582B2 (ja) | 演算処理装置 | |
US9836289B2 (en) | Executable code generation program and executable code generation device | |
US8095806B2 (en) | Method of power simulation and power simulator | |
KR20150051083A (ko) | 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치 | |
KR20150040663A (ko) | 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치 | |
Baloukas et al. | Mapping embedded applications on MPSoCs: the MNEMEE approach | |
JP2007080049A (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
KR20130091113A (ko) | 재구성 기반 컴퓨팅 장치의 제1메모리 제어기 및 제2메모리 제어기와, 디버깅용 트레이스 데이터 처리가 가능한 재구성 기반 컴퓨팅 장치 | |
Rohde et al. | Improving HLS generated accelerators through relaxed memory access scheduling | |
KR100829167B1 (ko) | 소프트웨어 파이프라이닝의 데이터 의존도 완화 방법 | |
Maccarone et al. | Fuzzy mathematical morphology to analyse astronomical images | |
JPH08101773A (ja) | 情報処理装置 |