(57)【要約】【課題】  高いクロック速度及び大型の且つ複雑なプロセッサをサポートするプロセッサ設計技法を提供する。【解決手段】  プロセッサは、異なるアクセス待ち時間を有する複数レベルのレジスタを有する。レジスタの比較的小さいセットが比較的速い高レベルのレジスタ・バンクに含まれ、レジスタの大きい完全なセットが比較的遅い低レベルのレジスタ・バンクに含まれる。物理的には、高レベルのレジスタ・バンクが、そのレジスタから入力を受ける機能的ロジックに近接して設けられる。望ましくは、低レベルのレジスタ・バンクがすべてのプロセッサ・レジスタの完全なセットを含み、高レベルのレジスタ・バンクがレジスタの小さいサブセットを含み、低レベルのバンクにおける情報を複製する。高レベルのバンクは単一のクロック・サイクルでアクセス可能であることが望ましい。【選択図】  図１
2006012163.tif 000002
【特許請求の範囲】
【請求項１】
実行するための命令を選択及びデコードする命令ロジックと、
前記命令によって指定されたオペレーションを遂行する実行ロジックと、
前記命令からのレジスタ識別子を使用して参照されるレジスタ・データを記憶する複数のレジスタと、
を含み、
前記複数のレジスタが複数のレベルとして編成され、
（ａ）第１のアクセス待ち時間及び第１の数のレジスタを有する第１レベルと、
（ｂ）第２のアクセス待ち時間及び第２の数のレジスタを有し、前記第２のアクセス待ち時間が前記第１のアクセス待ち時間よりも長く、前記第２の数のレジスタが前記第１の数のレジスタよりも多い、第２レベルと、
を含む、
ディジタル・データ処理装置。
【請求項２】
前記第１レベルの前記レジスタに含まれたレジスタ・データが前記第２レベルの前記レジスタに含まれたレジスタ・データのサブセットである、請求項１に記載のディジタル・データ処理装置。
【請求項３】
前記第１レベルの各レジスタが、前記第２レベルのレジスタの複数の個別のサブセットにおける対応するサブセットのレジスタの内容を記憶し、前記対応するサブセットのレジスタが前記第２レベルの複数のレジスタを含む、請求項２に記載のディジタル・データ処理装置。
【請求項４】
前記第１レベルの唯一のレジスタが前記第２レベルの前記レジスタの前記対応するサブセットのそれぞれに対応する、請求項３に記載のディジタル・データ処理装置。
【請求項５】
前記第１レベルの前記レジスタの各々が、最近参照された前記第２レベルのレジスタの対応するサブセットのレジスタの内容を記憶する、請求項４に記載のディジタル・データ処理装置。
【請求項６】
前記ディジタル・データ処理装置が、命令によってオペランドとして識別されたレジスタを含む前記第２レベルのレジスタのサブセットに対応する前記第１レベルのレジスタから検索されたオペランド・データを使用して前記実行ロジックにおいてオペレーションを投機的に遂行し、しかる後、前記第１レベルのレジスタから検索された前記データが、命令によってオペランドとして識別されたレジスタにおけるデータと同じであるかどうかを決定する、請求項３に記載のディジタル・データ処理装置。
【請求項７】
前記レジスタ識別子の各々がＮビットを含み、前記第１レベルの前記レジスタが前記レジスタ識別子のＭビット部分を使用してアクセスされる（但し、Ｎ＞Ｍ＞１）、請求項１に記載のディジタル・データ処理装置。
【請求項８】
前記第１レベルの各レジスタが前記第２レベルのレジスタの対応するサブセットのレジスタの内容を記憶し、前記対応するサブセットのレジスタは、前記サブセットが対応する前記第１レベルのレジスタのＭビット部分の値に前記Ｍビット部分の値が等しいレジスタ識別子を有する前記第２レベルのすべてのレジスタである、請求項７に記載のディジタル・データ処理装置。
【請求項９】
前記第１レベルの前記レジスタに書き込むために前記実行ロジックに生成された複数の結果の１つを選択するための結果選択ロジックを更に含み、
前記結果選択ロジックが前記第２レベルの前記レジスタの少なくとも１つの出力を入力として更に受ける、請求項１に記載のディジタル・データ処理装置。
【請求項１０】
前記第１レベルのレジスタからの出力の１つ及び前記実行ロジックへの入力に対する前記第２レベルのレジスタからの出力を選択するための実行入力選択ロジックを更に含む、請求項１に記載のディジタル・データ処理装置。
【請求項１１】
命令の選択されたシーケンスに対する前記第１レベルのレジスタからの出力をディセーブルするために前記実行入力選択ロジックを制御する、請求項１０に記載のディジタル・データ処理装置。
【請求項１２】
前記第１レベルのレジスタからの出力が有効である場合に前記出力を選択し、前記第１レベルのレジスタからの出力が有効でない場合に前記第２レベルのレジスタからの出力を選択するように前記実行入力選択ロジックを制御する、請求項１０に記載のディジタル・データ処理装置。
【請求項１３】
前記命令ロジックが、実行のための命令を複数のスレッドから同時に選択及びデコードし、
前記複数のレジスタが複数のレジスタ・セットを含み、前記レジスタ・セットの各々が前記複数のスレッドにおけるそれぞれのスレッドに対応し且つ前記第１レベルのレジスタ及び前記第２レベルのレジスタを含む、
請求項１に記載のディジタル・データ処理装置。
【請求項１４】
前記命令ロジックが単一のクロック・サイクルにおいて実行するための複数の命令をディスパッチすることができる、請求項１に記載のディジタル・データ処理装置。
【請求項１５】
複数の汎用レジスタとスカラ・データを処理するための実行ロジックとを有する実行ユニットと、
複数のオペランド・セットに関するオペレーションを並行して遂行するためのベクトル処理サブユニットと、
を更に含み、
前記ベクトル処理サブユニットが複数のレベルとして編成された前記複数のレジスタを含む、請求項１に記載のディジタル・データ処理装置。
【請求項１６】
単一の半導体チップとして具現化される、請求項１に記載のディジタル・データ処理装置。
【請求項１７】
命令を含むデータを記憶するためのメモリと、
前記メモリからの命令を実行するための少なくとも１つのプロセッサと、
を含み、
前記プロセッサが、
（ａ）実行するための命令を選択及びデコードする命令ロジックと、
（ｂ）前記命令によって指定されたオペレーションを遂行する実行ロジックと、
（ｃ）前記命令からのレジスタ識別子を使用して参照されるレジスタ・データを記憶する複数のレジスタと、
を含み、
前記複数のレジスタが複数のレベルとして編成され、
（ｉ）第１のアクセス待ち時間及び第１の数のレジスタを有する第１レベルと、
（ii）第２のアクセス待ち時間及び第２の数のレジスタを有し、前記第２のアクセス待ち時間が前記第１のアクセス待ち時間よりも長く、前記第２の数のレジスタが前記第１の数のレジスタよりも多い、第２レベルと、
を含む、
コンピュータ・システム。
【請求項１８】
前記第１レベルの前記レジスタに含まれたレジスタ・データが前記第２レベルの前記レジスタに含まれたレジスタ・データのサブセットである、請求項１７に記載のコンピュータ・システム。
【請求項１９】
前記第１レベルの各レジスタが、前記第２レベルのレジスタの複数の個別のサブセットの対応するサブセットのレジスタの内容を記憶し、前記対応するサブセットのレジスタが前記第２レベルの複数のレジスタを含む、請求項１８に記載のコンピュータ・システム。
【請求項２０】
前記第１レベルの唯一のレジスタが前記第２レベルの前記レジスタの前記対応するサブセットのそれぞれに対応する、請求項１９に記載のコンピュータ・システム。
【請求項２１】
前記第１レベルの前記レジスタの各々が、最近参照された前記第２レベルのレジスタの対応するサブセットのレジスタの内容を記憶する、請求項２０に記載のコンピュータ・システム。
【請求項２２】
前記プロセッサが、命令によってオペランドとして識別されたレジスタを含む前記第２レベルのレジスタのサブセットに対応する前記第１レベルのレジスタから検索されたオペランド・データを使用して前記実行ロジックにおいてオペレーションを投機的に遂行し、しかる後、前記第１レベルのレジスタから検索された前記データが、命令によってオペランドとして識別されたレジスタにおけるデータと同じであるかどうかを決定する、請求項１９に記載のコンピュータ・システム。
【請求項２３】
前記レジスタ識別子の各々がＮビットを含み、前記第１レベルの前記レジスタが前記レジスタ識別子のＭビット部分を使用してアクセスされる（但し、Ｎ＞Ｍ＞１）、請求項１７に記載のコンピュータ・システム。
【請求項２４】
前記第１レベルの各レジスタが前記第２レベルのレジスタの対応するサブセットのレジスタの内容を記憶し、前記対応するサブセットのレジスタは、前記サブセットが対応する前記第１レベルのレジスタのＭビット部分の値に前記Ｍビット部分の値が等しいレジスタ識別子を有する前記第２レベルのすべてのレジスタである、請求項２３に記載のコンピュータ・システム。
【請求項２５】
前記プロセッサが、前記第１レベルの前記レジスタに書き込むために前記実行ロジックに生成された複数の結果の１つを選択するための結果選択ロジックを更に含み、
前記結果選択ロジックが、前記第２レベルの前記レジスタの少なくとも１つの出力を入力として更に受ける、請求項１７に記載のコンピュータ・システム。
【請求項２６】
前記プロセッサが、前記第１レベルのレジスタからの出力の１つ及び前記実行ロジックへの入力に対する前記第２レベルのレジスタからの出力を選択するための実行入力選択ロジックを更に含む、請求項１７に記載のコンピュータ・システム。
【請求項２７】
前記プロセッサが、命令の選択されたシーケンスに対する前記第１レベルのレジスタからの出力をディセーブルするために前記実行入力選択ロジックを制御する、請求項２６に記載のコンピュータ・システム。
【請求項２８】
前記プロセッサは、前記第１レベルのレジスタからの出力が有効である場合に前記出力を選択し、前記第１レベルのレジスタからの出力が有効でない場合に前記第２レベルのレジスタからの出力を選択するように前記実行入力選択ロジックを制御する、請求項２６に記載のコンピュータ・システム。
【請求項２９】
前記命令ロジックが、実行のための命令を複数のスレッドから同時に選択及びデコードし、
前記複数のレジスタが複数のレジスタ・セットを含み、前記レジスタ・セットの各々が前記複数のスレッドにおけるそれぞれのスレッドに対応し且つ前記第１レベルのレジスタ及び前記第２レベルのレジスタを含む、
請求項１７に記載のコンピュータ・システム。
【請求項３０】
複数のプロセッサを含み、
前記プロセッサの各々が、
（ａ）実行するための命令を選択及びデコードする命令ロジックと、
（ｂ）前記命令によって指定されたオペレーションを遂行する実行ロジックと、
（ｃ）前記命令からのレジスタ識別子を使用して参照されるレジスタ・データを記憶する複数のレジスタと、
を含み、
前記複数のレジスタが複数のレベルとして編成され、
（ｉ）第１のアクセス待ち時間及び第１の数のレジスタを有する第１レベルと、
（ii）第２のアクセス待ち時間及び第２の数のレジスタを有し、前記第２のアクセス待ち時間が前記第１のアクセス待ち時間よりも長く、前記第２の数のレジスタが前記第１の数のレジスタよりも多い、第２レベルと、
を含む、
コンピュータ・システム。
【請求項３１】
前記メモリに含まれたデータの選択的部分を一時的に記憶するためのキャッシュ・メモリを更に含む、請求項１７に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディジタル・データ処理ハードウェアに関し、詳しく言えば、ディジタル・データ処理装置における処理ユニットのためのレジスタ・ファイル及び支援ハードウェアの設計及び操作に関するものである。
【背景技術】
【０００２】
二十世紀の後半に、情報革命として知られている現象が始まった。情報革命はいずれの事象又は機械よりも広範囲の歴史的な発展であるが、ディジタル電子的計算機以上の情報革命を代表する単一の装置は生まれていない。コンピュータ・システムの発展は確かに１つの革命であった。毎年、コンピュータ・システムは急速に成長し、より多くのデータを記憶し、より多くのアプリケーションをユーザに提供している。
【０００３】
現在のコンピュータ・システムは、一般に、中央処理装置（ＣＰＵ）と、通信バス及びメモリのような情報を記憶、検索、及び転送するために必要な支援ハードウェアとを含んでいる。更に、それは、入出力コントローラまたはストレージ・コントローラのような外界と通信を行うために必要なハードウェア、及びキーボード、モニタ、テープ・ドライブ、ディスク装置、ネットワークに接続された通信回線のような上記のハードウェアに接続された装置等を含む。ＣＰＵはそのシステムの心臓である。それは、コンピュータ・プログラムを構成する命令を実行し、他のシステム・コンポーネントのオペレーションを指示する。
【０００４】
コンピュータのハードウェアの立場から見ると、ほとんどのシステムは基本的に同じ態様で動作する。プロセッサは、算術計算、論理的比較、及び或るロケーションから他のロケーションへの移動のような非常に単純なオペレーションの限定されたセットを遂行することができる。しかし、各オペレーションは、非常に高速で遂行される。膨大な数のこれらの単純なオペレーションを遂行するようにコンピュータに指示を与えるプログラムは、そのコンピュータが何か複雑なことを行っているという幻想を与える。コンピュータ・システムの新しい又は改良された機能を遂行することによって認識される諸事項は、本質的には同じセットの非常に単純なオペレーションを遂行することによって、しかし、それを極めて高速で行うことによって、可能にされる。従って、コンピュータ・システムに対する改良を継続することは、これらのシステムが常に高速なものにされることを必要とする。
【０００５】
コンピュータ・システム全体の速度（スループットとも呼ばれる）は、単位時間当たりに遂行されるオペレーションの数として大雑把に測定することが可能である。概念的には、システム速度に対するすべての可能な改良のうちの最も簡単なものは、種々のコンポーネントのクロック速度、特に、プロセッサのクロック速度を高めることである。例えば、すべてのものが２倍の速度で稼動するがその他の点では全く同じ態様で動作する場合、システムは所与のタスクを半分の時間で遂行するであろう。数多くの独立したコンポーネントから構成された初期のコンピュータ・プロセッサは、コンポーネントを縮小及び結合することによって、結局、単一のチップ上に集積回路としてプロセッサ全体をパッケージすることによって、かなりのクロック速度の改良を受け易かった。サイズの減少は、プロセッサのクロック速度を高めること、従って、システム速度を高めることを可能にした。
【０００６】
クロック速度のほかに多くの設計上の改良がコンピュータ・システムのスループットを高めたが、常にクロック速度をより高速化することを求める要求が存在する。
【０００７】
特定のプロセッサ設計のために選択されたクロック速度は、単一のクロック・サイクルにおいて遂行されるべき最も遅いオペレーションよりも速いものになり得ない。一方、これは、論理回路のゲート遅延及び伝送パスの遅延によって制限される。多くの初期のプロセッサ設計は、プロセッサの命令セットおける１つの完全な単純な命令を１クロック・サイクル内で実行することができたが、複雑な命令は複数サイクルを必要とすることが多かった。単純な命令であっても、デコーディング、データの移動、論理演算の遂行等を逐次に行うためにはかなりの数のゲート遅延を必要とする。これらのゲート遅延は、そのようなプロセッサ設計のクロック速度を制限した。より高いクロック速度をサポートするために、最新のプロセッサは、命令を実行するために何らかのパイプライン方式を使用している。パイプラインは、１つの命令を複数の逐次的副次部分又はステージに分解する。各クロック・サイクルでもって、命令はパイプラインの次のステージに進行する。このように各命令を複数のステージに分解することによって、各ステージにおいて遂行される事項の数が減少し、それは１つの完全な命令のために必要な数よりも少ないことを意味する。従って、パイプライン化の設計は、１つのクロック・サイクルにおける配慮されなければならないゲート遅延の数を減少させることによって、より高いクロック速度をサポートする。
【０００８】
パイプライン化は各クロック・サイクルにおける論理ゲート遅延の数をかなり減少させたが、更に重要なものと思われていたプロセッサ・クロック速度におけるもう１つの主要な制限事項は、プロセッサ・チップの物理的サイズ及びレイアウトに固有の伝播遅延である。代表的な最新のクロック速度は、プロセッサ・チップの一部からの信号を比較的離れた部分に単一のクロック・サイクルで伝播することが困難になるほど速い。レイアウトに対して注意深い配慮が払われる場合、多くの長い信号パスを回避することは可能であるが、すべての長いパスが良好な設計によって排除されることはありそうもない。レイアウトは、クロック速度が増加し且つプロセッサが更に複雑になるにつれて、益々難しくなる。いくつかの信号がチップ内で伝播するためには複数サイクルを必要とするということは受容することが必要であろう。しかし、この譲歩が日常的に行われる場合、速いクロック速度の恩恵は大きく損なわれる。
【０００９】
プロセッサにおけるレジスタからのデータの検索は、データの処理に関連した重要なパス相互間での検索である。レジスタの真の目的は、データを最高の速度で検索し得る場所にそのデータを一時的に保持することである。ほとんどのプロセッサ設計では、これは、レジスタ・データが単一のクロック・サイクルでアクセスし得るものであることを意味する。しかし、プロセッサの設計が更に複雑になり、より大きいレジスタ・ファイルを含むとき、レジスタと或る機能的ロジックとの間の物理的距離は、単一のクロック・サイクル内にそれを保つことを困難にする。一般的には、プロセッサが複数のプログラムのレジスタ・セットを含み、各レジスタ・セットがそれぞれのスレッドをサポートすることを意味するハードウェア・マルチスレッドに対するサポートは、レジスタ・ファイルの必要なサイズを更に増加させる。同時に、クロック速度の増加が、レジスタから機能的ロジックにデータを伝播するための時間をより少なくする。
【００１０】
もちろん、レジスタ・アクセスに対して複数のクロック・サイクルを許容することは可能であろうが、レジスタ・アクセスはプロセッサによって遂行される機能のそのような重要な部分を形成するので、これはプロセッサ・パフォーマンスにかなり影響を与えるであろうし、より速いクロック速度という目的を挫折させるであろう。パイプライン・ステージの数が増加するに従って、中間結果を保持するためには更に多くのレジスタが必要となり、クロック速度を改良する努力を更に挫折させる。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
非常に速い且つもっと能力のあるプロセッサに対する要求が増すにつれて、プロセッサ内の信号伝播に関する挑戦、特に、レジスタ・アクセスに関連した信号伝播に関する挑戦が増加すると思われる。従って、本発明は、クロック速度の増加及びより大きい且つより複雑なプロセッサをサポートする改良されたプロセッサ設計技法を提供する。
【課題を解決するための手段】
【００１２】
プロセッサは、異なるアクセス待ち時間を有する複数のレベルのレジスタを有する。レジスタの比較的小型のセットが、比較的速いアクセス待ち時間を有する比較的高いレベルのレジスタ・バンクに含まれる。レジスタの大型且つ完全なセットが比較的遅いアクセス待ち時間を有する比較的低いレベルのレジスタ・バンクに含まれる。物理的には、高いレベルのレジスタ・バンクが、そのレジスタから入力を受ける機能的ロジックに近接して設けられ、信号がより速くその機能的ロジックに伝播することを可能にする。低いレベルのレジスタ・バンクは、物理的にその機能的ロジックから更に離れて設けられる。
【００１３】
好適な実施例では、プロセッサは、２レベルのレジスタ・バンクを含むが、３つ以上のレベルが可能であろう。低レベルのバンクは、すべてのプロセッサ・レジスタの完全なセットを含む。高レベルのバンクは、レジスタの小型サブセットを含み、従って、低レベルのバンクにおいて情報を複製する。高レベルのバンクは、単一のクロック・サイクルでアクセス可能であり、一方、低レベルのバンクに対するアクセスは、１アクセス当たり複数のクロック・サイクルを必要とする。
【００１４】
好適な実施例では、プロセッサはハードウェア・マルチスレッドをサポートし、各スレッドに対応する個別の独立したファイルを有する。各レジスタ・ファイルは、そのファイルにレジスタの完全なセットを含む低レベルのバンク及びレジスタのサブセットだけを含む高レベルのバンクを有する。プロセッサは、２つのスレッドに対応する２つのレジスタ・ファイルを含むことが望ましいが、それとは異なる数のスレッド及びレジスタ・ファイルも可能であろう。
【００１５】
高レベルのレジスタ・バンクはレジスタ・データのサブセットのみを含むが、理想的には、それは最もアクセスされそうなサブセットを含む。高レベルのレジスタ・バンクにおけるデータを管理するための種々な技法が可能である。好適な実施例では、各高レベルのレジスタは複数の低レベルのレジスタの固定セットに対応し、それが対応するセットの最近アクセスされた低レベルのレジスタの内容を含む。この技法は、必ずしも、高レベルのバンクにとって最適なサブセットを含むとはいえないが、それは極めて速く、具現化するのは簡単である。
【００１６】
マルチレベルのレジスタ・ファイルを設定することにより、単一サイクルのアクセスを維持するために機能的ロジックに十分に近接して比較的小型の高レベルのレジスタ・バンクを設けることが可能である。同時に、ファイル全体が機能的ロジックのすぐ近くにある必要はないので、比較的大型のレジスタ・ファイルをサポートすることも可能である。高レベルのレジスタにおけるデータのサブセットを管理するための簡単な機構によって、大部分のレジスタ・アクセスが、高レベルのレジスタにおけるデータで満足させられ、パフォーマンスの改良を施すものと期待される。
【００１７】
構造及びオペレーションに両方に関する本発明の詳細は、添付図面を参照することによって最もよく理解することが可能であろう。なお、それらの図面では、同じ参照番号は同じ部品を指している。
【発明を実施するための最良の形態】
【００１８】
図面を参照すると、図１は、本発明の好適な実施例に従って、マルチレベル・レジスタ・ファイルを利用するコンピュータ・システム１００の主要なハードウェア・コンポーネントを高レベル表示したものである。コンピュータ・システム１００の主要なコンポーネントは、１つ又は複数の中央処理装置（ＣＰＵ）１０１Ａ〜１０１Ｄ（図面では、総体的に１０１として示される）、メイン・メモリ１０２、キャッシュ・メモリ１０６、端末インターフェース１１１、ストレージ・インターフェース１１２、Ｉ／Ｏデバイス・インターフェース１１３、及び通信／ネットワーク・インターフェース１１４を含み、それらは、すべて、バス１０３、１０４、及びバス・インターフェース１０５を介してコンポーネント間の連絡のために結合される。
【００１９】
システム１００は、１つ又は複数の汎用プログラマブル中央処理装置（ＣＰＵ）１０１Ａ〜１０１Ｄ（上記のように本願では、１０１として示される）を含む。好適な実施例では、システム１００は、比較的大型のシステムを代表する複数プロセッサを含む。しかし、システム１００は、代替として、単一のＣＰＵシステムであることも可能である。各プロセッサ１０１はメモリ１０２に記憶された命令を実行する。命令及びデータは、処理のために、メイン・メモリ１０２からキャッシュ・メモリ１０６にロードされる。メイン・メモリ１０２は、データ及びプログラムを記憶するためのランダム・アクセス半導体メモリである。図１では、メイン・メモリ１０２及びキャッシュ・メモリ１０６は、単一のエンティティとして概念的に示されるが、実際には、これらがもっと複雑であること、特に、キャッシュ・メモリが、一般に、複数の種々なレベル及び機能に分割されているということは明らかであろう。
【００２０】
メモリ・バス１０３は、ＣＰＵ１０１及びキャッシュ・メモリ１０６、メイン・メモリ１０２、並びに、Ｉ／Ｏバス・インターフェース・ユニット１０５の間でデータを転送するためのデータ通信パスを提供する。Ｉ／Ｏバス・インターフェース１０５は、更に、種々なＩ／Ｏユニットに及び種々のＩ／Ｏユニットからデータを転送するためのシステムＩ／Ｏバス１０４に結合される。Ｉ／Ｏバス・インターフェース１０５は、システム・バス１０４を介して複数のＩ／Ｏインターフェース・ユニット１１１〜１１４と連絡を行う。なお、それらのＩ／Ｏインターフェース・ユニット１１１〜１１４は、Ｉ／Ｏプロセッサ（ＩＯＰ）又はＩ／Ｏアダプタ（ＩＯＡ）としても知られている。システムＩ／Ｏバス、例えば、業界標準のＰＣＩバス又は任意の他の適切なバス・テクノロジのものであってもよい。Ｉ／Ｏインターフェース・ユニットは、種々のストレージ及びＩ／Ｏデバイスとの連絡をサポートする。例えば、端末インターフェース・ユニット１１１は、１つ又は複数のユーザ端末１２１〜１２４の接続機構をサポートする。ストレージ・インターフェース・ユニット１１２は、１つ又は複数のダイレクト・アクセス・ストレージ・デバイス（ＤＡＳＤ）１２５〜１２７の接続機構をサポートする。（これらのＤＡＳＤは、一般に、回転磁気ディスク・ドライブ記憶装置であるが、それらは、代替的に、ホストにとっては単一の大型記憶装置のように見えるように構成されたディスク・ドライブのアレイを含む他の装置であってもよい）。Ｉ／Ｏ及び他のデバイス・インターフェース１１３は、他のタイプのいずれの種々の他の入出力デバイスに対するインターフェースも提供する。２つのそのようなデバイス、即ち、プリンタ１２８及びファクシミリ装置１２９が図１の実施例において示され、異なるタイプのものでよい多くの他のそのような装置が存在し得ることは明らかである。ネットワーク・インターフェース１１４は、システム１００から他のディジタル装置及びコンピュータ・システムへの１つ又は複数の通信パスを提供する。そのようなパスは、例えば、インターネット、ローカル・エリア・ネットワーク又は他のネットワークのような１つ又は複数のネットワーク１３０を含み得るし、或いは、遠隔装置通信回線、無線接続等を含んでもよい。
【００２１】
図１がシステム１００の代表的な主要コンポーネントを高いレベルで示すことを意図していること、図１に示された個々のコンポーネントが大きな複雑性を有すること、図１に示されたもの以外のコンポーネントが存在し得ること、及びそのようなコンポーネントの数、タイプ、及び構成が変更可能であることは明らかある。本願では、そのような更なる複雑性又は更なる変更のいくつかの特定な例が開示され、これらが単に例示するためのものであり、必ずしも唯一のそのような変更ではないことも明らかである。
【００２２】
図１では、メイン・メモリ１０２が単一の一体的な構造体として示されているが、メモリは更に分散されてもよく、種々の、いわゆる非一様メモリ・アクセス（ＮＵＭＡ）コンピュータ・アーキテクチャにおいて知られているような種々のＣＰＵ又はＣＰＵセットと関連付けられてもよい。図１では、メモリ・バス１０３がキャッシュ・メモリ１０６、メイン・メモリ１０２、及びＩ／Ｏバス・インターフェース１０５の間の直接連絡パスを提供する比較的簡単な単一のバス構造体として示されているが、実際には、メモリ・バス１０３は、複数の種々なバス又は連絡パスを含み得る。それらのバス又はパスは、階層構造の Point-to-Point リンク、スター又はウェブ構成、複数階層バス、並列パス、冗長パス等のような種々な形式のいずれの配列構成であってもよい。更に、Ｉ／Ｏバス・インターフェース１０５及びＩ／Ｏバス１０４は単一の個別のユニットとして示されているが、実際には、システム１００は、複数のＩ／Ｏバス・インターフェース・ユニット１０５、及び／又は、複数のＩ／Ｏバス１０４を含むことも可能である。種々のＩ／Ｏデバイスに通じる種々の連絡パスからシステムＩ／Ｏバス１０４を分離した複数のＩ／Ｏインターフェース・ユニットが示されているが、それとは別に、いくつかの又はすべてのＩ／Ｏデバイスを１つ又は複数のシステムＩ／Ｏバスに直接に接続することも可能であろう。
【００２３】
図１に示されたコンピュータ・システム１００は、マルチユーザ「メインフレーム」コンピュータ・システムを代表するような複数の接続端末１２１〜１２４を有する。一般には、このような場合、接続されたデバイスの実際の数は図１に示されたものよりも多いが、本発明はいずれの特定サイズのシステムにも限定されない。コンピュータ・システム１００は、代替的に単一のユーザ・ディスプレイ及びキーボード入力しか持たない典型的なシングルユーザ・システムであってもよく、或いは、ほとんど又はまったくダイレクト・ユーザ・インターフェースを持たないで、他のコンピュータ・システム（クライアント）からのリクエストを受けるサーバ又は同様のデバイスであってもよい。
【００２４】
種々のシステム・コンポーネントを説明し、それを高レベルで示したが、代表的なコンピュータ・システムが、本発明の理解にとって不可欠ではない他の多くの図示されてないコンポーネントを含むことは明らかであろう。
【００２５】
図２は、好適な実施例に従って、関連のキャッシュ構造を含むＣＰＵ１０１の主要コンポーネントの高レベル図であり、図１に示されたものよりも更に詳細にＣＰＵ１０１を示す。ＣＰＵ１０１は、命令ユニット部分２０１及び実行ユニット部分２１１を含む。更に、図２には、レベル１命令キャッシュ（Ｌ１Ｉ-キャッシュ）２２１、レベル１データ・キャッシュ（Ｌ１ Ｄ-キャッシュ）２２２、レベル２キャッシュ（Ｌ２ キャッシュ）２２３、及びアドレス変換ユニット２２４が示される。一般に、命令ユニット２０１は、Ｌ１Ｉ-キャッシュ２２１から命令を得て、遂行すべきオペレーションを決定するためにその命令をデコードし、プログラム・フローを制御するためにブランチ条件を解決する。実行ユニット２１１は、レジスタにおけるデータに関連する算術演算及び論理演算を遂行し、Ｌ１Ｄ-キャッシュ２２２からデータをロードするか又はＬ１ Ｄ-キャッシュ２２２にデータを記憶する。Ｌ２キャッシュ２２３は、一般に、Ｌ１ Ｉ-キャッシュ２２１又はＬ１Ｄ-キャッシュ２２２よりも大きいレベル２キャッシュであり、Ｌ１ Ｉ-キャッシュ２２１又はＬ１ Ｄ-キャッシュ２２２にデータを供給する。Ｌ２キャッシュ２２３は、低レベル・キャッシュ（例えば、Ｌ３キャッシュ）又はメイン・メモリから外部インターフェースを通してデータを得る。
【００２６】
いずれのレベルにおけるキャッシュも、論理的には、メイン・メモリ１０２の延長（異種のレジスタ）におけるものである。しかし、或るキャッシュは、ＣＰＵと同じ集積回路チップ上にパッケージされ、このために、ＣＰＵの一部と見なされることもある。好適な実施例では、キャッシュ構造を伴う２つのＣＰＵ１０１が単一の半導体チップにおいてパッケージされ、このために、ＣＰＵ１０１は、一対のＣＰＵを含むチップから区別するために「プロセッサ・コア」又は「ＣＰＵコア」と呼ばれることもある。各ＣＰＵ１０１は、それ自身の専用のＬ１Ｉ-キャッシュ２２１及びＬ１ Ｄ-キャッシュ２２２を有する。しかし、Ｌ２キャッシュ２２３は、同じチップにおける２つのプロセッサの間で共用される。図２の表示は、代表的なものであることを意図され、任意の特定の物理的又は論理的キャッシュ具現化方法に本発明を限定することを意図されてはいない。プロセッサ及びキャッシュが種々な構成に従って設計可能であること、及びプロセッサ・チップが、図２に示されたものよりももっと多くのキャッシュ又はもっと少ないキャッシュを含み得ることは明らかであろう。
【００２７】
命令ユニット２０１は、ブランチ・ユニット２０２、命令デコード／ディスパッチ・ユニット２０３、並びに、命令レジスタ及びバッファ２０４を含む。Ｌ１Ｉ-キャッシュ２２１からの命令は実行前にバッファ２０４にロードされる。ＣＰＵの設計次第で、複数のバッファ（例えば、種々のスレッドに対するバッファ、１つのスレッドにおける一連の順次命令に対するバッファ、ブランチ・ツー・ロケーションに対するその他のバッファ）が存在し得る。それらの各々は複数の命令を含んでもよい。デコード／ディスパッチ・ユニット２０３は、現在のマシン・サイクルにおいて１つ又は複数のバッファ２０４から実行のためにディスパッチされるべき１つ又は複数の命令を選択し、遂行されるべきオペレーション又はブランチ条件を決定するためにその命令をデコードする。ブランチ・ユニット２０２は、ブランチ条件を評価することによってプログラム・フローを制御し、Ｌ１Ｉ-キャッシュ２２１からバッファ２０４を再び満たす。
【００２８】
実行ユニット２１１は、データを記憶するための一組の汎用レジスタ２１２、及び命令ユニット２０１によってデコードされた命令に応答して汎用レジスタ２１２におけるデータに関する算術計算及び論理演算を遂行するためのスカラ演算論理ユニット（ＡＬＵ）２１３を有する。更に、実行ユニット２１１は、浮動小数点演算サブユニット２１４、及びベクトル／ＳＩＭＤマルチメディア拡張（ＶＭＸ）実行サブユニット２１６（本願では、ベクトル実行サブユニット、又は、略して、ＶＭＸサブユニットと呼ばれる。なお、「ＳＩＭＤ」は単一命令複数データに対する周知の頭辞語である）を含む。浮動小数点演算サブユニット２１４は、倍精度（６４ビット）オペランドを使用して浮動小数点演算を遂行するための特別な浮動小数点ハードウェア・パイプラインである。ベクトル実行サブユニット２１６は、所定のベクトル演算を並行して遂行する。ＶＭＸサブユニット２１６の構造及びオペレーションは、本願では更に詳しく説明される。本願では、これは、ベクトル実行サブユニットと呼ばれるが、単に、潜在的な機能を記述したに過ぎない。実際には、サブユニット２１６は、データに関する算術演算を遂行するだけであり、算術的な集中演算を必要とする任意の又は種々のアプリケーションのために使用可能である。浮動小数点サブユニット２１４及びＶＭＸサブユニット２１６は、それぞれ、それ自身のレジスタ・セット２１５、２１７を含む。図２に示されたコンポーネントの他に、実行ユニット２１１は、更なる特別目的のレジスタ及びカウンタ、制御ハードウェア等を含むことが可能である。特に、実行ユニット２１１は、整数ＡＬＵ２１３、浮動小数点サブユニット２１４、及びＶＭＸサブユニット２１６の他に実行パイプライン（図示されていない）を含むことも可能である。
【００２９】
Ｌ１ Ｉ-キャッシュ２２１及びＬ１ Ｄ-キャッシュ２２２は、データを命令ユニット２０１及び実行ユニット２１１に供給する個別の命令及びデータ・キャッシュである。Ｌ２キャッシュ２２３は、命令及び非命令データの両方を含む非選別のキャッシュである。一般に、データは、命令ユニット又は実行ユニットによってＬ１キャッシュから取り出されるか又はＬ１キャッシュに記憶される。データがＬ１キャッシュ２２１において入手し得ない場合、それは、Ｌ２キャッシュ２２３からＬ１キャッシュ２２１にロードされ、しかる後、Ｌ１キャッシュキャッシュから対応するユニットに転送される。その場合、Ｌ２キャッシュ２２３は、そのデータを外部ロケーションから取得する。プロセッサの設計次第で、Ｌ１キャッシュをバイパスしてＬ２キャッシュ２２３から実行又は命令レジスタにデータをロードすることも可能である。
【００３０】
アドレス変換ユニット２２４は、命令ユニット２０１又は実行ユニット２１１によって生成された有効アドレスをメモリにおける対応する実アドレスに変換する。好適な実施例では、プロセッサは、それぞれの各実行プロセスに対応する有効アドレス・スペースにおける「有効アドレス」を生成する。有効アドレスは、更に大きいユニバーサル仮想アドレス・スペースにおける「仮想アドレス」に変換される。なお、１つの仮想アドレス・スペースがすべてのプロセスによって共用される。仮想アドレスは、更に、データが位置指定される実メモリ・ロケーションに対応する「実アドレス」に変換される。しかし、種々のコンピュータ・アーキテクチャが種々のアドレシング構成を使用しており、本発明がいかなる特定の形式のアドレシングにも限定されないことは明らかであろう。
【００３１】
Ｌ１ Ｉ-キャッシュ２２１及びＬ１ Ｄ-キャッシュ２２２は、有効アドレスを使用してアドレスされることが望ましく、従って、レベル１キャッシュをアクセスするためにアドレス変換が必要ない。しかし、Ｌ２キャッシュ２２３及びその下のすべてのメモリは実アドレスを使用してアドレスされる。従って、低レベル・キャッシュ又はメイン・メモリをアクセスする必要がある場合、プロセッサによって生成された有効アドレスが先ず実アドレスに変換される。
【００３２】
アドレス変換ユニット２２４は、単一の論理的エンティティとして示されているが、一般には、種々のチップ・ロケーションに分散することが可能な複数のテーブル及び論理回路を含む。例えば、アドレス変換機構は、変換ルック・アサイド・バッファ、有効アドレス・実アドレス変換テーブル、セグメント・テーブル、及び更なる構造体を含んでもよい。更に、命令の変換及び非命令データの変換のために、別の構造体を使用することも可能である。
【００３３】
好適な実施例では、ＣＰＵ１０１は、同じマシン・サイクルにおける複数のスレッドの同時実行及び異なるスレッドからの命令の同時ディスパッチをサポートするマルチスレッド・プロセッサである。好適な実施例では、２つの独立したスレッドの同時実行がサポートされる。なお、この数が変更可能であることは当然である。ＣＰＵ１０１において実行される各命令は、ロード、ストア、ＧＰレジスタからのオペランド使用する整数演算または論理演算、浮動小数点サブユニット２１４又はＶＭＸサブユニット２１６を使用する複合オペレーション、或いは、ブランチのような単一の基本オペレーションを遂行する。デコード／ディスパッチ・ユニット２０３は、複数のそのような命令を単一のマシン・サイクルで同時にディスパッチすることが可能であるが、実行ユニットがパイプライン化され、実際の命令実行が種々のサイクルにおいてディスパッチされたものを重畳することも可能である。
【００３４】
複数のスレッドの同時実行をサポートするために、別セットのほとんどのレジスタが各スレッドのために存在する。すなわち、汎用レジスタ２１２、浮動小数点レジスタ２１５、及びベクトル・レジスタ２１７の個々のセットが各スレッドのために存在する。更に、複数のアクティブなスレッドをサポートするために、他の状態レジスタ又は特別目的のレジスタ（図示されていない）が複製されてもよい。実行ユニット・パイプライン・ハードウェア、命令ユニット、及びキャッシュは、すべてのスレッドによって共用される。
【００３５】
メモリ及びメモリのキャッシュとは違って、レジスタは、比較的小型のレジスタ識別子を使用して、命令から直接にアクセスされる。レジスタ識別子は、一般に、コンパイラによって割り当てられ（しかし、場合によっては、プログラマがそれらを指定する）、従って、それらは、コンパイルされた実行可能コードの部分である。利用可能なレジスタ・セットのサイズは、ハードウェアの制約内でコードを最適化しようとするすべてのコンパイラの基本パラメータである。レジスタ識別子は、物理的に存在し且つプロセッサにおける使用のために利用可能であるレジスタを識別する。
【００３６】
種々のＣＰＵコンポーネントを説明し、それを高レベルで図示したが、好適な実施例のＣＰＵが、本発明の理解にとって必須ではない図示されなかった多くの他のコンポーネントを含むことは当然である。例えば、代表的な設計では、種々の更なる特別目的のレジスタが必要であろう。更に、図２のＣＰＵがＣＰＵアーキテクチャの単なる一例であること、ＣＰＵ１０１内のコンポーネントの数、タイプ、及び構成には多くの変更が存在し得ること、図示されたコンポーネントのほかに図示されてないコンポーネントが存在し得ること、及び、図示されたすべてのコンポーネントがＣＰＵ設計に存在するとは限らないことは明らかであろう。例えば、バッファ及びキャッシュの数及び構成が変更可能であり、実行ユニットのパイプラインの数及び機能が変更可能であり、レジスタが種々のアレイ及びセットとして構成可能であり、専用の浮動小数点ハードウェアが存在してもよいし、存在しなくてもよい。更に、ＣＰＵ１０１は単純な又は複雑な命令セットを持つことも可能である。
【００３７】
ベクトル実行サブユニット２１６は、複数のデータに関して種々のオペレーションを並行して遂行する。命令ユニット２０１によってデコードされた各命令は、１つのオペレーションを指定する単一のオペレーション・コード及び潜在的には複数のオペランド指定子を含む。プロセッサ１０１のための命令セットにおける或るサブセットは、ＶＭＸサブユニット２１６によって実行される命令を含む。好適な実施例では、ベクトル実行サブユニット２１６は、種々のベクトル移動、算術演算、論理演算、及び／又は、浮動小数点演算を遂行するための種々の機能的パイプラインを含む。各機能的パイプラインは、複数のデータ値に関する同じオペレーションを並行して遂行する１２８ビット幅のパイプラインとして構成される。なお、パイプラインの幅が変更可能であることは当然である。一般に、パイプラインは４つの３２ビット値に関するオペレーションを並行して遂行する。しかし、少なくとも或るパイプライン及び或るオペレーションに対しては、データ値の長さは変化する。例えば、或るオペレーションは、８個の１６ビット値に関して並行して遂行可能であるか、又は１６個の８ビット値に関して並行して遂行可能である。ＶＭＸ２１６におけるパイプラインのための各命令は、１２８ビットのデータすべてに適用可能な単一のオペレーション・コードを含む。各命令は、更に、ベクトル・レジスタ２１７におけるデータのソース及び宛先を指定する。好適な実施例では、命令は、ベクトル・レジスタ２１７のファイルにおける１２８ビット・レジスタを参照する３つほどのオペランド・ソース指定子及び単一の宛先指定子を含むことが可能である。命令において指定されたオペレーションは、その１２８ビット・レジスタのデータを割り振る方法（即ち、長さが３２ビット、１６ビット、又は８ビットの値）を暗示している。そこで、１２８ビット・オペランド・レジスタに含まれた暗黙値の各々を使用して、同じオペレーションが別々に且つ並行して遂行される。別の方法として、それぞれの位置に対応して、すべてのオペレーションが同じとは限らない一定の事前定義されたパイプラインのためのオペレーションのセットを指定するために使用されるオペレーション・コードを設計することも可能であろう。
【００３８】
好適な実施例では、ベクトル実行サブユニット２１６のためのベクトル・レジスタ２１７は２層構造を有する。この構造では、レジスタ・データの一部分が、ベクトル実行サブユニットのパイプラインに対する入力に物理的に近接したローカル・ベクトル・レジスタ・ファイルに含まれ、完全なレジスタ・データがフル・ベクトル・レジスタ・ファイルに含まれる。そのフル・ベクトル・レジスタ・ファイルは、物理的配置の輻輳制約を緩和又は排除するように、物理的に大きな距離に設けられる。
【００３９】
図３は、好適な実施例に従って、実行ユニット２１１におけるベクトル実行サブユニット２１６の高レベルの機能図を示す。図３を参照すると、ベクトル実行サブユニット２１６は、各々がベクトル・データに関してそれぞれの機能セットを遂行する４つの機能実行ユニット３０１〜３０４、ローカル・ベクトル・レジスタ・ファイル（ローカルＶＲＦ）３０５Ａ、３０５Ｂ（本願では、これを総体的に３０５と呼ぶ）、フル・ベクトル・レジスタ・ファイル（フルＶＲＦ）３０６Ａ、３０６Ｂ（本願では、これを総体的に３０６と呼ぶ）、バイパス・マルチプレクサ３０７、結果マルチプレクサ３０８、ロード・ステージング・ユニット３０９、及びストア・ステージング・ユニット３１０を含む。
【００４０】
ローカル・ベクトル・レジスタ・ファイル３０５は、一般に、機能実行ユニットが操作するオペランドを保持し、フル・ベクトル・レジスタ・ファイル３０６におけるデータの一部分を含む。バイパス・マルチプレクサ３０７は、ローカル・ベクトル・レジスタ・ファイル３０５又は結果マルチプレクサ３０８のようなソースから機能実行ユニットのような宛先までデータを経路指定するラッチ及びバス経路指定ロジックを含む。機能実行ユニット３０１〜３０４は、命令ユニット２０１からの命令に従ってデータに関する実際のオペレーションを遂行する。結果マルチプレクサ３０８は、バイパス・マルチプレクサ３０７にローカル・ベクトル・レジスタ・ファイル３０５、及びフル・ベクトル・レジスタ・ファイル３０６対する入力として機能実行ユニットの出力を受け、それを選択する。ロード・ステージング・ユニット３０９はメモリからロードされたデータを受ける（即ち、一般には、Ｌ１Ｄ-キャッシュ２２２から受けるが、Ｌ１ Ｄ-キャッシュ２２２をバイパスすること及び低レベル・キャッシュから直接にロードすることが可能である）。ストア・ステージング・ユニット３１０はメモリに（即ち、Ｌ１Ｄキャッシュ２２２に）データを一時的に保持する。
【００４１】
各機能実行ユニット３０１〜３０４は、ベクトル・データに関してそれぞれの機能セットを遂行する実行パイプラインである。各機能実行ユニットは、所与のサイクルにおいて３つまでの１２８ビット・レジスタ入力を受けることができる。各１２８ビット・レジスタは、複数のオペランド値、各値の長さ、及び遂行されるべきオペレーションによって暗示されるその１２８ビット・レジスタにおける値の数を表す。例えば、命令が３２ビット・オペランドを有する場合、機能実行ユニットは、４セットの３２ビット・オペランドを使用してそのオペレーションを並行して遂行する。その場合、３２ビット・オペランドの各セットは３つのソース・オペランド及び１つの宛先オペランドを有する。各機能実行ユニットは異なっており、異なる機能セットを遂行し、いずれのサイクルにおいて開始された機能も、機能実行ユニットにおけるオペランドのすべてのセットに対して同じである。例えば、単一の機能実行ユニットは、整数加算、整数減算、ビット単位のＡＮＤ、ビット単位のＯＲ等のような一組の機能を遂行し得る。所与のパイプライン入力サイクルにおいて、制御ロジック（図示されていない）が、遂行されるべき利用可能な機能セットの機能及びバイパス・マルチプレクサ３０７における１つ又は複数の入力レジスタを選択する。各入力レジスタは複数のオペランド（例えば、４つの並列３２ビット・オペランド）を表す１２８ビットを含む。好適な実施例では、機能実行ユニットは、ベクトル置換（permute）ユニット、ベクトル単一整数演算ユニット、ベクトル複合整数演算ユニット、及びベクトル浮動小数点演算ユニットを含む。しかし、機能実行ユニットの数及び機能は変更することが可能である。
【００４２】
図４は、ローカル・ベクトル・レジスタ・ファイル３０５Ａ、３０５Ｂ及び関連のロジックの構造を更に詳細に示す。図５は、フル・ベクトル・レジスタ・ファイル３０６Ａ、３０６Ｂ及び関連のロジックの構造を更に詳細に示す。この実施例では、二組のベクトル・レジスタ・ファイルが存在する。その一組は、プロセッサによってサポートされた各アクティブ・スレッドに対応する。各命令に関連した単一スレッド識別子ビットは、命令がフル・ベクトル・レジスタ・ファイル３０６Ａ又は３０６Ｂにおけるデータを参照するかどうかを決定する。
【００４３】
ベクトル実行ユニット２１６は、ローカル・ベクトル・レジスタ・ファイル３０５Ａ、３０５Ｂにおける６個までの個別のレジスタからの同時読出し及び３個までの個別のレジスタへの同時書込みをサポートする。各命令は３つものソース・オペランド（及び、１つの宛先オペランド）を持つことが可能であるので、ベクトル実行サブユニットは、同じサイクルにおいて並行して発生された２つの命令をサポートするように設計される。一般に、いずれの特定の命令によっても単一のオペランドしか変更されず、従って、２つの並行した命令は、２つの同時書込みがサポートされることだけを必要とする。第３の書込みポートは、キャッシュから又はフル・ベクトル・レジスタ３０６からデータをロードするためのものである。
【００４４】
フル・ベクトル・レジスタ・ファイル３０６の各々は、１２８＊１２８ビットのレジスタ・アレイであり、各レジスタが１２８ビットから成る１２８個のレジスタを含む。１２８ビット・レジスタの各々は複数のデータ値を表し、それらのデータ値は、一般に、機能実行パイプラインによって並行して操作される。フル・ベクトル・レジスタ・ファイルは１２８個のレジスタを含むので、レジスタは７ビットの識別子を使用する命令セットにおいて識別される。
【００４５】
ローカル・ベクトル・レジスタ・ファイル３０５の各々は、フル・ベクトル・レジスタ・ファイル３０６におけるデータの一部分を含む。各ローカル・ベクトル・レジスタ・ファイル３０５は、３４＊１３０ビットのレジスタ・アレイであり、各レジスタが１３０ビットから成る３４個のレジスタを含む。１３０ビットのレジスタの各々は、１２８ビットのオペランド・データ（フル・ベクトル・レジスタ・ファイル３０６におけるオペランド・データの複製）及び２ビットの上位桁レジスタ識別子を含む。７ビットのレジスタ識別子における５つの下位桁ビットは、ローカル・ベクトル・レジスタ・ファイル３０５における３２個のレジスタの１つを選択するために使用される。ローカル・ベクトル・レジスタ・ファイル３０５の各レジスタにおける２ビットの上位桁レジスタ識別子は、レジスタを選択するためには使用されない７ビットのレジスタ識別子における２ビットの上位桁ビットを含んでいる。これらは、選択されたレジスタが正しいレジスタに対応することを確認するために必要である。ローカル・ベクトル・レジスタ・ファイルにおける（３４個のレジスタのうちの）残りの２つのレジスタは、以下で更に説明するように、オペランド・コンフリクトのために使用される。
【００４６】
オペレーション時に、ローカル・ベクトル・レジスタ・ファイル３０５が、スレッド識別子ビット及び（命令からの）レジスタ識別子の下位桁の５ビット部分を読出し選択ロジック４０２に入力することによって読み出される。読出し選択ロジック４０２は、その入力に応答してローカル・ベクトル・レジスタ・ファイル３０５Ａ、３０５Ｂにおける１つのレジスタを選択するデコーダである。好適な実施例では、読出し選択ロジック４０２の６個のコピーが存在し、その各々はそれぞれの読出し出力ポート４０５に対応する。読出し選択ロジック４０２の６個のコピー及び６個の読出しポート４０５は、ローカル・ベクトル・レジスタ・ファイル３０５Ａ、３０５Ｂの両方によって共用される。そのレジスタにおける１２８ビットのオペランド・データ部分が読出し出力ポート４０５を介してバイパス・マルチプレクサ・ロジック３０７に出力される。そのレジスタ識別子における２ビットの上位桁部分がコンパレータ４０４（それの６個のコピーが存在し、各コピーが各読出し出力ポートに対応する）に出力される。コンパレータ４０４は、１３０ビットのレジスタにおけるレジスタ識別子の２ビットの上位桁部分と命令からのオペランド・レジスタ識別子における２ビットの上位桁部分とを比較する。それら２つが同じである場合、正しいレジスタ・データが読み出されたことになり、オペレーションは進行することを許される。それらの２つが同じでない場合、無効データ信号がコンパレータ・ロジック４０４によって生成される。
【００４７】
命令のいずれのオペランドにおける無効データ信号も、その命令を機能実行パイプラインからフラッシュ（消去）させ、有効なレジスタ・データをフル・ベクトル・レジスタ・ファイル３０６からロードした後に再試行させる。従って、データは投機的にローカル・ベクトル・レジスタ・ファイル３０５から実際に読み出され、バイパス・マルチプレクサ３０７に（そして、そこから機能実行ユニット３０１〜３０４に）提供される。しかる後、ローカル・ベクトル・レジスタ・ファイルから得られたデータが正しいレジスタに対応することを確認することが可能となる。レジスタ識別子ビットは、バイパス・マルチプレクサ３０７におけるデータを適切な機能実行ユニットに経路指定するのと並行して、コンパレータ４０４において比較される。特定の命令に対するすべてのオペランドが有効である場合、命令は実行パイプラインを通して正常に進行する。いずれかオペランドが無効である場合、次のような２つのアクションが並行して取られる。即ち、必要なレジスタ・データがフル・ベクトル・レジスタ・ファイル３０６からローカル・ベクトル・レジスタ・ファイル３０５に転送され、そして、パイプラインにおける無効データを有する命令がフラッシュされてパイプラインが再起動される。一般に、フル・ベクトル・レジスタ・ファイルに対するアクセス及びローカル・ベクトル・レジスタ・ファイルへの必要なレジスタ・データの書込みが、パイプラインをフラッシュするよりも早く達成可能であり、従って、パイプラインがフラッシュされそして再起動されると直ちに、必要なデータが一般に利用可能となる。好適な実施例では、コンパレータ４０４は、他の理由で（例えば、取られることのない投機的ブランチで）汎用パイプラインフラッシュ機構（図示されていない）をトリガし、従って、マルチレベル・キャッシュをサポートするために必要な追加のロジックを最少にする。
【００４８】
各レジスタは３つの異なるレジスタを参照する３個ものオペランドを含み得るので、ローカル・ベクトル・レジスタ・ファイルにおいて２つ以上のオペランドがコンフリクトする可能性がある。即ち、同じ下位桁５ビットのレジスタ識別子を有するが異なる上位桁レジスタ識別子ビットを有するレジスタを２つのオペランドが参照する可能性が存在する。この場合、ローカル・ベクトル・レジスタ・ファイル３０５の同じレジスタに両方のオペランドを同時に置くことは不可能であろう。このために、ローカル・ベクトル・レジスタ・ファイルには、２つの追加のレジスタが設けられる（合計３４個のレジスタとなる）。ベクトル実行サブユニットのオペレーションを必要とする命令がディスパッチされるとき、オペランドのレジスタ識別子における下位桁５ビットがコンパレータ・ロジック４０３によって相互に比較される。そのペア化された比較が論理的にＯＲされる。いずれの２つのオペランドもレジスタ識別子の同じ下位桁５ビットを有する場合、オペランド・コンフリクトが信号される。オペランド・コンフリクトは、無効レジスタ・データと同じ結果を生じる。即ち、パイプラインがフラッシュされ、新たなオペランドがフル・ベクトル・レジスタ・ファイル３０６からロードされる。しかし、オペランド・コンフリクトの場合、３つのオペランドすべてがローカル・ベクトル・レジスタ・ファイル３０５にロードされる。「Ａ」オペランドは、レジスタ識別子の５ビットの下位桁部分によってアクセスされる３２個のレジスタのうちの正規のロケーションにロードされる。「Ｂ」及び「Ｃ」オペランドは、それぞれ、３３番目及び３４番目のレジスタにロードされる。そこで、命令が再試行されるとき、オペレーション・コンフリクト再試行ライン（op_con_retry）がアクティブであるとき、３３番目及び３４番目のレジスタを使用するために読出し選択ロジック４０２に信号する。そのop_con_retry ラインがアクティブであるとき、レジスタ識別子の値に関係なく、読出し選択ロジックは「Ａ」オペランドを正規にデコードし、３３番目及び３４番目のレジスタを参照するために、それぞれ、「Ｂ」及び「Ｃ」オペランドをデコードする。各スレッドに対して（即ち、各レジスタ・ファイル３０５Ａ、３０５Ｂに対して）個別のop_con_retry ライン入力が存在する。
【００４９】
命令のそのようなオペランド・コンフリクト及びその結果を生じる再試行を回避することが望ましいので、実行可能なコードを生成するコンパイラは、同じ命令におけるオペランドに非コンフリクトのレジスタを割り当てることによってオペランド・コンフリクトを回避するように最善に設計される。そのような適切に設計されたコンパイラが使用されるものと仮定すると、オペランド・コンフリクトは決して生じないかもしれず、或いは非常にまれにしか生じないかもしれない。しかし、プロセッサ・ロジックは、前に説明したように、コンフリクトが生じる場合にはそのコンフリクトに適応するように設計されなければならない。
【００５０】
ローカル・ベクトル・レジスタ・ファイル３０５は、スレッド識別子ビット及びレジスタ識別子の下位桁５ビット部分を（命令から）書込み選択ロジック４０１に入力することによって書き込まれる。書込み選択ロジック４０１は、その入力に応答して、ローカル・ベクトル・レジスタ・ファイル３０５Ａ、３０５Ｂの単一のレジスタを選択する。好適な実施例では、書込み選択ロジック４０１の３つのコピーが存在する。各コピーはそれぞれの書込みポート４０６に対応し、書込み選択ロジック４０１及び書込みポート４０６はローカル・ベクトル・レジスタ・ファイル３０５Ａ、３０５Ｂの両方によって共用される。レジスタ識別子の２ビットの上位桁部分が入力の１２８ビット・オペランド・データ部分と連結され、それらが書込み選択ロジック４０１によって選択された１３０ビット・レジスタに書き込まれる。特別の wrt_op_con_retry 制御ラインが３３番目及び３４番目のレジスタを選択するために使用される。即ち、前に説明したように、オペランド・コンフリクトが検出されたとき、命令の３つのオペランドすべてがフル・ベクトル・レジスタ・ファイルから得られ、「Ａ」、「Ｂ」及び「Ｃ」書込みポートにおいて利用可能にされる。そこで、書込み選択ロジック４０１に対するwrt_op_con_retry ラインが活性化され、レジスタ識別子の下位桁５ビットによって選択されたローカル・レジスタ内に「Ａ」書込みポート・データを書き込ませ、一方、「Ｂ」及び「Ｃ」書込みポート・データが、スレッド識別子に対応するローカル・ベクトル・レジスタ・ファイルのうちの、それぞれ、３３番目及び３４番目のローカル・レジスタに書き込まれる。３つの書込みポートしか存在しないので（一時に１つの命令しか再試行され得ないので）、単一のwrt_op_con_retry ラインしか必要ない。
【００５１】
同様に、オペレーション時には、スレッド識別子ビット及びフル７ビット・レジスタ識別子を図５における読出し選択ロジック５０２に入力することによって、フル・ベクトル・レジスタ・ファイル３０６が読み取られる。読出し選択ロジック５０２は、その入力に応答して、デコードし、フル・ベクトル・レジスタ・ファイル３０６Ａ、３０６Ｂの単一のレジスタを選択する。好適な実施例では、読出し選択ロジック５０２の４つのコピーが存在し、各コピーはそれぞれの読出し出力ポートに対応し、読出し選択ロジック及び読出し出力ポートは、フル・ベクトル・レジスタ・ファイル３０６Ａ、３０６Ｂの両方によって共用される。読出し出力ポートの１つは、ストア・ステージング・ユニット３１０にデータを供給する。（従って、データは、いつも、フル・ベクトル・レジスタ・ファイル３０６から記憶される）。残りの３つの読出し出力ポートはデータをローカル・ベクトル・レジスタ・ファイル３０５に供給する。
【００５２】
フル・ベクトル・レジスタ・ファイル３０６は、スレッド識別子ビット及び７ビット・レジスタ識別子を書込み選択ロジック５０１に入力することによって書き込まれる。書込み選択ロジック５０１は、その入力に応答して、ローカル・ベクトル・レジスタ・ファイル３０６Ａ、３０６Ｂの単一のレジスタを選択する。好適な実施例では、書込み選択ロジック５０１の３つのコピーが存在する。各コピーはそれぞれの書込みポートに対応し、書込み選択ロジック及び書込みポートは、フル・ベクトル・レジスタ・ファイル３０６Ａ、３０６Ｂの両方によって共用される。
【００５３】
図６は、データをローカル・ベクトル・レジスタ・ファイル３０５及びフル・ベクトル・レジスタ・ファイル３０６に書き込むための主要なハードウェア及びデータ・パスを表す。前に説明したように、ローカル・ベクトル・レジスタ・ファイル３０５及びフル・ベクトル・レジスタ・ファイル３０６の各々は３つのポートを有する。それらのポートは、本願では、「Ａ」、「Ｂ」及び「Ｃ」として表される。一般に、「Ａ」及び「Ｂ」ポートは、実行パイプラインからの結果を書き込むために使用され、一方、「Ｃ」ポートはデータをロードするために使用される。更に、ローカル・ベクトル・レジスタ・ファイル３０５では、３つのポートすべてがフル・ベクトル・レジスタ・ファイル３０６からのデータをコピーするために使用することが可能である。
【００５４】
動作時には、メモリ（特に、Ｌ１ Ｄキャッシュ２２２）からロードされたデータがロード・ステージング・ユニット３０９を通過して、ローカル・ベクトル・レジスタ・ファイル３０５及びフル・ベクトル・レジスタ・ファイル３０６の両方における「Ｃ」書込みポートに並行して書き込まれる。機能実行ユニットによって生成されたデータは結果マルチプレクサ３０８を通過し、書込みポート「Ａ」及び「Ｂ」を使用してローカル・ベクトル・レジスタ・ファイル３０５及びフル・ベクトル・レジスタ・ファイル３０６に並行して書き込まれる。従って、２つの機能実行ユニットの結果及び１つの１２８ビット・データ・ロードを２つのレジスタ・ファイルに同時に書き込むことが可能である。
【００５５】
オペランドの１つがローカル・レジスタになかったために、又は、１つのオペランド・コンフリクトが検出されたために、命令を再試行することが必要である場合、データがフル・ベクトル・レジスタ・ファイル３０６から読み出され、ローカル・ベクトル・レジスタ・ファイル３０５に書き込まれる。単一のサイクルでフル・ベクトル・レジスタ・ファイルから最大３つのレジスタを書き込むことが可能である。これは、１つの命令が３つのオペランドを有し、オペランド・コンフリクトが存在するか又はオペランドがローカル・ベクトル・レジスタ・ファイルに全くない場合に必要である。この場合、フル・ベクトル・レジスタ・ファイル３０６からの読出し出力ポートの２つが結果マルチプレクサ３０８に入力される。それらのデータが、結果マルチプレクサ３０８からローカル・ベクトル・レジスタ・ファイル３０５の「Ａ」及び「Ｂ」書込みポートに経路指定される。フル・ベクトル・レジスタ・ファイル３０６からの第３の読出し出力ポートがマルチプレクサ６０１に入力される。マルチプレクサ６０１は、ロード・データ及び読出し出力ポートからのデータのどちらかを選択する。その後、このデータは、ローカル・ベクトル・レジスタ・ファイル３０５の「Ｃ」書込みポートに経路指定される。
【００５６】
ローカル・ベクトル・レジスタ・ファイル３０５は、フル・ベクトル・レジスタ・ファイル３０６におけるデータの部分的コピーを維持する。なお、両方のレジスタ・ファイルとも、いつも最新のデータを維持している。特に、メモリ・キャッシュにおいて頻繁に行われるような変更済みデータの「キャスト・バック（cast back）」は存在しない。変更されたデータ（機能実行パイプラインから生じる）は、いつも、フル・ベクトル・レジスタ・ファイル及びローカル・ベクトル・レジスタ・ファイルの両方に同時に書き込まれ、従って、両方のコピーとも最新のものである。データが（ローカル・レジスタを異なるレジスタの内容でもって上書きすることによって）ローカル・ベクトル・レジスタ・ファイルから除去される場合、フル・ベクトル・レジスタ・ファイルを更新するための更なるアクションは必要ない。
【００５７】
動作時に、特定のレジスタを表すデータは、それが異なるレジスタの内容で持って上書きされるまで、そのままローカル・レジスタにある。データがキャッシュ・メモリからロードされる（データがローカル・ベクトル・レジスタ・ファイル及びフル・ベクトル・レジスタ・ファイルの両方に同時にロードされる）とき、又はそのデータを必要とする命令の結果としてフル・ベクトル・レジスタ・ファイルからコピーされるとき、そのデータは上書きされる。従って、ローカル・ベクトル・レジスタ・ファイルは、フル・ベクトル・レジスタ・ファイルの一部分の１ウェイ・セット・アソシアティブ・コピーと見なすことができる。この場合、各ローカル・レジスタ（特別ケースである３３番目及び３４番目のレジスタを除く）は、同じ下位桁５ビット識別子を有する４つのレジスタのセットにおける最新使用のレジスタを含む。
【００５８】
命令を再試行するために機能実行パイプラインをフラッシュすることは、複数の喪失クロック・サイクルを伴う。ローカル・ベクトル・レジスタ・ファイルから読み出されたオペランドの極めて大きな部分が無効であって、機能実行パイプラインをフラッシュさせる場合、そのパイプラインをフラッシュすることにより失われる時間は、高速アクセスのローカル・ベクトル・レジスタ・ファイルを使用することによる如何なるパフォーマンス利得も減少させるか又は重要性を高めることができる。従って、レジスタ参照の大多数はローカル・ベクトル・レジスタ・ファイルにおいて満足されなければならず、パフォーマンスの恩恵を維持するために必要な正確なパーセンテージは種々の設計パラメータに依存する。ベクトル実行サブユニットにおいて実行される命令は、一般に、同じレジスタが予測可能なパターンで再び参照されるという高度の反復性を示す。従って、レジスタ参照がローカル・ベクトル・レジスタ・ファイルにおいて満足されるという望ましい形が得られるものと期待される。最適な方法としては、コンパイラが無効オペランドの発生及びパイプラインのフラッシュを最少にするようにレジスタを割り当てるであろう。フラッシュの発生を減少させるか又は回避するための別の設計上の技法を以下で説明する。
【００５９】
本願では、レジスタ・ファイルの特定の構造、書込みポート及び読出しポートの数、並びに、関連のハードウェアを図示及び説明するが、そのような構造の数及びタイプが変更可能であることは明らかであろう。上記の変更の他に、本発明の範囲内で、マルチレベル・レジスタ・ファイルの設計における次のような変更が可能である。これらの変更又は代替方法は、本願では、例として開示され、本発明の範囲をその好適な実施例及び開示された代替方法に限定するものと解するべきではない。
【００６０】
好適な実施例において、ローカル・ベクトル・レジスタ・ファイルからのデータは、リクエストされたオペランド・レジスタ識別子がローカル・ベクトル・レジスタ・ファイルにおけるレジスタ識別子に実際に対応するかどうかを決定するとき、実行パイプラインに並行して投機的に供給され、そのデータが正しくない場合、その後、パイプラインはフラッシュされ、再起動される。この方法の利点は、いずれにしても種々の条件に対してパイプラインをフラッシュするための機構が一般には必要であるので、それが比較的少ない追加のハードウェアしか必要としないことである。しかし、パイプラインをフラッシュすること及びそれを再起動することは、正しいデータがフル・ベクトル・レジスタ・ファイルから得られるまで単にパイプラインをアイドリングすることよって生じる場合よりも大きな遅延を生じさせることは明らかであろう。例えば、フル・ベクトル・レジスタ・ファイルに対するアクセスが１つ又は２つの追加サイクルをとるものと考えられるが、パイプラインをフラッシュすること及び再起動することは７サイクル又はそれ以上を必要とする。従って、極めて大きい規模のレジスタ参照がローカル・ベクトル・レジスタ・ファイルにおいて存在しない場合、パフォーマンスは極度に低下するであろう。
【００６１】
パイプラインをフラッシュするという負担を軽減するために、２つの可能な設計上の代替方法が使用可能である。第１の代替方法は、レジスタ参照の反復性が不十分であると考えられる命令シーケンスに対して、ローカル・レジスタが選択的にディセーブルされる。第２の代替方法では、実行サイクルの開始時にデータ無効状態を検出し、フル・ベクトル・レジスタ・ファイルからのデータを待つために１又は２サイクルの間パイプラインをアイドリングするロジック（図示されていない）を構成することが可能であろう。
【００６２】
これらの２つの代替方法は、いずれも、データをローカル・ベクトル・レジスタ・ファイルに先ず記憶することなく、フル・ベクトル・レジスタ・ファイルから機能実行パイプラインにデータを直接に入力することが可能であることを必要とする。図７は、これらの代替実施例に従って、主要なハードウェアと機能実行パイプラインにデータを入力するためのデータ・パスとを示す。
【００６３】
図７を参照すると、いずれの代替方法においても、フル・ベクトル・レジスタ・ファイル３０６は、ローカル・ベクトル・レジスタ・ファイル３０５と少なくとも同じ数の読出しポート（望ましくは、６個）を有するであろう。二重読出しレジスタ識別子パスが読出しレジスタ識別子をローカル・ベクトル・レジスタ・ファイル３０５及びフル・ベクトル・レジスタ・ファイル３０６の両方に並行して供給する。フル・ベクトル・レジスタ・ファイルに対するアクセス・タイムがより長いので、少なくとも１つのラッチ・レジスタ７０１がフル・ベクトル・レジスタ・ファイルの６個の読出しポートの各々からの出力パスにおいて必要とされるであろう。各出力パスにおいて必要なそのようなラッチ・レジスタの数は、ローカル・レジスタ・アクセス及びフル・レジスタ・アクセスの間のサイクル遅延に等しく、その遅延は１サイクルであることが望ましい。バイパス・ロジック３０７におけるマルチプレクサ７０３（それの６個が存在し、１つが各読出しポートに対応する）は、各機能実行ユニット・パイプライン３０１〜３０４への入力におけるそれぞれの入力ラッチ・レジスタ７０５〜７０８への入力に対するローカル・ベクトル・レジスタ・ファイル３０５又はフル・ベクトル・レジスタ・ファイル３０６の出力を選択するであろう。各機能実行パイプライン３０１〜３０４は、各オペレーションに対する３つの最大入力オペランドに対応する３つの入力ラッチ・レジスタを含むことが望ましい。バイパス・ロジック３０７は、更に、バイパス遅延／選択ロジック７０４を含み、そのロジック７０４は、結果マルチプレクサ３０８から、及び任意選択的には他のソースから入力を受け、数サイクルの間出力を遅らせる機能を有し、マルチプレクサ７０３に対する出力を選択する。マルチプレクサ７０３は、既にラッチ・レジスタ７０５〜７０８に対するいくつかの入力の１つを選択する必要があるので、フル・ベクトル・レジスタ・ファイル３０６からラッチ・レジスタ７０５〜７０８へのデータ・パスの追加をサポートするための更なるマルチプレクサは必要ないことに注目すべきである。即ち、フル・ベクトル・レジスタ・ファイル３０６からのデータ・パスにとって必要な更なるサポートは、ローカル・ベクトル・レジスタ・ファイル３０５からラッチ・レジスタ７０５〜７０８へのデータ・パスにおける更なるゲート遅延を間に挟むことを必要としない。
【００６４】
第１の代替的な実施例では、フル・ベクトル・レジスタ・ファイル３０６からデータを選択することによってローカル・ベクトル・レジスタ・ファイル３０５を選択的にディセーブルするように、制御ロジック（図示されていない）がマルチプレクサ７０３を制御する。すべてのレジスタ・データがフル・ベクトル・レジスタ・ファイルにあるので、ローカル・ベクトル・レジスタ・ファイルがそのようにしてディセーブルされるとき、選択されたレジスタにおける無効データの結果としてパイプラインをフラッシュ及び再起動する必要がないであろう。種々の条件のいずれかに応答して、ローカル・ベクトル・レジスタ・ファイルのディセーブルを遂行することが可能である。例えば、制御ロジックは、各実行スレッドに対するローカル・レジスタ参照において検出された無効データの比率を動的に監視することが可能である。特定のスレッドがプロセッサにディスパッチされるとき、ローカル・ベクトル・レジスタ・ファイルがその特定のスレッドに対してイネーブルされるであろう。特定のスレッドに対するローカル・レジスタ参照における無効データの監視された比率が或る所定の設計閾値を超える場合、ローカル・ベクトル・レジスタ・ファイルはディセーブルされるであろう。簡単且つ効果的な監視手段は、各スレッドに対する単一のアップ・ダウン・カウンタである。そのカウンタは、ローカル・レジスタにおける有効データを参照する各命令に対して第１の量だけインクリメントされ、無効データ（従って、再試行されなければならない）を参照する各命令に対して第２の量だけデクリメントされる。インクリメント対デクリメントの量の比率が無効データの所望の設計閾値比率に対応するので、一貫してゼロよりも低いカウンタは、ローカル・ベクトル・レジスタ・ファイル３０５における無効データよる命令の過度な再試行を表す。動的な監視のための１つの代替方法として、レジスタ参照の十分な反復性が存在するかどうかをコンパイラが予測することができるかもしれず、従って、ローカル・ベクトル・レジスタ・ファイル３０５をディセーブルするようにプログラム可能コンテキスト・フラッグをセットすることができる化も知れない。
【００６５】
第２の代替的な実施例では、データを読み出すこと及びそれを或るレジスタを通して移動させることに並行して、制御ロジックが、各個々の命令に対する無効データ状態を検出し、それに応答するであろう。次に、そのような代替方法に関する読出しオペレーションの例示的説明を行う。サイクルＮのとき（命令をディスパッチ及びデコードした後）、命令において参照されたすべてのレジスタ識別子が、ローカル・ベクトル・レジスタ・ファイル３０５及びフル・ベクトル・レジスタ・ファイル３０６の両方に並行して送られるであろう。両方のレジスタ・ファイルは同時に出力するであろう。ローカル・ベクトル・レジスタ・ファイル３０５の出力は、サイクルＮ＋１において、マルチプレクサ７０３を通って、入力ラッチ・レジスタ７０５〜７０８の選択された１つに直接に送られるであろう。より長いアクセス待ち時間を有するフル・ベクトル・レジスタ・ファイル３０６は、サイクルＮ＋１では、ラッチ・レジスタ７０１においてその出力を保持するであろう。サイクルＮ＋１の終了までに、制御ロジックは、ローカル・レジスタのデータが無効であったかどうかを決定し、機能実行ユニット及びバイパス・マルチプレクサのオペレーションを制御するラッチ又は他のロジックにこの情報を提供するであろう。ローカル・レジスタのデータが有効であった場合、ラッチ・レジスタ７０５〜７０８の選択された１つにおけるオペランド・データが、サイクルＮ＋２において、対応する機能実行ユニットの第１ステージに進むであろう。ローカル・レジスタのデータが有効でなかった場合、機能実行ユニットは、サイクルＮ＋２において、１サイクルの間アイドリングするであろうし、フル・ベクトル・レジスタ・ファイルのデータ（その時点ではラッチ・レジスタ７０１にあり、２サイクルのアクセス・タイムを取る）が、マルチプレクサ７０３を通過すること及びラッチ・レジスタ７０５〜７０８の対応する１つにロードされることを可能にされるであろう。そこで、オペランド・データが、サイクルＮ＋３において、適切な機能実行ユニットの第１ステージに進むであろう。オペランド・コンフリクトは同様に処理されるので、ローカル・ベクトル・レジスタ・ファイル３０５における２つの余分なレジスタは不必要であろう。
【００６６】
好適な実施例では、プロセッサは、汎用ＡＬＵ２１３によって使用される一組の汎用レジスタ２１２、浮動小数点サブユニット２１４によって使用される別のセットの浮動小数点レジスタ２１５、及びベクトル実行サブユニット２１６によって使用される別のセットのベクトル・レジスタ２１７を含む。本願において開示されたように、ベクトル・レジスタ２１７だけは、マルチレベル・レジスタ・ファイルとして設計され、浮動小数点レジスタ２１５及び汎用レジスタ２１２は、それらの設計が一般的であり、サイズが小さい。この設計上の選択は、ベクトル・レジスタが大きなサイズであるために、及び、ベクトル・レジスタが非常に安定した参照パターンを示す結果、命令の再試行が比較的少ないであろうという期待のために、部分的に行われる。しかし、マルチレベル汎用レジスタ・ファイル、及び／又は、マルチレベル浮動小数点レジスタ・ファイル、或いは、何らかの他の形式の機能ユニットをサポートするマルチレベル・レジスタ・ファイルを代替的に使用することも可能であろう。参照パターンがあまり安定してなくても、上記の代替方法において説明したように、必要なレジスタがローカル・ベクトル・レジスタ・ファイルから脱落したことによるパフォーマンス結果が減少し得る場合、そのような設計は有用であるかもしれない。更に、異なる機能割り振りを持つプロセッサを使って設計することも可能である。それは、すべての実行パイプラインにデータ供給を行う単一セットのレジスタしか持たなくてもよいであろうし、或いは、本願において開示されてないレジスタ及び機能ユニットの更なるセットを持ってもよいであろう。
【００６７】
好適な実施例では、ローカル・ベクトル・レジスタ・ファイルは、本質的には、フル・ベクトル・レジスタ・ファイルの所与のサブセットに対する単一のローカル・レジスタしか提供しない１ウェイ・セット・アソシアティブである。そのような構造は、最近参照されたレジスタのサブセットしかローカル・ベクトル・レジスタ・ファイルに保持されないので、ローカル・ベクトル・レジスタ・ファイルにおけるデータをアクセス及び維持するために必要なハードウェアを単純化する。単純化されたハードウェア構造は、１サイクルであることが望ましいローカル・ベクトル・レジスタ・ファイルに対するアクセス速度にとって重要な利点を有する。しかし、キャッシュ・メモリの分野において知られているように、低使用頻度ビット又は他の手法に基づいてどのレジスタをローカル・ベクトル・レジスタ・ファイルに保持すべきかをプロセッサが決定するというＮウェア・アソシアティブ・ローカル・ベクトル・レジスタ・ファイルを代替的に使用することも可能であろう。そのような手法の使用は、所与のオペランドがローカル・ベクトル・レジスタ・ファイルにない確立を減少させるかもしれないが、複数のアクセス・サイクルを伴うこともある。
【００６８】
好適な実施例では、ローカル・ベクトル・レジスタ・ファイルにおけるすべてのレジスタが複製され、比較的遠隔のレジスタ・ファイル（フル・ベクトル・レジスタ・ファイル）がすべてのレジスタ・データの完全なコピーを含む。レジスタの複製は、レジスタ・セル自体のための追加のチップ領域を必要とするが、制御ロジックをかなり単純化する。１つの代替の実施例では、非複製のローカル・ベクトル・レジスタ・ファイルを使用すること、及びローカル・ベクトル・レジスタ・ファイルを複製しない遠隔のレジスタ・ファイルであって、ローカル・レジスタがそれのレジスタ・データのコピーだけを含む遠隔のレジスタ・ファイルを使用することが可能であろう。この実施例では、新たなデータがローカル・レジスタに導入されるたびに、そのローカル・レジスタの内容を更に遠隔のレジスタにスワップ・アウトすることが必要であろう。本願では、比較的遠隔のレジスタが「フル」レジスタと呼ばれるが、これは、好適な実施例においては、それがレジスタ・データの完全なコピーを含むという事実を反映することを意図するだけであり、本発明の範囲を限定することを意図するものではない。
【００６９】
いくつかの代替方法をと共に本発明の特定の実施例を開示したが、「特許請求の範囲」の記載の範囲において形式及び細部における更なる変更を行い得ることは当業者には明らかであろう。
【図面の簡単な説明】
【００７０】
【図１】本発明の好適な実施例に従ってマルチレベル・レジスタ・ファイルを利用するコンピュータ・システムにおける主要なハードウェア・コンポーネントの高レベルのブロック図である。
【図２】好適な実施例のコンピュータ・システムにおけるＣＰＵ及び関連のキャッシュの主要なコンポーネントの高レベルのブロック図である。
【図３】好適な実施例に従ってマルチレベル・レジスタ・ファイルを有するＣＰＵのベクトル／ＳＩＭＤマルチメディア拡張（ＶＭＸ）実行サブユニットの高レベルの機能的ブロック図である。
【図４】好適な実施例に従ってローカル・ベクトル・レジスタ・ファイル及び関連のロジックの構造を更に詳細に示すブロック図である。
【図５】好適な実施例に従ってフル・ベクトル・レジスタ・ファイル及び関連のロジックの構造を更に詳細に示すブロック図である。
【図６】好適な実施例に従ってローカル・ベクトル・レジスタ・ファイル及びフル・ベクトル・レジスタ・ファイルにデータを書き込むための主要なハードウェア及びデータ・パスを表すブロック図である。
【図７】好適な実施例に従って機能実行パイプラインにデータを入力するための主要なハードウェア及びデータ・パスを表すブロック図である。
【符号の説明】
【００７１】
１００  コンピュータ・システム
１０１  ＣＰＵ
１０２  メイン・メモリ
１０３  メモリ・バス
１０４  Ｉ／Ｏバス
１０５  Ｉ／Ｏバス・インターフェース・ユニット
１１１  端末インターフェース・ユニット
１１２  ストレージ・インターフェース・ユニット
１１３  Ｉ／Ｏデバイス・インターフェース・ユニット
１１４  ネットワーク・インターフェース・ユニット
１２１〜１２４  接続端末
１２５〜１２７  ダイレクト・アクセス・ストレージ・デバイス
１２８  プリンタ
１２９  ファクシミリ装置
１３０  ネットワーク
【図１】
2006012163.tif 000003
【図２】
2006012163.tif 000004
【図３】
2006012163.tif 000005
【図４】
2006012163.tif 000006
【図５】
2006012163.tif 000007
【図６】
2006012163.tif 000008
【図７】
2006012163.tif 000009