(57)【要約】  説明する方法は、機能部が第１の命令を実行するステップを有する。第１の命令はmultiply-add命令である。この方法はさらに機能部が第２の命令を実行するステップを含む。第２の命令はround命令である。
2013543176.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
multiply-add命令をサポートする指数差分計算ロジック、乗算器、及び加算器を有する機能部を有し、
前記機能部は、仮数値を何桁丸めるか指定するround命令をサポートするラウンダも有し、
前記指数差分計算ロジックは前記multiply-add命令と前記round命令の実行をサポートするシフタを有する、
プロセッサ。
【請求項２】
前記シフタは前記機能部により実行されるscale命令もサポートする、
請求項１に記載のプロセッサ。
【請求項３】
前記指数差分計算ロジックは、前記multiply-add命令の実行をサポートする第２のシフタを含み、
前記第２のシフタは前記機能部により実行されるget  exponent命令もサポートする、
請求項２に記載のプロセッサ。
【請求項４】
前記指数差分計算ロジックは、前記multiply-add命令の実行をサポートする第２のシフタを含み、
前記第２のシフタは前記機能部により実行されるget  exponent命令もサポートする、
請求項１に記載のプロセッサ。
【請求項５】
前記第１のシフタ、第２のシフタ、及びラウンダは、前記機能部により実行されるreduce命令もサポートする、
請求項４に記載のプロセッサ。
【請求項６】
前記第１のシフタ及びラウンダは、前記機能部により実行されるreduce命令もサポートする、
請求項１に記載のプロセッサ。
【請求項７】
機能部が第１の命令を実行する、前記第１の命令はmultiply-add命令であるステップと、
前記機能部が第２の命令を実行する、前記第２の命令はround命令であるステップとを有する、
方法。
【請求項８】
前記機能部が第３の命令を実行する、前記第３の命令はscale命令であるステップをさらに有する、
請求項７に記載の方法。
【請求項９】
前記機能部が第４の命令を実行する、前記第４の命令はget  exponent命令であるステップをさらに有する、
請求項８に記載の方法。
【請求項１０】
前記機能部が第５の命令を実行する、前記第５の命令はreduce命令であるステップをさらに有する、
請求項９に記載の方法。
【請求項１１】
前記機能部が第６の命令を実行する、前記第６の命令はget  mantissa命令であるステップをさらに有する、
請求項１０に記載の方法。
【請求項１２】
前記機能部が第７の命令を実行する、前記第７の命令はrange命令であるステップと、
請求項１１に記載の方法。
【請求項１３】
計算システムであって、
ハードディスクドライブと、
プロセッサとを有し、前記プロセッサは機能部を有し、
前記機能部は、multiply-add命令をサポートする指数差分計算ロジック、乗算器、及び加算器を有し、
前記機能部は、仮数値を何桁丸めるか指定するround命令をサポートするラウンダも有し、
前記指数差分計算ロジックは前記multiply-add命令と前記round命令の実行をサポートするシフタを有する、計算システム。
【請求項１４】
前記シフタは前記機能部により実行されるscale命令もサポートする、
請求項１３に記載のプロセッサ。
【請求項１５】
前記指数差分計算ロジックは、前記multiply-add命令の実行をサポートする第２のシフタを含み、
前記第２のシフタは前記機能部により実行されるget  exponent命令もサポートする、
請求項１４に記載のプロセッサ。
【請求項１６】
前記指数差分計算ロジックは、前記multiply-add命令の実行をサポートする第２のシフタを含み、
前記第２のシフタは前記機能部により実行されるget  exponent命令もサポートする、
請求項１３に記載のプロセッサ。
【請求項１７】
前記第１のシフタ、第２のシフタ、及びラウンダは、前記機能部により実行されるreduce命令もサポートする、
請求項１６に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、概して、電子計算に関し、より具体的には、関数の近似を実行できる機能ユニットに関する。
【背景技術】
【０００２】
図１は、ＣＩＳＣ（Complex  Instruction  Set）、ＲＩＳＣ（Reduced  Instruction  Set）、ＶＬＩＷ（Very  Long  Instruction  Word）などの異なる多くのタイプの処理コアアーキテクチャを既述すると思われる包括的処理コア１００を示す。図１の包括的処理コア１００は次のものを含む：１）（キャッシュ及び／又はメモリなどから）命令をフェッチするフェッチユニット１０３；２）命令をデコードするデコードユニット１０４；３）実行ユニット１０６への命令の発行のタイミング及び／又は順序を決定するスケジュールユニット１０５（特に、スケジューラは任意的である）；４）命令を実行する実行ユニットを有する実行ステージ１０６（典型的な命令実行ユニットには、分岐実行ユニット、整数演算実行ユニット（例えば、ＡＬＵ）、浮動小数点演算実行ユニット（例えば、ＦＰＵ）、及びメモリアクセス実行ユニットが含まれる）；５）命令の成功裏の完了を示すリタイアメントユニット１０７。特に、処理コア１００はマイクロコード１０８を利用してもしなくてもよい。マイクロコード方式プロセッサの場合、マイクロ命令（micro-ops）は、プロセッサが構成された半導体チップ内の（読み出し専用メモリ（ＲＯＭ）などの）不揮発性機械読み取り可能媒体に格納され、プロセッサ内の実行ユニットにその命令により呼び出される所望の機能を実行させる。
【図面の簡単な説明】
【０００３】
本発明は、添付した図面の、限定ではない例を挙げて説明する。図面中、同じ要素には同じ参照符号を付した。
【図１】プロセッサの一実施形態を示す図である。
【図２】乗加算ユニットの一実施形態を示す図である。
【図３】図２の機能ユニットに作用するＧＥＴＥＸＰ命令を示すフロー図である。
【図４】図２の機能ユニットに作用するＳＣＡＬＥ命令を示すフロー図である。
【図５】図２の機能ユニットに作用するＲＯＵＮＤ命令を示すフロー図である。
【図６】図２の機能ユニットに作用するＧＥＴＭＡＮＴ命令を示すフロー図である。
【図７】図２の機能ユニットに作用するＲＥＤＵＣＥ命令を示すフロー図である。
【図８】図２の機能ユニットに作用するＲＡＮＧＥ命令を示すフロー図である。
【図９】計算システムの一例を示す図である。
【発明を実施するための形態】
【０００４】
図２は、ここに説明する複数の異なる命令を実行できる実行ユニット（機能ユニットとも呼ぶ）を示す図である。
【０００５】
ＭＡＤＤ命令
図２のアーキテクチャが実行できる基本命令は、ＭＡＤＤ（multiply  add）命令である。これは被乗数（Ａ）と乗数（Ｂ）を乗算して、その積（ＡＢ）を被加数（Ｃ）に加算する。すなわち、ＭＡＤＤ命令は、命令Ｒ＝（ＡＢ）＋Ｃを実行する（一実施形態では、ＭＡＤＤ命令を用いて、ＡＢ＋Ｃ、ＡＢ−Ｃ、−ＡＢ＋Ｃ、−ＡＢ−Ｃのうちどれかを実行できる）。浮動小数点形式では、本技術分野で知られているように、値は仮数項と指数項で表される。このように、例えば、被乗数Ａは（Ａ．ｍａｎｔ，Ａ．ｅｘｐ）と表され、乗数Ｂは（Ｂ．ｍａｎｄ，Ｂ．ｅｘｐ）と表され、被加数Ｃは（Ｃ．ｍａｎｔ，Ｃ．ｅｘｐ）と表される。
【０００６】
図２のアーキテクチャは、浮動小数点演算の場合、指数計算ロジック２０１と仮数計算ロジック２０２とを含む。浮動小数点ＭＡＤＤ命令の基本的な動作によると、指数計算ロジック２０１は、浮動小数点結果の指数項（Ｒ．ｅｘｐ）を決定し、仮数計算ロジック２０２は、浮動小数点結果の仮数項（Ｒ．ｍａｎｔ）を決定する。浮動小数点ＭＡＤＤ命令の場合、指数計算ロジック２０１は、最初にＲ．ｅｘｐ項を、（ｉ）Ｃ．ｅｘｐと（ｉｉ）（Ａ．ｅｘｐ＋Ｂ．ｅｘｐ）との最大として決定する。
【０００７】
仮数ロジック２０２は、左シフトロジック２０４と右シフトロジック２０５とを両方含む、指数差分ロジック２０３を含む。また、仮数ロジックは乗数２０６を含む。乗算の動作は、複数の部分積の合計として見ることができる。また、図２は、特定乗数デザインアプローチも示す。このアプローチでは、セレクタロジック２０７は、Ａ．ｍａｎｔ項とＢ．ｍａｎｔ項の乗算の部分積を生成する（Ｂ．ｍａｎｔ項もＢｏｏｔｈエンコードされていることに留意せよ）。ウォレスツリーロジック２０８は、セレクタロジック２０７により生成された部分積の合計を有効に実行する。特に、加数の仮数項（Ｃ．ｍａｎｔ）はウォレスツリー２０８にインジェクションされ、ウォレスツリー２０８もＡＢ＋Ｃを実行するようになっている。
【０００８】
しかし、インジェクションの前に、Ｃ．ｍａｎｔ項は調整され、部分積の合計において適切にアライメントされる。ここで、乗算器により行われる乗算は、Ａ．ｅｘｐ＋Ｂ．ｅｘｐのオーダーの仮数項を生成するので、指数差分ロジック２０３は、Ｃ．ｍａｎｔ項を、Ｃ．ｅｘｐと（Ａ．ｅｘｐ＋Ｂ．ｅｘｐ）との間の差分だけシフトする。具体的に、Ｃ．ｅｘｐが（Ａ．ｅｘｐ＋Ｂ．ｅｘｐ）より大きい場合、Ｃ．ｍａｎｔ項は、左シフトロジック２０４により、Ｃ．ｅｘｐ−（Ａ．ｅｘｐ＋Ｂ．ｅｘｐ）バイナリポイントだけ、左にシフトされる（すなわち、Ｃ．ｍａｎｔ項のバイナリポイントは、右にシフトされ、これは整数項が増える効果を有する）。同様に、Ｃ．ｅｘｐが（Ａ．ｅｘｐ＋Ｂ．ｅｘｐ）より小さい場合、Ｃ．ｍａｎｔ項は、右シフトロジック２０５により、（Ａ．ｅｘｐ＋Ｂ．ｅｘｐ）−Ｃ．ｅｘｐデシマルポイントだけ、右にシフトされる（すなわち、Ｃ．ｍａｎｔ項のバイナリポイントは、左にシフトされ、これは整数項が減る効果を有する）。この場合、Ｃ．ｍａｎｔの下位項は、ロジック２１３によりスティッキービットに結合され、以下に説明する命令のため、ラウンダ２１７により用いられる。
【０００９】
ウァラスツリーロジック２０７により行われる合計により、合計項と桁上がり項が生成され、加算器２０９により加算され、ＡＢ＋Ｃの計算の結果を生成する。ここで、ＡＢ＋Ｃの計算の結果の最初がゼロであれば（又は結果が負の場合、最初が１であれば）、リーディング変更予想器２１０により、その最初のゼロの（又は１の）数だけ結果を左にシフトして、それらを削除する。この同じ情報は、Ｒ．ｅｘｐを適宜調整するため、指数計算ロジック２０１に提供される。
【００１０】
２つのシフタがある。始めのゼロを除去する左シフト２０４（この場合、Ｒ．ｅｘｐはshift_countで更新される）と、右シフト２１２（これはＣ．ｅｘｐがＡ＋Ｂ．ｅｘｐより大きい時に必要である。この場合、ウァラスツリーの結果は右シフトされ、Ｃ．ｅｘｐ−（Ａ＋Ｂ．ｅｘｐ）が等しくなるポイントまで右シフトされる）である。ＭＵＸ２１３は、２つのシフタ２１１、２１２のうち正しい結果を得られるものを選択する。一実施形態では、Ｃ．ｍａｎｔ項が左にシフトされると、加算器２０９は桁上がり項２１４を生成する。桁上がり項２１４により、インクリメント器２１５は、左シフトされたＣ．ｍａｎｔ項に桁上がり項を加算する（すなわち、加算器２０９が桁上がり項を生成すると、インクリメント器２１５の出力は２：１マルチプレクサ２１６を通る）。一実施形態では、加算器２０９は１０８ビットであり、インクリメント器２１５は５３ビットインクリメント器である。
【００１１】
図２の機能ユニットで実行できる他の多くの命令を、以下にさらに詳しく説明する。これらの命令のどれも、上記のＦＭＡＤＤ命令だけでなく、一実施形態では、機能ユニットがスカラー又はPacked  data（ＳＩＭＤ）スタイルのオペランドの任意の組合せを、単精度又は倍精度で演算するように設計されている。オペランドのスタイルと精度の仕様の組合せは命令で指定される。さらに、図２の機能ユニットを複数回インスタンス化して、ベクトル機能ユニットを実現できる。ここで、マスキングレイヤを、ベクトル機能ユニット出力と、そのベクトル機能ユニット内のインスタンス化された機能ユニットの各々との間に、入れても良い。
【００１２】
ベクトル演算は、ベクトルマシンでは入力オペランドが可変であるのに対して、ＳＩＭＤマシンでは固定であるという意味で、ＳＩＭＤ演算とは異なるものと見なせる。上記のマスキングレイヤは、ベクトルマシン中の要素数を可変する機能を提供する。具体的に、インスタンス化された機能ユニットの一からの各出力要素は、その書き込みロジック回路に書き込まれる。一実施形態では、書き込みロジック回路は、ベクトル機能ユニットの任意の出力要素ロケーションに書き込むことができる。有効なベクトルオペランド要素に対応する要素のみに対して書き込みロジック回路をイネーブルすることにより、可変長ベクトルを処理できる。これは、有効なベクトル要素に対応するインスタンス化された機能ユニットの動作のみを基本的にイネーブルする効果を有する。さらに、マスキングレイヤは、個々のインスタンス化された機能ユニットにより検知された算術例外が、イネーブルされたインスタンス化された機能ユニットのみの有効出力に提示され、非アクティブの機能ユニットからの例外は抑制するように設計されている。
【００１３】
ＳＣＡＬＥ命令
ＳＣＡＬＥ命令のフロー図を図３に示した。ＳＣＡＬＥ命令は第１の浮動小数点項Ｘを（浮動小数点項Ｙの最小整数表示である）フロアＹだけスケールする。ＶＳＣＡＬＥ命令は、実際、Ｘのバイナリポイントをフロア量Ｙだけ動かす命令と見ることができる。これは、数学的には、以下のように表現することができる：R  =  (X.mant  E  X.exp)<*>２<A>(floor:  Y.mant  E  Y.exp)  =  X.mant  E  (X.exp  +  (floor:  Y.mant  E  Y.exp))。
【００１４】
このように、結果の仮数項はＲ．ｍａｎｔ＝Ｘ．ｍａｎｔであり、結果の指数項はＲ．ｅｘｐ＝Ｘ．ｅｘｐ＋（フロア：Ｙ．ｍａｎｔ  Ｅ  Ｙ．ｅｘｐ）である。Ｒ．ｅｘｐの計算に関して、Ｘ．ｅｘｐはそれ自体整数であり、Ｙ．ｍａｎｔ  Ｅ  Ｙ．ｅｘｐは、Ｙ．ｍａｎｔ項のバイナリポイントを端数ビットが無くなるまでシフトすることにより、整数に変換できる。すなわち、例えば、Ｙ．ｍａｎｔ＝１．０１０１１でありＹ．ｅｘｐ＝５であるとすると、Ｙ＝１０１０１１である。これは基本的に、シフタ内でＹ．ｍａｎｔを左にＹ．ｅｘｐだけシフトすることに対応する。ここで、フロア演算は、基本的に、端数ビットの切り捨てに対応する。よって、Ｒ．ｅｘｐ号は、（ｉ）Ｙ．ｍａｎｔをＹ．ｅｘｐの量だけシフトし、（ｉｉ）シフトした値をＸ．ｅｘｐに加算することにより、計算できる。
【００１５】
これは、Ａ．ｅｘｐとＢ．ｅｘｐ項を＝０にしつつ、ＭＡＤＤ命令の加数（Ｃ．ｍａｎｔとＣ．ｅｘｐ）を処理するデータパスでＹ項を処理することにより、図２の指数差分ロジック２０３内で行われる。この場合、Ｃ．ｅｘｐ−（Ａ．ｅｘｐ＋Ｂ．ｅｘｐ）＝Ｙ．ｅｘｐ−（０）＝Ｙ．ｅｘｐであり、これによりＹ．ｍａｎｔは左シフタ２０４により、Ｙ．ｅｘｐだけ左にシフトされる。シフタ２０４の出力は指数計算ロジック２０１に提供される。指数計算ロジック２０１は、シフタ２０４の出力をＸ．ｅｘｐ項に加算する。Ｘ．ｅｘｐ項は、指数計算ロジック２０１へのＡ．ｅｘｐ、Ｂ．ｅｘｐ、Ｃ．ｅｘｐ入力のどれにも強制される。和はＲ．ｅｘｐとして与えられる。Ｒ．ｍａｎｔは単に入力Ｘ．ｍａｎｔ項として与えられる。
【００１６】
ＧＥＴＥＸＰ命令
ＧＥＴＥＸＰ命令のフロー図を図４に示した。ＧＥＴＥＸＰ命令は入力項（Ｚ．ｍａｎｔ、Ｚ．ｅｘｐ）を受け取り、Ｚ．ｅｘｐの値からバイアスを減算し、答えを浮動小数点形式で提供する。基本的に、この命令は入力Ｚの真の指数を浮動小数点形式で提供する。ここで、本技術分野では知られているように、浮動小数点の指数値は、計算で負の指数を容易に扱えるように、一般的にはバイアスされている。例えば、単精度の場合、８ビットが指数項のために予約されており、２５４通りの値を与える（この他の２つの値には特別な意味が与えられている）。ここで、−１２７乃至＋１２７の実際の指数範囲に対して、かかる実際の指数値に＋１２７のバイアスがハードウェアにより加算され、指数に対してハードウェアで物理的に計算される数値範囲が０から２５４になる。よって、単精度の場合、ＧＥＴＥＸＰ命令はＺ．ｅｘｐから値１２７を減算し、答えを浮動小数点形式で提供する。倍精度の場合には、Ｚ．ｅｘｐから値１０２３が減算される（倍精度では．ｅｘｐ項は１１ビットである）。
【００１７】
単精度の場合、値−１２７を加算することにより、値１２７が他の項から減算される。２の補数形式では、−１２７は１００００００１と表され、これは０．１００００００１Ｅ８と表される（すなわち、値１００００００１Ｅ０が右に８桁分シフトされる）。このように、一アプローチでは、単精度の場合、値０．１００００００１は被乗数（Ａ．ｍａｎｔ）とされ、値１が乗数（Ｂ．ｍａｎｔ）とされ、乗算器により行われるＡＢ項の乗算の結果は、０．１００００００１であり、これは−１２７を８桁だけ右へシフトしたものに対応する。
【００１８】
Ｚ．ｅｘｐ項は、加数（Ｃ．ｍａｎｔ）データパスに沿って受け入れられ、右シフタ２０５により８桁右シフトされ、ウァラスツリー２０８にインジェクトされる前に、乗算器出力とアライメントされる。加算器２０９からの結果は、Ｚ．ｅｘｐ項からバイアス１２７を引き、右に８けたシフトしたものに対応する。リーディングチェンジ予測器２１０と左シフタ２１１は、先のゼロ／１を除去し、結果をＲ．ｍａｎｔとして提供する。Ｒ．ｅｘｐは、指数計算ロジックにより計算され、単精度の場合、Ｒ．ｅｘｐ＝８−（ＬＣＡ２１０からカウントしたリーディング０／１）＋１２７＋１である。倍精度の場合、バイアスが１０２３であり、値を８ビットでなく１１ビットシフトすることを除き、上記と同じ演算を適用する。このように、Ｒ．ｅｘｐ＝１１−（ＬＣＡ２１０からカウントしたリーディング０）＋１０２３＋１である。
【００１９】
入力項（Ｚ．ｍａｎｔ，Ｚ．ｅｘｐ）が非正規数（すなわち、指数項がゼロにバイアスされ、非ゼロの仮数が０．ＸＸＸＸ．．．Ｘの形式である）場合、Ｚ．ｍａｎｔ項は、最初のリーディング１が見つかるまで、ＬＣＡ２１０の制御下で、左シフタ２１１により左シフトされる。結果はＲ．ｍａｎｔとして与えられる。左シフトカウントは、指数の絶対値に対応し、負数であると考える。このように、Ｒ．ｅｘｐは、指数計算ロジックにより、Ｒ．ｅｘｐ＝−｜ＬＣＡ２１０からからのリーディング０カウント｜として表される。
【００２０】
ＲＯＵＮＤ命令
ROUND命令のフロー図を図５に示す。ＲＯＵＮＤ命令は、入力項（Ｓ．ｍａｎｔ；Ｓ．ｅｘｐ）の仮数Ｓ．ｍａｎｔを、入力項Ｑにより指定されたバイナリ桁数まで丸める。例えば、Ｓ＝１０１１１．１１００１Ｅ０であり、Ｑ＝２である場合、この命令は結果Ｒ＝１０１１１．１１Ｅ０（すなわち、Ｒ．ｍａｎｔ＝１０１１１．１１；Ｒ．ｅｘｐ＝０）を与える。この演算を実行するため、Ｓ．ｍａｎｔ項は加数仮数入力（Ｃ．ｍａｎｔ）として受け入れられ、右シフタ２０５により、（Ｓ．ｍａｎｔ中の端数ビット数）−Ｑだけ右シフトされる。
【００２１】
上記の例では、Ｓ．ｍａｎｔの端数ビット数は５である（すなわち、ストリング「１１００１」には５ビットある）。よって、Ｓ．ｍａｎｔは５−Ｑ＝５−２＝３桁だけ右にシフトされる。入力Ｓ．ｍａｎｔ項１０１１１．１１００１を右に３桁シフトすると、１０．１１１１１Ｅ３に対応する結果が生じ、元の入力Ｓから最下位オーダーの端数ビットストリング「００１」をドロップする効果を有する。一実施形態では、命令は次の丸めモードをサポートする：１）切り上げ；２）切り下げ；３）最も近い偶数への丸め；及び４）ゼロへの丸め。
【００２２】
完全な演算により、指定された丸めモード及びドロップされた端数ビットとに応じて、最小端数値が切り上げ又は切り下げされ、その結果が元の指数とともに提示される（すなわち、１０１１１．１１Ｅ０）。ここで、最初の複数のゼロが元のＳ．ｍａｎｔの一部とアライメントされ、それに続く複数の１が元のＳ．ｍａｎｔのドロップされる一部とアライメントされたマスクを生成する。ここで説明する例では、これは０００００００１１１に対応する。このマスクは、元のＳ．ｍａｎｔ入力とＯＲ演算され、この例の場合、第１の値１０１１１１１１１１を生成する。マスクのＮＯＴ（１１１１１１１０００）が元の入力Ｓ．ｍａｎｔ項とＡＮＤ演算され、第２の値１０１１１１１０００を生成する。ラウンダ２１７は、両方の値を受け取り、ラウンドアップ値に対応する第１の値をインクリメントする。第２の値は非ラウンドアップ値に対応する。指定された丸めモードと、右シフタ２０５からドロップされたビットとに基づき、第１又は第２の値が正しい仮数の答えとして選択される。この例では、ドロップされたビットは「００１」に対応し、それゆえ（最も近い値への丸めモードでは）切り上げは行われず、第２の値が正しい仮数として選択される。切り上げモード（かつ入力符号が正である）の場合、又は切り下げモード（かつ入力符号が負である）の場合、切り上げられた値が選択される。ゼロへの丸めモードでは、非切り上げモードが常に選択される。指数計算ロジックは正しい指数を決定する（例えば、round-to-nearestモードにおいて、Ｓ＝１１１１１．１１１１１Ｅ０かつＱ＝２であるとすると、規格化後、Ｒ．ｅｘｐ＝Ｓ．ｅｘｐ＋１である）。
【００２３】
特に、第１と第２の値の一方は、偶数の仮数値に対応し、他方は奇数の仮数値に対応する。最も近い偶数値への丸めの場合、選択は左端のドロップされたビットと、他のドロップされたビット（スティッキービット）とに基づく。左端のドロップされたビットが１であり、スティッキービットが０である場合、偶数値が選択される。スティッキービットが１である場合、選択は左端のドロップされたビットに基づく：１であれば、切り上げ値を選択し、０であればトランケートされた値（すなわち、切り上げではない）を選択する。round-to-infinityの場合、ドロップされた端数ビットのどれかが１であれば、切り上げ値が選択される。ドロップされたビットがすべて０であれば、非切り上げ値が選択される。一実施形態では、切り下げモードにおける負の入力に、及び切り上げモードにおける正の入力に対し、round-to-infinityルールが適用される。切り下げモードにおける正の入力に、及び切り上げモードにおける負の入力に対し、round-to-zeroルールが適用される。説明した丸め（rounding  behavior）は、ＩＥＥＥ標準７５４−２００８で与えられる丸めモードの定義と一致する。
【００２４】
ＧＥＴＭＡＮＴ
ＧＥＴＭＡＮＴ命令のフロー図を図６に示した。ＧＥＴＭＡＮＴは浮動小数点形式で仮数の値を提供する。浮動小数点形式で表す仮数をＣ．ｍａｎｔ入力で受け取る。結果の仮数部（ここでは、「仮数（significand）」と呼ぶ）は、１．ＸＸＸＸ．．．Ｘの形式である。出力値が入らねばならない数値範囲（正規化値とも呼ぶ）も入力パラメータとして提供される。一実施形態では、指定できる区間が４つある：[１,２);[１/２,１);[１/２,２);及び[３/４,３/２）。
【００２５】
範囲[１,２)は、１．ＸＸＸＸ．．．Ｘの形式の出力バイナリ数に対応する。Ｃ．ｍａｎｔ入力が１．ＸＸＸ．．．Ｘの形式である場合、単にＣ．ｍａｎｔ入力項が出力結果として提示される。指数ロジックは指数の結果を０（又はＢＩＡＳ）に設定し、正しい範囲内の出力値を提示する。
【００２６】
範囲[１／２,１)は、０．１ＸＸＸＸ．．．Ｘの形式の出力バイナリ数に対応する。Ｃ．ｍａｎｔ入力が１．ＸＸＸ．．．Ｘの形式である場合、単にＣ．ｍａｎｔ入力項が出力仮数結果として提示される。指数結果は−１（又はＢＩＡＳ−１）として提示され、指定範囲内の出力値（すなわち、０．１ＸＸＸＸ．．．Ｘの数値）を供給する。
【００２７】
範囲[１／２,２)は、０．１ＸＸＸ．．．Ｘ又は．ＸＸＸＸ．．．Ｘの形式の出力バイナリ数に対応する。Ｃ．ｍａｎｔ入力が１．ＸＸＸ．．．Ｘの形式である場合、単にＣ．ｍａｎｔ入力項が出力仮数結果として提示される。Ｃ．ｍａｎｔ入力項が０．１ＸＸＸ．．．Ｘの形式である場合、指数は−１（又はＢＩＡＳ−１）として提示され、正しい数値範囲の出力結果を提供する。Ｃ．ｍａｎｔ入力項が１．ＸＸＸＸ．．．Ｘの形式である場合、指数は０（又はＢＩＡＳ）として提示され、正しい数値範囲の出力結果を提供する。
【００２８】
範囲[３／４,３／２)は、０.１１ＸＸＸ．．．Ｘ又は１．０ＸＸＸ．．．Ｘの形式の出力バイナリ数に対応する。Ｃ．ｍａｎｔ入力が１．ＸＸＸ．．．Ｘの形式である場合、単にＣ．ｍａｎｔ入力項が出力仮数結果として提示される。Ｃ．ｍａｎｔ入力項が１．０ＸＸＸ．．．Ｘの形式である場合、指数は０（又はＢＩＡＳ）として提示され、正しい数値範囲の出力結果を提供する。Ｃ．ｍａｎｔ入力項が１．１ＸＸＸ．．．Ｘの形式である場合、指数は−１（又はＢＩＡＳ−１）として提示され、正しい数値範囲の出力結果を提供する。
【００２９】
上記のいずれの命令においても、入力項が非正規数（すなわち、指数項がゼロにバイアスされ、非ゼロの仮数が０．ＸＸＸＸ．．．Ｘの形式である）場合、Ｃ．ｍａｎｔ項は、最初のリーディング１が見つかるまで、ＬＺＡ２１０の制御下で、左シフタ２１１により左シフトされる。これは、出力を（所望の出力形式である）１．ＸＸＸＸ．．．Ｘの形式で表すことに対応する。正しい成分は、当てはまる範囲で正しい指数が上記のように確立される。
【００３０】
ＲＥＤＵＣＥ
ＲＥＤＵＣＥ命令のフロー図を図７に示した。ＲＥＤＵＣＥは、入力値の縮尺した引数を、関係Ｒ＝Ｘ−Ｒｏｕｎｄ（２ＭＸ）２−Ｍにより抽出する。ここで、Ｍは、抽出で参照するビット位置を決定するスケーリングファクタである。また、入力値は、ＲＯＵＮＤ演算が切り上げか、切り下げか、それとも最も近い偶数値への丸めか指定する。例えば、Ｘ＝１．０１０１０１０１であり、切り下げが指定され、スケーリングファクタが３である場合、Ｒｏｕｎｄ（２３Ｘ）＝１０１０．０００００であり、Ｒｏｕｎｄ（２３Ｘ）２３＝１．０１００００００である。よって、Ｘ−Ｒｏｕｎｄ（２ＭＸ）２−Ｍ＝１．０１０１０１０１−１．０１００００００＝０．０００１０１０１である。この場合、Ｒは１．０１０１と表され、指数はゼロである。
【００３１】
図２を参照して、制御ロジック（図示せず）は、命令とともに入力として供給されるスケーリングパラメータＭを受け取る。値Ｘは、Ｃ．ｍａｎｔ．inputで受け取られ、制御ロジックの制御下で左シフタ２０４により左シフトされる。具体的に、制御ロジックにより、左シフタ２０４は、値Ｘを、スケーリングパラメータＭと等しいバイナリ桁だけ左シフトする。これにより２ＭＸ項が生じる。この後の動作は、ＲＯＵＮＤ命令を参照して上で説明したものと同様である。ただし、右シフタ２０５は使われない。この演算では、ＲＯＵＮＤ命令のＱパラメータはゼロだからである。
【００３２】
一実施形態では、ラウンダ２１７は、その命令から他の入力パラメータとして、切り上げるか、切り下げるか、又は最も近い偶数に丸めるかの表示を受け取ることができる。これらの異なるモードに対するラウンダの動作は、ＲＯＵＮＤ命令について上で説明したのと同様である。
【００３３】
丸めた答えは、ラウンダ２１７により供給されると、右シフタ２０５によりスケーリングパラメータＭと同じデシマル桁だけ、右シフトされる（特に、ラウンダ２１７出力は右シフタ２０５入力に結合される）。右シフタ２０５の出力は、Ｒｏｕｎｄ（２ＭＸ）２−Ｍに対応し、負数であることを表す適当な符号操作をしてウァラスツリー２０９に送られる。乗算器は、Ｃ．ｍａｎｔ．ｉｎｐｕｔで受け取った同じ入力値を、Ａ．ｍａｎｔ又はＢ．ｍａｎｔ入力の一方で受け取り、他の入力の値は１に固定される。よって、加算器２０９はＸ−Ｒｏｕｎｄ（２ＭＸ）２−Ｍを供給する。切り上げの場合、加算器２０９の結果は負かゼロである。結果が負であれば、ＬＣＡにより左シフタ２１１は最初の複数の１をシフトアウトする。切り下げの場合、加算器２０９の結果は正かゼロである。結果が正であれば、ＬＣＡにより左シフタ２１１は最初の複数のゼロをシフトアウトする。最も近い偶数に丸める場合、加算器２０９の結果は正か負かゼロである。ＬＣＡ２０９は、正の結果と負の結果に対して上記のシフトを行う。出力は機能部から供給される。
【００３４】
ＲＡＮＧＥ
ＲＡＮＧＥ命令のフロー図を図８に示した。ＲＡＮＧＥ命令は２つの値ＦとＧを受け取り、次のうちのどれかを返す：ｉ）ＦとＧの最小値；ｉｉ）ＦとＧの最大値；ｉｉｉ）Ｆの絶対値とＧの絶対値の最小値；及びｉｖ）Ｆの絶対値とＧの絶対値の最大値。一実施形態では、上記のｉ）ないしｉｖ）の一が実行する命令で特定される。図２を参照して、一実施形態では、上記の命令ｉ）とｉｉ）に対して、ＦはＣ．ｍａｎｔ．ｉｎｐｕｔで与えられ、ＧはＡ．ｍａｎｔ．ｉｎｐｕｔで与えられる。Ｂ．ｍａｎｔ．ｉｎｐｕｔの値は１．０にされる。Ｇの符号項はスイッチされ、ウァラスツリーと加算器２０９により計算Ｆ−Ｇをする。加算器２０９の出力の符号項は、ＦとＧのどちらが大きいか示す。具体的に、符号項が正であれば、Ｆの方が大きく、符号項が負であれば、Ｇの方が大きい。よって、前者の場合は出力としてＦがルーティングされ、後者の場合は出力としてＧがルーティングされる。命令ｉｉｉ）とｉｖ）では同様に、乗算器への出力に先立ちＦとＧの値の符号項が正の値である。
【００３５】
ＣＬＡＳＳ
ＣＬＡＳＳ命令はオペランドのタイプを決定する。一実施形態では、命令は、複数の異なるデータタイプのテストと、各タイプのビット位置を基本的に確保する特殊な出力フォーマットに対応し、オペランドがタイプをテストされたものである場合、機能部はそのタイプに対応する出力のビット位置に１を置く。別の一実施形態では、８個の異なるデータタイプがテストされる。これらはｉ）ＡＮａＮ；ｉｉ）Ｎｅｇａｔｉｖｅ  Ｆｉｎｉｔｅ；ｉｉｉ）Ｄｅｎｏｒｍａｌｌ；ｉｖ）vegative  infinity；ｖ）positive  infinity；ｖｉ）negative  zero；ｖｉｉ）positive  zero；ｖｉｉｉ）ＳＮＡＮである。一実施形態では、機能部中の制御ロジック（図２には図示せず）は、Ｃ．ｍａｎｔ．ｉｎｐｕｔにあるオペランドを決定し、それに応じて特殊な出力を生成する。
【００３６】
ＢＬＥＮＤＳＥＭとＦＩＸＵＰＩＭＭ
このＢＬＥＮＤＳＥＭ命令は、対応するビット［７：０］ごとに、条件付きで、第２のソースオペランド中の倍精度浮動小数点値の符号、指数、及び仮数を、第１のソースオペランド中の倍精度浮動小数点値から符号、指数、及び仮数とマージする。結果のパックされた倍精度浮動小数点値は、宛先レジスタに記憶される。直近のビット［７：０］により、第２のソースオペランド又は第１のソースオペランドの単精度値からの対応する符号、指数、及び仮数を宛先にコピーしなければならないか決まる。特殊値も直近の制御により操作される。
【００３７】
ＦＩＸＵＰＭＭ命令は、ｉｎｔ６４ベクトルからの３２ビットテーブル値を用いてfloat６４ベクトルｚｍｍ２において、様々な実数及び特殊数タイプの要素ごとのフィックスアップ（fix-up）を行う。結果はfloat６４ベクトルｚｍｍ１にマージされる。この命令は、複数命令シーケンスの結果をフィックスアップして、特殊数入力を反映するのに有用であるが、一ソースを含む算術計算の結果をスペックとマッチするようにフィックスアップするのに使うことを意図したものである。例えば、ｒｃｐ（０）を考える。ｒｃｐへの入力０、及び結果はＩＮＦである。しかし、Ｎｅｗｔｏｎ−Ｒａｐｈｓｏｎによりｒｃｐを評価すると、ここでｘ＝approx（１／０）であり、不正な結果が生じる。これに対応するため、Ｎ−Ｒ反復シーケンスの後に、ＦＩＸＵＰＩＭＭを用いて、結果を正しい値に設定する（すなわち、入力が０であるときＩＮＦ）ことができる。非正規入力オペランドｚｍｍ１又はｚｍｍ２は、正規入力と考えられ、フィックスアップ（fixup）や不正報告はトリガーしない。
【００３８】
一実施形態では、ＢＬＥＮＤＳＥＭとＦＩＸＵＰＩＭＭ命令は、異なる機能部で実行され、これは「シャッフル」機能部と呼ばれる。
【００３９】
ＲＣＰ１４とＲＳＱＲＴ１４
ＲＣＰ１４命令は、ソースオペランド（第２のオペランド）中の４／２パックされた倍精度浮動小数点値の逆数のＳＩＭＤ計算を実行し、パックされた倍精度浮動小数点結果を宛先オペランドに格納する。この近似の最大相対誤差は２−１４より小さい。ソースオペランドは、ＺＭＭレジスタ又は５１２ビットメモリロケーションである。宛先オペランドはＺＭＭレジスタである。ＲＣＰ１４ＰＤ命令は丸め制御ビットにより影響されない。ソース値が０．０であるとき、ソース値の符号を有する∞が返される。ソース値がＳＮａＮ又はＱＮａＮであるとき、ＳＮａＮはＱＮａＮに変換され、ソースＱＮａＮが返される。
【００４０】
ＲＳＱＲＴ１４命令は、ソースオペランド（第２のオペランド）中の８パックされた倍精度浮動小数点値の平方根の近似逆数のＳＩＭＤ計算を実行し、パックされた倍精度浮動小数点結果を宛先オペランドに格納する。この近似の最大相対誤差は２−１４より小さい。ソースオペランドは、ＺＭＭレジスタ又は５１２ビットメモリロケーションである。宛先オペランドはＺＭＭレジスタである。ＲＳＱＲＴ１４ＰＤ命令は丸め制御ビットにより影響されない。ソース値が０．０であるとき、ソース値の符号を有する∞が返される。ソースオペランドが∞であるとき、ソース値の符号を有する０が返される。ソース値が（０．０以外の）負の値であるとき、浮動小数点不定が返される。ソース値がＳＮａＮ又はＱＮａＮであるとき、ＳＮａＮはＱＮａＮに変換され、ソースＱＮａＮが返される。
【００４１】
一実施形態では、ＶＲＣＰ１４及びＶＲＳＱＲＴ１４命令は、異なる機能部で実行され、これは「ＰＦＰＲＯＭＳ」機能部と呼ばれる。
【００４２】
上記の機能を有するプロセッサは、いろいろな計算システムで実施できる。図９は、計算システム（例えば、コンピュータ）の一実施形態を示す。図９の計算システム例は次を含む：１）ベクトルロジカルリダクション命令を含むように設計された一又は複数のプロセッサ９０１；２）メモリコントロールハブ（ＭＣＨ）９０２；３）（ＤＤＲ  ＲＡＭ、ＥＤＯ  ＲＡＭなどのタイプの）システムメモリ９０３；４）キャッシュ９０４；５）Ｉ／Ｏコントロールハブ（ＩＣＨ）９０５；６）グラフィックスプロセッサ９０６；７）（陰極線管（ＣＲＴ）、フラットパネル、薄膜トランジスタ（ＴＦＴ）、液晶ディスプレイ（ＬＣＤ）、ＤＰＬなどのタイプの）ディスプレイスクリーン９０７；８）一以上のＩ／Ｏデバイス９０８。計算システムはハードディスクドライブ（図示せず）を含んでいてもよい。
【００４３】
一又は複数のプロセッサ９０１は、計算システムが実装するソフトウェアルーチンを実行するために命令を実行する。命令は、データに対して行われる操作を含むことが多い。データと命令は両方ともシステムメモリ９０３とキャッシュ９０４に格納される。キャッシュ９０４は、一般的には、システムメモリ９０３よりもレイテンシ時間が短く設計されている。例えば、キャッシュ９０４は、プロセッサと同じシリコンチップ上に集積され、及び／又は高速のＳＲＡＭセルで構成され、一方システムメモリ９０３は低速のＤＲＡＭセルで構成されている。より頻繁に使われる命令とデータを、システムメモリ９０３ではなくキャッシュ９０４に格納することにより、計算システムの全体的な性能効率を改善する。
【００４４】
システムメモリ９０３は、計算システム中の他のコンポーネントに利用可能である。例えば、様々なインタフェース（例えば、キーボード、マウス、プリンタポート、ＬＡＮポート、モデムポート）から計算システムに受け取られたデータや、計算システムの内部記憶要素（例えば、ハードディスクドライブ）から読み出したデータは、ソフトウェアプログラムの実施で、一又は複数のプロセッサ９０１により処理される前に、システムメモリ９０３に一時的にキューされる。同様に、計算システムから計算システムインタフェースの一を介して外部エンティティに送るべきと、又は内部記憶要素に格納すべきとソフトウェアプログラムが判断するデータは、送信又は格納される前に、システムメモリ９０３に一時的にキューされる。
【００４５】
ＩＣＨ９０５は、かかるデータが、システムメモリ９０３と適切な対応する計算システムインタフェース（計算システムの設計によっては内部記憶装置）との間で正しく受け渡しさせる役割を有する。ＭＣＨ９０２は、時間的に近接して生じるプロセッサ９０１、インタフェース、及び内部記憶要素の間のシステムメモリ９０３へのアクセスを求める様々な要求を管理する役割を果たす。
【００４６】
また、一又は複数のＩ／Ｏ装置９０８が典型的な計算システムに実装されている。Ｉ／Ｏ装置は、一般的に、計算システムへ及び／又は計算システムから（例えば、ネットワーキングアダプタ）、計算システム内の大規模不揮発性記憶（例えば、ハードディスクドライブ）をのデータを転送する役割を果たす。ＩＣＨ９０５は、それ自体と上記のＩ／Ｏデバイス９０８との間の双方向ポイント・ツー・ポイントリンクを有する。
【００４７】
上記の説明では、本発明をその具体的な実施形態を参照して説明した。しかし、明らかなことは、添付した請求項に記載したように、本発明の広い精神と範囲から逸脱することなく、様々な修正や変更を加えることができる。したがって、明細書と図面は例示であって限定ではないと考えるべきである。
【図１】
2013543176.tif 000003
【図２】
2013543176.tif 000004
【図３】
2013543176.tif 000005
【図４】
2013543176.tif 000006
【図５】
2013543176.tif 000007
【図６】
2013543176.tif 000008
【図７】
2013543176.tif 000009
【図８】
2013543176.tif 000010
【国際調査報告】
2013543176.tif 000011
2013543176.tif 000012