(57)【特許請求の範囲】
【請求項１】
プロセッサを用いてベクトル命令およびスカラ命令の混合命令を処理することによって、ベクトルとスカラとの演算を行う方法であって、
前記混合命令は、第１のソースベクトルレジスタアドレスと、第２のソースベクトルレジスタアドレスと、前記第２のソースベクトルレジスタのうちの所定のスカラ値の位置を示すスカラ位置データと、を含み、
前記プロセッサに、
前記第１のソースベクトルレジスタに格納されたベクトルを取得するステップと、
前記第２のソースベクトルレジスタに格納されたベクトルの要素のうち、前記スカラ位置データによって示される位置に格納されたスカラ値を取得するステップと、
前記取得したベクトルとスカラ値とを用いて所定の演算を実行するステップとを行わせる、方法。
【請求項２】
前記スカラ値の位置を示すスカラ位置データを格納するための少なくとも１つの専用位置ビットが、前記混合命令のビットフォーマットに与えられる、請求項１に記載の方法。
【請求項３】
前記第２のソースベクトルレジスタに格納されたベクトルの次元は２n次元であり、前記スカラ値の位置を示すスカラ位置データを格納するために、ｎビットが前記ビットフォーマットに与えられる、請求項２に記載の方法。
【請求項４】
前記スカラ値の位置を示すスカラ位置データは、前記混合命令内に与えられた演算コードに埋め込まれる、請求項１に記載の方法。
【請求項５】
前記スカラ値の位置を示すスカラ位置データは、前記混合命令内に与えられた二次演算コードに埋め込まれる、請求項１に記載の方法。
【請求項６】
前記プロセッサは、単精度対実行ユニットをさらに含み、
前記第１及び第２のソースベクトルレジスタに格納されたベクトルは、２つの単精度値によって構成される、請求項１に記載の方法。
【請求項７】
ベクトル命令およびスカラ命令の混合命令を処理するデータプロセッサであって、
前記混合命令は、第１のソースベクトルレジスタアドレスと、第２のソースベクトルレジスタアドレスと、前記第２のソースベクトルレジスタのうちの所定のスカラ値の位置を示すスカラ位置データと、を含み、
前記第１のソースベクトルレジスタに格納されたベクトルを取得するベクトル取得手段と、
前記第２のソースベクトルレジスタに格納されたベクトルの要素のうち、前記スカラ位置データによって示される位置に格納されたスカラ値を取得するスカラ値取得手段と、
前記取得したベクトルとスカラ値とを用いて所定の演算を実行する演算実行手段とを備える、データプロセッサ。
【請求項８】
前記スカラ値の位置を示すスカラ位置データは、前記混合命令の二次演算コードに埋め込まれる、請求項７に記載のデータプロセッサ。
【請求項９】
前記スカラ値の位置を示すスカラ位置データを格納するために、前記混合命令のビットフォーマットに対して専用ビットが少なくとも１つ与えられる、請求項７に記載のデータプロセッサ。
【請求項１０】
前記第２のソースベクトルレジスタに格納されたベクトルの次元は２n次元であり、前記スカラ値の位置を示すスカラ位置データを格納するために、前記混合命令に対してｎ個の専用ビットが与えられる、請求項９に記載のデータプロセッサ。
【請求項１１】
前記混合命令は、命令実行に必要とされるすべてのオペランドに関してベクトルレジスタを指定する、請求項７に記載のデータプロセッサ。
【請求項１２】
前記第１及び第２のソースベクトルレジスタに格納されたベクトルの次元は２次元である、請求項７に記載のデータプロセッサ。
【請求項１３】
前記データプロセッサは、ベクトル処理ユニットとして、単精度対ユニットを含み、２つの単精度浮動小数点値を並行処理する、請求項７に記載のデータプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサ等の情報処理装置に関し、より特定的には、たとえばベクトル処理とスカラ処理とが混合された処理の際に、スカラ値をベクトルレジスタから直接選択できるようにすることによって、ベクトル処理ユニットを有する情報処理装置の動作効率を高める方法および装置に関する。
【０００２】
【従来の技術】
電子業界は、より高性能で、より速く、より小さく、より低価格で機能的な電子機器を求める消費者の抑制不可能とも見える要求に刺激され、発展段階にある。このような消費者からの要求を満たそうとして、電子業界は、データプロセッサの機能実行速度を向上させるよう、絶えず努力しなければならない。ビデオゲームコンソールは、さらなる速度の向上と価格の低下を常に要求される電子機器のおもな一例である。これらコンソールは、このように高まり続ける要求を満たすため、高性能かつ低価格でなければならない。本発明は、処理を実行するため、ベクトルレジスタからのスカラが必要とされている場合に、情報処理装置のベクトル処理ユニットが算術演算を行う速度を向上させることを目指している。
【０００３】
マイクロプロセッサは、典型的には、算術演算を行うための実行ユニットを数多く含む。マイクロプロセッサにおいて一般によく見受けられる実行ユニットの例として、固定小数点ユニット（ＦＸＵ）がある。これは整数ユニットとしても知られ、汎用レジスタ（ＧＰＲ）を用いて整数データ操作命令を実行するためのものである。汎用レジスタは、命令に対してソースオペランドおよび求めたい結果を与えるものである。整数読み出し命令は、データをメモリからＧＰＲに移動させ、格納命令は、データをＧＰＲからメモリに移動させる。たとえば、ＧＰＲファイルは、３２のレジスタを有し、各レジスタは３２ビットである。これらのレジスタは、整数ユニットにおいて整数命令を実行する際に必要とする整数データを保持し、格納するために用いられる。整数命令には、たとえば整数加算命令がある。この命令は、第１のＧＰＲの整数を第２のＧＰＲの整数に加算して、その結果を第１のＧＰＲまたは汎用レジスタファイル内の他のＧＰＲに戻すものである。
【０００４】
ほとんどのマイクロコンピュータにおいて見られる実行ユニットの他のタイプとしては、浮動小数点ユニット（ＦＰＵ）がある。ＦＰＵは、整数以外の数または浮動小数点数に関する浮動小数点命令を実行するために用いられる。浮動小数点数は、たとえば６．０２×１０３というように、小数部と指数部の形で表現される。浮動小数点レジスタ（ＦＰＲ）を含む浮動小数点レジスタファイルは、ＧＰＲが固定小数点実行ユニットに関して用いられたのと同様に、上述の方法で用いられる。すなわち、ＦＰＲは、浮動小数点命令に対してソースオペランドおよび求めたい結果を与えるものである。浮動小数点読み出し命令は、データをメモリからＦＰＲへ移動させる。格納命令は、データをＦＰＲからメモリへ移動させる。ＦＰＲファイルは、たとえば３２のレジスタを有し、各レジスタは６４ビットである。これらのレジスタは、浮動小数点ユニット（ＦＰＵ）において浮動小数点命令を実行する際に必要とする浮動小数点データを保持し、格納するために用いられる。浮動小数点命令には、たとえば浮動小数点加算命令があり、この命令は、第１ＦＰＲの浮動小数点数を第２ＦＰＲの浮動小数点数に加算して、その結果を第１ＦＰＲまたは浮動小数点レジスタファイル内の他のＦＰＲへ戻すものである。
【０００５】
浮動小数点実行ユニットを有するマイクロプロセッサは、通常、データ移動と、倍精度および単精度の２つの浮動小数点フォーマットに対する算術演算とを行うことができる。各レジスタが６４ビットであるような上述の浮動小数点レジスタファイルの例では、倍精度浮動小数点数は、ＦＰＲの６４ビットすべてを用いて表現され、単精度数は、各ＦＰＲで利用可能な６４ビットのうちの３２ビットのみを用いる。一般的に、単精度のマイクロプロセッサは、倍精度フォーマットを使用する単精度命令を持っている。
【０００６】
低精度のベクトルおよび行列演算を行うアプリケーションのために、単精度対（ペアード・シングル）として知られる第３の浮動小数点フォーマットが用意されることがある。単精度対を用いれば、２つの単精度浮動小数点値を並行して移動および処理することができ、それによって単精度値に対する処理スピードを実質的に２倍にすることができるので、その処理能力を上げることができる。「単精度対」とは、浮動小数点レジスタが論理的に２つに分割されて、各レジスタが２つの単精度値を含むことになることを意味する。上述の６４ビットのＦＰＲの例においては、各３２ビットの単精度浮動小数点の対を各６４ビットのＦＰＲに格納することができる。そして、専用の命令が、マイクロプロセッサの命令セットに用意されて、６４ビットのレジスタにおける各３２ビット部分を並行して処理する単精度対処理が可能となる。単精度対形式は、基本的には、浮動小数点レジスタファイルをベクトルレジスタファイルに変換する。その各ベクトルの次元は２次元である。結果として、浮動小数点実行ユニットのうちの一部は、単精度対命令を実行するためのベクトル処理ユニット（単精度対ユニット）となる。
【０００７】
マイクロプロセッサからスーパーコンピュータまでの、様々な情報処理装置の中には、特にベクトルを処理するように設計されたベクトル処理ユニットを有するものがある。ベクトルとは、基本的には、値の配列または集合である。対照的に、スカラは、単精度実数（整数または非整数）のような１つの値のみを含む。ベクトルは、２〜２５６またはそれ以上の要素数を有していてもよい。スーパーコンピュータは、典型的には、大きな次元のベクトル処理能力を有する。一方、上述のマイクロプロセッサ上の単精度対ユニットにおいて必要とされるベクトルの次元は、２次元のみである。いずれの場合も、ベクトル処理ユニットにおいて用いられるベクトルを格納するために、ベクトルレジスタが用意される。ベクトルレジスタは、上述のＧＰＲおよびＦＰＲレジスタファイルのレジスタと同様ではあるが、そのレジスタサイズがベクトル処理ユニットにおいて処理するベクトルの次元と典型的には対応している点が異なる。たとえば、ベクトルが６４個の値（たとえば、整数または浮動小数点数）を含み、その各値が３２ビットを要する場合、各ベクトルレジスタは、６４個の３２ビット部分に論理的に分割された２０４８ビットを有することになる。よって、この例においては、各ベクトルレジスタは６４次のベクトルを格納することが可能である。図２は、４個の６４次ベクトルＡ，Ｂ，Ｃ，Ｄを格納するベクトルレジスタファイル２を例示する。
【０００８】
スカラレジスタを用いたスカラ処理ユニットと比較して、ベクトルレジスタを用いたベクトル処理の最大の利点は、以下の例のように示される。ベクトルＡおよびＢが６４次、すなわちＡ＝（Ａ0 …Ａ63）、Ｂ＝（Ｂ0 …Ｂ63）であると仮定する。加算演算等の通常の算術演算をベクトルＡおよびＢを用いて行うためには、スカラ処理装置は、６４個のスカラ加算命令を実行しなければならず、その結果のベクトルはＲ＝（（Ａ1 ＋Ｂ1 ）…（Ａ63＋Ｂ63））となる。同様に、ベクトルＡおよびＢの各対応値を乗算して、その結果得られるベクトルの各要素をさらに加算して、結果のスカラを得る、内積として知られる通常の処理を行うためには、１２８個のスカラ命令を行わなければならない（６４回の乗算と６４回の加算）。これとは対照的に、ベクトル処理においては、単一のベクトル加算命令と単一のベクトル内積命令とによって、同一の結果を達成できる。さらに、ベクトル内の各対応する要素は、命令実行時に、並行処理することができる。よって、ベクトル処理は、多くの情報処理アプリケーションにおいて、大変利点がある。
【０００９】
【発明が解決しようとする課題】
しかしながら、ベクトル処理においては、或る問題に直面する。それは、特定のアプリケーションによって用いられるベクトルデータの性質が、ベクトルレジスタにおいて予定されていた典型的なベクトルと対応しないことがある、ということである。たとえば、アプリケーションによっては、ベクトル計算とスカラ計算とが混合された計算が必要とされる場合がある。この計算に必要とされるスカラ（たとえば、Ｃ10）とは、ベクトルレジスタ内に格納された特定のベクトル（たとえば、Ｃ）内の単一の要素を指す。すなわち、ベクトル処理ユニットは、ベクトルＡをベクトルＢに加算して、その結果をベクトルＣに入れる（つまり、Ｃ＝Ａ＋Ｂ）というベクトル命令を実行するのはたやすいかもしれないが、所望のスカラがベクトルレジスタ内の要素である場合（すなわち、Ｄ＝Ｃ10＋Ａ）には、ベクトル処理とスカラ処理とが混合された処理を直接行うことはできない。このような制限がある主な理由は、スカラ命令とベクトル命令とが混合された命令は、処理に用いるスカラがスカラレジスタに格納されていることを必要とする、ということにある。すなわち、このような命令は、Ｃ10等の特定のスカラ要素をベクトルレジスタから選択することができない。図１は、スカラ命令とベクトル命令とが混合された従来の命令のフォーマット例を示す。
【００１０】
図１を見ればわかるように、スカラおよびベクトル混合命令３の典型的なフォーマットは、一次読み出し演算コード４と、スカラレジスタアドレス５と、ベクトルレジスタアドレス６と、宛先レジスタアドレス７とを含む。一次演算コードは、たとえばベクトルとスカラとの乗算というような命令の特定のタイプを識別する。演算コードは、たとえば、命令の最上位６ビット（ビット０〜５）から構成される。スカラレジスタアドレス５は、命令を実行するのに必要なスカラ値を含むＧＰＲファイル内のレジスタにおける特定のアドレスを提供する。ベクトルレジスタアドレス６は、命令を実行するのに必要なベクトルを含むベクトルレジスタファイル内のベクトルレジスタにおける特定のアドレスを提供する。宛先レジスタアドレス７は、処理結果のための位置を提供する。なお、図１の命令フォーマット３は一例に過ぎず、従来の命令は、当業者が容易に理解しうるような、他の形式であってもよく、かつ／または二次演算コードやステートビット等の他の部分を含んでもよい。しかしながら、上述のように、命令の特定の形式とは関係なく、命令には、命令を実行するのに必要なスカラ値を格納するために用いられるスカラレジスタが必要である。
【００１１】
その結果、必要なスカラがベクトルレジスタの特定の要素（たとえば、Ｃ10）である場合、所望のスカラ（Ｃ10）がスカラレジスタに読み出されるようにするために、ベクトルレジスタ内のすべてがメモリに、まずコピーされなければならない。すなわち、従来例においては、ベクトルレジスタからスカラを用いることができるようにするための適切な仕組みを何ら提供していない。
【００１２】
したがって、このようなスカラおよびベクトル混合命令を処理することができる一方で、スカラレジスタが命令を実行するために必要なスカラ値を有するようにするためには、ベクトルをメモリに格納し、メモリからスカラレジスタにスカラを読み出するのにかかる時間からして、大きなオーバヘッドを要する。たとえ、要求されるベクトルがキャッシュ（高速オンチップメモリ）内にあり、外部メモリに対するアクセスの必要性がなくなっているとしても、大きなオーバヘッドはまだ存在する。たとえば、典型的なキャッシュが６４ビットの１２８次元ベクトルからデータを読み出すのにかかる時間は、約３０〜５０ＣＰＵクロックサイクル（中央処理装置（ＣＰＵ）が動作する基準となる時間単位）である。さらに、もしキャッシュがないか、キャッシュミスが生じる場合には、外部メモリ内のベクトルを読み出し、アクセスするのに、キャッシュと比べて、約１オーダー以上大きなオーバヘッドが生じてしまう。したがって、上述の制約がないとして、たとえば１０クロックサイクルの速さで実行しうる命令は、大きなＣＰＵサイクルオーバヘッド、すなわち一つの１０サイクル命令に対して４０から１００クロックサイクルのオーバヘッドを要する。
【００１３】
したがって、関連する処理がより高速に行われ、アプリケーションの処理能力を向上させるためには、このようなスカラおよびベクトル混合命令に関する大きなオーバヘッドを小さくする必要性がある。
【００１４】
【課題を解決するための手段および発明の効果】
本発明は、スカラ命令とベクトル命令とが混合された命令に関して、当該命令の実行中に用いられる値をベクトルレジスタからスカラレジスタに読み出す必要性を解消することによって、当該命令をより効率的に実行し、ＣＰＵサイクルオーバヘッドをより少なくするようにするための仕組みおよび方法である。本発明は、ベクトル処理ユニットを有する、マイクロプロセッサからスーパーコンピュータまで、適切なタイプのデータ処理装置に関して用いられるような、処理の効率性を向上させるための改良された命令フォーマットを提供する。
【００１５】
本発明によれば、改良された命令フォーマットは、当該命令の実行中にスカラとして用いられるベクトル内における特定の要素を識別する、１つまたは複数の埋め込みビットを有する。このように、スカラオペランドをスカラレジスタまたは汎用レジスタに読み出すことなく、スカラおよびベクトル混合命令を実行することができる。当該命令において、ベクトル内のスカラの位置を識別することにより、命令実行の際に、スカラをベクトルレジスタから直接用いることが可能となる。
【００１６】
本発明の好ましい実施例によれば、スカラおよびベクトル演算の命令フォーマットには、一次演算コードと、第１のソースベクトルレジスタアドレスと、第２のソースベクトルレジスタアドレスと、宛先レジスタベクトルアドレスと、命令を実行するのに必要な、ベクトルレジスタのうちの１つのなかにある所望のベクトルの位置を示す少なくとも１つの位置ビットとを含む。ベクトル内にある所望のスカラの位置を示すのに必要なビット数は、対象となるベクトルに特有の次元数に基づく。たとえば、ベクトルの次元数が６４であれば、ベクトル内の使用データに特有な終了位置を示す固有の識別子を与えるのに必要なビット数は６ビットである。すなわち、ベクトルの次元数が２n であれば、ベクトル内にある所望のスカラの位置を示すのに必要なビット数は、本発明ではｎビットである。
【００１７】
本発明の他の実施例において、ベクトル内にあるスカラの位置は、命令中にある、第２の演算コードの値に基づいて決定される。なお、しかしながら、本発明は、命令中にある、スカラ位置インデックスを特定の実施形態に限定するものではない。むしろ、本発明は、ベクトル内のスカラの位置を表現したり、命令を構成するビットフォーマットに埋め込んだりするのに適切な方法であればよい。
【００１８】
好ましい実施例において、本発明は、たとえばＩＢＭのＰｏｗｅｒＰＣ（ＩＢＭの商標）系マイクロプロセッサ（以後、「ＰｏｗｅｒＰＣ」と称する）等のマイクロプロセッサ上において実施され、マイクロプロセッサは、単精度対ユニット等のベクトル処理ユニットを含むように改良または再設計されている。ＰｏｗｅｒＰＣマイクロプロセッサの詳細については、すべてが本発明に援用されている、「ＰｏｗｅｒＰＣ７４０  ａｎｄ  ＰｏｗｅｒＰＣ７５０  ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ  Ｕｓｅｒ  Ｍａｎｕａｌ」（ＩＢＭ、１９９８年）と、「ＰｏｗｅｒＰＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ：  Ｐｒｏｇｒａｍｍｉｎｇ  Ｅｎｖｉｒｏｎｍｅｎｔ」（Ｍｏｔｏｒｏｌａ  Ｉｎｃ．，１９９４年）とを参照されたい。
【００１９】
上述の改良されたＰｏｗｅｒＰＣの例においては、たとえば、ハードウェア実行用のスペシャル・パーパス・レジスタ（たとえば、ＨＩＤ２）を提供することによって、単精度対処理が選択的に許可される。スペシャル・パーパス・レジスタは、これによって、単精度対命令が実行可能か否かを制御するビット（たとえば第３のビット）を有する。マイクロプロセッサ上で行い得る他の拡張機能を制御するために、当該スペシャル・パーパス・レジスタの他のビットが用いられてもよい。
【００２０】
また、本発明によって、ベクトルおよびスカラ混合演算のための特定の命令定義が与えられてもよい。また、本発明は、マイクロプロセッサや仮想マシン（ソフトウェアによって実施されるハードウェアエミュレータ）のようなデコーダにも向けられており、このデコーダは、本明細書で開示された特定の命令すべてまたはいずれをもデコードすることができる。本発明は、さらに、本明細書で開示されたすべての特定の命令すべてまたはいずれをも格納する記憶媒体に関する。
【００２１】
【発明の実施の形態】
本発明の他の目的、特徴および利点は、付随する図面と併せて以下の詳細な説明を読むことによって、明らかになるであろう。
【００２２】
以下の説明において、本発明の好ましい実施例に関して数々の具体的な詳細が示されている。しかしながら、このような具体的な詳細は、一例であるに過ぎず、本発明を本明細書に記載された特定の実施例に限定するものではない。すなわち、本説明に鑑みて当業者が容易に理解できる、本発明の真の範囲および精神を逸脱することなく、記載の実施例に対して数々の変更や修正が行われてもよい。
【００２３】
図３は、本発明の一実施形態に係る、本発明が実施されている単一チップのマイクロプロセッサ１０の図である。なお、図３においては、マイクロプロセッサの概略のみを示す。なぜなら、マイクロプロセッサ内の主要な構成要素や、その内部接続および動作は、当業者にとって既知であるからである。よって、既知の構成要素に関する詳細によって本発明が不明確にならないようにするため、本明細書における図や説明は単純なものとし、当業者にとって本発明が完全に理解されるために必要な範囲でのみ行う。
【００２４】
マイクロプロセッサ１０は、アドレスバス１４およびデータバス１６を介して、オフチップ（外部）メモリ１２またはメインメモリに既知の方法で接続される。外部メモリ１２は、マイクロプロセッサ１０が所望の機能を行うのに必要な３Ｄグラフィックス命令等のデータおよび／または命令を含む。なお、マイクロプロセッサ１０および外部メモリ１２はより大きな総合情報処理システム（図示せず）において実施されてもよい。マイクロプロセッサは、制御ユニット１８と、固定小数点ユニット２０ａおよび２０ｂと、汎用レジスタ（ＧＰＲ）２２と、読み出し／格納ユニット２４と、浮動小数点ユニット２８、単精度対ユニット（ベクトル処理ユニット）３０と、浮動小数点レジスタ２６とを含み、これらは通常、既知の方法で相互接続されて動作する。さらに、マイクロプロセッサ１０は、１次命令キャッシュ３２と、１次データキャッシュ３４と、レベル２キャッシュ３６およびそれに関連するタグ３８と、バスインターフェース・ユニット（ＢＩＵ）４０とを含み、これらは通常、従来の方法で動作する。しかしながら、データキャッシュ３４およびダイレクトメモリアクセス・ユニットは、本発明と同一の発明者および出願人が同時に出願した米国特許出願番号０９／５４５，１８４の「オンチップキャッシュのソフトウェア管理方法および装置」において開示されたような特殊の動作を行ってもよい。ＰｏｗｅｒＰＣについてのキャッシュ命令に関する情報については「Ｚｅｎ  ａｎｄ  Ａｒｔ  ｏｆ  Ｃａｃｈｅ  Ｍａｉｎｔｅｎａｎｃｅ」（Ｂｙｔｅ  Ｍａｇａｚｉｎｅ、１９９７年３月）を参照されたい。
【００２５】
本実施形態のマイクロプロセッサ１０の構造と動作は、本実施形態の実施において或る改良を行えば、ＩＢＭのＰｏｗｅｒＰＣマイクロプロセッサと同様である。本実施形態におけるマイクロプロセッサの大半の構成要素の動作に関する詳細は、次のの出版物に記載されている。「ＰｏｗｅｒＰＣ７４０  ａｎｄ  ＰｏｗｅｒＰＣ７５０  ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ  Ｕｓｅｒ  Ｍａｎｕａｌ」（ＩＢＭ、１９９８年）および「ＰｏｗｅｒＰＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ：  Ｐｒｏｇｒａｍｍｉｎｇ  Ｅｎｖｉｒｏｎｍｅｎｔ」（Ｍｏｔｏｒｏｌａ  Ｉｎｃ．，１９９４年）である。なお、しかしながら、本発明は、或るアプリケーション例においてベクトルの読み出しおよび格納を改良するために、マイクロプロセッサからスーパーコンピュータまでの、適切なデータプロセッサ上において実施されてもよい。
【００２６】
上述のように、本実施形態のマイクロプロセッサ１０は、縮小命令セットコンピュータ（ＲＩＳＣ）のＰｏｗｅｒＰＣマイクロプロセッサ系列に対して、本発明にしたがった浮動小数点処理を改良して実施している。以下は、本例のマイクロプロセッサ１０の動作概要を説明しており、本発明に特有の特徴を限定するものではない。
【００２７】
マイクロプロセッサ１０は、ＰｏｗｅｒＰＣアーキテクチャの３２ビット部分を実装し、３２ビットの有効アドレス、８ビット、１６ビット、３２ビットの整数データタイプおよび単精度および倍精度の浮動小数点タイプを提供する。さらに、マイクロプロセッサは、以下に詳細に述べる単精度浮動小数点データタイプの対および単一浮動小数点命令の対を用いて、ＰｏｗｅｒＰＣアーキテクチャを拡張する。マイクロプロセッサ１０は、スーパースカラプロセッサであって、２つの命令を同時に完了することができる。マイクロプロセッサ１０は、以下の５つの主要な実行ユニットを備える。
すなわち、
１）浮動小数点ユニット（ＦＰＵ）２８と、
２）分岐処理ユニットまたは制御ユニット１８と、
３）システムレジスタ・ユニット（ＳＲＵ）（図示せず）と、
４）読み出し／格納ユニット（ＬＳＵ）２４と、
５）２つの整数ユニット（ＦＸＵ）２０ａおよび２０ｂとを備える。
【００２８】
ＦＸＵ１はすべての整数命令を実行し、ＦＸＵ２は乗算命令および除算命令を除くすべての整数命令を実行する。数個の命令を並列的に実行する能力と、実行時間の短い簡易命令の使用とによって、本マイクロプロセッサを用いるシステムの効率性と処理能力を高める。ほとんどの整数命令は、１クロックサイクル内に実行される。ＦＰＵは、好ましくは、行うタスクをサブタスクに分割するようにパイプライン化され、連続する３ステージで実行される。典型的には、浮動小数点命令は、１回につき３ステージのうち１ステージのみを占めることが可能で、前回のステージを次の浮動小数点命令の処理のために空けておく。よって、３つの単一または対の単精度浮動小数点命令が、１回のＦＰＵ実行段階に存在し得る。倍精度の加算命令には、３サイクルの待ち時間があり、倍精度の乗算命令および乗算・加算命令は、４サイクルの待ち時間がある。
【００２９】
図３は、実行ユニットの並列構成を示す。制御ユニット１８は、分岐命令の取り出し（フェッチ）、送り出し（ディスパッチ）および予測（プリディクト）を行う。なお、これは、特徴が物理的にどのように実施されるかを示そうとするというよりも、基本的な特徴を示す概念的なモデルである。マイクロプロセッサ１０は、独立したオンチップ３２キロバイトの８ウェイ・セットアソシアティブ・命令およびデータ用物理アドレスキャッシュと、独立した命令・データ・メモリ管理ユニットとを有する。データキャッシュは、４ウェイ・１６キロバイトのロックキャッシュ（ソフトウェアによって制御）と４ウェイ・１６キロバイトの通常キャッシュとで選択的に構成してもよい。各メモリ管理ユニットは、１２８エントリの、２ウェイ・セットアソシアティブ・変換ルックアサイドバッファ（ＴＬＢ）であって、最近使用したページアドレス変換を保存する。ブロックアドレス変換（ＢＡＴ）は、４エントリ命令およびデータブロックアドレス変換アレイによって行われ、これらはＰｏｗｅｒＰＣアーキテクチャによって規定される。ブロック変換中に、有効アドレスが、同時に４つのＢＡＴ入力すべてと比較される。Ｌ２キャッシュは、オンチップの２ウェイ・セットアソシアティブ・タグメモリ３８およびデータ格納用ＥＣＣ付きオンチップ２５６キロバイトＳＲＡＭ３６によって実施される。マイクロプロセッサ１０は、好ましくはダイレクトメモリアクセス（ＤＭＡ）エンジンを搭載して、外部メモリ１２および任意ロックデータキャッシュ３４ｂ間における双方向のデータ転送を行う。好ましくは、ライトギャザーパイプが設けられ、効率的なキャッシュされない格納動作に対して用いられる。
【００３０】
マイクロプロセッサ１０は、３２ビットアドレスバスと、６４ビットデータバスとを有する。複数の装置が中央外部アービタを介してシステムリソースを競合使用する。マイクロプロセッサの３ステート・キャッシュコヒーレンシープロトコル（ＭＥＩ）は、変更済み、排他、および無効という３つのステートに対応しており、これは、ＭＥＳＩ（変更済み／排他／共有／無効）という４ステート用プロトコルと互換可能なサブセットであり、４ステート用キャッシュと共にシステム内において整合的に動作する。マイクロプロセッサは、外部メモリアクセスやメモリマップ化されたＩ／Ｏ動作のためのシングルビートのバーストデータ転送に対応している。
【００３１】
図３の実施例において、マイクロプロセッサは、分離された３２キロバイト８ウェイ・アソシアティブ命令キャッシュおよびデータキャッシュ（３２，３４）とを含み、様々な実行ユニット（１８，２０ａ，２０ｂ，２８，３０）およびレジスタが命令やデータに高速にアクセスできるようにしており、それによって、外部メモリ１２への比較的遅いアクセスの回数を減らしている。
【００３２】
キャッシュは、キャッシュ内容を管理するための疑似最低使用頻度（ＰＬＲＵ）置換アルゴリズムを実装する。キャッシュディレクトリは、物理的にアドレス指定され、物理的（実）アドレスタグが、キャッシュディレクトリに格納される。命令キャッシュおよびデータキャッシュは共に、３２バイトのキャッシュブロックサイズであり、キャッシュブロックが、コヒーレンシーステートが示すメモリのブロックである（キャッシュラインとも表記する）。各データキャッシュブロックの２つのコヒーレンシーステートビットによって、変更済み（排他）（Ｍ）、排他（未変更）（Ｅ）および無効（Ｉ）という３つのステートのエンコードを行うことができ、それによって、ＭＥＩ・３ステート・キャッシュコヒーレンシープロトコルを規定する。各命令キャッシュブロックにおける１つのコヒーレンシーステートビットによって、無効（ＩＮＶ）または有効（ＶＡＬ）という取り得る２つのステートのエンコードを行うことができる。本発明によれば、各キャッシュはハードウェアの実施状態に依存するレジスタ（以下に詳述するスペシャル・パーパス・レジスタ）に適切なビットを設定することによって無効化またはロックされる。
【００３３】
マイクロプロセッサ１０は、完全にコヒーレントな４ギガバイトの物理アドレス空間に対応しているのが好ましい。バススヌーピングを用いることによって、ＭＥＩ・３ステート・キャッシュコヒーレンシープロトコルが実現され、プロセッサのデータキャッシュに対するグローバルメモリのコヒーレンシーが確実なものとなる。データキャッシュ３４のコヒーレンシープロトコルは、共有ステートを省略した標準ＭＥＳＩ・４ステートキャッシュプロトコルのコヒーレント・サブセットである。データキャッシュ３４は、その各３２バイトブロックを３つのＭＥＩステートのいずれかであることを特徴付ける。キャッシュに与えられたアドレスは、ビットＡ（２０〜２６）でキャッシュディレクトリへインデックスされ、物理アドレス変換からの上位の２０ビットは（ＰＡ（０〜１９））はインデックスされたキャッシュディレクトリタグと比較される。インデックスされたタグのいずれとも一致しない場合は、キャッシュミス（必要なデータがキャッシュに存在しないこと）となる。
【００３４】
キャッシュミスになると、マイクロプロセッサのキャッシュブロックは、各６４ビットの４ビート分で埋められる。バーストフィルが、クリティカルダブルワード先送り処理として行われ、クリティカルダブルワードが同時にキャッシュに書き込まれ、要求ユニットに対して転送されることによって、キャッシュフィルの遅れによるストールを最小限にする。タグが一致した場合、キャッシュヒットが生じたことになり、ディレクトリは、キャッシュブロックが２つのステートビット間のタグと共に維持されていることを示す。マイクロプロセッサ１０は、バス・トランザクションをスヌープすることによってメモリのコヒーレンシーを提供する専用ハードウェアであることが好ましい。
【００３５】
キャッシュ３２および３４は共に、好ましくはバスインターフェース・ユニット（ＢＵＩ）４０と密接にカップリングされ、システムメモリ制御ユニットやその他のバスのマスタとなり得る構成要素に対して効率的なアクセスを行う。ＢＵＩ４０は、バス処理要求を命令やデータキャッシュから受け取り、６０ｘのバスプロトコルに準拠して処理を行う。ＢＵＩ４０は、アドレスキューを与えて、論理およびバス制御論理に対して優先順位を付ける。ＢＵＩはまた、データキャッシュ、アドレスキュー、およびメモリ確保のためにスヌープアドレスを取得する。データキャッシュは、好ましくは８ウェイの１２８セットとして構成され、各ウェイは、３２バイトの２ステートビットとアドレスタグで構成される。本発明によれば、ブロックがロックしている旨を示す新たなビットが各キャッシュブロックに追加されてもよい。各キャッシュブロックは、８ワード境界から読み出されるメモリからの８つの連続ワードを含む（すなわち、論理（有効）アドレスのビットＡ（２７〜３１）は０である）。その結果、キャッシュブロックは、ページ境界に沿ってアラインされる。アドレスビットＡ（２０〜２６）は、キャッシュセットを選択するためのインデックスとなる。ビットＢ（２７〜３１）は、ブロック内のバイトを選択する。オンチップデータキャッシュタグはシングルポートで、読み出しおよび格納処理はデータキャッシュタグに対するスヌープアクセスによって振り分けされなければならない。もしスヌープが失敗したら、スヌープ直後のクロックサイクルで、読み出しおよび格納処理をキャッシュに対して行うことができる。メインメモリ１２に対する再コピーが必要か否かに基づいて、スヌープヒットは、データキャッシュを２サイクル以上ブロックしてもよい。
【００３６】
１次（Ｌ１）キャッシュ（３２，３４）は、好ましくは、第１のスペシャル・パーパス・レジスタ（図示しないＨＩＤ０）内の特定のビットをプログラムして、専用のキャッシュ制御命令を出力することによって制御される。スペシャル・パーパス・レジスタＨＩＤ０は、好ましくは、命令・データキャッシュを無効、ディセーブル（不可）、およびロックする数ビットを含む。マイクロプロセッサ１０が電源投入またはハードリセットされると、データキャッシュ３４は自動的に無効化される。しかしながら、ソフトリセットによっては、データキャッシュは自動的には無効とならない。ソフトリセット後のキャッシュ無効化が求められる場合には、ソフトウェアは、ＨＩＤ０のデータキャッシュフラッシュ無効化ビット（ＨＩＤ０（ＤＣＦ１））を用いる。スペシャル・パーパス・レジスタへの移行（ｍｔｓｐｒ）処理によってＨＩＤ０（ＤＣＦ１）がセットされると、マイクロプロセッサは、次のクロックサイクル時に自動的にこのビットをクリアする（データキャッシュがＨＩＤ０レジスタでイネーブルとされる場合）。
【００３７】
データキャッシュは、データキャッシュ・イネーブルビット（ＨＩＤ０（ＤＣＥ））を用いることによってイネーブル（許可）またはディセーブル（不可）とされる。データキャッシュ・イネーブルビットは、電源投入時にはクリアされ、データキャッシュをディセーブル（不可）にする。データキャッシュがディセーブル（不可）状態である場合には（ＨＩＤ０（ＤＣＥ）＝０）、キャッシュタグ・ステートビットは無視され、すべてのアクセスは、シングルビートのトランザクションとして、Ｌ２キャッシュまたは６０ｘバスへ伝えられる。データキャッシュの内容は、データキャッシュロックビット（ＨＩＤ０（ＤＬＯＣＫ））を設定することによってロックされる。ロックされたデータキャッシュに届いたデータアクセスは、当該キャッシュによって処理される。しかしながら、ロックされたキャッシュに届かなかったアクセスはすべて、シングルビートのトランザクションとして、Ｌ２キャッシュ３６または６０ｘバスへ伝えられる。
【００３８】
マイクロプロセッサ１０は、ロックされたデータキャッシュに届いたスヌープをロックされていないデータキャッシュに届いたスヌープと同様に扱う。しかしながら、スヌープによって無効化されたキャッシュブロックは、ロックが解除されるまでは無効である。命令キャッシュ３２は、上述のデータキャッシュと同様に動作するが、無効化およびロックのため、ＨＩＤ０レジスタにおいては異なるビットが用いられる。すなわち、命令キャッシュフラッシュ無効化ビットＨＩＤ０（ＩＣＦＩ）および命令キャッシュロックビットＨＩＤ０（ＩＬＯＣＫ）である。
【００３９】
マイクロプロセッサ１０は、好ましくは、他のハードウェア処理系依存型スペシャル・パーパス・レジスタ（ＨＩＤ２）を含み、このレジスタは、本発明によれば、浮動小数点ユニットを単精度対モードで動作させるように動作させるために用いられる。すなわち、６４ビットのＦＰＲを、２つの単精度浮動小数点数を有する３２ビットのレジスタの対として扱うようにする。具体的には、ＨＩＤ２レジスタは、単精度対ビット動作を許可するために単精度対許可ビット（ＰＳＥ）を含む。ＨＩＤ２レジスタの定義例を図４に示す。ビット番号２は、単精度対ビットフォーマットを制御するためのＰＳＥビットである。ＨＩＤ２レジスタの他のビットは、プロセッサ１０に与えられる他の拡張機能を制御するために用いられ、たとえば、図４に示すように、データ量子化、ロックされたキャッシュ、書き込みバッファリング、およびＤＭＡキュー列などがある。なお、図２ではＨＩＤ２レジスタのビット８〜３１は留保されているが、これらのビットは、たとえばキャッシュ命令ヒットエラー、通常のキャッシュエラーに対するＤＭＡアクセス、ＤＭＡキャッシュミスエラー、ＤＭＡキュー長オーバーフローエラー、命令キャッシュ・ヒットエラー・イネーブル、ＤＭＡキャッシュミスエラー・イネーブル、およびＤＭＡキュー・オーバーフロー・イネーブルなどを示すために用いられてもよい。
【００４０】
ＨＩＤ２（ＰＳＥ）ビットが１にセットされると、単精度対命令が用いられる。したがって、マイクロプロセッサの１０の浮動小数点ユニット２８は、単精度対命令を処理するための２次元ベクトル単精度対ユニット３０を含む。すなわち、マイクロプロセッサ１０は上述のベクトル処理を行うことができ、ベクトルの次元は２次元である。また、浮動小数点ステータスおよび制御レジスタ（ＦＰＳＣＲ）が与えられ、このレジスタには、ＩＥＥＥ規格に沿った、浮動小数点例外信号ビット、例外サマリビット、例外イネーブルビット、および丸め制御ビットが含まれる。
【００４１】
よって、単精度および倍精度オペランドに加えて、ＨＩＤ２（ＰＳＥ）＝１の場合、マイクロプロセッサ１０は、第３の形式、すなわち、単精度対オペランドに対応している。図５に示すように、浮動小数点レジスタファイル内の６４ビットレジスタ群は、典型的には単一の６４ビットレジスタ４２として扱われるが、３２ビットレジスタ４４ａおよび４４ｂの対に変換されて、各レジスタは、単精度（３２ビット）浮動小数点数を格納するように動作可能である。
【００４２】
ここで、上位ワードにおける単精度浮動小数点値はｐｓ０とし、下位ワードにおける単精度浮動小数点値はｐｓ１とする。マイクロプロセッサ１０の命令セットには特別の命令が与えられ、両方の値（ｐｓ０およびｐｓ１）が単精度対ユニット３０において並行して処理される。たとえば、対になった乗算−加算命令（ｐｓ＿ｍａｄｄ命令）が与えられて、ｆｒＡのｐｓ０にｆｒＣのｐｓ０が掛け合わされ、その結果をｆｒＢのｐｓ０に加算して、得られた結果をｆｒＤのｐｓ０に入れる。同時に、同様の動作が、対応するｐｓ１の値にも適用される。単精度対命令が与えられてもよく、ＰｏｗｅｒＰＣ命令セットにおいて用意された既存の倍精度命令の１つに対応する動作が行われる。たとえば、ｆａｄｄ命令は、２つのレジスタからの倍精度オペランドを加算し、その結果を第３のレジスタに入れる。対応する単精度対の命令であるｐｓ＿ａｄｄ命令において、そのような２つの動作が、一つはｐｓ０の値に対して、他方はｐｓ１の値に対して、並行して行われる。
【００４３】
ｐｓ＿ａｄｄ命令フォーマットの例を図７に示す。当該命令は、３２ビットを含む。さらに、当該命令において、ビット０〜５は、４の一次演算コードをエンコードする。ビット６〜１０は、単精度対浮動小数点加算命令から生じた３２ビットの単精度浮動小数点値の対を格納するための浮動小数点宛先レジスタを指定する。ビット１１〜１５は、３２ビット単精度浮動小数点値の対を格納する浮動小数点ソースレジスタを指定する。ビット１６〜２０は、３２ビット単精度浮動小数点値の対を格納するためのさらなる浮動小数点ソースレジスタを指定する。
ビット２１〜２５は、「０００００」の予約フィールドをエンコードする。ビット２６〜３０は、２１の２次演算コードをエンコードする。ビット３１は、ステートレジスタの更新を示す記録ビットを含む。
【００４４】
ほとんどの単精度対命令は、対の結果値を生じる。浮動小数点ステータスおよび制御レジスタ（ＦＰＳＣＲ）は、浮動小数点計算によって影響を受ける多数のステータスビットを含む。ＦＰＳＣＲビット１５〜１９は、結果ビットであり、ｐｓ１またはｐｓ０の演算結果によって決定されてもよい。単精度対モード（ＨＩＤ２（ＰＳＥ）＝１）の場合、倍精度命令はすべてまだ有効であり、単精度対でないモードとして実行される。単精度対モードの場合、単精度浮動小数点命令は有効であり、特定されたレジスタのｐｓ０オペランドに作用する。
【００４５】
本発明の重要な局面によれば、ベクトル値およびスカラ値に関わる特定の単精度対命令が与えられて、それによって、命令を実行するためにスカラ値をスカラレジスタに移動または読み出す必要性を解消している。より特定的には、本発明によれば、ベクトル内のスカラの位置が命令に与えられて、それによって、所望のスカラをベクトルから直接用いることができる。
【００４６】
図８および図９は、本発明に係るベクトルおよびスカラ混合演算を実行するための命令の例を２つ示す。図８は、ｐｓ＿ｍａｄｄｓ０ｘと呼ばれる、単精度対乗算スカラ上位命令を示す。この命令は、ｐｓ０（上位ワードまたはレジスタの最初の単精度値）をスカラとして用いたスカラベクトル乗算加算演算を実行する単精度対命令である。ｐｓ＿ｍａｄｄｓ０ｘ命令は、３２ビットを含む。当該命令において、ビット０〜５は、４の一次演算コードをエンコードする。ビット６〜１０は、命令の結果を格納するための浮動小数点宛先レジスタを指定する。ビット１１〜１５は、第１の浮動小数点レジスタを、３２ビット単精度浮動小数点値の第１の対を格納する第１のソースとして指定する。ビット１６〜２０は、第２の浮動小数点レジスタを、３２ビット単精度浮動小数点値の第２の対を格納する第２のソースとして指定する。ビット２１〜２５は、第３の浮動小数点レジスタを、３２ビット単精度浮動小数点値の第３の対を格納する第３のソースとして指定する。ビット２６〜３０は、１４の２次演算コードをエンコードする。ビット３１は、ステートレジスタの更新を示す記録ビットを含む。この命令の例において、使用されるスカラの位置は、２次演算コードによって決定され、とりわけ、ｐｓ０がスカラとして用いられる旨を示す。すなわち、スカラの位置は、２次演算コードに埋め込まれる。
【００４７】
図８からわかるように、このｐｓ＿ｍａｄｄｓ０ｘ命令によれば、レジスタｆｒＡ（ｐｓ０）内の浮動小数点オペランドは、レジスタｆｒＣ（ｐｓ０）内の浮動小数点オペランドと乗算される。そして、この中間結果に、レジスタｆｒＢ（ｐｓ０）内の浮動小数点オペランドが加算される。結果有効値の最上位ビットが１ではない場合は、当該結果値は正規化される。そして、結果値は、ＦＰＳＣＲの浮動小数点丸め制御フィールドＲＮの制御によって、単精度に丸められて、ｆｒＤ（ｐｓ０）に入れられる。
【００４８】
さらに、レジスタｆｒＡ（ｐｓ１）内の浮動小数点オペランドは、レジスタｆｒＣ（ｐｓ０）の浮動小数点オペランドと乗算される。そして、この中間結果に、レジスタｆｒＢ（ｐｓ１）内の浮動小数点オペランドが加算される。結果有効値の最上位ビットが１ではない場合は、当該結果値は正規化される。そして、結果値は、ＦＰＳＣＲの浮動小数点丸め制御フィールドＲＮの制御によって、単精度に丸められて、ｆｒＤ（ｐｓ１）に入れられる。ＦＰＳＣＲ（ＦＰＲＦ）は、ＦＰＳＣＲ（ＶＥ）＝１であるときの無効な演算の場合を除き、ｐｓ０の結果のクラスと符号とに設定される。
【００４９】
図９は、ｐｓ＿ｍａｄｄｓ１ｘと呼ばれる、単精度対乗算スカラ下位命令を示す。この命令は、ｐｓ１（下位ワードまたはレジスタの２番目の単精度値）をスカラとして用いたスカラベクトル乗算加算演算を実行する、単精度対命令である。ｐｓ＿ｍａｄｄｓ１ｘ命令は、３２ビットを含む。当該命令において、ビット０〜５は、４の一次演算コードをエンコードする。ビット６〜１０は、命令の結果を格納するための浮動小数点宛先レジスタを指定する。ビット１１〜１５は、第１の浮動小数点レジスタを、３２ビット単精度浮動小数点値の第１の対を格納する第１のソースとして指定する。ビット１６〜２０は、第２の浮動小数点レジスタを、３２ビット単精度浮動小数点値の第２の対を格納する第２のソースとして指定する。ビット２１〜２５は、第３の浮動小数点レジスタを、３２ビット単精度浮動小数点値の第３の対を格納する第３のソースとして指定する。ビット２６〜３０は、１５の２次演算コードをエンコードする。ビット３１は、ステートレジスタの更新を示す記録ビットを含む。この命令の例において、使用されるスカラの位置は、２次演算コードによって決定され、とりわけ、ｐｓ１がスカラとして用いられる旨を示す。すなわち、スカラの位置は、２次演算コードに埋め込まれる。
【００５０】
図９からわかるように、このｐｓ＿ｍａｄｄｓ１ｘ命令によれば、レジスタｆｒＡ（ｐｓ０）内の浮動小数点オペランドは、レジスタｆｒＣ（ｐｓ１）内の浮動小数点オペランドと乗算される。そして、この中間結果に、レジスタｆｒＢ（ｐｓ０）内の浮動小数点オペランドが加算される。結果有効値の最上位ビットが１ではない場合は、当該結果値は正規化される。そして、結果値は、ＦＰＳＣＲの浮動小数点丸め制御フィールドＲＮの制御によって、単精度に丸められて、ｆｒＤ（ｐｓ０）に入れられる。
【００５１】
さらに、レジスタｆｒＡ（ｐｓ１）内の浮動小数点オペランドは、レジスタｆｒＣ（ｐｓ１）の浮動小数点オペランドと乗算される。そして、この中間結果に、レジスタｆｒＢ（ｐｓ１）内の浮動小数点オペランドが加算される。結果有効値の最上位ビットが１ではない場合は、当該結果値は正規化される。そして、結果値は、ＦＰＳＣＲの浮動小数点丸め制御フィールドＲＮの制御によって、単精度に丸められて、ｆｒＤ（ｐｓ１）に入れられる。ＦＰＳＣＲ（ＦＰＲＦ）は、ＦＰＳＣＲ（ＶＥ）＝１であるときの無効な演算の場合を除き、ｐｓ０の結果のクラスと符号とに設定される。
【００５２】
なお、ベクトルおよびスカラ混合命令に関する上記の各例において、命令によって使用しようとする特定のスカラを示すために、２次演算コードが用いられている。しかしながら、この実施態様は一例に過ぎず、マイクロプロセッサ１０がＰｏｗｅｒＰＣマイクロプロセッサに基づいているという理由から、本実施形態においてこのように選ばれたに過ぎない。よって、本例において２次演算コード内にスカラの位置を埋め込むことが用いられている理由は、ＰｏｗｅｒＰＣ内の既存の回路に基づいて本発明を実施するには、そのようにするのがもっとも都合が良かったからである。したがって、本発明の特定の実施態様によっては、スカラ位置を命令に埋め込む方法および位置は変わり得る。言い換えれば、命令を実行するために必要とされるベクトル内のスカラをデコーダが識別できるのであれば、スカラ位置は、適切なフォーマットであれば、命令内においていかなる適切なフォーマットを取ってもよい。
【００５３】
本発明の上記実施例においては、本発明の特定のマイクロプロセッサの実施態様が説明されていたが、本発明は、マイクロプロセッサ環境における使用に限定されるものではない。実際、本発明は、処理されるベクトルの次元に関係なく、マイクロプロセッサからスーパーコンピュータまで、ベクトル処理装置を含むいかなるデータ処理装置にも適用可能である。
【００５４】
図６は、本発明に係る、ベクトルおよびスカラ命令４６の一般的なフォーマットの例である。図６に示すように、この一般的なビットフォーマットは、一次演算コード４８と、第１のソースベクトルレジスタ位置５０と、位置ビット５２と、第２のソースベクトルレジスタ位置５４と、宛先ベクトルレジスタ位置５６とを含む。よって、図６と図１とを比較すると、本発明の主要な利点がわかる。すなわち、本発明の命令フォーマットの例（図６）は、従来の命令フォーマットに必要とされるような、スカラレジスタにスカラ値を持たせる必要がない（図１の要素５参照）。したがって、本発明によれば、ベクトルレジスタをメモリ（またはキャッシュ）に格納したり、格納されたベクトルからスカラ値をスカラレジスタに読み出したりする必要がなくなっている。言い換えれば、図６の改良されたフォーマットを用いれば、ベクトルレジスタに格納されているベクトルのみを用いてスカラおよびベクトル混合演算を行うことができる。この演算は、ベクトルレジスタ内にある所望のスカラの位置を識別するために、位置ビット内の情報を用いることによって行われる。
【００５５】
本発明によれば、ベクトル内における所望のスカラの位置を示すために必要とされるビット数は、対象となるベクトルに特有の次元数に基づく。たとえば、ベクトルの次元数が６４であれば、ベクトル内の特定のスカラに固有の識別子を与えるのに必要なビット数は６ビットである。すなわち、ベクトルの次元数が２n であれば、ベクトル内におけるスカラの位置を示すために必要なビット数は、本発明ではｎビットである。
【００５６】
本発明によれば、ベクトルおよびスカラ混合命令の他のものを用いて、命令のビットに所望のスカラ位置を埋め込んでもよい。たとえば、スカラベクトル乗算命令が用いられてもよい。このような命令において、二次演算コードを含むビット等の命令内のビットは、ｐｓ０またはｐｓ１のいずれがスカラとして用いられるかを示し、たとえばｐｓ＿ｍｕｌｓ０ｘ命令およびｍｕｌｓ１ｘ命令となる。
【００５７】
図８および図９の命令と図６の命令との主な違いは、図８および図９においては、位置ビットが２次演算コード内に基本的に埋め込まれるのに対し、図６のフォーマットにおいては、或る専用ビット５２（Ｎ位置ビット）が用いられて、ベクトル内におけるスカラ位置を識別する点にある。なお、しかしながら、本発明は、このような方法のいずれにも限定されるものではなく、命令内のいかなるビットを用いてベクトル内におけるスカラ位置を識別するように実施されてもよい。言い換えれば、本発明は、位置ビットや命令の特定の位置や形式に関係なく、命令に位置ビットを埋め込むいかなる形式のものも含む。また、本発明は、ベクトル処理ユニットが想定していたデータ型に関わらず、いかなるベクトル処理ユニットにおいて実施されてもよい。たとえば、本発明は、整数ベクトルや浮動小数点ベクトルのために用いられてもよい。
【００５８】
図３のマイクロプロセッサの好ましい実施例によれば、ＣＰＵおよびメモリサブシステム間の効率的なデータ移動のために、或る読み出しおよび格納命令によって、オペランドを単精度浮動小数点型からより低い精度の量子化されたデータ型へ、暗黙的に変換できることが望ましい。これにより、ＰｏｗｅｒＰＣアーキテクチャにおいて規定される浮動小数点読み出しおよび格納命令に加えて、マイクロプロセッサ１０は、オペランドを単精度浮動小数点型からより低い精度の量子化されたデータ型へ、暗黙的に変換することができる８個の新たな命令を含むことが望ましい。
【００５９】
読み出し命令に関しては、この変換は、逆量子化または逆非量子化することであり、符号付きまたは符号なしの８ビットまたは１６ビットの整数を、３２ビットの単精度浮動小数点オペランドに変換する動作である。この変換は、データが浮動小数点レジスタ（ＦＰＲ）に転送されるにしたがい、読み出し／格納ユニット２４において行われる。
【００６０】
格納命令に関しては、変換は、量子化動作であり、単精度浮動小数点数を量子化されたデータ型の１つを有するオペランドに変換する。この変換は、データが浮動小数点レジスタ（ＦＰＲ）に転送されるにしたがい、読み出し／格納ユニット２４において行われる。
【００６１】
データ量子化が適用される読み出しおよび格納命令は単精度対オペランドであり、したがって、ＨＩＤ２（ＰＳＥ）＝１の場合にのみ有効である。ＨＩＤ２（ＰＳＥ）＝０の場合に実行が試みられると、これらの読み出しおよび格納命令は、違反命令例外となる。さらに、これらの読み出しおよび格納にインデックスがなされないような型（ｐｓｑ＿ｌ（ｕ）およびｐｓｑ＿ｓｔ（ｕ））は、ＨＩＤ２（ＬＳＱＥ）＝１でない限り、違反である（図４参照）。
【００６２】
読み出し／格納ユニットの量子化／非量子化ハードウェアは、メモリ内において上位データが先頭のアドレスに来るビッグ・エンディアン（ｂｉｇ−ｅｎｄｉａｎ）とみなす。このような命令を、下位データが先頭のアドレスに来るリトル・エンディアン（ｌｉｔｔｌｅ−ｅｎｄｉａｎ）モードで用いると、結果が定まらないこととなる。単精度対オペランドが変換される度に、同様に変換される。
【００６３】
単精度対モードで動作する場合（ＨＩＤ２（ＰＳＥ）＝１）、単精度浮動点読み出し命令は、１つの単精度オペランドを、ＦＰＲ内のオペランド対の上位ワードおよび下位ワードの両方に読み出す。単精度浮動点格納命令は、ＦＰＲ内のオペランド対の上位ワードのみを格納する。好ましくは、２つの対になった読み出し命令（ｐｓｑ＿１、ｐｓｑ＿ｌｕ）および２つの対になった格納命令（ｐｓｑ＿ｓｔ，ｐｓｑ＿ｓｔｕ）は、様々なＤ型の命令フォーマットを用いる。置換フィールドは、１６ビットの代わりに、１２ビットが用いられ、残りの４ビットは、処理されることになっているオペランドが１つであるか２つであるか（１ビットのＷフィールド）、また、８つのグラフィック量子化レジスタ（ＧＱＲ）のうちのどれを用いて変換のスケールとタイプとを定めるか（３ビットのＩフィールド）を特定するために用いられる。２つの残りの単精度対読み出し命令（ｐｓｑ＿ｌｘ、ｐｓｑ＿ｌｕｘ）および２つの残りの単精度対格納命令は、様々なＸ型の命令フォーマットを用いる。２次演算コードフィールドは、１０ビットの代わりに６ビットが用いられ、残りの４ビットはＷフィールドと、Ｉフィールドのために用いられる。
【００６４】
対の各整数を単精度浮動小数点オペランドに変換するために用いられる量子化アルゴリズムの例は、以下のとおりである。
１．Ｌ１キャッシュから整数オペランドを読み出す。
２．選択されたＧＱＲによって特定された型に応じて、データを符号と絶対値とに変換する。
３．絶対値を、正規化した小数部と指数部とに変換する。
４．選択されたＧＱＲによって特定された倍率を指数部から減算する。
５．変換された値を読み出し先のＦＰＲに読み出す。
【００６５】
メモリ内の整数値Ｉに関して、読み出し先ＦＰＲに読み出された浮動小数点値Ｆは、Ｆ＝Ｉ＊２＊＊（−Ｓ）であり、Ｓは、選択されたＧＱＲのＬＤ＿ＳＣＡＬＥの２の補数である。単精度浮動小数点オペランドについては、Ｌ１キャッシュからの値は、変換されずに直接レジスタに送られる。これは、オペランドが正規でない場合を含む。
【００６６】
対の各単精度浮動点オペランドを整数に変換する際に用いられる量子化アルゴリズムの例は、以下のとおりである。
１．単精度浮動小数点オペランドをＦＰＲから完成格納キューへ移動する。
２．選択されたＧＱＲによって特定された倍率を、指数部に加算する。
３．指数部が０になるまで、小数部とインクリメント／デクリメント指数部とをシフトさせる。
４．符号と絶対値とを２の補数表示に変換する。
５．０に丸めて、選択されたＧＱＲ内で特定された型を得る。
６．オーバーフローした場合、結果値を調整する。
７．変換した値をＬ１キャッシュに格納する。
【００６７】
符号付けされていない整数がオーバーフローにより調整されて得られた値は、８ビット型でも１６ビット型でも、負値は０であり、正値はそれぞれ２５５および６５５３５である。符号付けされていた整数がオーバーフローにより調整されて得られた値は、それぞれ、８ビット型では、負値は−１２８、正値は１２７、１６ビット型では、負値は−３２７６８、正値は３２７６７である。入力オペランドが＋ＩｎｆまたはＮａＮの場合に生成された変換値は、対象となるデータ型の正値がオーバーフローにより調整された値と等しい。入力オペランドが−Ｉｎｆまたの場合に生成された変換値は、負値がオーバーフローにより調整された値と等しい。ＦＰＲ内の単精度浮動点値Ｆに関して、メモリに格納される整数値Ｉは、Ｉ＝ＲＯＵＮＤ（Ｆ＊２＊＊（Ｓ））であり、Ｓは、選択されたＧＱＲのＳＴ＿ＳＣＡＬＥフィールドにおける２の補数値であり、ＲＯＵＮＤは特定のターゲット整数型に適した丸めおよびクランピングを適用する。単精度浮動小数点オペランドについて、ＦＰＲからの値は、変換されずに直接Ｌ１キャッシュに送られる。但し、このオペランドが正規でない場合はこの限りではない。正規でない場合には、値０．０がＬ１キャッシュに格納される。
【００６８】
なお、上記のデータ量子化機能は必須ではなく、本発明に係る一例にすぎない。しかしながら、この機能を用いれば、アプリケーションによっては、マイクロプロセッサ１０の動作を改善することができる。
係る動作を行うことができる。
【００６９】
本発明のさらなる局面によれば、マイクロプロセッサ１０は、特定の命令に関するデコーダおよび実行器と考えられる。よって、本発明の一部は、本発明の上記説明によって規定される新たな命令に関する命令デコーダおよび命令実行器に関連する。しかしながら、本発明は、マイクロプロセッサのようなハードウェアとしてのデコーダまたは実行器に限定されるものではなく、たとえば仮想マシン等によって与えられる、本願のマイクロプロセッサのソフトウェアエミュレータ等、ソフトウェアとしてのデコーダや実行器をも含むものである。言い換えば、本発明は、本明細書中で説明した特定の命令をデコードしたり実行することによって、本願のマイクロプロセッサの動作をエミュレートするソフトウェアエミュレータに関するものでもある。本発明は、さらに、本明細書中で説明した固有の命令すべてまたはいずれをも格納するコンパクトディスクのような記憶媒体に関し、それによって、マイクロプロセッサまたは仮想マシンが、本明細書中に記載された発明に係る動作を行うことができる。
【００７０】
上記の説明からわかるように、本発明は、ベクトル処理環境において、ベクトルおよびスカラ混合演算を高速かつ効率的に処理できるようにするものであり、これによって、オーバヘッドを減少させ、単精度対ユニットやいかなる次元のベクトルをも処理する他のベクトルプロセッサのようなベクトル処理ユニットが上述および同様の命令を実行しうる速度を向上させるものである。なお、本発明は、家庭で使用されるビデオゲームコンソールなどに用いられることを想定して設計されたマイクロプロセッサ等のような、低価格で高性能なマイクロプロセッサにおいて実装されると、特に利点がある。
【００７１】
好ましい形態や実施例を例示および説明してきたが、本実施形態に対して、当業者が本説明から容易に理解できるような数々の変更や修正を、本発明の範囲を逸脱することなく行ってもよい。よって、上記説明は、本明細書で規定された本発明の真の範囲および精神を超えることなく、上記特許請求の範囲を制限するものではない。
【図面の簡単な説明】
【図１】スカラおよびベクトルを用いる算術演算を行うための、従来の命令の形式を示す図である。
【図２】ベクトルレジスタファイルの一例を示す図である。
【図３】本発明を実施するために用いることが可能なマイクロプロセッサおよび外部メモリの例を示す図である。
【図４】ベクトル処理ユニットの単精度対動作および本発明の一実施例に従った図３のマイクロプロセッサの他の付加拡張機能を制御するために用いられるスペシャル・パーパス・レジスタ（ＨＩＤ２）の定義を示す表である。
【図５】図３のマイクロプロセッサの浮動小数点レジスタファイルの図であって、レジスタの浮動小数点フォーマットの２つの例を示す図である。
【図６】本発明に従った、スカラ値をベクトルレジスタから直接得るのに用いられる命令の好ましい実施例を示す図である。
【図７】ベクトルのみを用いた単精度対命令の例を示す図である。
【図８】本発明の好ましい実施例に従った、スカラがベクトルレジスタから直接用いられるようにする単精度対命令の一例を示す図である。
【図９】本発明の好ましい実施例に従った、スカラがベクトルレジスタから直接用いられるようにする単精度対命令の別例を示す図である。
【符号の説明】
２  ベクトルレジスタファイル
３  スカラおよびベクトル混合命令
４  一次読み出し演算コード
５  スカラレジスタアドレス
６  ベクトルレジスタアドレス
７  宛先レジスタアドレス７
１０  マイクロプロセッサ
１２  外部メモリ
１４  アドレスバス
１６  データバス
１８  制御ユニット
２０ａ、２０ｂ  固定小数点ユニット
２２  汎用レジスタ
２４  格納ユニット
２６  浮動小数点レジスタ
２８  浮動小数点ユニット
３０  単精度対ユニット
３２  命令キャッシュ
３４ａ、３４ｂ  データキャッシュ
３６  Ｌ２キャッシュ
３８  Ｌ２タグメモリ
４０  バスインターフェース・ユニット
４２  ６４ビットレジスタ
４４ａ、４４ｂ  ３２ビットレジスタ
４６  ベクトルおよびスカラ命令
４８  一次演算コード
５０  第１のソースベクトルレジスタ位置
５２  位置ビット
５４  第２のソースベクトルレジスタ位置
５６  宛先ベクトルレジスタ位置
【図１】
0004785161.tif 000002
【図２】
0004785161.tif 000003
【図３】
0004785161.tif 000004
【図４】
0004785161.tif 000005
【図５】
0004785161.tif 000006
【図６】
0004785161.tif 000007
【図７】
0004785161.tif 000008
【図８】
0004785161.tif 000009
【図９】
0004785161.tif 000010