(57)【特許請求の範囲】
【請求項１】
レジスタ・ファイル・システムを管理する方法であって、
レジスタ・ファイルのうちの指定された数のレジスタを第１の手順に割り当てるための要求を受信することと、
前記レジスタ・ファイルが前記要求を満たすのに十分な未割当レジスタを含むかどうかを判定することと、
前記レジスタ・ファイルが前記要求を満たすのに十分な未割当レジスタを含んでいない場合、
１つまたは複数のアクティブでない手順に対応する前記レジスタ・ファイルのうちの１つまたは複数のレジスタの全ての内容を備えるデータを読み取ることと、
単一の書込サイクル中に前記レジスタ・ファイルの外部にあるバッファの記憶場所に、読み取られた前記データをセーブすることと、
前記バッファに記憶されたデータの量が前記バッファの記憶容量に近づく場合、前記バッファからメモリ・デバイスへの読み取られた前記データの転送を開始することと
を備え、
前記バッファおよび前記レジスタ・ファイルは、共に特定のチップ上に存在し、
前記バッファは、読み取られた前記データの一時的な記憶を可能にする記憶場所のアレイを含み、
前記記憶場所のアレイの各記憶場所は、前記レジスタ・ファイルのビット幅の整数倍であるビット幅を有し、
前記整数倍は、前記レジスタ・ファイルの読取ポートの数に等しい、
方法。
【請求項２】
前記レジスタ・ファイルのビット幅は、前記レジスタ・ファイルのうちの単一のレジスタのビット幅に等しい、請求項１に記載の方法。
【請求項３】
前記レジスタ・ファイルの読取ポートの数は、３、４、または５である、請求項１に記載の方法。
【請求項４】
前記メモリ・デバイスは、バッキング記憶装置を備え、コントローラが、読み取られた前記データを前記バッファにセーブし、前記バッキング記憶装置への読み取られた前記データの転送を開始する、請求項１に記載の方法。
【請求項５】
読み取られた前記データを前記バッファにセーブすることは、読み取られた前記データを前記バッファにプッシュすることを含み、前記メモリ・デバイスへの読み取られた前記データの転送を開始することは、読み取られた前記データを前記バッファから読み取ることを含む、請求項１に記載の方法。
【請求項６】
前記レジスタ・ファイルは、スタックド・レジスタ・ファイルとして動作するように構成された、請求項１に記載の方法。
【請求項７】
前記レジスタ・ファイルは、１２８個のレジスタからなる単一のスタックを含む、請求項６に記載の方法。
【請求項８】
前記第１の手順がアクティブである場合、前記バッファへの第２のデータの記憶をブロックすることをさらに備え、前記第２のデータは、前記第１の手順に関連する、請求項１に記載の方法。
【請求項９】
前記メモリ・デバイスは、前記特定のチップ上にない、請求項１に記載の方法。
【請求項１０】
読み取られた前記データは、第２の手順に関連する、請求項１に記載の方法。
【請求項１１】
請求項１乃至１０のいずれか１項に記載の方法をコンピュータに実行させるプログラムを記録した、コンピュータ読取可能な記録媒体。
【請求項１２】
プロセッサであって、
レジスタ・ファイル・ビット幅を有するレジスタ・ファイルであって、複数のレジスタを備えるレジスタ・ファイルと、
前記レジスタ・ファイルの外部にあるバッファであって、前記バッファおよび前記レジスタ・ファイルは、共に特定のチップ上に存在し、前記バッファは、前記レジスタ・ファイルからのデータの一時的な記憶を可能にする記憶場所のアレイを含み、前記記憶場所のアレイの各記憶場所は、前記レジスタ・ファイル・ビット幅の整数倍であるビット幅を有し、前記整数倍は、前記レジスタ・ファイルの読取ポートの数に等しい、バッファと、
レジスタ・エンジンであって、
前記レジスタ・ファイルのうちの指定された数のレジスタを第１の手順に割り当てるための要求を受信し、
前記レジスタ・ファイルが前記要求を満たすのに十分な未割当レジスタを含むかどうかを判定し、
前記レジスタ・ファイルが前記要求を満たすのに十分な未割当レジスタを含んでいない場合、
１つまたは複数のアクティブでない手順に対応する前記レジスタ・ファイルのうちの１つまたは複数のレジスタの全ての内容を備えるデータを読み取り、
単一の書込サイクル中に前記記憶場所のアレイのうちの記憶場所に、読み取られた前記データをセーブし、
前記バッファに記憶されたデータの量が前記バッファの記憶容量に近づく場合、前記バッファからメモリ・デバイスへの読み取られた前記データの転送を開始する
ように構成されたレジスタ・エンジンと
を備える、プロセッサ。
【請求項１３】
前記レジスタ・エンジンは、前記バッファをスタックとして動作させるように適合され、読み取られた前記データは、第２の手順に対応し、前記要求は、前記第１の手順が前記第２の手順によってコールされるのに応答して受信される、請求項１２に記載のプロセッサ。
【請求項１４】
前記バッファは、前記レジスタ・ファイルから取り出された第１のデータを、前記スタックの頂部へとプッシュし、第２のデータを、前記スタックの底部から前記メモリ・デバイスへと同時に転送することを、前記レジスタ・エンジンに可能にさせる、二重ポートレジスタのアレイを含む、請求項１３に記載のプロセッサ。
【請求項１５】
前記レジスタ・ファイル・ビット幅は、前記複数のレジスタのうちの単一のレジスタのビット幅に等しい、請求項１２に記載のプロセッサ。
【請求項１６】
前記レジスタ・ファイルは、３個の読取ポート、４個の読取ポート、または５個の読取ポートを含む、請求項１２に記載のプロセッサ。
【請求項１７】
前記レジスタ・エンジンは、前記メモリ・デバイスに記憶されたデータを、前記メモリ・デバイスに記憶された前記データを前記メモリ・デバイスから前記バッファへと転送することと前記転送されたデータを前記バッファから前記レジスタ・ファイルへと転送することとによって、前記レジスタ・ファイルへとリストアするように適合された、請求項１２に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にプロセッサの分野に関し、より詳しくは、スタックド・レジスタ・ファイル・アーキテクチャにおけるレジスタ・セーブ・エンジンのためのバッキング記憶装置バッファに関する。
【背景技術】
【０００２】
ＲＩＳＣプロセッサは、比較的小さい命令のセットに特徴付けられ、各命令は、たとえば計算動作、論理動作、またはロード／記憶動作のような１つの命令を実行する。計算命令および論理命令は、１つまたは複数の汎用レジスタ（ＧＰＲ）からオペランドを得、そこに結果を書き入れる。ＧＰＲはアーキテクトされたレジスタである。つまり、ＧＰＲは、命令セットアーキテクチャ内に明示されたディスクリート・メモリ・ロケーションを備え、命令によって直接アドレス指定される。
【０００３】
ＧＰＲは、しばしば高速マルチポートレジスタのアレイとしてハードウェア内で実現され、各々が、命令セットによって定められる言語幅（たとえば、３２または６４ビット）を有する。この物理レジスタのアレイは、物理レジスタファイルと称される。直接マップされたレジスタ実装において、物理レジスタファイル内のレジスタの数は、アーキテクトされたＧＰＲの数に正確に一致し、各論理ＧＰＲ識別子は、特定のハードウェアレジスタにマップする。より高い性能のために、およびスーパースケーラ・パイプラインをサポートするために、多数のモデムプロセッサが、論理ＧＰＲ識別子を、物理レジスタファイル内の物理レジスタから切り離す。レジスタリネーミング、再配置バッファ等は、物理レジスタから論理ＧＰＲ識別子を切り離すための、当該技術である。直接マップされるにしろ、リネームされるにしろ、多数のソフトウェア手順にわたる物理レジスタファイルの管理は設計課題であり、しばしば性能ボトルネックである。
【０００４】
最新のソフトウェアは、事実上、モジュラである。つまり、ある手順は、別の手順（関数、サブルーチン、サブモジュール等、様々に称される）を「コール」するか、または別の手順に制御を転送する。コールされた手順は、次に別の手順をコールし、それが繰り返され、結果として、入れ子式の手順となり、それはしばしばかなりの深さになる。プロセッサによる実行中、各手順（コンテクストとも称される）は、ＧＰＲの数を含む、一定のプロセッサリソースを割り当てられる。手順に割り当てられるＧＰＲの数は、コンパイラによる、手順における命令の分析によって決定され、ごく少数のＧＰＲから、アーキテクトされたＧＰＲのセットの最大限までの範囲にわたりうる。第１の手順が第２の手順をコールするとき（コンテクスト・スウィッチとしても知られる）、第１の、すなわちコールする手順は、第２の、すなわちコールされる手順が、自身のＧＰＲのセットを含む別のリソースを割り当てられている間、アクティブでなくなり、実行を開始する。第２の手順が実行を完了すると、リソースは割り当て解除され、リソースは（必要であれば）コールする手順に再び割り当てられ、コールする手順は実行を再開する。
【０００５】
たとえばインテルi〜９６０のようないくつかの先行技術プロセッサにおいて、コンテクスト・スウィッチまたは新たな手順は、プロセッサに、物理レジスタファイルの内容全体をメモリに記憶するように指示し、物理レジスタファイル全体を、新しい手順に利用可能にする。コールされた手順が実行を完了し、コールする手順に制御を戻すと、以前にセーブされたレジスタの値は、物理レジスタファイルへリストアされ、コールする手順の実行は継続する。物理レジスタファイルの内容は、たとえばシステムメモリ（ＲＡＭ）のような「バッキング記憶装置」へセーブされる。バッキング記憶装置がオフチップＲＡＭを備える場合、全てのコンテクスト・スウィッチへの多重オフチップメモリアクセスの性能インパクトを軽減するために、プロセッサは、現行のレジスタ、あるいはオンチップキャッシュメモリを備えうる１つまたは複数の「シャドウ」または「キャッシュ」レジスタファイルを、物理レジスタファイルの内容を記憶するために提供しうる。しかし、物理レジスタファイル全体は、一度に記憶／取り出しされなければならず、シャドウレジスタ記憶の場合にさえも、性能に影響を及ぼす。
【０００６】
物理レジスタファイル全体を一度に記憶し取り出す必要を取り除く、多数のモデムプロセッサを使用する技術は、スタックド・レジスタ・ファイル・アーキテクチャとして知られる。スタックド・レジスタ・ファイル・アーキテクチャにおいて、高レベルプロセッサコントローラは、物理レジスタファイルを、無限の深さの論理スタックと見なす。この論理的に無限のスタックは、手順がコールされるたび、漸増的にレジスタを手順に割り当てること、および以前に割り当てられたレジスタの内容を、必要に応じてセーブすることによって、物理レジスタファイル内で実現される。
【０００７】
図１は、スタックド・レジスタ・ファイル・アーキテクチャを表す機能ブロック図である。物理レジスタファイル１は、高速マルチポート物理レジスタのアレイを備える。このアレイは、命令セットアーキテクチャ内のＧＰＲと少なくとも同じ数のレジスタを含む。たとえば、物理レジスタファイル１は、下は物理レジスタ０（ＰＲ０）から、上は物理レジスタ１２７（ＰＲ１２７）の範囲に及ぶ１２８のレジスタを備えうる。スタック頂部ポインタおよびセーブ／リストアポインタの２つの論理ポインタが、スタック管理を実現する。
【０００８】
最初に、２つのポインタはどちらもＰＲ０にセットされる。手順がコールされ、レジスタがそこへ割り当てられると、スタック頂部ポインタは上に動く。利用可能であるほぼ全ての物理レジスタが割り当てられ、新たにコールされた手順が、物理レジスタファイル１内に残っている未割当レジスタの数よりも多い数のレジスタを要求すると、スタック頂部ポインタは「ラップ」（"wrap"）し、ＰＲ０から順に、物理レジスタファイル１底部からレジスタを割り当て始めるであろう。しかし、これが起こる前に、物理レジスタファイル１の底部にある十分な数のレジスタは、その内容を、たとえばシステムメモリ（ＲＡＭ）のようなバッキング記憶装置３にセーブしていなければならない。
【０００９】
レジスタセーブエンジン２は、プロセッサを中断し、物理レジスタファイル１底部の最も前に割り当てられたレジスタの内容をバッキング記憶装置３へセーブするために、レジスタ読取動作およびメモリ記憶動作に必要な命令を実行する。レジスタセーブエンジン２は、セーブ／リストアポインタをインクリメントし、ポインタより下のレジスタが、新しくコールされた手順への割り当てに利用可能であることを示す。レジスタセーブエンジン２が、レジスタセーブ動作を完了し、プロセッサの制御を解くと、プロセッサコントローラは、次の手順にレジスタを割り当て、スタック頂部ポインタをインクリメントし、バッキング記憶装置３にセーブされた内容を有するレジスタが、再び割り当てられ、コールされた手順によって利用されるように、これらのレジスタの上へラップおよびインクリメントする。
【００１０】
同様に、コールされた手順が実行を完了し、コールする手順の制御に戻ると、スタックはポップし、コールされた手順に割り当てられたレジスタは割り当て解除されるか、または他の手順への割り当てに利用可能にされる。もしコールする手順に関連する全てのデータが、物理レジスタファイル１に既になければ、つまり、コールする手順のレジスタのうち１つまたは複数が再び割り当てられれば、レジスタセーブエンジン２は再びプロセッサを中断し、最も新しくセーブされたレジスタの内容をバッキング記憶装置３から取り出し、データを物理レジスタファイル１へリストアし、コールする手順にレジスタを割り当て、セーブ／リストアポインタをインクリメントして、レジスタが割り当てられ、有効なデータを含むことが示される。
【００１１】
スタックド・レジスタ・ファイル・システムは、大きな物理レジスタファイル１、比較的小さい深さの手順重なり、および／または各手順に割り当てられた比較的少数のレジスタを用いて、最適な性能を提供する。これらの状況下で、スタック頂部ポインタは、物理レジスタファイル１を通って単純に上下に動き、遅延することなく、レジスタを必要に応じて手順に割り当てたり、この割り当てを解除する。しかし、手順の数が増加すると、および／または、１つまたは複数の手順が多数のレジスタを必要とすると、プロセッサは、レジスタが新たな手順に再割当されうるように、物理レジスタファイル１内のレジスタからデータをセーブし、またはレジスタへデータをリストアするために、レジスタセーブエンジン２による多くの中断を受ける。
【００１２】
スタックド・レジスタ・ファイル・システムの性能を向上させる１つの方法は、単純に物理レジスタファイル１のサイズを増加することである。これがより高い性能を提供するが、物理レジスタファイル１内のレジスタは、通常、高速マルチポートレジスタである。各レジスタは、たとえば３から５の読取ポートおよび書込ポートを含みうる。更に、動作スケジューリングおよびレジスタ割り当てにおける柔軟性のために、各物理レジスタの読取ポートは、各パイプラインの各実行パイプステージにルートされねばならず、各パイプラインの書き戻しパイプステージは、物理レジスタファイル内の各レジスタの書入れポートと接続していなければならない。従って、物理レジスタファイル１のサイズを増加することは、ゲートカウントおよび配線複雑さによってコストがかかる。与えられた任意の時間で、１つの手順だけが実行しており、物理レジスタファイル１内のレジスタの小さいサブセットのみにアクセスしている。従って、物理レジスタファイル１のサイズを増加することは、コストがかかりハードウェアの実用性が低下するとともに、著しいエリアコストおよび複雑さコストを招く。
【発明の概要】
【００１３】
１つまたは複数の実施形態において、バッキング記憶装置バッファは、スタックド・レジスタ・ファイル・アーキテクチャ内の物理レジスタファイルとバッキング記憶装置との間に挿入される。バッキング記憶装置バッファは、アクティブでない手順に割り当てられたレジスタからのデータが、オンチップで一時的に記憶されることを可能にし、物理レジスタファイル内のレジスタを、新たな手順に再び割り当てられるためにフリーにする。手順が完了し、以前のアクティブではない手順に制御を戻すと、アクティブではない手順に関連するデータは、既にセーブされている場合、バッキング記憶装置バッファから取り出され、物理レジスタファイル内のレジスタ、および、アクティブではない手順に再割当されたレジスタへリストアされる。データはバッキング記憶装置のみに書き込まれる必要があるので、バッキング記憶装置バッファが一杯の場合、著しい性能低下、および、オフチップＲＡＭアクセスに対して必要とされる電力消費を招く。
【００１４】
１つの実施形態は、専用のバッキング記憶装置バッファを有するスタックド・レジスタ・ファイルを管理する方法に関する。物理レジスタファイルからの１つまたは複数のレジスタが、第１の手順に割り当てられ、第１の手順に関連するデータは、割り当てられたレジスタに記憶される。第１の手順に関連するデータは、専用のバッキング記憶装置バッファへ選択的にセーブされ、第１の手順に割り当てられた１つまたは複数のレジスタは、第２の手順への割り当てのために割り当て解除される。第１の手順の継続する実行に先行して、第１の手順に関連するデータは、専用のバッキング記憶装置バッファから、１つまたは複数のレジスタへリストアされ、レジスタは第１の手順に再び割り当てられる。
【００１５】
別の実施形態は、プロセッサに関する。プロセッサは、プロセッサ命令セットアーキテクチャ内で定められる汎用レジスタの数と、少なくとも同じ数のレジスタを備える物理レジスタファイルを含む。レジスタは、動的にソフトウェア手順に割り当てられる。プロセッサは、アクティブではない手順に割り当てられたレジスタからデータを選択的にセーブし、手順がアクティブになる前に、データをレジスタへリストアするように動作するレジスタセーブエンジンも含む。プロセッサは、レジスタセーブエンジン専用であり、アクティブではない手順に割り当てられたレジスタからセーブされたデータを記憶するように動作するバッキング記憶装置バッファを更に含む。
【図面の簡単な説明】
【００１６】
【図１】図１は、先行技術スタックド・レジスタ・ファイルのブロック図である。
【図２】図２は、プロセッサの機能ブロック図である。
【図３】図３は、バッキング記憶装置バッファを含むスタックド・レジスタ・ファイルの機能ブロック図である。
【図４】図４は、スタックド・レジスタ・ファイル・アーキテクチャを管理する方法のフロー図である。
【発明を実施するための形態】
【００１７】
図２は、プロセッサ１０の機能ブロック図である。プロセッサ１０は、命令実行パイプライン１２内で、制御ロジック１４に従って命令を実行する。パイプライン１２は、たとえばパイプライン１２ａおよび１２ｂのような複数の並列するパイプラインを備えるスーパースケーラ設計でありうる。パイプライン１２ａおよび１２ｂの各々は、パイプステージに配置された様々なレジスタまたはラッチ１６、および１つまたは複数の算術論理演算ユニット（ＡＬＵ）１８を含む。パイプライン１２ａおよび１２ｂは、命令側変換索引バッファ（ＩＴＬＢ）２２によって管理されるメモリアドレス指定および許可を用いて、命令キャッシュ（ｉ−ＣａｃｈｅまたはＩ＄）２０から命令をフェッチする。
【００１８】
データは、主要変換索引バッファ（ＴＬＢ）２６によって管理されるメモリアドレス指定および許可を用いて、データキャッシュ（Ｄ−ＣａｃｈｅまたはＤ＄）２４からアクセスされる。様々な実施形態において、ＩＴＬＢ２２は、ＴＬＢ２６の一部のコピーを備えうる。あるいは、ＩＴＬＢ２２およびＴＬＢ２６は統合されうる。同様に、プロセッサ１０の様々な実施形態において、Ｉ−Ｃａｃｈｅ２０およびＤ−Ｃａｃｈｅ２４は、統合すなわち一体化されうる。Ｉ−Ｃａｃｈｅ２０および／またはＤ−Ｃａｃｈｅ２４におけるミスは、メモリインタフェース３４の制御下にあるメイン(オフチップ)メモリ３６へのアクセスの原因となる。
【００１９】
パイプステージレジスタまたはラッチ１６およびＡＬＵ１８は、物理レジスタファイル２８内のレジスタからオペランドを読み取り、および／またはそこへ結果を書き込む。物理レジスタファイル２８は、バッキング記憶装置バッファ３２を含むレジスタセーブエンジン３０によって管理される。バッキング記憶装置バッファ３２は、メモリインタフェース３４経由でメインメモリ３６と接続する。物理レジスタファイル２８、レジスタセーブエンジン３０、およびバッキング記憶装置バッファ３２の動作は、以下でより詳細に説明される。
【００２０】
プロセッサ１０は、様々な周辺デバイス４０および４２へのアクセスを制御している入力／出力(Ｉ／Ｏ)インタフェース３８を含む。当業者は、プロセッサ１０の多数の変形例が可能であることを明確に理解するだろう。たとえば、プロセッサ１０は、ＩキャッシュおよびＤキャッシュの何れかまたは両方の第２レベル（Ｌ２）キャッシュを含みうる。また、プロセッサ１０内に図示された機能ブロックのうちの１つまたは複数は、特定の実施形態からは省略されうる。
【００２１】
図３は、プロセッサ１０のスタックド・レジスタ・ファイル・アーキテクチャの機能ブロック図を示す。少なくともプロセッサ命令セットアーキテクチャが定義するＧＰＲと同じ数の物理レジスタを含む物理レジスタファイル２８に、論理的には無限のレジスタスタックが実装される。レジスタのグループは、新たにコールされた手順に割り当てられ、スタック頂部ポインタがインクリメントされる。スタック頂部ポインタより下（かつ、セーブ／リストアポインタより上）のレジスタは手順に割り当てられ、スタック頂部ポインタより上（かつ、セーブ／リストアポインタより下）のレジスタは、新たな手順への割り当てのために固定されていない。手順が実行を完了し、コールする手順の制御に戻ると、スタック頂部ポインタは、完了した手順に割り当てられたレジスタの数だけデクリメントされる。
【００２２】
手順がコールされ、物理レジスタファイル２８内に残っている、未割当のレジスタの数よりも多くのレジスタを必要とする場合、レジスタセーブエンジン３０は、アクティブではない手順に関連するデータ（つまり、アクティブではない手順に割り当てられたレジスタに記憶されたデータ）を物理レジスタファイル２８からセーブする。レジスタセーブエンジン３０は、セーブ／リストアポインタをインクリメントし、セーブ／リストアポインタより下（かつ、スタック頂部ポインタより上）の物理レジスタが、新たな手順への割り当てに利用可能であることを示す。
【００２３】
アクティブではない手順がアクティブにされる前に、レジスタセーブエンジン３０は、アクティブではない手順に割り当てられた全てのレジスタが、アクティブではない手順に割り当てられたままであり、アクティブではない手順に関連するデータを含んでいることを確認するために、物理レジスタファイル２８をチェックする。以前アクティブではない手順に割り当てられたレジスタのうちの１つまたは複数が、再割当された場合、レジスタセーブエンジン３０は、セーブされたデータを、物理レジスタファイル２８内の利用可能なレジスタにリストアする。データをリストアすると、レジスタセーブエンジン３０は、セーブ／リストアポインタを、リストアされたレジスタの数だけデクリメントし、セーブ／リストアポインタより上（かつ、スタック頂部ポインタより下）のレジスタが手順に割り当てられることを示す。アクティブではない手順は、その後アクティブにされる。ここで、手順に以前に割り当てられた全てのレジスタは、手順がアクティブでなかった場合に含まれるものと同じデータを含んでいる。当業者は、本明細書で、図３に示すように、ポインタより「上」「下」という用語が便宜的に用いられていると気付くだろう。実際には、スタック頂部ポインタおよびセーブ／リストアポインタの何れかまたは両方は「ラップする」ことがあり、これらの相対位置は逆になりうる。
【００２４】
たとえばオフチップＲＡＭのようなバッキング記憶装置３６に、物理レジスタの内容を、直接的にセーブおよびリストアする先行技術の実施に関する遅延および電力消費を避けるために、１つまたは複数の実施形態では、レジスタセーブエンジン３０はバッキング記憶装置バッファ３２を含む。バッキング記憶装置バッファ３２は、物理レジスタファイル内のレジスタからセーブされ、そこへリストアされたデータを、一時的に記憶する。レジスタセーブエンジン３０は、バッキング記憶装置バッファ３２が一杯か、または最大容量に近づいている場合、バッキング記憶装置バッファ３２からのデータをセーブするためにのみ、バッキング記憶装置バッファ３６にアクセスする必要がある。バッキング記憶装置バッファ３２の記憶容量と結合した物理レジスタファイル２８のサイズが、平均スタック深さに等しいまたはそれより大きい場合、バッキング記憶装置３６へのオフチップアクセスは著しく減少される。
【００２５】
更に高い性能のために、１つの実施形態では、バッキング記憶装置バッファ３２は、物理レジスタファイル２８内のレジスタのビット幅よりも大きいビット幅を有する記憶場所のアレイ（たとえば、レジスタ、ラッチ、またはＳＲＡＭアレイ）として構成される。特に、バッキング記憶装置バッファ３２内のエントリーは、物理レジスタファイル２８のビット幅の整数倍であるビット幅を有しうる。これによって、２つまたはそれ以上の物理レジスタからのデータを、１つのバッキング記憶装置バッファ３２エントリー内に、隣り合って記憶することが可能となる。
【００２６】
１つの実施形態において、ビット幅の整数倍における整数は、物理レジスタファイル２８内の読取ポートの数に等しい。たとえば、物理レジスタファイル２８が３つの読取ポートを含む場合、バッキング記憶装置バッファ３２は、各々が物理レジスタファイルの３倍のビット幅を有する記憶素子のアレイとして構成される（図３を参照）。この構成において、レジスタセーブエンジン３０は、３つの物理レジスタから同時に（すなわち、単一サイクルで）データを読み取り、３つ全てのレジスタから１つのバッキング記憶装置バッファへ、単一書込サイクルでデータを書き込む。これにより、レジスタがアクティブでない手順から割り当て解除されるとき、物理レジスタファイル２８からデータをセーブすることの性能オーバーヘッドが最小化される。同様に、物理レジスタファイル２８が更に３つの書込ポートを含む場合、物理レジスタファイル２８へデータをリストアすると、レジスタセーブエンジン２８は、データを、１つのバッキング記憶装置バッファ３２エントリーから、単一サイクルで３つの物理レジスタへリストアされるように読み取る。これらのデータは、物理レジスタファイル２８内の３つのレジスタへ、単一サイクルで書き込まれうる。
【００２７】
バッキング記憶装置バッファ３２は、多くの技術および動作構成で実現されうる。たとえば、バッキング記憶装置バッファ３２は、シンプルな、シングルポートの、高速レジスタまたはラッチのアレイを備える。あるいは、バッキング記憶装置バッファ３２は、ｎが各バッキング記憶装置３２エントリーのビット幅であり、ｍがそれらのエントリーの数である、ｎ×ｍアレイとして構成されるＳＲＡＭアレイとして実装されうる。ハードウェア構成にかかわらず、バッキング記憶装置バッファ３２は、たとえばスタックと、ＦＩＦＯと、データに関連付けられる手順のコンテクストＩＤによってインデックスされたキャッシュメモリ等のような様々な動作構成において実現されうる。
【００２８】
しかしながら、物理構成または動作構成にかかわらず、バッキング記憶装置バッファ３２は、レジスタセーブエンジン３０専用のものである。つまり、バッキング記憶装置３２内のメモリ記憶場所は、命令セットアーキテクチャの一部ではなく、命令によってアドレス指定されない。加えて、バッキング記憶装置バッファ３２は、物理レジスタファイル２８内のレジスタが割り当てられた手順がアクティブでなくなる時に、これらのレジスタに含まれるデータのみを記憶する。つまり、バッキング記憶装置バッファ３２は、オンチップであろうと、オフチップであろうと、スクラッチレジスタ、キャッシュメモリ、その他任意のプロセッサメモリまたは記憶場所から隔離されている。本明細書で用いられる用語である「専用の」バッキング記憶装置バッファは、バッキング記憶装置バッファ３２が、プロセッサ１０における他の構成要素からの物理的および機能的に隔離されていることを示す。
【００２９】
１つの実施形態において、バッキング記憶装置バッファ３２は、スタックとして動作的に構成される。レジスタセーブエンジン３０は、物理レジスタファイル２８からデータを読み取り、スタックの頂部にデータをプッシュする。反対に、レジスタセーブエンジン３０は、物理レジスタファイル２８へリストアされるデータを取り出すためにスタックをポップする。バッキング記憶装置バッファ３２が一杯か、またはいくつかの実施形態において、最大容量に近づくと、レジスタセーブエンジン３０は、スタックの底部からデータを読み取り、バッキング記憶装置３６にデータを記憶する。ここで、バッキング記憶装置３６は、Ｌ１キャッシュまたはＬ２キャッシュを備えうるか、図２に示すようなメインシステムメモリ（たとえばＲＡＭ）を備えうる。レジスタセーブエンジン３０が、十分なデータをバッキング記憶装置バッファ３２から物理レジスタファイル２８へリストアし、バッキング記憶装置バッファ３２の容量が空くと、レジスタセーブエンジン３０は、以前にセーブしたデータをバッキング記憶装置３８から読み取り、このデータを、バッキング記憶装置バッファ３２内のスタック底部へ書き込む。バッキング記憶装置バッファ３２をスタックとして動作することは、バッキング記憶装置バッファ３２エントリーのビット幅にはよらないことに留意されたい。
【００３０】
バッキング記憶装置バッファ３２が、最適性能のためにスタックとして動作する１つの実施形態において、バッキング記憶装置バッファ３２は、物理レジスタファイル２８に関する上記説明と同様に、スタックの頂部および底部がポインタによって維持される、二重ポートレジスタのアレイとして構成される。これは、たとえば、レジスタセーブエンジン３０が、物理レジスタファイル２８からセーブしたデータを、データがバッキング記憶装置バッファ３２のスタック底部からバッキング記憶装置３６へセーブされるのと同時に、バッキング記憶装置バッファ３２のスタックの頂部にプッシュすることを可能にする。同様に、データは、物理レジスタファイル２８へリストアされるためにスタック頂部からポップされるのと同時に、バッキング記憶装置３６から、バッキング記憶装置バッファ３２のスタックの底部へリストアされる。
【００３１】
代替実施形態において、回路複雑さおよびシリコン面積を低減するために、バッキング記憶装置バッファ３２スタックは、シングルポートレジスタから構成され、レジスタセーブエンジン３０スケジューリングは、物理レジスタファイル２８からデータをセーブし、そこへデータをリストアする動作に基づいて、バッキング記憶装置との読み書きを行う。
【００３２】
１つの実施形態に従って、スタックド・レジスタ・ファイル・アーキテクチャを動作する方法が、図４にフロー図形式で示されている。最初に、レジスタセーブエンジン（ＲＳＥ）３０を備えるスタックド・レジスタ・コントローラが、たとえば算術命令または論理命令のオペランドまたは結果のようなデータ書込および読取手順に専用に用いられる、物理レジスタファイル（ＰＲＦ）２８内の１つまたは複数のレジスタを割り当てる要求を受け取る（ブロック４０）。ＲＳＥ３０は、ＰＲＦ２８内に、十分な数の未割当レジスタが残っているかどうか判定する（ブロック４２）。残っているのであれば、要求された数のＰＲＦ２８レジスタが新たな手順に割り当てられる（ブロック５０）。この処理は、各手順が後続する手順をコールするたび、何回か繰り返される（ブロック４０）。
【００３３】
ある時点において、手順がコールされ、レジスタの割り当てが要求されるが（ブロック４０）、ＰＲＦ２８内に、要求を満たすのに十分な数の未割当レジスタが残っていないのであれば(ブロック４２)、ＲＳＥ３０は、要求を満たすために、ＰＲＦ２８内のいくつのレジスタがフリーにされるべきかを決定し、バッキング記憶装置バッファ（ＢＳＢ）３２内で、相伴う量のフリースペースが利用可能であるかを判定する（ブロック４４）。もし利用可能であれば、１つまたは複数の現在はアクティブでない手順に割り当てられたレジスタのうち少なくとも要求を満たすだけの数を、ＢＳＢ３２にレジスタの内容をセーブすることによって割り当て解除する（ブロック４８）。ＲＳＥ３０はその後、これらの割り当て解除されたレジスタを、ＰＲＦ２８内にある割り当て解除されたレジスタとともに、要求元の新たな手順に割り当てる（ブロック５０）。この新たな手順は、実行を続行し、割り当てられたＰＲＦ２８レジスタ内にデータを記憶する。
【００３４】
もし十分な数の新たな手順がコールされる場合、および／または、もし新たな手順が多くのレジスタの割り当てを要求する場合、ＢＳＢ３２は一杯になっているか、最大容量に近づいている可能性がある。この場合、新たな手順によって要求され（ブロック４０）、ＰＲＦ２８内に十分な数のレジスタがなく（ブロック４２）、ＰＲＦ２８内に十分なフリースペースがなければ（ブロック４４）、ＲＳＥ３０は、古いエントリーを、ＢＳＢ３２から、たとえばオフチップＲＡＭのようなバッキング記憶装置（ＢＳ）３６へセーブするであろう（ブロック４６）。その後データは、ＰＲＦ２８からＢＳＢ３２へセーブされ(ブロック４８)、フリーになったＰＲＦ２８レジスタが、新たな手順に割り当てられる（ブロック５０）。この処理は、新たな手順がコールされるたびに繰り返される(ブロック４０)。
【００３５】
ある時点において、新たな手順をコールする(ブロック４０)のではなく、アクティブな手順は終了し、コーリング手順に制御を戻す。これは、再びアクティブにすることを要求するであろう(ブロック５２)。ＲＳＥ３０は、アクティブでない手順に元々割り当てられていた全てのレジスタが、ＰＲＦ２８内でまだそこに割り当てられているかを判定するためのチェックをするであろう(ブロック５４)。割り当てられれば、手順が別の手順をコールしてアクティブでなくなる前に手順によって書き込まれた全てのデータは、ＰＲＦ５４内に残り、手順は再びアクティブになり、実行を再開することができる（ブロック６２）。
【００３６】
もしＲＳＥ３０が、アクティブでない手順に元々割り当てられていた１つまたは複数のレジスタからデータをセーブし、レジスタを別の手順に割り当てれば、ＲＳＥ３０は、データがＢＳＢ３２内に記憶されているか確かめるためのチェックをする。もし記憶されていれば、ＲＳＥ３０は、少なくともアクティブでない手順に関連するデータをＢＳＢ３２から読み取り、それをＰＲＦ２８内のレジスタへ書き込み、レジスタをアクティブでない手順に割り当てる（ブロック６０）。その後、アクティブでない手順は、再びアクティブにされる（ブロック６２）。
【００３７】
もしアクティブでない手順に関連するデータが、ＰＲＦ２８からセーブされており（ブロック５４）、ＢＳＢ３２内に記憶されていなければ（ブロック５８）、その後データは、ＢＳＢ３２からＢＳ３６へセーブされる。この場合、ＲＳＥ３０は、少なくともアクティブでない手順に関連するデータを、ＢＳ３６から読み取り、それをＢＳＢ３２へ書き込む(ブロック５８)。ＲＳＥ３０は、その後、ＢＳＢ３２からＰＲＦ２８へデータをリストアし、受け取るレジスタを、手順を再びアクティブにする（ブロック６２）前に、アクティブでない手順に割り当てる(ブロック６０)。再びアクティブにされた手順は、その後、別の手順をコールしうる（ブロック４０）。または、自身で実行を完了し、以前のコーリング手順に制御を戻す(ブロック５２)。
【００３８】
当業者は、本開示を教示する観点から、上記手順の複数の明白な変形例または最適化を認識するであろう。たとえば、データが全面的にＢＳ３６にセーブされており、手順を再びアクティブにするように要求される場合、ＲＳＥ３０はＢＳＢ３２を通らず、ＢＳ３６からＰＲＦ２８内のレジスタへ直接データを書き込む。加えて、本明細書に開示されたように、特に、各ＢＳＢ３２エントリーの幅が、ＰＲＦ２８読み取りポートの数の倍数であるＰＲＦ２８レジスタの幅である実施形態において、データは手順バウンダリとともに、ＰＲＦ２８（またはＢＳＢ３２）から記憶されたり、そこへリストアされないことがある。すなわち、アクティブでない手順に関連するデータの全てが、ＰＲＦ２３から同時にセーブされうるわけではない。同様に、１つのアクティブでない手順に関連するデータをＰＲＦ２８へリストアするとき、ＲＳＥ３０は、別の手順に関連するデータを更に（ＢＳＢ３２またはＢＳ３６において記憶されている、残りの他の手順に関連する付加データとともに）リストアすることができる。
【００３９】
専用のローカル高速記憶を提供することによって、バッキング記憶装置バッファ３２は、レジスタセーブエンジン３０が、セーブされたデータをオフチップバッキング記憶装置へ書き込むことに関連する著しい性能低下および電力消費を招くことなく、物理レジスタファイル２８からデータをセーブおよびリストアすることを可能にする。バッキング記憶装置バッファ３２は、マルチポートであったり、または１つまたは複数の実行パイプライン内のパイプステージに接続されている必要がないために、物理レジスタファイル２８のサイズを増加することに対する経済的な代替例である。
【００４０】
実際に、本バッキング記憶装置バッファ３２が存在することによって、物理レジスタファイル２８が、命令セットアーキテクチャ内のＧＰＲとして定義される数のレジスタのみを含むことが可能となる。つまり、理論上、手順は、定義された全てのＧＰＲに割り当てられるので、命令セットアーキテクチャ内のＧＰＲの数は、物理レジスタファイル２８のサイズを小さな値にする。本発明のバッキング記憶装置バッファ３２は、バッキング記憶装置３６へのオフチップアクセスを回避または最小化することからなる高性能および低電力消費を実現しながら、シリコン面積および配線複雑さを抑えるために、物理レジスタファイル２８のサイズの最大値を同じ値とすることができる。
【００４１】
本発明は、本明細書において、その特定の特徴、局面および実施形態に関して説明されてきたが、複数の変形例、改良、および他の実施形態が、本発明の範囲内で可能であり、従って、全ての変形例、改良及び実施形態は、本発明の範囲内にあると見なされる。従って、本実施形態は、全ての局面において、限定的ではなく例示的に解釈され、添付する特許請求の範囲の意味および均等な範囲内における全ての変形は、本明細書に包含されるように意図されている。
なお、以下に、出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］専用のバッキング記憶装置バッファを有するスタックド・レジスタ・ファイルを管理する方法であって、
物理レジスタファイルから１つまたは複数のレジスタを第１の手順に割り当て、前記第１の手順に関連するデータを、前記割り当てられたレジスタに記憶することと、
前記第１の手順に関連するデータを、前記専用のバッキング記憶装置バッファへ選択的にセーブし、前記第１の手順に割り当てられた１つまたは複数のレジスタを、第２の手順への割り当てのために解放することと、
前記第１の手順の継続した実行の前に、前記第１の手順に関連するデータを、前記専用のバッキング記憶装置バッファから、１つまたは複数のレジスタへリストアし、前記レジスタを、前記第１の手順に再び割り当てることと
を備える方法。
［Ｃ２］前記第１の手順に関連するデータを、前記専用のバッキング記憶装置バッファから、バッキング記憶装置へセーブすることと、その後、前記第１の手順に関連するデータを、１つまたは複数のレジスタへリストアする前に、前記第１の手順に関連するデータを、前記バッキング記憶装置から取り出すこととを更に備えるＣ１に記載の方法。
［Ｃ３］前記バッキング記憶装置バッファ内の、アドレス可能な各記憶場所のビット幅が、前記レジスタのビット幅の整数倍であり、複数のレジスタに記憶される前記第１の手順に関連するデータは、前記バッキング記憶装置バッファ内の、１つのアドレス可能な記憶場所へセーブされるＣ１に記載の方法。
［Ｃ４］前記整数倍における整数は、前記物理レジスタファイルの読取ポートの数であるＣ３に記載の方法。
［Ｃ５］前記レジスタの整数倍における整数は、前記物理レジスタファイルから同時に読み取られ、１つの書き込み動作で前記バッキング記憶装置バッファへ書き込まれるＣ４に記載の方法。
［Ｃ６］バッキング記憶装置バッファはスタックとして実現され、前記第１の手順に関連するデータが前記レジスタから前記バッキング記憶装置バッファへセーブされる場合、データは、前記バッキング記憶装置バッファの頂部へ押し入れられ、前記バッキング記憶装置バッファが一杯である場合、前記第１の手順に関連するデータは、前記バッキング記憶装置バッファの底部から、前記バッキング記憶装置へセーブされるＣ２に記載の方法。
［Ｃ７］前記バッキング記憶装置バッファは、前記スタックド・レジスタ・ファイル専用のオンチップＲＡＭとして実現されるＣ２に記載の方法。
［Ｃ８］前記第１の手順に関連するデータを、前記専用のバッキング記憶装置バッファへ選択的にセーブすることは、前記物理レジスタファイル内に、前記第２の手順に割り当てるために十分な未割当レジスタが残っていないときのみ、前記第１の手順に関連するデータを、前記専用のバッキング記憶装置バッファへセーブすることを備えるＣ１に記載の方法。
［Ｃ９］前記第１の手順に関連するデータを、前記専用のバッキング記憶装置バッファへ選択的にセーブすることは、前記第１の手順に関連するデータのみを、前記専用のバッキング記憶装置バッファへセーブすることを備えるＣ１に記載の方法。
［Ｃ１０］少なくともプロセッサ命令セットアーキテクチャ内で定められる汎用レジスタの数と同じ数の、ソフトウェア手順に動的に割り当てられるレジスタを備える物理レジスタファイルと、
データを、アクティブでない手順に割り当てられたレジスタから選択的にセーブし、前記手順がアクティブになる前に、前記レジスタへデータをリストアするように動作するレジスタセーブエンジンと、
前記レジスタセーブエンジン専用であり、前記アクティブでない手順に割り当てられたレジスタからセーブされた前記データを記憶するように動作するバッキング記憶装置バッファと
を備えるプロセッサ。
［Ｃ１１］前記バッキング記憶装置バッファ内のアドレス可能なエントリーは、前記物理レジスタファイル内のレジスタのビット幅の整数倍であるビット幅を有するＣ１０に記載のプロセッサ。
［Ｃ１２］前記物理レジスタファイルはマルチポートであり、前記整数倍は、前記物理レジスタファイルの読取ポートの数であるＣ１１に記載のプロセッサ。
［Ｃ１３］前記レジスタセーブエンジンは、前記レジスタの整数倍における整数の、前記物理レジスタファイルからの読み取りと、前記レジスタの整数倍における整数の、前記バッキング記憶装置バッファへの書込みとを、１つの書込動作において同時に行うように動作するＣ１２に記載のプロセッサ。
［Ｃ１４］前記バッキング記憶装置バッファが一杯である場合、前記アクティブでない手順に割り当てられたレジスタからセーブされたデータを記憶するように動作するバッキング記憶装置を更に備えるＣ１０に記載のプロセッサ。
［Ｃ１５］前記バッキング記憶装置バッファは、スタックの頂部に押し入れられた１つまたは複数のレジスタからデータを記憶し、前記スタックの頂部からポップされたデータを、１つまたは複数の物理レジスタへリストアするように動作する前記スタックとして実現されるＣ１４に記載のプロセッサ。
［Ｃ１６］前記バッキング記憶装置バッファは、前記バッキング記憶装置バッファが最大容量に近づく場合、データを、前記スタックの底部から、前記バッキング記憶装置へ記憶するように動作し、前記バッキング記憶装置バッファが、前記物理レジスタファイル内のレジスタへデータをリストアすることによって、容量を獲得する場合、データを、前記バッキング記憶装置から、前記スタックの底部へ取り出すように動作するＣ１５に記載のプロセッサ。
［Ｃ１７］前記バッキング記憶装置バッファは、前記レジスタセーブエンジン専用のオンチップＲＡＭとして実現されるＣ１４に記載のプロセッサ。
［Ｃ１８］前記バッキング記憶装置はキャッシュメモリであるＣ１４に記載のプロセッサ。
［Ｃ１９］前記バッキング記憶装置はオフチップＲＡＭであるＣ１４に記載のプロセッサ。
【図１】
0005869009.tif 000002
【図２】
0005869009.tif 000003
【図３】
0005869009.tif 000004
【図４】
0005869009.tif 000005