(57)【要約】【課題】スタック型レジスタファイルの一部分をシャットダウンすることによる電力低減。【解決手段】多くのプロセッサアーキテクチャは、処理オペレーションの実行中に使用されるデータを保持するための、スタック型レジスタファイルの形態のレジスタを含んでいる。ここにおいて教示されるように、スタックを形成する物理レジスタは、バンクに構成される。１つまたは複数のバンクは、レジスタ割付けの要求を満たすために必要に応じて、アクティブにされ、非アクティブにされる。【選択図】      図１
2008539472.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサにおいて使用するためのスタック型レジスタシステムであって、
複数のレジスタバンクを備えるレジスタのスタックと、なお各レジスタバンクは少なくとも１つのレジスタを備える；
前記スタック内のレジスタの割付けに関する情報に応じて、前記レジスタバンクのうちの１つまたは複数のレジスタバンクのＯＮ／ＯＦＦステータスを選択的に制御するコントローラと；
を備え、
前記コントローラは、レジスタの数を増加させる少なくとも１つの割付けを満たすため、ＯＮである前記バンクの数を増加させるために、また減少させられた数のレジスタの少なくとも１つの割付けに応じてＯＮである前記のバンクの数を減少させるために、前記スタック内に割り付けられたレジスタの数に応答する、
システム。
【請求項２】
前記コントローラに応じて、前記レジスタバンクのうちの各々がＯＮである時を、また前記レジスタバンクのうちの各々がＯＦＦである時を制御するために、電源端子に前記バンクを選択的に接続し、前記電源端子から前記バンクを選択的に切り離すための回路を、さらに備える請求項１に記載のシステム。
【請求項３】
前記レジスタバンクのうちの各々がＯＮである時を制御するために前記コントローラに応じて、システムクロック信号を前記バンクに選択的に供給するためのゲート回路を、さらに備える請求項１に記載のシステム。
【請求項４】
前記バンクのうちの第１のバンクは複数のレジスタを備えており、
前記第１のバンクにおける前記のレジスタの数に対してあらかじめ決定された関係を有するしきい値以下のレジスタの数を必要とする、前記割付けのすべてに対し、前記第１のバンクのみがＯＮであり、
前記コントローラは、前記のレジスタの数を前記しきい値よりも多いレジスタの数まで増加させる割付けに応じて、前記バンクのうちの次に続くバンクをＯＮにする、
請求項１に記載のシステム。
【請求項５】
前記バンクのうちの前記次に続くバンクがＯＮであるときに、前記コントローラは、前記のレジスタの数を、前記第１のバンクにおける前記のレジスタの数に対してあらかじめ決定された関係を有する別のしきい値以下のレジスタの数まで減少させる次の割付けに応じて、前記バンクのうちの前記次に続くバンクをＯＦＦにする、請求項４に記載のシステム。
【請求項６】
前記しきい値のうちの少なくとも１つは、前記第１のバンクにおける前記のレジスタの数に等しい、請求項５に記載のシステム。
【請求項７】
前記しきい値のうちの少なくとも１つは、前記第１のバンクにおける前記のレジスタの数からのあらかじめ決定されたオフセットを有する、請求項５に記載のシステム。
【請求項８】
レジスタの前記割付けは、レジスタの前記スタック内のスタックトップポイントを示し、前記スタックトップポイントが、前記バンク中へと連続的に移動するときに、前記コントローラは、前記レジスタのバンクを順次にＯＮにする、請求項１に記載のシステム。
【請求項９】
前記レジスタを使用する前記プロセッサのオペレーションは、保存／復元ポイントを特定し、前記保存／復元ポイントが、前記バンクから外に連続的に移動するときに、前記コントローラは、前記レジスタのバンクを順次にＯＦＦにする、請求項７に記載のシステム。
【請求項１０】
前記バンクのうちの少なくとも１つは、少なくとも３２個のレジスタを備える、請求項１に記載のシステム。
【請求項１１】
レジスタの前記スタックは、少なくとも４つの前記レジスタバンクを備え、前記４つのレジスタバンクのうちの各々は、少なくとも３２個のレジスタを備える、請求項１に記載のシステム。
【請求項１２】
プロセッサにおいて使用するためのスタック型レジスタシステムであって、
第１の数のレジスタを備える第１のレジスタバンクと、
第２の数のレジスタを備える第２のレジスタバンクと、
を備えるレジスタのスタックと、
前記プロセッサの処理オペレーションに対するレジスタの割付けおよび割付け解除に応じて、割り付けられたレジスタの数のファンクションとしてアクティブである前記バンクの数を動的に調整するために、前記の第１および第２のレジスタバンクのうちの少なくとも一方を選択的にアクティブにし、非アクティブにするための手段と、
を備える、システム。
【請求項１３】
前記手段は、
前記第１のレジスタの数に対してあらかじめ決定された関係を有するしきい値以下のレジスタの数を必要とする任意の割付けに応じて、前記第１のバンクだけをアクティブに保ち、
前記しきい値よりも大きなレジスタの数を必要とする任意の割付けを満たすために、前記第１のバンクと前記第２のバンクの両方をアクティブであるように前記第２のバンクをイネーブルにする、請求項１２に記載のシステム。
【請求項１４】
第３の数のレジスタを備える第３のレジスタバンクをさらに備えており、
前記しきい値よりも大きく、前記第２のレジスタの数に対するあらかじめ決定された関係を有する別のしきい値以下のレジスタの数を必要とする任意の割付けを満たすために、前記第１のバンクと前記第２のバンクの両方はアクティブであるが、前記のレジスタの第３のバンクはアクティブでなく、
他のしきい値よりも大きなレジスタの数を必要とする任意の割付けを満たすために、前記の第１、第２および第３のバンクはアクティブである、
請求項１３に記載のシステム。
【請求項１５】
レジスタの前記割付けは、レジスタの前記スタック内のスタックトップポイントを示し、
前記スタックトップポイントが、前記バンク中に連続的に移動するときに、前記手段は、前記のレジスタの第１および第２のバンクを順次にアクティブにする、
請求項１２に記載のシステム。
【請求項１６】
前記レジスタを使用した前記プロセッサのオペレーションは、レジスタ保存エンジンのスピルオペレーションについての保存／復元ポイントを特定し、
前記保存／復元ポイントが、前記バンクから外に連続的に移動するときに、前記手段は、前記のレジスタの第１および第２のバンクを順次に非アクティブにする、
請求項１５に記載のシステム。
【請求項１７】
前記手段は、有限状態機械として実施される電力コントローラを備える、請求項１２に記載のシステム。
【請求項１８】
プロセッサにおいてスタック型レジスタファイルのレジスタを動作させるための電力制御方法であって、
前記スタック型レジスタファイル中のレジスタの割付けに関する情報を受け取ることと、
前記スタック型レジスタファイル中の第１のバンクを形成するレジスタの数に対するあらかじめ決定された関係を有するしきい値以下のレジスタの数の割付けに応じて、前記のレジスタの第１のバンクをアクティブに保持し、前記スタック型レジスタファイル中の第２のバンクを形成するレジスタを非アクティブに保持することと、
前記しきい値よりも大きなレジスタの数の割付けに応じて、前記のレジスタの第１のバンクをアクティブに保持し、前記のレジスタの第２のバンクをアクティブにすることと、
を備える方法。
【請求項１９】
前記第２のバンクがアクティブであるときに受け取られる前記第１のバンクを形成する前記のレジスタの数に対するあらかじめ決定された関係を有する別のしきい値以下のレジスタの数の割付けに応じて、前記のレジスタの第１のバンクをアクティブに保持し、前記のレジスタの第２のバンクを非アクティブにすること、をさらに備える請求項１８に記載の方法。
【請求項２０】
前記しきい値のうちの少なくとも１つは、前記第１のバンクを形成する前記のレジスタの数に等しい、請求項１９に記載の方法。
【請求項２１】
前記しきい値のうちの少なくとも１つは、前記第１のバンクを形成する前記のレジスタの数からオフセットされる、請求項１９に記載の方法。
【請求項２２】
プロセッサにおいて、スタック型レジスタファイルのレジスタを動作させるための電力制御方法であって、
それぞれのスタックトップポインタおよびそれぞれの保存／復元ポイントを含んだ、前記スタック型レジスタファイルにおけるレジスタの割付けに関する情報を受け取ること、を備え、
各割付けに応じて、
前記それぞれの保存／復元ポイントから前記それぞれのスタックトップポインタまでの範囲内に少なくとも１つのレジスタを有する前記スタック型レジスタファイルの任意のバンクを、動作させ、
一方、前記それぞれの保存／復元ポイントから前記それぞれのスタックトップポインタまでの前記範囲内に少なくとも１つのレジスタも有していない前記スタック型レジスタファイルのどのバンクも、非アクティブである、
方法。
【請求項２３】
前記それぞれの保存／復元ポイントから前記それぞれのスタックトップポインタまでの前記範囲内に少なくとも１つのレジスタも有していない、前記スタック型レジスタファイルのどのバンクも、それへの電力をディスエーブルにすることあるいはそれからのプロセッサクロック信号を切り離すことにより、非アクティブに保たれる、請求項２２に記載の方法。
【請求項２４】
前記割付けが前記それぞれのスタックトップポインタを前記スタック型レジスタファイルの前記バンクを介して移動させるときに、前記バンクの各々は、順に選択的にＯＮにされ、
前記割付けが、前記それぞれの保存／復元ポイントを前記スタック型レジスタファイルの前記バンクを介して移動させるときに、前記バンクの各々は、順に選択的にＯＦＦにされる、
請求項２２に記載の方法。
【請求項２５】
プロセッサにおいてスタック型レジスタファイルのレジスタを動作させるための電力制御方法であって、
前記スタック型レジスタファイルにおけるレジスタの割付けに関する情報を受け取ることと、
前記受け取られた割付けのレジスタ要件の数に対応して、前記スタック型レジスタファイル内のレジスタの複数のバンクのうちの１以上のオペレーションを選択的にアクティブにし、非アクティブにすることと、
を備える方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本教示は、マイクロプロセッサやコンパイラなどのプロセッサの、スタック型レジスタファイル(stacked register file)を形成するレジスタのバンクのような、１組のレジスタの一部分を選択的にシャットダウンする(shut down)技法に関する。
【背景技術】
【０００２】
レジスタファイル(register file)は、情報を一時的に記憶するために使用される高速ストレージ構造である。プロセッサは、一般的にプロセッサコア(processor core)の比較的近くにデータまたは命令を保持する１つまたは複数のレジスタファイルを含んでいる。レジスタファイルは、多くの場合にプロセッサの実行リソースによる使用のためのデータの一次ソースとしての役割を果たし、高性能プロセッサは、多くの場合にレジスタファイルの低いアクセスレイテンシ(access latency)を利用するために大きなレジスタファイルを含んでいる。
【０００３】
レジスタ管理技法は、レジスタをプロセスに割り付け(allocate)、より低速なストレージ媒体からレジスタをフィルし(fill)、そして後に、レジスタが他のプロシージャ(procedure)またはファンクションに再割り付けされる(reallocated)ときに、それらのレジスタを空にして他のストレージ媒体に入れる。例えば、アクティブな第２のファンクションが現在使用可能であるよりも多くのレジスタを必要とする場合、第１のファンクションが非アクティブである間、第１のファンクションによって使用されるレジスタからのデータは、他のストレージに対して転送されることができる。制御が第１のファンクションに戻されるときに、諸レジスタは、再割り付けされることができるが、それらのレジスタは、一般的には、先行するアクティビティ(activity)中にそのファンクションによって使用された同じレジスタではないであろう。ファンクションについてのアクティビティを復元する(restore)ために、記憶されたデータは、ストレージから新しく割り付けられたレジスタへとロードされる。高い命令／サイクル(instruction/cycle)（ＩＰＣ）スループット(throughput)を達成するためには、マイクロプロセッサや自動並列化コンパイラ(parallelizing compilers)のような現代のプロセッサと、効率的なレジスタの再命名(renaming)と、レジスタの使用と、ファンクションパラメータの受け渡し(passing)とが、考慮すべき事項である。
【０００４】
マイクロプロセッサまたはコンパイラあるいは同様の類を利用する多くのデバイスおよび用途は、低電力要件(low power requirements)を有する。一般に、プロセッサ中のレジスタファイルは、その多数のポートおよび高速性に起因して、電力の主要な消費主体(consumer)である。一部のプロセッサにおいては、これは、多数のレジスタによって悪化させられる。さらに、トランジスタ技術が縮小するにつれて、  −  レジスタファイルのアクセスされない部分にさえ存在する  −  リーク電力(leakage power)が、より重大に(more significant)なる。一般的に、プロセッサは、常に組内のすべてのレジスタに対して電力を供給する。たいていの場合、レジスタファイルの使用されない部分は、これらのレジスタがいつでも使用されることができるであろう値を、あるいは、万が一レジスタの電源が切られた場合には失われるであろう値を保持するので、意図的に遮断(shut off)されない。
【０００５】
例えば、ポータブル／ハンドヘルドデバイスへの利用のために、あるいは、限られた又は制限された電源を有する他の利用のために、より低電力を必要とするプロセッサを設計する必要性が引き続き存在する。この一般的な必要性をサポートするために、スタック型レジスタファイルなど、プロセッサのレジスタのグループによって消費される電力を低減させる技法についての特定の必要性が存在する。
【発明の開示】
【０００６】
（概要）
電力消費を低減させるために、１組のレジスタの選択された一部分が、使用中でないときにシャットダウンされる。電力の節約を提供し、しかもその１組のレジスタを含むプロセッサの希望する性能を保持するように、アクティブにされるレジスタとそうでないレジスタとを選択するための特定の技法が開示される。
【０００７】
したがって、ここにおいて開示される教示の一態様は、プロセッサ中のスタック型レジスタファイルのレジスタを動作させるための電力制御方法に関連する。本方法は、スタック型レジスタファイル中のレジスタの割付けに関する情報を受信することを必要とする。スタック型レジスタファイルは、レジスタの複数のバンク(a plurality of banks of registers)に分割される。本方法は、受信された割付けによって指示されるレジスタ要件の数(number of register requirements)に対応して、スタック型レジスタファイル内のレジスタのバンク(banks of registers)のオペレーションを選択的にアクティブにし、非アクティブにする(activating and deactivating)ことを伴う。
【０００８】
本教示は、スタック型レジスタファイル中の１つまたは複数のバンクのアクティブ化および非アクティブ化を制御するための様々なアルゴリズムを包含する。２つの特定の例が詳細に論じられる。第１の例においては、電力制御アルゴリズムは、第１のバンクを形成するレジスタの数に対するあらかじめ決定された関係(predetermined relationship)を有するしきい値(threshold)以下のレジスタの数の割付けに応じて、第１のバンクのレジスタをアクティブに保持し、第２のバンクのレジスタを非アクティブに保持する。しきい値よりも大きなレジスタ数の割付けに応じて、その制御アルゴリズムは、第１のバンクのレジスタをアクティブに保持し、第２のバンクのレジスタをアクティブにする。
【０００９】
制御アルゴリズムの第２の例においては、レジスタの各割付けは、スタックポインタのそれぞれのトップ(respective top of stack pointer)とそれぞれの保存／復元ポイント(respective save/restore point)を指し示す。各割付けに応じて、このアルゴリズムは、それぞれの保存／復元ポイントからスタックポインタのそれぞれのトップまでの範囲における少なくとも１つのレジスタを有するスタック型レジスタファイルの任意のバンクを動作させる。しかしながら、その範囲内における少なくとも１つのレジスタも有さないスタック型レジスタファイルの任意のバンクは、非アクティブである。
【００１０】
ここにおいて開示される教示の他の態様は、プロセッサ中において使用するためのスタック型レジスタシステムに関する。そのような一態様においては、レジスタのスタックは、第１の数のレジスタ(a first number of registers)を備える第１のレジスタバンクと、第２の数のレジスタ(a second number of registers)を備える第２のレジスタバンクと、を含む。プロセッサの処理オペレーションに対するレジスタの割付けと非割付け(allocations and de-allocations)に応じて、レジスタバンクのうちの少なくとも１つを選択的にアクティブにし非アクティブにするための手段が提供される。アクティブ化および非アクティブ化は、割り付けられたレジスタの数のファンクションとして、アクティブであるバンクの数を動的に調整する。
【００１１】
別の態様においては、プロセッサにおいて使用するためのスタック型レジスタシステムは、各レジスタバンクが１以上のレジスタを含むレジスタバンクを備えるレジスタのスタックを含んでいる。このシステムはまた、スタック内のレジスタの割付けに関する情報に応答し、１つまたは複数のレジスタバンクのＯＮ／ＯＦＦ状態を選択的に制御するコントローラも含んでいる。該コントローラは、レジスタの数を増加させる少なくとも１つの割付けを満たすためにＯＮであるバンクの数を増加させるため、スタック内に割り付けられたレジスタの数に応答する。コントローラはまた、減少させられたレジスタの数の少なくとも１つの割付けに応じて、ＯＮであるバンク数を減少させる。
【００１２】
更なる目的、利点および新規の特徴は、以下に続く説明の中で一部分記述され、また一部分は、以下のそして添付している図面を検討すれば当業者には明らかになるであろう、あるいは実例の製造またはオペレーションによって学習されることができる。本教示の目的および利点は、特に添付特許請求の範囲中において指摘される方法、装置および組合せの実施あるいは使用によって理解され達成されることができる。
【発明を実施するための最良の形態】
【００１３】
図面の図は、限定のためではなく、例のみの目的で、本教示による１または複数の実施形態(implementation)を表わしている。図において、同様な参照番号は、同じまたは同様な要素(elements)を意味する。
【００１４】
以下の詳細な説明においては、関連する教示についての十分な理解を提供するために、多くの特定の詳細が、例として述べられている。しかし、本教示は、そのような詳細無しに実施されることができるということは、当業者には明らかである。他の例においては、よく知られている方法、プロシージャ、コンポーネント、および回路は、本教示の態様を不必要に不明瞭にすることを避けるために、詳細無しに、比較的高いレベルで説明されている。
【００１５】
電力消費を低減させるために、レジスタの組またはスタック(a set or stack of registers)の選択された一部分が、特定のオペレーションのために必要とされるであろうレジスタの割付けに関連した命令および／またはポインタの解析に基づいて、使用中でないときに、シャットダウンされる(shut down)。ここにおいて論じられる技法は、いくつかの観察を利用している。第１に、少なくともいくつかのプロセッサにおけるレジスタの割付けに関する命令は、任意の時点において必要とされるレジスタの数の事前の知識を与える。ほとんどの機能は、必ずしも使用可能なレジスタのすべてを必要とはしない。したがって、レジスタスタック(register stack)による電力消費は、レジスタファイルの一部分をシャットダウンすること(shutting down)により節約されることができる。どのようにしてレジスタが割り付けられ、そして使用されるかのかを、また、バンクをアクティブにし非アクティブにするためにどのようにして処理が制御されるのかを、認識するためには、先ず、スタック型レジスタファイルのオペレーションのある種の一般的な側面を調べてみることが、助けになり得る。
【００１６】
スタック型レジスタファイルを用いて、コンパイラ(compiler)は、ＡＬＬＯＣ命令を使用し理論的に無限のスタック上にレジスタを割り付けることそして割付けを解除することによって、物理レジスタ名に対する仮想レジスタ名のマッピング(mapping)を管理する。ＡＬＬＯＣ命令のコアファンクションは、現行のスタックフレームについてのコンパイラによって要求される物理レジスタの数が、使用可能であることを保証することであり、またレジスタスタックベース(Register Stack Base)（ＲＳＢ）レジスタに記憶されるレジスタマッピングオフセット(register mapping offset)を調整することである。実行中に、すべてのレジスタアクセス命令(register-accessing instruction)によって使用される実際の物理レジスタ名を生成する助けをするために、ＲＳＢは、コンパイラによって指定される仮想レジスタ名に加えられる。
【００１７】
以下の例は、ＡＬＬＯＣ命令の簡略化されたオペレーションを実証する。
【００１８】
簡略化されたアセンブリ：
；；Ｒｘ＝仮想レジスタｘ
；；ＰＲｘ＝物理レジスタｘ
；；ＲＳＢ＝０；０個のローカルレジスタを仮定する
ＡＬＬＯＣ  ０，２        ；；２個のローカルレジスタ（ＲＳＢ＝０）を要求する
；；スタックトップ＝２（ＰＲ１を指し示す）
ＭＯＶ  Ｒ０＝１          ；；ＰＲ０＝１
ＡＤＤ  Ｒ１＝Ｒ０，３    ；；ＰＲ１＝ＰＲ０＋３（ＰＲ１＝４）
ＣＡＬＬ  ｆ              ；；ファンクションコールｆ（ｘ）
ＡＬＬＯＣ  １，２        ；；１個の入力レジスタ、２個のローカルレジスタを要求する
；；ＲＳＢ＝（以前のローカル−要求された入力）＝（２−１）＝１
；；スタックトップ＝４（ＰＲ３を指し示す）
ＭＯＶ  Ｒ１＝５          ；；ＰＲ２＝５
ＭＵＬ  Ｒ２＝Ｒ０，Ｒ１  ；；ＰＲ３＝ＰＲ１＊ＰＲ２（ＰＲ３＝２０）
；；ＭＯＶ  Ｒ３＝７      ；；不正！  スタックトップを超えてアクセスすることはできない
；；入力＋ローカル＝１＋２＝３個のレジスタのみが割り付けられる
【００１９】
この一般的な設計の特徴は、ＡＬＬＯＣ命令が、コンパイラが各ファンクション中において使用しているレジスタの数を正確にプロセッサに対して示し、コンパイラは明示的に割り付けられたレジスタを超えるレジスタにアクセスする命令を決して生成すべきではないことである。一部のアーキテクチャは、上記のメカニズムを使用して、再マッピングのないグローバルであるべきある種のレジスタと、再マッピングされるべき他のレジスタを実際に指定することに注意すべきである。しかし、簡単にするために、この文書は、すべてのレジスタが再マッピングされることを仮定している。
【００２０】
オペレーション中に、無限のレジスタスタックの幻想を保持するために、実施される物理レジスタの数を超えるレジスタの割付けは、スタックされた物理レジスタ０へと折り返す(wraps around)。そのような場合には、レジスタ保存エンジン(Register Save Engine)（ＲＳＥ）は、必要に応じてレジスタからメモリ中に保有された補助記憶部(Backing Store)に、またメモリ中に保有された補助記憶部からレジスタへとデータを自動的に保存し、復元することができる。そのようなオペレーションにおいては、保存／復元ポイントはまた、必要に応じて物理レジスタスタックを介して折り返す(wraps)（図１２Ａおよび図１２Ｂを参照）。このようにして、レジスタスタックファイルは、レジスタデータの最新のフレームを含む循環バッファ(circular buffer)としての役割を果たす。ＲＳＥは、現行の割付けによって必要とされないときに、メモリ中に保有される補助記憶部へとデータを移動させ（「スピル(spill)」オペレーション）、ＲＳＥは、必要とされるときに、補助記憶部から割り付けられたレジスタへとデータを復元する(restore)（「フィル(fill)」オペレーション）。ＲＳＥは、スタック中において現在アクティブであるグループまたはフレームの外側のレジスタからスピルし、外側のレジスタへとフィルする。
【００２１】
図１を参照すると、省電力(power saving)を円滑に進めるために、例(example)は、物理レジスタファイルを個別の電力制御を有するバンクに効果的に区分している(partition)。その例においては、レジスタスタック１１は、１２８個の命令レジスタＰＲ０からＰＲ１２７を含んでいる。各バンクは、１つまたは複数のレジスタを含んでいる。例においては、ほとんどの処理は、３０個以下のレジスタを必要とするので、１２８個のレジスタスタック１１を各々３２個のレジスタの４つのバンクに分割することが便利である。例においては、バンク０（１３）は、今、レジスタＰＲ０からＰＲ３１を含み、バンク１（１５）は、今、レジスタＰＲ３２からＰＲ６３を含んでいる。次に、バンク２（１７）は、今、レジスタＰＲ６４からＰＲ９５を含み、バンク３（１９）は、今、レジスタＰＲ９６からＰＲ１２７を含んでいる。ほかの数のバンク、あるいはバンクの各々においてほかの数のレジスタが、使用されてもよく、そして、例えば、各バンクにおけるレジスタの数は等しい必要はない、ということを、当業者は認識するであろう。例においては、アクティブであるバンクの数、したがってアクティブなレジスタの数を、レジスタ要件(register requirements)の変化する数に動的にマッチングさせるために、バンクの各々は、別々にアクティブにされ、非アクティブにされることができる。必要とされないバンクを非アクティブにすることは、電力を節約する。
【００２２】
バンクのオンオフ制御を実施するために、プロセッサは、スタック型レジスタファイルのバンクに関連づけられた電力制御部(power control)２１を含んでいる。制御部２１は、必要とされるレジスタの数に関する割付け情報に応答する。いくつかのプロセッサにおいては、例えばＡＬＬＯＣ命令および他の命令は、レジスタの使用に関するヒント(hints)を提供し、電力制御部２１はこのヒントを、必要に応じてバンクの電力をＯＮ／ＯＦＦにするために、また、様々なスタックメインテナンスポインタ(stack maintenance pointer)を調整するために、思慮深く(judiciously)使用する。
【００２３】
電力制御部は、適切なアルゴリズムを使用して、分割されたレジスタスタックのバンクを選択的にアクティブにし、非アクティブにする。一例においては、アルゴリズムは、バンクのアクティブ化／非アクティブ化の頻度を減少させるために、バンクの電力がＯＮにされ、ＯＦＦにされるときに、バンクの固定された順序付け(fixed ordering)を利用する。固定された順序付けアルゴリズムは、一般に第１のバンクをＯＮに保ち、レジスタの割付けが、バンクの境界に対応するレジスタの数に関連したしきい値に到達し、またはしきい値を通過するときに、追加のバンクをＯＮにする。バンクは、レジスタの割付けが減少するときに、逆の順序で非アクティブにされる。
【００２４】
別の例においては、アルゴリズムは、同時にアクティブであるバンクの数を最小にし、したがって電力消費の節約を増大させるために、バンクの電力がＯＮにされ、ＯＦＦにされるときに、バンクの可変な順序付けを利用する。プロセッサが、割り付けられたレジスタのスタックトップ(top of stack)（ＴＯＳ）とＲＳＥ保存／復元ポイント（割り付けられたスタックのボトム(bottom)）に対してポインタ(pointers)を提供する場合は、アルゴリズムは、ポインタ(pointers)が、バンク(banks)をとおして移動するときにバンク(banks)をアクティブにし、非アクティブにする。１つのポインタからもう一方のポインタまでの（あるいは関連するオフセット値間の）範囲内に１つまたは複数のレジスタを有するバンクは、アクティブである。その範囲内にレジスタのないバンクは、非アクティブである。スタックポインタのトップ(top of stack pointer)が、新しいバンクに近づき入るときに、制御部は、そのバンクをアクティブにする。保存／復元ポイントが、バンクを離れるときに、そのバンクは、非アクティブにされることができる。
【００２５】
図２は、固定された順序付けアルゴリズムを使用して電力制御を実施するプロセッサの一部分の機能ブロック図である。レジスタバンクのレジスタオペレーションおよび電力制御に関係するプロセッサのエレメントが示される。プロセッサは一般的に、便宜上示されていない多数の他のエレメントを含んでいることを、当業者は認識するであろう。もちろん、これらのエレメントの一部は、スタック中のレジスタにデータを供給し、あるいはスタック中のレジスタからのデータを利用することができるが、それらは、例示のＯＮ／ＯＦＦ制御アルゴリズムに直接的には参加してはいない。
【００２６】
この第１の例の目的のために、物理レジスタスタック２５は、１２８個のレジスタＰＲ０からＰＲ１２７を含み、電力制御の目的のために４つのバンクに分割されることが、この場合にも仮定される。この場合にも、バンク０（２７）は、レジスタＰＲ０からＰＲ３１を含み、バンク１（２９）は、レジスタＰＲ３２からＰＲ６３を含んでいる。次に、バンク２（３１）は、レジスタＰＲ６４からＰＲ９５を含み、バンク３（３３）は、今、レジスタＰＲ９６からＰＲ１２７を含んでいる。
【００２７】
接続および他のエレメントは、便宜上示されていないが、スタック２５における個々のレジスタは、プロセッサおよび／または別個のストレージの他のエレメントからデータを受け取り、他のエレメントに対してデータを供給する。例えば、レジスタは、最初にメモリからのデータを用いてロードされることができ、このデータは、プロセッサチップ上、または別個のチップ上に存在することができる。レジスタは、処理するためのコア処理エレメント(core processing element)に対してそのデータを供給し、結果を受け取り記憶する。データは、レジスタが一時的に再割り付けされるときに補助記憶部に／から転送され、またデータは、特定のオペレーションが完了するときに、メモリに対して逆転送されることができる。一般に、物理レジスタスタックファイル(physical register stack file)２５におけるレジスタのオペレーションは、よく知られているレジスタスタックファイルのオペレーションと同じであり、そのようなオペレーションが本教示の１つ（または複数）の電力制御アルゴリズムに影響を及ぼすかあるいは電力制御アルゴリズムによって影響を及ぼされる場合を除いて、ここにおいては詳細に論じられてはいない。
【００２８】
スタック２５のバンク２７〜３３のアクティブなステータスは、様々の知られている方法のうちの何らかの方法で、電力制御部３７からの選択信号に応じて制御されることができる。一般的な考察の目的のために、図２は、レジスタ駆動のために必要とされる信号（ＳＲＤ）と、電力制御部３７からのバンク電力制御信号に応じてそのＳＲＤ信号をバンクに結合するための包括的なゲート回路とを示している。例えば、ゲート４１は、制御部３７からの電力制御信号に応じてレジスタ駆動信号ＳＲＤをバンク０（２７）に対して選択的に供給し、ゲート４３は、制御部３７からの別の電力制御信号に応じてレジスタ駆動信号ＳＲＤをバンク１（２９）に対して選択的に供給する。同様に、ゲート４５は、制御部３７からの電力制御信号に応じてレジスタ駆動信号ＳＲＤをバンク２（３１）に対して選択的に供給し、ゲート４７は、制御部３７からの別の電力制御信号に応じてレジスタ駆動信号ＳＲＤをバンク３（３３）に対して選択的に供給する。ゲートは、制御部３７からの適切な選択信号に応じて、適切なタイプの信号をレジスタバンクに対して供給するように構成されたロジックゲート、スイッチ、それらの組合せ、または他の任意の回路とすることができる。
【００２９】
気づかれるように、いくつかの異なる技法が、レジスタバンクのＯＮ−ＯＦＦステータスを制御するために使用されることができる。十分な理解を確かなものとするためには、２つの例を考慮することが助けになり得る。
【００３０】
第１の例においては、それらのバンクは、必要なクロック信号が各バンクに対して供給されるか否かを制御することにより、選択的にアクティブ／非アクティブにされる。図３は、ロジック回路２７に印加されるそのような制御を示している。その例において、ゲート４１は、ＡＮＤゲートである。クロック信号（ＣＬＫ）は、ＡＮＤゲート４１の一方の入力に対して印加され、ＯＮ／ＯＦＦ制御信号は、電力制御部３７からの他方の入力に対して印加される。制御信号がＯＮであるときに、ゲート４１は、クロック信号（ＣＬＫ）を印加し、このクロック信号により、レジスタバンク２７のロジックは、通常の方法でデータＩＮを受け取り、データＯＵＴを供給することができるようになる。制御信号がＯＦＦであるとき、ゲート４１は、クロック信号（ＣＬＫ）を阻止する。この状態においては、レジスタバンク２７のロジックは、循環しないことになり、それ故に、ロジックは、より少ない電力を引き込む。同様な制御が、他のバンク上でも使用されることができる。
【００３１】
別の例においては、各バンクに対する電力が、オンにされ、オフにされる。これは、図４の例において示されるように、供給電圧(supply voltage)に対する接続を制御することにより、あるいはグラウンド(ground)に対する選択的な接続により、実施されることができる。直接の電力制御は、非アクティブなレジスタバンクのリーク電流をなくする点で長所を有する。図４の例においては、２つのトランジスタは、バンク２９のＣＭＯＳ回路をグラウンドに選択的に接続するゲート４３としての役割を果たす。制御部３７が、ゲート４３に対してＯＮ状態の信号を印加するときに、そのゲートは、グラウンド接続を実現する。バンク２９の回路は、供給電圧（Ｖ）とグラウンド（ＧＮＤ）との間で電力を引き込み、バンクは、ここにおいて説明されるように動作する。電力制御部３７が、ゲート４３をＯＦＦにするときに、ゲートは、バンク２９の回路をグラウンドから切り離し、電力が、シャットダウンされ、バンク２９は、非アクティブにされる。同様な電力制御が、他のバンクのためにも使用されることができる。
【００３２】
当業者は、他の技法が、レジスタバンクのＯＮ／ＯＦＦ状態を制御するために使用されることができることを認識するであろう。ある与えられたプロセッサはまた、スタック型レジスタファイル２５を形成する異なるバンク上で異なる技法の組合せを実施することができる。
【００３３】
図２に戻ると、電力制御部３７は、有限状態機械(finite state machine)である。その状態機械は、プログラマブルなプロセッサとして実施されることができるが、特定の入力に応じて望ましい出力を生成するために、すなわち特定の制御アルゴリズムを実施するために、回路および／またはロジックブロックから形成されることもできる。例（例えば、図２および８）においては、状態機械は、単一の制御アルゴリズムを実施するが、そのアルゴリズムの一部のパラメータは、プロセッサによって設定されることができる。当業者は、制御部が、プロセッサまたはユーザからの選択入力または制御入力に応じて、２つ以上のアルゴリズムを選択的に実施するように設計されることができることを認識するであろう。例えば、一時的な「高性能」モードにおいては、電力制御アルゴリズムをディスエーブルにし、レジスタのすべてをＯＮにして動作させることも可能にすることができる。
【００３４】
電力制御を実施するときに、制御部３７の状態機械は、特定の電力制御アルゴリズムに従って、レジスタスタックファイル２５のバンク２７〜３３をアクティブにする信号を選択的に出力するためにある種の入力情報に応答する。この例においては、制御部３７の状態機械は、スタック２５と対話し、またはそのスタックを利用するプロセッサのいくつかのエレメントからの信号に応答する。それらの接続はレジスタバンクのアクティブ化／非アクティブ化に関連しているので、電力制御部３７に対する接続は示されているが、スタック２５に対する／からの他のプロセッサエレメントの通常の接続は、説明を容易にするためにこの図から省略されている。
【００３５】
例においては、電力制御部３７は、高レベルのプロセッサ制御エレメント５１に応答する。プロセッサ制御部５１は、電力制御部３７によって使用される電力設定、プリファランス(preference)、しきい値などを変更するために、ソフトウェア制御されるか、または内部制御されるかいずれかの様々な制御レジスタを使用することができる。
【００３６】
電力制御部３７はまた、レジスタファイル制御エレメント５３からのいくつかの信号にも応答する。レジスタファイル制御部５３は、例えば、様々なプロセスによって使用されるファンクションに対してこれらのレジスタを命名／再命名すること(naming/renaming)により、スタック型レジスタファイル２５のレジスタの割付けおよびオペレーションを正常に制御するエレメントである。制御部５３は、ファイルのスタックトップ（ＴＯＳ）ポイントを設定し、レジスタスタックベース（ＲＳＢ）レジスタを特定し、スタック型レジスタファイルの折返しおよび／または他の管理のために使用される他の任意のポインタを生成するために、アクティブなレジスタの数に対応するモジュラス(modulus)を使用する。標準的な１２８個のレジスタスタックにおいては、例えば、制御部５３は、モジュロ(modulo)１２８で動作することになり、制御部５３は、４つのすべてのバンク２７〜３３がアクティブであるときに、スタック２５を制御するためにそのモジュロを使用する。しかし、レジスタファイル制御部５３は、バンクのうちの１つ、２つまたは３つだけがアクティブであるときに、そのモジュロカウンティング(modulo counting)を３２、６４または９６へと調整する。したがって、電力制御部３７は、電力がオンされるバンクの数を指し示す信号ＢＯＮ．ＲＳＣをレジスタファイル制御部５３に対して供給し、レジスタファイル制御部５３は、そのポインタ設定プロセスなどにおいて、対応するモジュロ数を使用するためにその内部カウンティングロジックを設定する。
【００３７】
ＡＬＬＯＣ命令は、いくつかのレジスタをある与えられたプロセスに割り付ける明示的な命令（コール）である。割付け解除は、もはや必要とされないときに、そのプロセスからのレジスタの回復を実質的に指し示すリターンまたは応答である。これらの命令は、それ故に与えられた任意の時刻において(at any given )必要とされるレジスタの数を定義する。レジスタファイル制御部５３は、スタック型レジスタファイルにおけるバンクをアクティブにし、非アクティブにする際に使用するための、割り付けられ、割付けが解除されたレジスタの数に関するこの情報を電力制御部３７に供給する。レジスタファイル制御部５３はまた、以下で論考されるようにポインタＴＯＳとある数値ＡおよびＤも供給する。
【００３８】
レジスタ保存エンジン（ＲＳＥ）５５は、データを、スタックファイル２５中のレジスタから、およびスタックファイル１２５中のレジスタに、必要に応じてメモリ中に保有された補助記憶部に、自動的に保存し、復元する（図１２Ａおよび１２Ｂ参照）。一般に、ＲＳＥ５５のオペレーションは、通常のプロセッサにおけるのと同じである。しかしながら、レジスタファイル制御部５３と同様に、ＲＳＥは、この場合には、レジスタ保存エンジン保存／復元ポイント(Register Save Engine Save/Restore Point)（ＲＳＥＰ）の位置を設定するためにアクティブなレジスタの数に対応するモジュロ数(modulo number)の形でカウントする。したがって、電力制御部３７は、電力がオンされるバンクの数を指し示す信号ＢＯＮ．ＲＳＥをＲＳＥ５５に対して供給し、ＲＳＥ５５は、それに応じてそのオペレーションを調整する。ＢＯＮ．ＲＳＣ信号およびＢＯＮ．ＲＳＥ信号は、類似しているが、すべての場合において厳密に同じではないこともあり得る。
【００３９】
固定される順序付けアルゴリズムの説明される実施形態においては、各バンク２７〜３３は、個々の制御下にあり、その結果、各バンクは、スタック２５を構成する他のバンクとは独立にアクティブにされ、非アクティブにされることができる。次いで、プロセッサは、必要とされるときだけバンクをアクティブにし、必要とされないバンクの電力を落とすことにより、物理スタックまたはファイル２５のレジスタによって消費される電力に関して低電力モードで動作することができる。
【００４０】
図２の例は、固定された順序付け技法を利用している。スタック２５は、多くの場合、電力がＯＮにされたただ１つのバンク２７のレジスタを用いて実行され、そして、制御部３７は、もし複数のバンクのレジスタが単一の割付けによって必要とされる場合に、追加のレジスタバンクに電力を投入するだけである。
【００４１】
次の定義、すなわち  
・Ｒは、各バンクにおけるレジスタの数であるものとする。  
・Ｂは、０からＢ−１までの番号が付けられた総バンク数であるものとする。  
ｏしたがって、全部でＢ＊Ｒ個のスタック型レジスタが存在する。  
・Ｂ＿Ｏｎは、電力がオンにされたバンクの数であるものとする。  
・Ａは、割付けについて要求されるレジスタの数であるものとする。  
・Ｄは、割付け解除について要求されるレジスタの数であるものとする。  
・ＴＯＳは、レジスタスタックトップの位置であるものとする。  
・ＲＳＥＰは、レジスタ保存エンジン保存／復元ポイントの位置であるものとする。  
を使用し、固定された順序付けアルゴリズムを多少詳細に考慮することは有用である。  
【００４２】
本例のために使用される命名法(nomenclature)においては、Ｂ×Ｒは、９６、すなわちスタック型レジスタファイルにおける物理的折返しのために使用可能なレジスタの総数であろう。本例のアーキテクチャは、実際には、再マッピングのないグローバルとして(as global)レジスタＲ０〜Ｒ３１を指定し、そして、レジスタＲ３２〜Ｒ１２７だけが、再マッピングされ、電力制御アルゴリズムに従うことができる。ここでは考察のために、すべての１２８個のレジスタが再マッピングされることができ（Ｂ×Ｒ＝１２８）、そして、電力制御に従うと仮定された。
【００４３】
固定された順序付けの例においては、バンクは、常に厳密に昇順で、すなわち、最初にバンク０、次いでバンク１、等、バンクＢ−１まで、電力がオンにされる。４つのバンクの例においては、これは、バンク０（２７）が最初に電力供給され（事実上常にＯＮ）、バンク１（２９）が次に電力供給され、バンク２（３２）が次に電力供給され、そしてバンク３（３３）が最後に電力供給される（９６個のレジスタよりも多くが必要とされるときのみＯＮ）ことを意味する。逆に、バンクは、常に厳密に降順で、すなわち最初にバンクＢ−１、次いでバンクＢ−２、等、バンク１まで、電力がオフにされる。４つのバンクの例においては、これは、バンク３（３１）が最初に電力遮断され(powered down)、バンク２（３１）が電力遮断され、次いでバンク１（２９）が電力遮断されることを意味する。バンク０（２７）は、一般的に、プロセッサの最小限の低電力オペレーション中にＯＮのままである。この第１のモードにおいては、Ａ≧Ｂ＿Ｏｎ＊Ｒであるときのみに、更なるバンクが、電力がオンにされる。ＴＯＳ＞ＲＳＥＰであるときのみに、バンクは、電力がオフにされる。
【００４４】
この動作モードについての例示のアルゴリズムは、次のようにすることができる。
【００４５】
１．バンク０（２７）（Ｒ個のレジスタ）のみが電力がオンにされた状態で開始する。
【００４６】
２．レジスタ割付け要求（ＡＬＬＯＣ命令に起因）があるとすぐに、
ａ．（Ａ＜Ｂ＿Ｏｎ＊Ｒ）である場合に、現在電力供給されるレジスタバンクをＢ＿Ｏｎ＊Ｒのサイズの折り返すレジスタファイルとして使用する。これは、ＲＳＢ、ＴＯＳ、およびＲＳＥＰについてのすべての演算が、モジュロ−（Ｂ＿Ｏｎ＊Ｒ）演算に従うことを意味する。  
ｂ．（Ａ≧Ｂ＿Ｏｎ＊Ｒ）である場合、その場合には
ｉ．Ｂ＿Ｏｎ＿ｐｒｅｖｉｏｕｓ＝Ｂ＿Ｏｎとする。  
ｉｉ．（Ａ≧Ｂ＿Ｏｎ＊Ｒ）の間、別のバンク（Ｂ＿Ｏｎ＋＋）の電力をオンにする。  
ｉｉｉ．（ＴＯＳ＋＝Ａ）ｍｏｄ（Ｂ＿Ｏｎ＊Ｒ）を増分する。  
ｉｖ．（ＲＳＥＰ＞ＴＯＳ）の間、それが物理レジスタ０へと折り返すまで、ＲＳＥＰポイントを伴うモジュロ−（（Ｂ＿Ｏｎ−１）＊Ｒ，以前の値）演算を使用する。これは、ＴＯＳとＰＲ０の間に現在割り付けられるレジスタが正しく保存されることを保証する。  
ｖ．ステップ２へと進む。  
３．レジスタ割付け解除（コールリターンなどに起因）があるとすぐに、
ａ．（（ＴＯＳ−Ｄ）ｍｏｄ（Ｂ＿Ｏｎ＊Ｒ）＞ＲＳＥ保存／復元ポイント）である場合に、
ｉ．（（ＴＯＳ−Ｄ）ｍｏｄ（Ｂ＿Ｏｎ＊Ｒ）＜（Ｂ＿ｏｎ−１＊Ｒ））の間、別のバンク（Ｂ＿Ｏｎ−−）の電力をオフにする。  
ｉｉ．（ＴＯＳ＿＝Ｄ）ｍｏｄ（Ｂ＿Ｏｎ＊Ｒ）を減分する。  
ｉｉｉ．ステップ２へと進む。  
【００４７】
ＢＯＮは、ＲＳＥ．Ｎ＿ＳＴＡＣＫＥＤ＿ＰＨＹＳに対応し、これは、スタック型レジスタの数、一般的に９６を表す。しかしながら、図２の実施形態を使用すると、この値は、アクティブであるバンクの数に応じて変化する。
【００４８】
ＲＳＢ値は、ＲＳＥ．ＢＯＦ（ＲＳＥのファイルのボトム）に対応する。ＴＯＳ値は、ＲＳＥ．ＢＯＦ＋ＣＦＭ．ｓｏｌに対応する。その場合にはＲＳＥＰ値は、ＲＳＥ．ＬｏａｄＲｅｇに対応し、これは、スタック型物理レジスタの数に対応するモジュロの中にロードされるべき次のレジスタよりも１大きい(one greater than)物理レジスタ番号(physical register number)である。
【００４９】
図５〜７は、この第１の例示の順序付けアルゴリズムによるスタックのオペレーションにおけるいくつかの例示の状態を表す。図５に示される状態においては、現行の割付けは、３２個よりも少ないレジスタを利用している。ＲＳＥ保存／復元ポイント（ＲＳＥＰ）は、レジスタＰＲ０の下(below)にあり、すなわち物理レジスタスタック２５のボトムにある。スタックトップ（ＴＯＳ）ポインタは、バンク０（２７）中のより高位のレジスタ(higher registers)のうちの１つを特定する。ＲＳＥは、スタックトップポイントの上(above)のレジスタ上で、折り返して、この場合は、レジスタＰＲ０の下の、ＲＳＥ保存／復元ポイントに行き、スピルオペレーションおよびフィルオペレーションを実行する。割り付けられたアクティブなレジスタは、ＰＲ０からＴＯＳポインタの下のレジスタまでの範囲内のレジスタである。この状態において、電力制御部３７は、１つのバンク、バンク０（２７）のみに電力供給するためにＯＮ信号を供給する。電力制御部３７は、ＯＦＦ信号を他のバンク２９〜３３へと供給し、その結果、これらのバンクは、非アクティブになる。３２個以下のレジスタが割り付けられて動作する間に、システムは、ＲＳＥを介してスピルオペレーションおよびフィルオペレーションを円滑に進めるために、ＴＯＳおよびＲＳＥ保存／復元ポイントが移動することになる以外は、図５の状態と同様な状態にとどまることになる。これらのポインタの折返しは、バンク０内にとどまることになる。そのようにする際に、これらのポインタを移動させるために使用される制御部５３およびＲＳＥ５５のカウンティングオペレーション(counting operation)は、３２、アクティブバンク０（２７）におけるレジスタの数にリンクされたカウンティングモジュロ(counting modulo)を利用することになる。
【００５０】
図５に示される特定の状態は、３２個よりも多くのレジスタが必要とされるときに、２つのバンク中のレジスタを使用する状態まで遷移するために都合がよい。しかしながら、もしバンク０における処理が、バンク０内での折返しのために物理的に保存／復元ポイントよりも下にあるスタックトップ（ＴＯＳ）ポインタを有する場合は、プロセッサは、次のより高位のバンクをアクティブにする前に、保存／復元ポイントが、折り返して、物理的にＴＯＳポインタの下に再び行くまで（ＴＯＳ＞ＲＳＥＰまで）、次のバンク、バンク１のアクティブ化を遅延させる必要がある。この遅延は、その遷移の前に物理的に保存／復元ポイントの上にあるバンク０におけるレジスタ内のデータが、より多くのレジスタを必要とするプロセスについての早すぎる割付けのために失われないことを、保証する。
【００５１】
図６に示される例においては、現行の割付けは、３２個よりも多いが６４個よりも少ないレジスタを利用している。この例においては、電力制御部３７は、バンク０（２７）とバンク１（２９）の両方をアクティブにするためにＯＮ信号を供給する。電力制御部３７は、他の２つのバンク３１および３３に対してＯＦＦ信号を供給し、その結果、これらのバンクは非アクティブになる。図６は、ＲＳＥ保存／復元ポイントが、レジスタＰＲ０にある、すなわち、物理レジスタスタック２５のボトムにある場合におけるそのような状態を示している。スタックトップ（ＴＯＳ）ポインタは、バンク１（２９）におけるより高位のレジスタのうちの１つを特定する。割り付けられたアクティブなレジスタは、ＰＲ０からＴＯＳポインタの下のレジスタまでの範囲内におけるレジスタである。バンク１（２９）における割り付けられていないアクティブなレジスタは、ＴＯＳポイントと、現在はレジスタＰＲ０の下にあるＲＳＥ保存／復元ポイントとの間のレジスタである。ＲＳＥは、この例においてはレジスタＰＲ０の下にあるＲＳＥ保存／復元ポイントへと折り返して、バンク１におけるスタックトップポイントの上のレジスタ上でスピルオペレーションおよびフィルオペレーションを実行する。
【００５２】
ＲＳＥエンジンによる折返し処理は、折返しカウンティングが、アクティブなバンク０および１の６４個のレジスタだけに制限される以外は、完全な１２８レジスタのスタックを使用するときの処理に実質的に類似している。そのような処理は、図７に示されるような状態をもたらす。そこでは、現行の割付けは、３２個よりも多いが６４個よりも少ないレジスタを利用している。電力制御部３７は、依然としてバンク０（２７）とバンク１（２９）の両方をアクティブにするためにＯＮ信号を供給し、電力制御部３７は、依然として他の２つのバンク３１および３３に対してＯＦＦ信号を供給し、その結果、これらのバンクは、非アクティブになる。しかしながら、この状態においては、ＲＳＥ保存／復元ポイントは、バンク１中における１つのレジスタにある、すなわち、ＰＲ３２に、あるいはその上にある。その処理は、バンク０のレジスタ中へと折り返しており、それ故に、スタックトップ（ＴＯＳ）ポインタは、バンク０におけるレジスタのうちの１つを、例えばレジスタＰＲＯなどを、特定する。
【００５３】
もちろん、その順序付けアルゴリズムは、３つのバンクのレジスタを使用して、また４つのすべてのバンクのレジスタを使用して同様な遷移をサポートする。１つのバンクだけがアクティブであった場合と同様に、制御部３７が、さらに増大させられた割付けを満たすために次のバンクのレジスタをアクティブにする前に、ポインタは、折返し状態（図７においてと同様）からＴＯＳ＞ＲＳＥＰの場合の状態（図６においてと同様）へと遷移する必要がある。例えば、図７に示されるような状態から、３バンクまたは４バンクがアクティブな状態へと遷移する必要がある場合、以前のＲＳＥ保存／復元ポイント（図７に示される）からトップバンク１（２９）におけるレジスタＰＲ６３までの範囲内のレジスタ中のデータが、メモリ中の補助記憶部に保存されていることを保証するためには、ＲＳＥ処理が、バンク１（２９）を介して保存／復元ポイントを上に移動させ、図６に示される状態と同様に、その場合にもレジスタバンク０（２７）中のポイントまで折り返すことができるようにすることが必要である。ＴＯＳ＞ＲＳＥＰについての要件は、３つのバンクから４つのバンクへの遷移についても同様に当てはまる。同様な制約条件を用いて、より多い数のアクティブバンク(higher numbers of active banks)へと、例えば、１つのバンクから３つまたは４つのバンクへと、あるいは２つのバンクから４つのバンクへと、直接に遷移することも可能である。
【００５４】
より少ない数のアクティブバンク(smaller number of active banks)へと減少する各遷移は、ポインタの適切な状態を待つ必要もある。とりわけ、レジスタのアクティブなスタックのボトムにおける保存／復元ポイントは、折り返されて、アクティブにとどまる１つ（または複数）のバンク内に存在する必要がある。スタックトップポインタは、保存／復元ポイントの上にあり、配置される必要がある、あるいは、アクティブにとどまる１つ（または複数）のバンク中のポイントへと安全に移動させられることができる。
【００５５】
ひとたび、割付けが、我々の例においてはバンク０からバンク１へと、バンク間の境界を横切ると、より多い数のバンクは、レジスタ割付けが、より少ない数のアクティブバンク(lower number of active banks)へと戻る遷移を可能とする状態に到達するまで、アクティブにとどまる。我々の例においては、そのような新しい割付け状態は、バンク１がアクティブである状態からバンク０だけがアクティブである状態へと戻る遷移を可能にするであろう。
【００５６】
例えば、ＲＳＥ保存／復元ポイントとスタックトップポイントとが図７に示されるように配置されるときに、もし、３２より小さい数へのレジスタの割付け解除が未決定(pending)である場合は、スタックトップポイントとＲＳＥ保存／復元ポイントとが、両方バンク０内に戻るまで、ＲＳＥによる処理を継続することが必要であり、そのあと、電力制御部３７が、図５に示されるように、より低い状態に戻るために、他のバンク、バンク１をオフにすることができる。
【００５７】
コンパイラは、レジスタのその割付けを変更することができる。性能を最適化するように意図された設計では、コンパイラは、性能を向上させるためにより多くのレジスタを割り付けることができる。しかしながら、電力制御ファンクションがありながら、これは、より多くのバンクが電力をオンにされて省電力を低下させてしまう場合を、増大させることになる。別のプロセッサ設計においてか、または、１つのプロセッサがより低電力モードでコンパイルしているとき、あまり積極的でないレジスタ割付けは、性能を犠牲にして、より少ないレジスタを割り付けることになるであろう。しかしながら、そのようなオペレーションは、レジスタバンク電力制御によって得られる利点を増大させることになるであろう。
【００５８】
例においては、バンク中のレジスタの数は、実質的にレジスタ割付けをマッチングさせるために、いつバンクの電力をオンにし、オフにするかを決定するためのしきい値(thresholds)を定義する。以上の考察において、これらのしきい値は、バンク中のレジスタの数にマッチングしており、したがってバンクの境界に対応している。上記アルゴリズムに対する変形においては、バンクの電力をオンにする又は電力をオフにするトリガまたはしきい値は、時間に先立ってバンクへの電力をオンにすることを開始するために、また、それらの電力をオフにすることを遅延させるために、更なるしきい値オフセット（すなわち、Ａ＋Ｔ≧Ｂ＿Ｏｎ＊Ｒについての検査）を用いて変化させられることができる。これは、特に、電力オン／オフ時間をマスキングする(masking)ために役立つ可能性がある。
【００５９】
上記で考察された例においては、バンク０（２７）は、常にＯＮである。当業者は、そのような実施形態では、電力制御部３７によるそのバンクの動作状態のゲート制御(gated control)は、必要ではないことを認識するであろう。したがって、他のバンクの動作ステータスのアクティブ化および非アクティブ化に対する制御を制限することが可能になるが、他のバンクを制御するための方法またはアルゴリズムは、基本的には上記のように動作することになる。特に簡単な実施形態においては、スタックは、一方のバンクが常にＯＮであり、他方のバンクが固定された順序付けアルゴリズムに従ってＯＮ／ＯＦＦ制御される、２つのバンクのみに分割されることができる。
【００６０】
スタック型レジスタファイルをバンクに分割すること、そして、バンクのアクティブ化を制御することによって、プロセッサは、ほとんどの時間、より少ないレジスタへの電力を必要とする。
【００６１】
様々な電力制御アルゴリズムが、バンクをアクティブにし、非アクティブにするために使用されることができる。上記の例は、固定された順序付けの例を使用した。上記の例において説明された固定されたアルゴリズムの特定の特徴は、それがかなり少ない頻度でバンクの電力をオン／オフすることである。新しいバンクは、ファンクションが、すでに電力供給されているレジスタの数よりも多い同時のレジスタ割付けを必要とするときに、電力がオンにされるだけである。同様に、バンクは、特定の条件が満たされるときだけに、電力がオフにされる。これは、バンクの電力がオン／オフされる頻度を制限するために、それを適したものにする。今から、レジスタバンクの電力オン／オフオペレーションの可変な順序付けを使用した一例を考察する。
【００６２】
以下の考察から理解されるように、可変な順序付けアルゴリズムでは、レジスタ割付けが、全体的にアクティブなスタックにおける方法に類似した方法で（例えば、図１２Ａおよび１２Ｂにおけるように）、全体のスタックを介してループする(loops)ので、レジスタ制御部およびＲＳＥのモジュロカウンティングを修正する必要はない。第２の例示のアルゴリズムは、レジスタファイルの部分の電力をより頻繁にオン／オフするが、これは、その瞬間に実際に必要とされるレジスタに対して電力供給されるレジスタのより近い可能性のある適合性(fit)をもたらす。固定のあらかじめ決定された順序でレジスタバンクの電力をオンにすること及び電力をオフにすることの代わりに、第２のアルゴリズムによって実施される順序付けは、プロセッサのコードの動作(behavior)に完全に依存する。
【００６３】
図８は、可変な順序付けアルゴリズムを使用して電力制御を実施するプロセッサの一部分の機能ブロック図である。レジスタバンクのレジスタオペレーションおよび電力制御に関係する、プロセッサのエレメントが示される。当業者は、プロセッサが、一般的に、便宜上示されていない多くの他のエレメントを含んでいることを、認識するであろう。もちろん、これらのエレメントのうちの一部は、スタックにおけるレジスタに対してデータを供給し、あるいはレジスタからのデータを利用することができるが、それらのエレメントは、例示のＯＮ／ＯＦＦ制御アルゴリズムに直接的には関与していない。
【００６４】
この第２の例の目的のために、物理レジスタスタック１２５が、１２８個のレジスタＰＲ０からＰＲ１２７までを含んでおり、そして、電力制御の目的のため４つのバンクに分割されている、ということが、この場合にも仮定される。考察の目的のため、すべてのレジスタは折返しに従い、そして、すべてのバンクは電力制御に従う。この場合にも同様に、バンク０（１２７）はレジスタＰＲ０からＰＲ３１を含み、バンク１（１２９）はレジスタＰＲ３２からＰＲ６３を含んでいる。次に、バンク２（１３１）はレジスタＰＲ６４からＰＲ９５を含み、バンク３（１３３）はレジスタＰＲ９６からＰＲ１２７を含んでいる。
【００６５】
接続および他のエレメントは、便宜上示されていないが、スタック１２５における個々のレジスタは、プロセッサおよび／または別個のストレージの他のエレメントからデータを受け取り、プロセッサおよび／または別個のストレージの他のエレメントにデータを供給する。例えば、レジスタは、最初にメモリからのデータを用いてロードされることができ、このデータは、プロセッサチップ上、または別個のチップ上に存在することができる。レジスタは、処理するためのコア処理エレメントに対してそのデータを供給し、結果を受け取り記憶する。データは、レジスタが一時的に再割り付けされるときに補助記憶部に／から転送され、またデータは、特定のオペレーションが完了するときに、メモリに対して逆転送されることができる。一般に、物理レジスタスタックファイル１２５におけるレジスタのオペレーションは、よく知られているレジスタスタックファイルのオペレーションと同じであり、そのようなオペレーションが、本教示の１つ（または複数）の電力制御アルゴリズムに影響を及ぼし、あるいは電力制御アルゴリズムによって影響を及ぼされる場合を除いて、ここにおいては詳細に論じられてはいない。
【００６６】
スタック１２５のバンク１２７〜１３３のアクティブなステータスは、様々な、知られている方法のうちのどれにおいても、電力制御部１３７からの選択信号に応じて制御されることができる。一般的な考察の目的のために、図８は、レジスタ駆動のために必要とされる信号（ＳＲＤ）と、電力制御部１３７からのバンク電力制御信号に応じてそのＳＲＤ信号をバンクに結合するための汎用の(generic)ゲート回路とを示している。例えば、ゲート１４１は、制御部１３７からの電力制御信号に応じてレジスタ駆動信号ＳＲＤをバンク０（１２７）に対して選択的に供給し、ゲート１４３は、制御部１３７からの別の電力制御信号に応じてレジスタ駆動信号ＳＲＤをバンク１（１２９）に対して選択的に供給する。同様に、ゲート１４５は、制御部１３７からの電力制御信号に応じてレジスタ駆動信号ＳＲＤをバンク２（１３１）に対して選択的に供給し、ゲート１４７は、制御部１３７からの別の電力制御信号に応じてレジスタ駆動信号ＳＲＤをバンク３（１３３）に対して選択的に供給する。
【００６７】
ゲートは、制御部１３７からの適切な選択信号に応じて、適切なタイプの信号をレジスタバンクに対して供給するように構成されたロジックゲート、スイッチ、それらの組合せ、または他の任意の回路であってよい。前の例と同様に、個別のレジスタバンクの実際のアクティブ化は、（図３中におけるような）クロックゲーティング(clock gating)、（図４中におけるような）電源電圧をゲートする回路、グラウンドへの接続をゲートする回路、または他の手段、を使用することができる。
【００６８】
前の例におけるように、電力制御部１３７は、有限状態機械であるが、状態機械１３７は、異なる１組の入力に応答し、可変な順序付けアルゴリズムに従ってバンクのアクティブ化および非アクティブ化を制御する。状態機械１３７は、その電力制御アルゴリズムに従ってレジスタスタックファイル２５のバンク１２７〜１３３をアクティブにするためにゲート１４１〜１４７に対してそれらの信号を選択的に出力する。この場合にも、制御部１３７の状態機械は、スタック１２５と対話し、またはそのスタックを利用するプロセッサのいくつかのエレメントからの信号に応答する。それらの接続はレジスタバンクのアクティブ化／非アクティブ化に関連しているので、電力制御部１３７に対する接続は示されているが、スタック１２５への／からの他のプロセッサエレメントの通常の接続は、説明を簡単にするためにこの図から省略されている。
【００６９】
第２の例においては、電力制御部１３７は高レベルのプロセッサ制御エレメント１５１に対応する。プロセッサ制御部１５１は、電力制御部１３７によって使用される電力設定、プリファランス、しきい値、などを変更するために、ソフトウェア制御されたか又は内部制御された、様々な制御レジスタを使用することができる。
【００７０】
電力制御部１３７はまた、レジスタファイル制御エレメント１５３からのいくつかの信号にも応答する。この場合にも、レジスタファイル制御部１５３は、例えば、様々なプロセスによって使用されるファンクションに対してこれらのレジスタを命名／再命名することにより、スタック型レジスタファイル１２５のレジスタの割付けおよびオペレーションを正常に制御するエレメントである。制御部１５３は、ファイルのスタックトップ（ＴＯＳ）ポイントを設定し、レジスタスタックベース（ＲＳＢ）レジスタを特定し、スタック型レジスタファイルの折返しおよび／または他の管理のために使用される他の任意のポインタを生成するために、アクティブなレジスタの数に対応するモジュラスを使用する。この例においては、制御部１５３は、あたかも全１２８個のレジスタが継続してアクティブであるかのようによく、モジュロ１２８を使用し続ける。
【００７１】
ＡＬＬＯＣ命令は、いくつかのレジスタをある与えられたプロセスに割り付ける明示的な命令（コール）である。割付け解除は、もはや必要とされないときに、そのプロセスからのレジスタの回復を実質的に指し示すリターンまたは応答である。これらの命令は、それ故に与えられた任意の時刻において必要とされるレジスタの数を定義する。レジスタファイル制御部５３は、スタック型レジスタファイルにおけるバンクをアクティブにし、非アクティブにする際に使用するための、割り付けられ、割付けが解除された、レジスタの数に関するこの情報を電力制御部３７に供給する。レジスタファイル制御部５３はまた、以下で考察されるようにポインタＴＯＳとある数値ＡおよびＤも供給する。
【００７２】
レジスタ保存エンジン（ＲＳＥ）１５５は、データを、スタックファイル１２５中のレジスタから、およびスタックファイル１２５中のレジスタに、必要に応じてメモリ中に保有された補助記憶部（図示されず）に、自動的に保存し、復元する。ＲＳＥ１５５のオペレーションは、図１２Ａおよび１２Ｂによって表されるオペレーションにおけるのと実質的に同じである。レジスタ保存エンジン保存／復元ポイント（ＲＳＥＰ）の位置を設定するために、ＲＳＥ１５５は、基本的に、レジスタのすべてが全時間にわたって電力供給されるプロセッサにおけるように、この場合１２８である、アクティブレジスタの数に対応するモジュロ数でカウントする。
【００７３】
各バンク１２７〜１３３は、個々の電力制御の下にあり、その結果、各バンクは、スタック１２５を構成する他のバンクとは独立に電力が投入され／電力が落とされることができる。次いで、プロセッサは、ＴＯＳとＲＳＥＰとの間の範囲内にあるレジスタを有するバンクをアクティブにし、他のバンクを非アクティブにすることにより、物理スタックまたはファイル１２５のレジスタによって消費される電力に関して低電力モードで動作することができる。
【００７４】
図８の例は、同時にアクティブなバンクの数をレジスタ割付けに動的にマッチングさせる順序付けアルゴリズムを利用している。このモードにおいては、電力供給されたバンクの数は、現行のスタックフレームのサイズ（またはフレームの設定された数）によってのみ決定され、レジスタスタックトップ(register stack top)の位置が、どのバンクが電力供給されるかを決定するので、バンクは、より高い頻度で電源がオン／オフされる可能性が高い。
【００７５】
以下の定義、すなわち
・Ｒは、各バンクにおけるレジスタの数であるものとする。  
・Ｂは、０からＢ−１までの番号が付けられた総バンク数であるものとする。  
ｏしたがって、全部でＢ＊Ｒ個のスタック型レジスタが存在する。  
・ＴＯＳは、レジスタスタックトップの位置であるものとする。  
・ＲＳＢは、現行フレームのボトムの位置であるものとする。  
・ＲＳＥＰは、レジスタ保存エンジン保存／復元ポイントの位置であるものとする。  
・ポインタは、それがバンクＸにおける１つのレジスタを指すときはいつでも、バンクＸを指すといわれる。  
・Ｂａｎｋ（ポインタ）は、そのポインタが指すバンクの番号であるものとする。  
・（Ｘ，Ｚ）は、ＸとＺとの間のバンクであるものとする。モジュロＢ演算を用いてＸを増分することにより、我々がＺよりも前にＹに到達する場合に、バンクＹは、バンクＸとバンクＺとの間にあるといわれる。  
を使用して、どちらかというとより詳細に、固定された順序付けアルゴリズムを考慮することが助けになり得る。
【００７６】
（Ｘ，Ｚ］が、Ｚを含んでいる、ＸとＺとの間のバンクを意味することを、含めて示すブラケット表記法(bracket notation)を我々は使用することができることに、注意が必要である。この可変な順序付けにおいては、このモードのバンクは、どのような厳密な順序でも(in any strict order)電力はオン／オフされないが、電力供給されるバンクは常に隣接している（バンクＢ−１はバンク０に隣接しているといわれる）。バンクは、ＴＯＳまたはＲＳＥＰがバンク境界を横切るときにはいつでも電力がオン／オフされる。しきい値は、バンク境界に対応するが、後で考察されるように、トリガポイントは、バンク中におけるレジスタの数に関連する境界から、いくぶんオフセットされることができる。ＴＯＳ、ＲＳＢ、およびＲＳＥＰの折返しは、バンクＮ−１からバンク０に対して（我々のＮ＝４の例においては、バンク３からバンク０に対して）起こるだけである；これは、モジュロＢ＊Ｒ演算が、ＴＯＳ、ＲＳＢ、およびＲＳＥＰのポインタ値を増分／減分する(increment/decrement)ために常に使用されていることを意味する。
【００７７】
この動作モードについてのアルゴリズムは、以下のとおりである。  
１．任意のバンクＩの電力がオンにされた状態で開始する。ＲＳＢ、ＲＳＥＰ、およびＴＯＳが、バンクＩを確実に指すようにする。  
２．ＴＯＳが、バンクＩからバンクＪを指すように（割付けに起因して）増分されようとしているときはいつでも、（Ｊを含めて）ＩとＪとの間の電力供給されていないどのバンクの電力もオンにする。（（Ｉ，Ｊ］におけるバンクの電力をオンにする。）  
３．ＴＯＳが、バンクＪからバンクＩ、およびＪ！＝Ｉ、ならびにＢａｎｋ（ＲＳＥＰ）！＝Ｊを指すように（割付け解除に起因して）減分されようとしているときはいつでも、（Ｊを含めて）ＩとＪとの間のバンクの電力をオフにする。（（Ｉ，Ｊ］におけるバンクの電力をオフにする。）  
４．ＲＳＥＰが、バンクＩからバンクＪ、およびＩ！＝Ｊ、ならびにＢａｎｋ（ＴＯＳ）！＝Ｉを指すように（レジスタ保存に起因して）増分されようとしているときはいつでも、（Ｉを含めて）ＩとＪとの間のバンクの電力をオフにする。（バンク［Ｉ，Ｊ）の電力をオフにする。）  
５．ＲＳＥＰが、バンクＪからバンクＩを指すように（レジスタ復元に起因して）減分されようとしているときはいつでも、（Ｉを含めて）ＩとＪとの間の電力供給されていない任意のバンクの電力をオンにする。（バンク［Ｉ，Ｊ）の電力をオンにする。）  
６．電力がオンにされなければならないバンクの数を最小にするために、レジスタをバックグラウンドにおける補助記憶部へと積極的に保存する。
【００７８】
この方法は、任意の数のバンクおよびレジスタ／バンクを用いてトランスペアレントに(transparently)機能する。  
【００７９】
図９〜１１は、この第２の順序付けアルゴリズムによる、スタックのオペレーションにおけるいくつかの例示の状態を表している。例えば、図９は、アルゴリズムが、ただ１つのバンクの電力がオンにされた状態で動作している状態を表している。バンク０（１２７）は、電力がオンにされるべきバンク１（１２９）またはより高位のバンクのうちのどれかのために、電力がオンにされる必要はない。現行の割付けは、３２個よりも少ないレジスタを利用している。図示された状態においては、割り付けられたレジスタは、バンク１（１２９）中にあるが、同様な状態は、他の３つのレジスタバンクのうちのいずれの１つの内部に割り付けられた全レジスタを用いても可能である。図示される状態において、ＲＳＥ保存／復元ポイント（ＲＳＥＰ）は、レジスタＰＲ３２にまたはその上にあり、そして、スタックトップ（ＴＯＳ）ポインタは、バンク１（２７）中のより高位のレジスタのうちの１つ、この場合にはＰＲ６３、を特定する。この状態において、電力制御部１３７は、ただ１つのバンク、バンク１（１２７）を、アクティブにしあるいはイネーブルにするためにＯＮ信号を供給しかつ／または保持し、そして、他のバンク１２７、１３１および１３３に対してＯＦＦ信号を供給する。アクティブな、あるいは割り付けられたレジスタは、ＲＳＥ保存／復元ポイント（ＲＳＥＰ）とスタックトップ（ＴＯＳ）ポインタとの間の領域内にあり、現在は折返しを有さない。ＲＳＥは、ＲＳＥ保存／復元ポイントの下で、スピルオペレーションおよびフィルオペレーションを実行する。
【００８０】
基本的には、境界でのレジスタ数は、トリガポイントまたはしきい値として機能する。ＴＯＳポインタがしきい値に到達し、またはしきい値を超えるときに、電力制御部１３７は、次のバンクをアクティブにする。ＲＳＥＰポインタがしきい値を通過するときに、電力制御部は、より低位のバンクを非アクティブにすることができる。いくつかの実施形態においては、しきい値は、実際の境界からオフセットされることができる。
【００８１】
図９に示される状態のような、第１の単一バンクのアクティブな状態を仮定すると、スタックトップポインタが、次のより高位なバンク境界、例えば図９および１０の例におけるバンク１（１２９）中のレジスタＰＲ６３とバンク２（１３１）中のレジスタＰＲ６４との間の境界を、横切るときに、２つのバンクのアクティブな状態への遷移が起こる。図１０は、アルゴリズムが、２つのバンクの電力がオンにされて動作している状態を表している。その例においては、ＲＳＥ保存／復元ポイントは、依然としてレジスタＰＲ３２に、またはその上にある。しかしながら、スタックトップ（ＴＯＳ）ポインタは、上に移動し、バンク境界を横切ってバンク２（１３１）中のレジスタへと入っていく。バンク２およびバンク１は両方共、ＲＳＥＰからＴＯＳまでの割り付けられた範囲内に１つまたは複数のレジスタを有している。他のバンクは有していない。
【００８２】
この状態への遷移を予想して、電力制御部１３７は、バンク１（１２９）をＯＮに保ちながら、バンク２（１３１）をアクティブにするためにＯＮ信号を印加している。電力制御部１３７は、この状態の例においては他の２つのバンク１２７および１３３に対してＯＦＦ信号を供給し続け、その結果、これらのバンクは、非アクティブである。スタックトップが上に移動し、（バンク０中の）スタックのボトムにあるレジスタへと折り返すときに、追加のバンクに電力を供給するために、同様な技法が使用される。ＲＳＥ保存／復元ポイントが、スタックを介して上に移動し、スタックのボトムへと折り返すときに、レジスタバンクは、同様にして電力が落とされる。
【００８３】
例においては、遷移は、１つのアクティブなバンクから２つのアクティブなバンクへと進み、また１つのアクティブなバンクへと戻っている。レジスタの割付けおよび関連するポインタが移動するときに、そして、より多くの数のレジスタの割付けをサポートするためにより多くのバンクがアクティブにされるときに、類似した遷移、すなわち、３つのアクティブバンクのレジスタを使用する状態への及びからの遷移、また、すべての４つのバンクのレジスタを使用する状態への及びからの遷移、が起こる。
【００８４】
図１１は、２つのバンクのアクティブな状態を表している、しかしながら、この状態においては、そのアルゴリズムは、電力がオンにされた２つのバンクと折り返されたスタックトップ(wrapped Top-of-Stack)とを動作させている。ＲＳＥ保存／復元ポイント（ＲＳＥＰ）は、バンク３（１３３）中のＰＲ９６より上のレジスタを特定し、そして、スタックトップ（ＴＯＳ）ポインタは、バンク０（１２７）中のＰＲ０より上のレジスタを特定する。この状態においては、電力制御部１３７は、バンク３（１３３）をＯＮに保ちながらバンク０（１２７）をアクティブにするためにＯＮ信号を印加している。電力制御部１３７は、この状態の例においては、他の２つのバンク１２９および１３１に対してＯＦＦ信号を供給し、その結果、これらのバンクは、非アクティブである。
【００８５】
上記の可変な順序付けアルゴリズムに対する変形においては、バンクの電力をオンにするあるいは電力をオフにするトリガは、時間の前にバンクの電力をオンにすることを開始するために、そしてそれらの電力をオフにすることを遅延させるために、追加のしきい値オフセットを用いて変化させられることができる。例えば、ＴＯＳ＋Ｔが、レジスタ割付け中にバンクの電力をオンにすべきかどうかを決定するためにＴＯＳの代わりに検査されることができる；そして、類似したしきい値が、他のトリガのために使用されることができる。これは、バンクの電源をオン／オフにする時間をマスキングするためにとりわけ助けになり得る。
【００８６】
また、バンクのアクティブ化／非アクティブ化をトリガするために使用されるしきい値、およびＲＳＥエンジンの積極性は、様々なファクタ、例えば、電力消費および熱、プロセッサの性能、バンクアクティブ化／非アクティブ化の頻度など、に応じて、実行時に変更させられることもできる。これは、望どおりにバンクアクティブ化の頻度をチューニングするために助けになり得る。
【００８７】
第１の例と同様に、レジスタバンク電力制御の可変な順序付けにより、プロセッサは、その時間のほとんど、より少ないレジスタに電力供給することができるようになる。
【００８８】
可変な順序付けアルゴリズムの特有の特徴は、それが電力供給されたレジスタの数を現行のレジスタの使用に対して可能な限り近くマッチングさせる試みにおいて、かなり頻繁にバンクの電力をオン／オフさせることである。これは、バンクの電力をオン／オフさせることがかなりのコストをもたらさないときに、また電力供給されたバンクの数を最小にすることが重要であるときに、それを適したものにする。それはまた、レジスタスタックを管理するために使用されるポインタを調整するために使用される演算を変更もしない。
【００８９】
上記は、最良の形態(best mode)および／または他の例であると考えられるものについて説明したが、様々な修正がその中で行われることができること、ここにおいて開示される主題は様々な形態および例において実施されることができること、そして、本教示は多くのアプリケーション(application)において適用されることができるがそれらの一部だけがここにおいて説明されていること、が理解される。本教示の真の範囲内に属するありとあらゆるアプリケーション、修正、および変形を請求することが、添付の特許請求の範囲によって意図されている。
【図面の簡単な説明】
【００９０】
【図１】スタック型レジスタファイルから形成される、バンクのアクティブ化の選択的制御を説明する際に有用な論理図である。
【図２】スタック型レジスタファイルのバンクをアクティブにし、非アクティブにするために固定された順序付けを利用する電力制御アルゴリズムの第１の例を実施するための、スタック型レジスタファイルのバンクおよび電力制御部と、その制御部と対話するある種のエレメントを含む、プロセッサの一部分の機能ブロック図である。
【図３】電力制御部に応じて、クロック信号を制御することにより、レジスタバンクをアクティブにし、非アクティブにするためのゲート回路の第１のグラフィックな説明図である。
【図４】電力制御部に応じて、電力を制御することにより、レジスタバンクをアクティブにし、非アクティブにするためのゲート回路の第２のグラフィックな説明図である。
【図５】第１の電力制御アルゴリズムによるオペレーション中における、３つの異なる状態のうちの１つにおける図２のレジスタファイルと電力制御部の図である。
【図６】第１の電力制御アルゴリズムによるオペレーション中における、３つの異なる状態のうちの１つにおける図２のレジスタファイルと電力制御部の図である。
【図７】第１の電力制御アルゴリズムによるオペレーション中における、３つの異なる状態のうちの１つにおける図２のレジスタファイルと電力制御部の図である。
【図８】スタック型レジスタファイルのバンクをアクティブにし、非アクティブにするために可変の順序付けスキームを利用する電力制御アルゴリズムの第２の例を実施するための、スタック型レジスタファイルのバンクおよび電力制御部と、その制御部と対話するある種のエレメントを含む、プロセッサの一部分の機能ブロック図である。
【図９】第２の電力制御アルゴリズムによるオペレーション中における、３つの異なる状態のうちの１つにおける図８のレジスタファイルと電力制御部の図である。
【図１０】第２の電力制御アルゴリズムによるオペレーション中における、３つの異なる状態のうちの１つにおける図８のレジスタファイルと電力制御部の図である。
【図１１】第２の電力制御アルゴリズムによるオペレーション中における、３つの異なる状態のうちの１つにおける図８のレジスタファイルと電力制御部の図である。
【図１２Ａ】レジスタ保存エンジン（ＲＳＥ）および補助記憶部を有するスタック型レジスタファイルの一般的なオペレーションを説明する際に有用な論理図である。
【図１２Ｂ】スタック型レジスタファイルにおけるレジスタ割付けを折り返す一例の一般的なオペレーションを説明する際に有用な論理図である。
【図１】
2008539472.tif 000003
【図２】
2008539472.tif 000004
【図３】
2008539472.tif 000005
【図４】
2008539472.tif 000006
【図５】
2008539472.tif 000007
【図６】
2008539472.tif 000008
【図７】
2008539472.tif 000009
【図８】
2008539472.tif 000010
【図９】
2008539472.tif 000011
【図１０】
2008539472.tif 000012
【図１１】
2008539472.tif 000013
【図１２Ａ】
2008539472.tif 000014
【図１２Ｂ】
2008539472.tif 000015
【国際調査報告】
2008539472.tif 000016
2008539472.tif 000017
2008539472.tif 000018