(57)【特許請求の範囲】
【請求項１】
データに対して算術演算を実行するための浮動小数点ユニットであって、
データの格納および読出しを行うように構成されたレジスタファイルと、
複数のデータ型フォーマットに対して算術演算を実行するよう構成された第１の乗算累算ユニットと、
複数のデータ型フォーマットに対して算術演算を実行するよう構成された第２の乗算累算ユニットと、
前記レジスタファイルからデータを受取ると共に、そのデータを前記第１の乗算累算ユニットに渡すように構成され、また、前記第１の乗算累算ユニットによって実行された算術演算の結果を前記第１の乗算累算ユニットから受取ると共に、その結果を前記レジスタファイルに渡すようにさらに構成された第１のバイパスコンポーネントと、及び
前記レジスタファイルからデータを受取ると共に、そのデータを前記第２の乗算累算ユニットに渡すように構成され、また、前記第２の乗算累算ユニットによって実行された算術演算の結果を受取ると共に、前記第２の乗算累算ユニットによって実行された前記算術演算の結果を前記レジスタファイルに渡すようにさらに構成された第２のバイパスコンポーネントとを含み、
前記乗算累算ユニットの各々が、６４ビットワードを受取り、
前記第１の乗算累算ユニットが、前記６４ビットワードのうちの演算すべき上位３２ビットを選択し、
前記第２の乗算累算ユニットが、前記６４ビットワードのうちの演算すべき下位３２ビットを選択し、
前記第１と第２の乗算累算ユニットの各々には、前記６４ビットワードのうちのいずれの３２ビット部分が各乗算累算ユニットにより演算されるべきかを決定するために、前記第１と第２の乗算累算ユニットが使用する１つまたは複数のビットが供給される、浮動小数点ユニット。
【請求項２】
前記第１と第２の乗算累算ユニットによって演算され得る第１のデータ型フォーマットが、６４ビット仮数値、１７ビット指数値および１ビット符号値からなる８２ビットワードであり、
前記第１と第２の乗算累算ユニットによって演算され得る第２のデータ型フォーマットが、２つの３２ビットワードからなり、それぞれの３２ビットワードが、２３ビット仮数値、８ビット指数値および１ビット符号値からなる、請求項１の浮動小数点ユニット。
【請求項３】
前記第１の乗算累算ユニットにおいて生成された結果と前記第２の乗算累算ユニットにおいて生成された結果とが、前記バイパスコンポーネントによって合体されることにより、前記レジスタファイルの１つまたは複数のレジスタに格納される６４ビットワードを生成し、
３つのオペランドバスが、前記レジスタファイルから前記第１の乗算累算ユニットに３２ビットワードを移送し、各オペランドバスが、３２ビットオペランドを移送することができ、
３つの３２ビットバスが、前記レジスタファイルから前記第２の乗算累算ユニットにデータを移送し、各３２ビットバスが、前記レジスタファイルから前記第２の乗算累算ユニットに３２ビットオペランドを移送することができ、
３２ビットバスが、前記第１の乗算累算ユニットから前記レジスタファイルに演算結果を移送し、
３２ビットバスが、前記第２の乗算累算ユニットから前記レジスタファイルに演算結果を移送し、
前記３２ビットバスで前記第１および第２の乗算累算ユニットから前記レジスタファイルに移送された前記３２ビットの結果が、合体され、前記レジスタファイルの１つまたは複数のレジスタに６４ビットワードとして格納され、
前記レジスタファイルから前記第１の乗算累算ユニットにデータを移送する３つの３２ビットバスが、前記第１のバイパスコンポーネントに接続されており、
前記レジスタファイルから前記第２の乗算累算ユニットにデータを移送する３つの３２ビットバスが、前記第２のバイパスコンポーネントに接続されており、
前記第１および第２のバイパスコンポーネントに供給される１つまたは複数の制御ビットは、前記第１および第２のバイパスコンポーネントにより、前記レジスタファイルの特定のレジスタに格納されたデータが前記レジスタファイルから前記第１および第２の乗算累算ユニットに移送される時に、そのデータが前記３２ビットオペランドバスに出力されるようにするために使用され、
前記第１および第２のバイパスコンポーネントに受渡される１つまたは複数の制御ビットは、前記第１および第２のバイパスコンポーネントによって、前記第１と第２の乗算累算ユニットから前記レジスタファイルに移送中のデータが前記レジスタファイルの１つまたは複数の特定のレジスタに格納されるようにするために利用され、
前記第１の乗算累算ユニットから前記レジスタファイルに演算結果を移送するバスが前記第１と第２のバイパスコンポーネントに接続され、前記第２の乗算累算ユニットから前記レジスタファイルに演算結果を移送するバスが、前記第１と第２のバイパスコンポーネントに接続され、前記第１の乗算累算ユニットから前記レジスタファイルに演算結果を移送するバスが、前記第１のバイパスコンポーネントから前記レジスタファイルに演算結果を移送することを可能にするように前記第１のバイパスコンポーネントと前記レジスタファイルに接続され、前記第２の乗算累算ユニットから前記レジスタファイルに演算結果を移送するバスが、前記第２のバイパスコンポーネントから前記レジスタファイルに演算結果を移送することを可能にするように前記第２のバイパスコンポーネントと前記レジスタファイルに接続され、
前記第１と第２の乗算累算ユニットの各々が、１つの８２ビット加算器と１つの８２ビット乗算器とを含み、各乗算累算ユニットが内部に構成された前記８２ビット加算器と前記８２ビット乗算器を利用して、前記レジスタファイルから前記第１と第２の乗算累算ユニットに移送される３２ビットオペランドに演算を実行する、請求項２の浮動小数点ユニット。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、浮動小数点ユニットに関し、特に、在来のデータ型フォーマットとＳＩＭＤデータ型フォーマットとに対する演算を実行するために標準ＭＡＣユニットを利用することができる浮動小数点ユニットに関する。
【０００２】
【従来の技術】
プロセッサ速度が向上しデータサイズが増大することにより、浮動小数点ユニットにもたらすことができるデータの量に関して、浮動小数点演算の計算性能に重大な妨げが常時存在する。プロセッサアーキテクチャが６４ビット以上のアーキテクチャに発展することで、より多くのデータロードポート、ひいてはより広いロード帯域幅を利用することによるか、あるいは、６４ビットデータをより小さい複数のデータ片に分割してこれら小さい複数のデータ片に多重演算を実行することによってのみ、この妨げの影響を低減することができる。この後者の技術は、特に、１つの６４ビットの浮動小数点数ほど高い精度を要求しない多くの小さい演算を実行する場合に有用である。なお、この６４ビットの浮動小数点数は、米国電気電子学会（ＩＥＥＥ）の浮動小数点形式規格においてダブルワード（倍長語）と呼ばれる。例えば、一般的なグラフィクス表示演算において、浮動小数点演算は計算集約的であるが、６４ビット数が表すことができる範囲は必要でない。従って、データをより小さいデータ片に分割してこれら小さいデータ片に対して演算を行うという後者の方法は、この種の環境において有利に使用することができる。
【０００３】
この技術を実現するよう設計された周知のアーキテクチャには、一般に単一命令多重データ（ＳＩＭＤ）演算と呼ばれるものを利用するものがある。ＳＩＭＤ命令により、複数のデータに対してまったく同じ演算が同時に、すなわち並列に実行される。１つの大きいレジスタに複数の小さいデータ片を格納すると、複数の小さいレジスタに複数の小さいデータ片を格納するよりも、より効率よくダイの面積を使用することができる。従って、ＳＩＭＤ演算は、通常、単一の大きいレジスタにある複数の小さいデータ片に対して同時に実行される。また、ＳＩＭＤ演算の要件を満たすために、複数の小さいデータ片に対して同時にＳＩＭＤ演算を実行することが必要である。
【０００４】
目下、プロセッサアーキテクチャは、在来のデータ型フォーマットとＳＩＭＤ型データ型フォーマットとの両方をサポートするよう設計されている。在来のデータ型フォーマットは、一般に、ＳＩＭＤデータ型フォーマットよりビットサイズが大きい。これら両タイプの演算をサポートする手段として、これらアーキテクチャにおいて、在来のデータ型フォーマットおよびＳＩＭＤデータ型フォーマットを処理するために、ＳＩＭＤ機能ユニットおよび標準機能ユニットが実装されている。これら機能ユニットのうちの１つのタイプは、一般に乗算累算（ＭＡＣ）ブロックと呼ばれているが、それら機能ユニットは、供給されるデータに対し例えば加算、減算および乗算等のあらゆる種類の算術機能を実行する。ＳＩＭＤ演算を処理するために専用のＭＡＣを利用する主な理由は、これら専用のＭＡＣが２つのＳＩＭＤ演算を同時に実行することができる、ということである。しかしながら、浮動小数点ユニットにこれら専用のＳＩＭＤ用ＭＡＣを実装することは、ＳＩＭＤ用ＭＡＣによって消費される追加のダイの面積の量という点でコストがかかる。更に、一般にＳＩＭＤ演算は、浮動小数点ユニットが実行するすべての演算のおよそ５％未満に相当するにすぎないため、処理スループットに対するダイの面積の妥協は高くつくことになる。
【０００５】
【発明が解決しようとする課題】
従って、複数のデータ型フォーマットに対して演算することができ、且つ異なるデータ型フォーマットの各々について専用のハードウェアを必要としない浮動小数点ユニットが必要とされている。
【０００６】
【課題を解決するための手段】
本発明は、浮動小数点演算を実行するための方法および装置を提供する。本発明の装置は、複数のデータ型フォーマットに対して乗算累算演算を実行することができる２つの標準乗算累算ユニット（ＭＡＣ）を含む浮動小数点ユニットを含む。この標準ＭＡＣは、在来のデータ型フォーマットと単一命令多重データ（ＳＩＭＤ）型フォーマットとに対して演算するように構成されている。従って、専用のＳＩＭＤ用ＭＡＣユニットが必要でないため、ダイの面積の大幅な節約を実現することができる。
【０００７】
本発明によれば、ＳＩＭＤ命令に対しＭＡＣユニットの１つによって演算が行われる時、データは、６４ビットワードとして上位および下位のＭＡＣユニットに対して与えられる。また、各ＭＡＣユニットは、１つまたは複数のビットを受取る。そのビットは、ＭＡＣユニットの各々に対し、各ＭＡＣユニットに応じて６４ビットワードの上位半分または下位半分のいずれかを選択させるものである。例えば、下位３２ビットワードは、上位ＭＡＣユニットによって処理され、上位３２ビットワードは、下位ＭＡＣユニットによって処理される。
【０００８】
各ＭＡＣユニットは、各々の３２ビットワードに対して演算を行う。そして、ＭＡＣユニットが実行した演算の結果は、浮動小数点ユニットのバイパスブロックによって合体されて６４ビットワードになる。これらの結果は、その結果が専用のＳＩＭＤハードウェアを利用する浮動小数点ユニットにおいて得られる結果とまったく同じに見えるように合体される。
【０００９】
本発明のこれらのおよび他の特長と利点とは、以下の説明、図面および特許請求の範囲から明らかとなろう。
【００１０】
【発明の実施の形態】
図１は、在来のデータ型フォーマットとＳＩＭＤデータ型フォーマットとに対して演算を行うことができる浮動小数点ユニット１の機能ブロック図である。この浮動小数点ユニット１は、２つのＳＩＭＤ用ＭＡＣユニット３、４と、２つの標準ＭＡＣユニット６、７と、２つのバイパスブロック８、９と、レジスタファイルブロック１１と、を含む。標準ＭＡＣユニット６、７は、在来のデータ型フォーマットに対して浮動小数点演算を実行する。ＳＩＭＤ用ＭＡＣユニット３、４は、ＳＩＭＤデータ型フォーマットに対して算術演算を実行する。従って、図１に示す浮動小数点ユニット１は、ＳＩＭＤ演算を実行する専用のＳＩＭＤ用ＭＡＣユニット３、４と、標準、すなわち在来のデータ型フォーマットに対する演算を実行する標準ＭＡＣユニット６、７と、を有している。これら２つのデータ型フォーマットが、図３に示されている。演算が行われる一般的なデータ型フォーマット１５は、６４ビットの仮数値、１７ビットの指数値および１ビットの符号値を含む。対照的に、ＳＩＭＤデータ型フォーマット１６は、２つの２３ビット仮数値、２つの８ビット指数値（すなわち、各仮数値に１つが関連付けられている）および２つの符号ビット（すなわち、各仮数値およびその指数値に１ビットが関連付けられている）を含む。ＳＩＭＤデータ型フォーマットは、本技術分野において周知であり、浮動小数点演算に対するＩＥＥＥ規格において文書化されている。これらデータ型フォーマットに対して演算が実行される方法もまた、本技術分野において周知である。従って、本明細書では、簡潔にするために、これら浮動小数点データ型演算について詳述しない。
【００１１】
図１に示す浮動小数点ユニット１において、標準ＭＡＣユニット６、７の各々は、乗算累算演算を実行することができる。図３に示す一般的なデータ型フォーマット１５に対して乗算累算演算が実行される場合、オペランドＡ、Ｂ、Ｃは、バイパスブロック８、９に受渡される。浮動小数点ユニット１が２つの標準ＭＡＣユニット６、７を含むため、２つの乗算累算演算を同時に実行することができる（すなわち、標準ＭＡＣユニット６において一方の乗算累算演算が実行され、標準ＭＡＣユニット７において他方の乗算累算演算が実行される。）
【００１２】
標準ＭＡＣユニット６、７は、各々、１つの８２ビット加算器と１つの８２ビット乗算器とを含む。演算されるオペランドは、プロセッサアーキテクチャによって構成された命令デコーダ（図示せず）からレジスタファイルブロック１１によって受取られる。命令デコーダは、それらオペランドと共に制御ビットをレジスタファイルブロック１１に供給し、これら制御ビットは、ＭＡＣユニットによってオペランドに対して実行される算術演算、例えば加算、減算、乗算等の種類を決定するために使用される。レジスタファイルブロック１１は、自身が受取るオペランドが格納される複数のレジスタを含む。
【００１３】
レジスタファイルブロック１１によって受取られる制御ビットは、オペランドの読出しおよび書込みのためにレジスタファイルブロック１１のいずれのレジスタが使用されるべきかを示す。バイパスブロック８、９の各々は、オペランドの１つのセットを処理する。バイパスブロック８、９はまた、それらに供給される制御ビットを利用して、浮動小数点ユニット１の特定の宛先にいずれのレジスタの内容を経路指定すべきかを決定する。バイパスブロック８、９は、プロセッサアーキテクチャの技術分野において周知の機能を実行する。従って、本明細書では、バイパスブロック８、９が実行する機能について詳述しない。
【００１４】
オペランドがレジスタファイルブロック１１の適切なレジスタにロードされた後、レジスタファイルブロック１１は、適切なレジスタからオペランドを読み出し、レジスタファイルブロック１１からバイパスブロック８に向けられたライン２０、２１、２２上の矢印によって示されるように、それらを適切なバイパスブロックに経路指定する。ライン２０、２１、２２は、浮動小数点ユニット１内に構成されたバスに対応し、ライン２０、２１、２２の各々は、マルチビットオペランドＡ、Ｂ、Ｃの移送に必要な複数のラインに対応している。図１の円は、それらが位置するブロックへのバス入力を示すことが意図されている。レジスタファイルブロック１１は、レジスタファイルブロック１１の適切なレジスタからオペランドＡ、Ｂ、Ｃの第２のセットを読出し、バイパスブロック９は、ライン２４、２５、２６上の矢印によって示されるように、それらを適切なＭＡＣユニットに経路指定する。これらラインもまた、複数のバスラインを表している。
【００１５】
バイパスブロック８は、レジスタファイルブロック１１から読出されたそのオペランドのセットを、バス入力２８、２９、３０を介して標準ＭＡＣユニット６に、またはバス入力３２、３３、３４を介してＳＩＭＤ用ＭＡＣユニット４に受渡す。同様に、バイパスブロック９は、そのオペランドのセットを、バス入力３６、３７、３８を介して標準ＭＡＣユニット７に、またはバス入力４１、４２、４３を介してＳＩＭＤ用ＭＡＣユニット３に受渡す。
【００１６】
図３に示すデータ型フォーマット１５の場合、バイパスブロック８、９は、各々標準ＭＡＣユニット６、７にオペランドを供給する。一旦標準ＭＡＣユニット６、７が各々の算術演算を実行すると、その結果は、標準ＭＡＣユニット６、７によってバイパスブロック８、９に受渡される。バイパスブロック８、９は、その算術演算の結果をバス５１、５２を介してレジスタファイルブロック１１に渡し、レジスタファイルブロック１１は、その結果をレジスタファイルブロック１１の１つまたは複数のレジスタに格納する。
【００１７】
浮動小数点ユニット１により演算が実行される時はいつでも、レジスタファイルブロック１１が受取る制御ビットは、いったん演算が実行されると関連する演算の結果がいずれのレジスタに格納されるべきかを示す。また、バイパスブロック８、９は、制御ビットを受取り、その制御ビットを利用して、演算の結果を格納すべきレジスタを決定する。
【００１８】
ＳＩＭＤ用ＭＡＣユニット３、４の各々は、２つの３２ビット加算器および２つの３２ビット乗算器を含む。各ＳＩＭＤ用ＭＡＣユニット３、４は、命令デコーダによって示される算術演算を実行するために３つのオペランドＡ、Ｂ、Ｃを処理することができる。ＳＩＭＤ用ＭＡＣユニット３、４および標準ＭＡＣユニット６、７が図３に示すデータ型フォーマット１５、１６に対して演算を行う態様は、当業者には周知である。従って、本明細書では、これらのユニットがそれらの乗算累算演算（すなわち、Ａ＋Ｂ×Ｃ）を実行する態様について詳述しない。
【００１９】
浮動小数点ユニット１は在来のデータ型フォーマットとＳＩＭＤデータ型フォーマットとを処理することができるが、ＳＩＭＤ用ＭＡＣユニット３、４を実装することはそれらの実装に必要なダイの面積の量という点でコストがかかる。更に、ＳＩＭＤ演算はめったに実行されず、標準ＭＡＣ６、７によって在来のデータ型フォーマットが処理されている時はいつでもＳＩＭＤ用ＭＡＣユニット３、４は休止状態である。同様に、ＳＩＭＤ用ＭＡＣユニット３、４によってＳＩＭＤ演算が実行されている時はいつでも、標準ＭＡＣユニット６、７は休止状態である。従って、ＳＩＭＤ用ＭＡＣユニット３、４および標準ＭＡＣユニット６、７は、すべての演算のために利用されない場合であっても、比較的大きい量のダイの面積を消費する。
【００２０】
本発明によれば、ＳＩＭＤデータ型フォーマットに対して実行される演算を含むすべての算術演算を実行するために標準ＭＡＣユニット５１、５２を利用する浮動小数点ユニット５０（図２）が提供される。従って、図１に示す専用のＳＩＭＤ用ＭＡＣユニット３、４の必要が無くなり、浮動小数点ユニット５０に必要なダイの面積の量を大幅に節約することができる。標準ＭＡＣユニット５１、５２は、好ましくは図１に示す標準ＭＡＣユニット６、７と非常に類似している。従って、標準ＭＡＣユニット５１、５２は、好ましくは各々１つの８２ビット加算器と１つの８２ビット乗算器（図示せず）を含む。しかしながら、標準ＭＡＣユニット５１、５２は各々、後に詳述するように、特定のビットを受取り、このビットを利用して６４ビットワードの適切な半分を選択するよう構成されている。
【００２１】
浮動小数点ユニット５０が在来のデータ型フォーマット１５を処理する場合、標準ＭＡＣユニット５１、５２は、それらの通常の演算を実行する。一方、浮動小数点ユニット５０がＳＩＭＤデータ型フォーマット１６を処理する場合、ＳＩＭＤビットフィールドが２つの３２ビットワードに分割され、そのＳＩＭＤワードの下位３２ビットは、標準ＭＡＣユニット５１によって処理され、ＳＩＭＤワードの上位３２ビットは、標準ＭＡＣユニット５２によって処理される。６４ビットワード全体が標準ＭＡＣユニット５１、５２の両方に供給されるが、標準ＭＡＣユニット５１、５２が受取る上述したビットにより、標準ＭＡＣユニット５１、５２は適切な３２ビットワードを選択する。そして、標準ＭＡＣユニット５１、５２は、これら３２ビットワードに対して各々の演算を実行する。
【００２２】
上述したように、標準ＭＡＣユニット５１、５２は、通常、８２ビットワードを処理する。ＳＩＭＤワードを処理する場合、標準ＭＡＣユニット５１、５２は下位６４ビットのみを使用する。上位１８ビットは定数値にセットされ概して無視される。標準ＭＡＣユニット５１、５２が６４ビットＳＩＭＤワードの各部分を処理すると、バイパスブロック５４、５５は３２ビットの結果を合体させて６４ビットのＳＩＭＤ結果とする。バイパスブロック５４、５５は、下位および上位の３２ビットワードを各々レジスタファイルブロック５６に書込む。この書込みは、レジスタファイルブロック５６に書込まれた６４ビット結果が、図１に示すＳＩＭＤ用ＭＡＣユニット３または４等のＳＩＭＤ用ＭＡＣユニットによって処理された場合と同様の結果となるような態様で、レジスタファイルブロック５６の隣接するビットフィールドにビットを書込むことによって行われる。
【００２３】
図２の浮動小数点ユニット５０内に示すラインは、図１においてそれらがバスを示すために使用されたのと同様に使用されている。矢印は、データの流れの方向を示すために使用されており、円はバス入力を示すために使用されている。６１、６２、６３で示されるラインは、ＳＩＭＤワードの下位３２ビットを表している。従って、ＳＩＭＤモードにおいて、バス６１、６２、６３の各々は、３２ビットのオペランド（すなわち、Ａ、Ｂ、Ｃ）を移送する。ＳＩＭＤワードが浮動小数点ユニット５０に受渡されると、レジスタファイルブロック５６が、受取った制御ビットに従ってＳＩＭＤビットをレジスタファイルブロック５６の適切なレジスタにロードする。バイパスブロック５４は、ＳＩＭＤワードの下位３２ビット部分を選択して、その３２ビットワードをバス６１、６２、６３を介してレジスタファイルブロック５６から標準ＭＡＣユニット５１に経路指定する。同時に、バイパスブロック５５は、バスライン６５、６６、６７を介してＳＩＭＤワードの上位３２ビット部分を標準ＭＡＣユニット５２に経路指定する。
【００２４】
標準ＭＡＣユニット５１および標準ＭＡＣユニット５２は、ＳＩＭＤワードの各部分に対し同時に乗算累算演算を実行する。ＳＩＭＤモードにおいて、標準ＭＡＣユニット５１、５２は共に、３２ビットの結果を生成し、それらは各々バスライン７１、７２を介してバイパスブロック５４、５５に経路指定される。そして、その結果はバイパスブロック５４、５５によって合体されて６４ビットのＳＩＭＤ結果となり、レジスタファイルブロック５６の適切なレジスタに書込まれる。
【００２５】
なお、図１に示す浮動小数点ユニット１は、２つのＳＩＭＤ演算を同時に実行することによって、２つずつペアになった４つのＳＩＭＤ結果を生成することができる。図２に示す浮動小数点ユニット５０では、一度に１つのＳＩＭＤ演算しか実行することができない。従って、ＳＩＭＤ演算の性能に関して、概して図２に示す浮動小数点ユニット５０のスループットは、図１に示す浮動小数点ユニット１のスループットの半分となる。ＳＩＭＤ演算が頻繁に実行された場合、浮動小数点ユニット５０の全スループットが浮動小数点ユニット１の全スループットよりかなり低下する。しかしながら、一般にＳＩＭＤ演算は、浮動小数点ユニットによって実行される全演算の５％未満しか相当しない。従って、標準ＭＡＣユニット５１、５２におけるＳＩＭＤ演算の性能に起因する浮動小数点ユニット５０のスループットの低下は、大して重要ではない。
【００２６】
更に、浮動小数点ユニット１と比較した浮動小数点ユニット５０のスループットの低下は、図１に示す専用のＳＩＭＤ用ＭＡＣユニット３、４を取除いた結果として実現されるダイの面積の大幅な節約という点で、正当であると考えられる。更に、浮動小数点ユニット５０は、図４および図５に関して後に詳述するように、ＳＩＭＤ用ＭＡＣユニット３、４の除去に起因するスループットの低下の影響を更に低減するよう設計されている。
【００２７】
図４は、キャッシュメモリコンポーネント８１から浮動小数点ユニット５０への命令およびデータのロードと、浮動小数点ユニット５０からのデータの格納およびキャッシュメモリコンポーネント８１へのデータの格納を制御するプロセッサアーキテクチャの回路８０を示している。回路８０は、キャッシュメモリコンポーネント８１からのデータの検索およびキャッシュメモリコンポーネント８１へのデータの格納と、浮動小数点ユニット５０へのデータのロードおよび浮動小数点ユニット５０からのデータの検索と、を制御する命令デコーダ８３を含む。回路８０は、メモリコンポーネント８５と通信するが、このメモリコンポーネント８５は、好ましくはオフチップであって、キャッシュメモリコンポーネント８１に存在していない命令およびデータを格納する。当業者には、メモリコンポーネント８５をオンチップメモリコンポーネントとすることができる、ということが理解されよう。しかしながら、メモリコンポーネント８５をオンチップで実装することは、ダイの面積という点では費用がかかる。従って、好ましくは、オフチップコンポーネントとして実装される。
【００２８】
回路８０の外部にあるコンパイラ８７は、キャッシュメモリコンポーネント８１にいずれの命令およびデータを存在させるか、および、いずれをメモリエレメント（メモリコンポーネント）８５に存在させるか、を制御する。当業者により理解されるように、コンパイラ８７は一般に、例えばコードの再順序付け（code reordering）等の各種最適化技術を利用することによりプログラム実行を最適化するソフトウェアコンポーネントである。コンパイラ８７は、これら最適化技術を利用し、特定のコードおよびデータをメモリエレメント８５からキャッシュメモリコンポーネント８１へ、およびその逆に移動させる。
【００２９】
命令デコーダ８３は、キャッシュメモリコンポーネント８１から命令およびデータを読出し、そのデータに対して実行される演算の種類を決定する。そして、命令デコーダ８３は、そのデータが、浮動小数点ユニット５０のレジスタファイルブロック５６の適切なレジスタにロードされるようにする。命令デコーダ８３は、浮動小数点ユニット５０に、データが格納されるレジスタとそれらレジスタに格納されたデータが処理される態様とをレジスタファイルブロック５６に対して命令する制御ビットを供給する。命令デコーダ８３により、浮動小数点ユニット５０は処理された後のデータを格納すると共に、メモリエレメント８５またはキャッシュメモリコンポーネント８１のいずれかにそれを供給する。命令デコーダ８３は、コンパイラ８７からの情報を利用して、メモリエレメント８５またはキャッシュコンポーネント８１のいずれにデータを格納すべきかを決定する。
【００３０】
図５は、命令デコーダ８３がＳＩＭＤ命令をデコードする時点から、合体した６４ビットＳＩＭＤ結果がレジスタファイルブロック５６のレジスタに書戻された時点までの、ＳＩＭＤ演算の実行の高レベルタイミング図を示している。なお、時間間隔Ｔ０〜Ｔ７は、このプロセッサアーキテクチャで発生する周期を必ずしも表しているものではなく、単に、互いに対する様々なタスクの実行の相対的なタイミングを説明することを意図したものである。浮動小数点ユニット５０および命令デコーダ８３は、演算が実行される速度を最大化するように設計されている。
【００３１】
ＳＩＭＤ演算は、命令デコーダ８３がキャッシュメモリコンポーネント８１から読出された命令をデコードし、レジスタファイルブロック５６のいずれのレジスタがＳＩＭＤ演算のオペランドとして使用されるかを決定した時に開始する。このステップは、図５のタイミング図におけるブロック９１によって示されている。このデコードステップは、ブロック９１で表されており、時間Ｔ０〜Ｔ１の第１のユニットにおいて発生する。第２の時間Ｔ１〜Ｔ２において、命令デコーダ８３により、ＳＩＭＤワードのオペランドがレジスタファイルブロック５６の適切なレジスタからダンプされる。このオペランドダンプステップは、ブロック９２によって表されている。
【００３２】
時間Ｔ２〜Ｔ３の間、ＳＩＭＤワードは下位部分と上位部分とに分割され、その下位部分および上位部分は、それぞれバイパスブロック５４、５５によって標準ＭＡＣユニット５１、５２に供給され、標準ＭＡＣユニット５１、５２において算術演算が実行される。この一連のステップは、ブロック９３によって表されている。時間Ｔ４〜Ｔ５の間、ＳＩＭＤ結果（バス７１、７２（図２））は、標準ＭＡＣユニット５１、５２によってバイパスブロック５４、５５に渡される。時間Ｔ５〜Ｔ６の間、結果（バス７１、７２）は、バイパスブロック５４、５５において合体されて単一の６４ビットのＳＩＭＤ結果となり、この６４ビットのＳＩＭＤ結果は、レジスタファイルブロック５６の適切なレジスタに書込まれる。
【００３３】
上述したように、場合によっては、浮動小数点ユニット５０は、後続する演算の実行を開始することができる前に、演算の結果がレジスタファイルブロック５６の適切なレジスタに書戻されるのを待たなければならない。例えば、浮動小数点ユニット５０によって実行される第１の演算において、オペランドＡ、Ｂ、ＣがレジスタＲ４、Ｒ６、Ｒ８にそれぞれ格納され、演算の結果がレジスタＲ１１に格納される。第２の演算は、演算を実行するためにレジスタＲ１１、Ｒ１４、Ｒ１９の内容を利用しなければならず、その結果はレジスタＲ６０に格納されることとなる。この場合、浮動小数点ユニット５０は、第２の演算の実行を開始することができる前に、第１の演算の結果がレジスタＲ１１に書込まれるまで待たなければならない。それは、第２の演算においてレジスタＲ１１の内容を利用しなければならないことによる。
【００３４】
逆に、浮動小数点ユニット５０は、次の演算の実行前に先行する演算の結果を待つ必要がない場合、標準ＭＡＣユニット５１、５２がパイプライン設計を採用しているため、時間Ｔ１までには第２の演算を開始することができる。
【００３５】
先行する演算の結果がレジスタファイルブロック５６に書戻されると、第２の演算のデコードステップ９６を開始することができる。従って、先行する演算において書戻しステップ９５が発生する前にデコードステップ９６を開始することができる。第２の演算のオペランドダンプステップ９７は、先行する演算の書戻しステップ９５中に発生し、それによって、ブロック９８の処理ステップに対して先行する演算の結果と次の演算のオペランドとを同時に得ることができる。
【００３６】
命令デコーダ８３は、これらのタイプの演算の依存性を追跡し、浮動小数点ユニット５０によって実行される演算のデータの完全性を保持しながら、浮動小数点ユニット５０のスループットが最大化されるように、適切な時間に命令を送出する。従って、浮動小数点ユニット５０は、専用のＳＩＭＤ用ＭＡＣユニットを利用しないことにより性能の犠牲を被るが、この性能の犠牲の重要度は、浮動小数点ユニット５０の実装に必要なダイの面積の量という点の大幅な節約を実現する場合最小である。
【００３７】
当業者には、本発明が好ましい実施態様に関連して説明されており、本発明がこの実施態様に限定されない、ということが理解されよう。また、当業者には、上述した実施態様に対し、修正を行うことが可能であり、これが本発明の範囲内にあるということも理解されよう。更に、当業者には、ハードウェアにおいてのみ実施されているように説明された本発明のいくつかのコンポーネントが、ハードウェア、ソフトウェアまたはハードウェアとソフトウェアの組合せにおいて実施され得る、ということが理解されよう。また、当業者には、本発明が特定のデータ型フォーマットおよびビットワード長に関して説明されたが、いかなる特定のデータ型フォーマットまたはビットワード長に限定されるものではなく、本発明の概念があらゆるデータ型フォーマットおよびビットワード長に適用が可能であるということが理解されよう。
【００３８】
以下においては、本発明の種々の構成要件の組み合わせからなる例示的な実施態様を示す。
１．データに対して算術演算を実行するための浮動小数点ユニット（５０）であって、
複数のレジスタを含み、それらのレジスタにデータの格納およびそれらのレジスタからデータの読出しを行うことができるレジスタファイル（５６）と、
複数のデータ型フォーマット（１５、１６）に対して算術演算を実行するよう構成された第１の乗算累算ユニット（５１）と、
複数のデータ型フォーマット（１５、１６）に対して算術演算を実行するよう構成された第２の乗算累算ユニット（５２）と、
第１の乗算累算ユニット（５１）およびレジスタファイル（５６）に電気的に結合され、レジスタファイル（５６）のレジスタから読出されたデータを受取ると共に、その読出されたデータを第１の乗算累算ユニット（５１）に渡すよう構成され、また、第１の乗算累算ユニット（５１）から第１の乗算累算ユニット（５１）によって実行された算術演算の結果を受取ると共に、その結果を第１の乗算累算ユニット（５１）からレジスタファイル（５６）に渡すよう構成される第１のバイパスコンポーネント（５４）であって、前記結果がレジスタファイル（５６）の１つまたは複数のレジスタに格納される、第１のバイパスコンポーネント（５４）と、及び
レジスタファイル（５６）の１つまたは複数のレジスタから読出されたデータを受取ると共に、その受取ったデータをレジスタファイル（５６）から第２の乗算累算ユニット（５２）に渡すよう構成され、第２の乗算累算ユニット（５２）によって実行された算術演算の結果を受取ると共に、第２の乗算累算ユニット（５２）によって実行された前記算術演算の結果をレジスタファイル（５６）に渡すよう構成される第２のバイパスコンポーネント（５５）であって、第２の乗算累算ユニット（５２）によって実行された前記演算の結果がレジスタファイル（５６）の１つまたは複数のレジスタに格納される、第２のバイパスコンポーネント（５５）とを含む、装置。
２．乗算累算ユニット（５１、５２）が演算できる第１のデータ型フォーマット（１５）は、６４ビット仮数値、１７ビット指数値および１ビット符号値からなる８２ビットワードであり、
前記乗算累算ユニットが演算できる第２のデータ型フォーマット（１６）は、２つの３２ビットワードからなり、それぞれの３２ビットワードは、２３ビット仮数値、８ビット指数値および１ビット符号値からなる、上記１記載の装置。
３．第２のデータ型フォーマット（１６）に従ってフォーマットされた６４ビットワードに対して演算される場合に、その６４ビットワードの上位３２ビットに対しては、第１の乗算累算ユニット（５１）によって演算され、また、その６４ビットワードの下位３２ビットに対しては、第２の乗算累算ユニット（５２）によって演算され、各乗算累算ユニットは、３２ビットの結果を生成し、
第１の乗算累算ユニット（５１）において生成された結果と第２の乗算累算ユニット（５２）において生成された結果とが、レジスタファイル（５６）において前記バイパスコンポーネントによって合体されることにより、レジスタファイル（５６）の１つまたは複数のレジスタに格納される６４ビットワードを生成する、上記２記載の装置。
４．乗算累算ユニット（５１、５２）の各々は、６４ビットワードを受取り、
第１の乗算累算ユニット（５１）は、前記６４ビットワードのうちの演算すべき上位３２ビットを選択し、
第２の乗算累算ユニット（５２）は、前記６４ビットワードのうちの演算すべき下位３２ビットを選択し、
前記乗算累算ユニットの各々に、前記６４ビットワードのうちのいずれの３２ビット部分が各乗算累算ユニットより演算されるべきかを決定するために、それら乗算累算ユニットが使用する１つまたは複数のビットが供給される、上記３記載の装置。
５．３つのオペランドバス（６１、６２、６３）が、レジスタファイル（５６）から第１の乗算累算ユニットに３２ビットワードを移送し、各オペランドバス（６１、６２、６３）が、３２ビットオペランドを移送することができ、
３つの３２ビットバス（６５、６６、６７）が、レジスタファイル（５６）から前記第２の乗算累算ユニットにデータを移送し、各バス（６５、６６、６７）が、レジスタファイル（５６）から前記第２の乗算累算ユニットに３２ビットオペランドを移送することができ、
３２ビットバス（７１、７３）が、第１の乗算累算ユニット（５１）からレジスタファイル（５６）に演算結果を移送し、
３２ビットバスが、第２の乗算累算ユニット（５２）からレジスタファイル（５６）に演算結果を移送し、
前記３２ビットバスで前記第１および第２の乗算累算ユニットからレジスタファイル（５６）に移送された前記３２ビットの結果が、合体され、レジスタファイル（５６）の１つまたは複数のレジスタに６４ビットワードとして格納される、上記４記載の装置。
６．レジスタファイル（５６）から第１の乗算累算ユニット（５１）にデータを移送する３つの３２ビットオペランドバス（６１、６２、６３）は、第１のバイパスコンポーネント（５４）に接続されており、
レジスタファイル（５６）から第２の乗算累算ユニット（５２）にデータを移送する３つの３２ビットバス（６５、６６、６７）は、第２のバイパスコンポーネント（５５）に接続されており、
第１および第２のバイパスコンポーネント（５４、５５）に供給される１つまたは複数の制御ビットは、前記第１および第２のバイパスコンポーネントにより、レジスタファイル（５６）の特定のレジスタに格納されたデータがレジスタファイル（５６）から第１および第２の乗算累算ユニット（５１、５２）に移送される時に、そのデータが前記３２ビットオペランドバスに出力されるようにするために使用され、
第１および第２のバイパスコンポーネント（５４、５５）に受渡される１つまたは複数の制御ビットが、第１および第２のバイパスコンポーネント（５４、５５）によって、乗算累算ユニット（５１、５２）からレジスタファイル（５６）に移送中のデータがレジスタファイル（５６）の１つまたは複数の特定のレジスタに格納されるようにするために利用される、上記５記載の装置。
７．第１および第２の乗算累算ユニットを含む浮動小数点ユニット（５０）において、単一命令多重データ（ＳＩＭＤ）に対して算術演算を実行するための方法であって、
予め決められた数のビットからなる複数のワードを、第１および第２の乗算累算ユニット（５１、５２）に供給するステップであって、そのワードの各々が、オペランドに対応する、ステップと、
第１の乗算累算ユニット（５１）において、前記ワードの各々の特定の部分を選択するステップと、
第２の乗算累算ユニット（５２）において、第１の乗算累算ユニット（５１）によって選択されたワードの部分とは異なる前記ワードの各々の特定の部分を選択するステップと、
第１の乗算累算ユニット（５１）において、第１の乗算累算ユニット（５１）によって選択された前記ワードの部分に対して乗算累算演算を実行するステップと、
第２の乗算累算ユニット（５２）において、第２の乗算累算ユニット（５２）によって選択された前記ワードの部分に対して乗算累算演算を実行するステップと、
第１および第２の乗算累算ユニット（５１、５２）において実行された前記演算の結果を合体して単一のＳＩＭＤ結果のワードにするステップと、
を含む、方法。
８．第１および第２の乗算累算ユニット（５１、５２）に供給される前記ワードの各々は、６４ビットワードであり、それぞれの６４ビットワードは２つの３２ビットワードからなり、それぞれの３２ビットワードは、２３ビット仮数値、８ビット指数値および１ビット符号値からなり、
第１の乗算累算ユニット（５１）は、前記６４ビットワードの上位３２ビットワードを選択し、
第２の乗算累算ユニット（５２）は、前記６４ビットワードの下位３２ビットワードを選択し、
第１および第２の乗算累算ユニット（５１、５２）によって実行された演算の結果は、合体されて６４ビットワードとなり、その合体された６４ビットワードはそれぞれ、２つの３２ビットワードからなり、それぞれの３２ビットワードは、２３ビット仮数値、８ビット指数値および１ビット符合値からなる、上記７記載の方法。
９．乗算累算ユニット（５１、５２）の各々は、１つの８２ビット加算器と１つの８２ビット乗算器とを含み、
各乗算累算ユニット（５１、５２）は、その内部に含められた前記８２ビット加算器と前記８２ビット乗算器とを利用して前記３２ビットワードに対する演算を実行する、上記８記載の方法。
１０．各乗算累算ユニット（５１、５２）は、Ａ＋Ｂ×Ｃで定義される算術演算を実行し、Ａ、Ｂ、Ｃは各々、乗算累算ユニット（５１、５２）によって演算される３２ビットオペランドの１つに対応しており、
前記乗算累算ユニットに含められた前記乗算器は、前記オペランドＢおよびＣに対して演算し、
前記乗算累算ユニットに含められた前記加算器は、前記オペランドＡと前記乗算器からの結果とに対して演算することにより、後に合体される結果を生成し、その合体された結果を、浮動小数点ユニット（５０）のレジスタファイル（５６）の１つまたは複数のレジスタに格納する、上記９記載の方法。
【００３９】
【発明の効果】
本発明により、複数のデータ型フォーマットに対して演算することができ、且つ異なるデータ型フォーマットの各々について専用のハードウェアを必要としない浮動小数点ユニットが提供される。
【図面の簡単な説明】
【図１】ＳＩＭＤ演算を実行するための２つの専用のＳＩＭＤ用ＭＡＣユニットを利用する浮動小数点ユニットの機能ブロック図である。
【図２】ＳＩＭＤ演算を実行するために専用のＳＩＭＤ用ＭＡＣユニットを利用しないが、浮動小数点ユニットが実行する必要のあるＳＩＭＤ演算を含むすべての演算を実行するために標準ＭＡＣユニットを利用する、本発明の浮動小数点ユニットの機能ブロック図である。
【図３】図２に示す本発明の浮動小数点ユニットによって演算を行うことができる２つの異なるデータ型フォーマットのビットフィールドを示す。
【図４】浮動小数点ユニットを含む本発明のプロセッサアーキテクチャの一部の機能ブロック図であり、浮動小数点ユニットとプロセッサアーキテクチャの他のコンポーネントとの間の相互作用を説明するために使用される。
【図５】図２の浮動小数点ユニットにおいて発生するいくつかの演算のタイミングを示すタイミング図である。
【符号の説明】
15  データ型フォーマット
16  ＳＩＭＤデータ型フォーマット
50  浮動小数点ユニット
51，52  標準ＭＡＣユニット
54，55  バイパスユニット
56  レジスタファイルブロック
61−63，65−67，71−74  バス
【図１】
0003683773.tif 000002
【図２】
0003683773.tif 000003
【図３】
0003683773.tif 000004
【図４】
0003683773.tif 000005
【図５】
0003683773.tif 000006