JP4476210B2 - 逆数演算の結果値の初期推定値を求めるデータ処理装置および方法 - Google Patents

逆数演算の結果値の初期推定値を求めるデータ処理装置および方法 Download PDF

Info

Publication number
JP4476210B2
JP4476210B2 JP2005341857A JP2005341857A JP4476210B2 JP 4476210 B2 JP4476210 B2 JP 4476210B2 JP 2005341857 A JP2005341857 A JP 2005341857A JP 2005341857 A JP2005341857 A JP 2005341857A JP 4476210 B2 JP4476210 B2 JP 4476210B2
Authority
JP
Japan
Prior art keywords
value
input value
data processing
input
result
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2005341857A
Other languages
English (en)
Other versions
JP2006228191A (ja
Inventor
レイモンド ルッツ デーヴィッド
ニール ヒンズ クリストファー
ヒューゴ シメス ドミニク
アンドリュー フォード サイモン
Original Assignee
エイアールエム リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2006228191A publication Critical patent/JP2006228191A/ja
Application granted granted Critical
Publication of JP4476210B2 publication Critical patent/JP4476210B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/535Dividing only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • G06F2207/3824Accepting both fixed-point and floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/535Indexing scheme relating to groups G06F7/535 - G06F7/5375
    • G06F2207/5354Using table lookup, e.g. for digit selection in division by digit recurrence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/535Indexing scheme relating to groups G06F7/535 - G06F7/5375
    • G06F2207/5355Using iterative approximation not using digit recurrence, e.g. Newton Raphson or Goldschmidt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/535Indexing scheme relating to groups G06F7/535 - G06F7/5375
    • G06F2207/5356Via reciprocal, i.e. calculate reciprocal only, or calculate reciprocal first and then the quotient from the reciprocal and the numerator

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は逆数演算(reciprocal operation)の結果値の初期推定値を発生するデータ処理装置および方法に関連している。
dが入力値である1/Fn(d)の形の演算である逆数演算をしばしば実施する必要があるいくつかのデータ処理アプリケーションがある。しばしば必要とされる2つのこのような逆数演算は入力値の逆数、すなわち1/d,または入力値の逆平方根、すなわち1/√d,の計算を伴う。これら特定の2つの逆数演算は、たとえば、グラフィックス処理アプリケーションでしばしば使用される。
このような逆数演算を実施するための専用ハードウェアを開発することができるが、典型的にはデータ処理装置をできるだけ小型のままとして、可能であればハードウェア論理を再利用するのが望ましい。
専用ハードウェアを必要としない逆数および逆平方根等の複素関数の結果を求める既知の技術は結果値に収束させるために計算の反復実行を利用する。1つの特定のこのような反復過程は一般的にニュートン-ラフソン法と言われている。ニュートン-ラフソン法に従って、結果値の初期推定値が作られ、次に、実際の結果値に収束させるために精緻化(refinement)ステップが反復実行される。
モトローラ社のAltiVec技術は逆数および逆平方根機能を評価するためにニュートン-ラフソン精緻化技術を使用する。ニュートン-ラフソン精緻化技術を利用して逆数および逆平方根を計算するデータ処理装置のもう1つの例が米国特許第6,115,733号に記載されている。これら両方のシステムにおいて、入力値に基づいて、逆数演算に対する結果値の初期推定値を求めるために初期推定値発生器が使用される。典型的に、この初期推定値を求めるのにルックアップテーブルが使用され、サポートされる各タイプの逆数演算に対して異なるルックアップテーブルが提供される。
初期推定値の品質は逆数演算の高速実行にとって重要であり、初期推定値のサイズは指定された精度に達するのに必要な反復ステップ数を規定する。
あるデータ処理装置では、データ処理装置は固定小数点値と浮動小数点値の両方を処理する必要がある。固定小数点データ値は2進小数点がデータ値内の予め定められた点に存在することを意味する値である。たとえば、16.16固定小数点フォーマットは32ビット値が2進小数点の前に16ビットを有し2進小数点の後に16ビットを有するものと推定する。整数値は2進小数点が最下位ビットのすぐ右に存在すると考えられる固定小数点値の特定例である。
「正規」範囲内であると考えられる浮動小数点値は次のように表すことができ、
±1.x*2y
ここに、x=小数部(fraction)
1.x=仮数部(significand)(mantissaとしても知られる)
y=指数部
規定された正規以下範囲内の浮動小数点データ値は次のように表すことができ、
±0.x*2min
ここに、x=小数部(fraction)
0.x=仮数部(significand)(mantissaとしても知られる)
min=-126(単精度値に対して)、-1022(倍精度値に対して)
逆数演算の実施が浮動小数点データ値および固定小数点データ値の両方に対してサポートされる場合、各データフォーマットに対する関連する別々のルックアップテーブルと共に、各データフォーマットに対する別々の推定値論理を与える必要があると考えられる。
米国特許第6,115,733号明細書
しかしながら、データ処理装置では、典型的にそのサイズはできるだけ小さいままとし、特に、データ処理装置内に設けられる論理を効率的に使用できることが望ましい。したがって、逆数演算に対する初期推定値の発生に関して、浮動小数点および固定小数点の両方に対して初期推定値の決定をサポートしながら、必要な推定値発生論理を効率的な方法でインプリメントすることができるデータ処理装置を提供することが望ましい。
第1の側面から見て、本発明は入力値に逆数演算を実施して作り出される結果値の初期推定値を発生するデータ処理装置を提供し、入力値および結果値は固定小数点値または浮動小数点値であり、データ処理装置は命令を実行してデータにデータ処理演算を実施するように動作する処理論理と、結果値の初期推定値発生中に処理論理により参照されるルックアップテーブルとを含み、処理論理は推定値命令に応答してルックアップテーブルを参照し、予め定められた範囲内の修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、結果値の初期推定値はテーブル出力値から引き出すことができる。
本発明に従って、入力値に逆数演算を実施する時に、修正入力値は予め定められた範囲内であると考えられ、次に、推定値命令に応答して処理論理はルックアップテーブルを参照し、修正入力値に応じて、テーブル出力値を発生する。ここで使用される「ルックアップテーブル」という用語はルックアップテーブルの機能性を提供する任意のインプリメンテーションをカバーするものとし、したがって、たとえば、Read Only Memory (ROM)やランダム論理を含むことができる。特定の修正入力値に対して、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生される。次に、結果値の初期推定値がテーブル出力値から引き出される。
本発明の方法に従って、逆数演算に対する結果値の初期推定値を求める時に、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず、同じ処理論理が使用されかつ同じルックアップテーブルが参照されて、データ処理装置内の論理を効率的に使用し固定小数点および浮動小数点用の別々のルックアップテーブルを設ける必要性を回避する。
ここで参照されるルックアップテーブルは全ての非例外修正入力値、すなわち、予め定められた範囲内の全ての修正入力値に対する出力値を与える。例外修正入力値に対しても出力を与えるようにルックアップテーブルがなんらかの方法で拡張されておれば、本目的に対するルックアップテーブルは全ての非例外修正入力値に対して出力を与えた部分である。一実施例では、入力値が固定小数点であるか浮動小数点であるかにかかわらず同じ推定値命令が使用される。デコーダはデコードされる命令が推定値命令であることを識別する必要しかないため、このような方法により必要な推定値命令のデコーディングは少なくなり、次に、推定値命令が固定小数点値または浮動小数点値に関連するかどうかを確認する必要なしに、必要な初期推定値発生が実施されるように推定値命令を処理論理へ送ることができる。
一実施例では、入力値および結果値は浮動小数点数であり、推定値命令はオペランドとして入力値を指定するように動作することができ、処理論理は推定値命令に応答して修正入力値を評価し、ルックアップテーブルを参照してテーブル出力値を発生し、テーブル出力値から結果値の初期推定値を引き出すように動作することができる。したがって、この実施例では、単一推定値命令により処理論理は必要な全ての処理ステップをインプリメントして入力値から結果値の必要な初期推定値を発生する。
一実施例では、データ処理装置は正規浮動小数点値および特殊ケース(無限大、非数値(Not a Number values:NaNs)およびゼロ)を処理するようにされており、正規以下値は符号付ゼロ値に揃えられる。しかしながら、後述するように、代替実施例は同じ原理を使用して正規以下値を直接処理するようすることができる。
一実施例では、逆数演算は結果値として入力値の逆数を作り出し、処理論理は修正入力値としてその仮数部(significand)が0.5以上1未満の範囲内である値を選択するように入力値を操作するように動作することができる。入力値のこのような操作を実施することにより、浮動小数点数の仮数部(significand)に対する所要範囲である1以上2未満の範囲内である結果値の推定値の仮数部(significand)を形成するのにテーブル出力値を容易に使用できることが保証される。したがって、それに続く正規化ステップは不要である。
特定の一実施例では、処理論理は修正入力値として入力値の仮数部(significand)の有効1ビット右シフトの結果を選択するように動作することができ、結果値の初期推定値はテーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、入力値の指数部を増分かつ否定(negate)することにより結果値の推定値の指数部を作り出すことにより引き出される。
一実施例では、逆数演算は結果値として入力値の逆平方根を作り出し、処理論理は修正入力値としてその仮数部(significand)が0.25以上1未満の範囲内である値を選択するように入力値を操作するように動作することができる。修正入力値がこの範囲内に仮数部(significand)を有することを保証することにより、1以上2未満の範囲内に入る結果値の推定値の仮数部(significand)を形成するのにテーブル出力値を使用できることが保証され、したがって、それに続く正規化ステップを実施する必要性が回避される。
逆数演算が結果値として入力値の逆平方根を作り出す時に使用されるルックアップテーブルは逆数演算が結果値として入力値の逆数を作り出す時に使用されるルックアップテーブルと異なるが、前記したように、これら2種の逆数演算のいずれにおいても、同じルックアップテーブルを固定小数点および浮動小数点値の両方に使用することができる。
特定の一実施例では、処理論理は修正入力値が偶数である指数部を有するように、入力値の指数部の関連する増分と共に、入力値の仮数部(significand)の有効1ビットまたは有効2ビット右シフトの結果を修正入力値として選択するように動作することができ、結果値の初期推定値はテーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、かつ修正入力値の指数部を半分にして否定する(negating)ことにより結果値の推定値の指数部を作り出すことにより引き出される。その指数部が偶数である修正入力値を選択するように入力値を操作することにより、結果値の推定値の指数部を発生する時に修正入力値の指数部を半分にして否定する過程が単純化される。
一実施例では、入力値および結果値は固定小数点数であり、修正入力値は推定値命令を実行する前に作り出され、推定値命令はオペランドとして修正入力値を指定するように動作することができ、処理論理は推定値命令に応答してルックアップテーブルを参照してテーブル出力値を発生することができ、後続処理ステップは推定値命令の実行後に実施されてテーブル出力値から結果値の初期推定値を引き出す。したがって、この実施例では、推定値命令はオペランドとして修正入力値を受信し、次に、推定値命令を実行してルックアップテーブルのルックアップが行われるようにされる。次に、結果値の初期推定値がテーブル出力値から引き出される。修正入力値の生成およびテーブル出力値からの結果値推定値の導出は一実施例ではソフトウェアで実施される。
特定の一実施例では、逆数演算は結果値として入力値の逆数を作り出し、修正入力値は0.5以上1未満の範囲内の値である。別の実施例では、逆数演算は結果値として入力値の逆平方根を作り出し、修正入力値は0.25以上1未満の範囲内の値である。
固定小数点数を処理する時は、修正入力値が入るべき予め定められた範囲に応じて、受信入力値から修正入力値を作り出すことができるいくつかの方法がある。しかしながら、一実施例では、修正入力値は入力値の有効左シフトを実施して予め定められた範囲内の値を作り出すことにより作り出され、結果値の初期推定値は前の有効左シフトの影響を取り消すのに十分なテーブル出力値の有効右シフトを実施して作り出される。
第2の側面から見て、本発明は入力値に逆数演算を実施して作り出される結果値の初期推定値を発生するデータ処理装置を提供し、入力値および結果値は固定小数点値または浮動小数点値であり、データ処理装置は命令を実行してデータにデータ処理演算を実施する処理手段と、結果値の初期推定値の発生中に処理手段が参照するルックアップテーブル手段とを含み、処理手段は推定値命令に応答してルックアップテーブルを参照して、予め定められた範囲内の修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、結果値の初期推定値はテーブル出力値から引き出される。
第3の側面から見て、本発明は入力値に逆数演算を実施することにより作り出される結果値の初期推定値を発生するデータ処理装置の動作方法を提供し、それは入力値および結果値は固定小数点値または浮動小数点値であり、前記方法は(a)入力値から予め定められた範囲内の修正入力値を評価し、(b)推定値命令に応答して、処理論理を利用してルックアップテーブルを参照し、修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、(c)テーブル出力値から結果値の初期推定値を引き出すステップを含んでいる。
単なる例として添付図に例示されている実施例について本発明をさらに説明する。図1は本発明の一実施例に従ったデータ処理装置10を略示するブロック図である。データ処理装置10は必要とする命令およびデータ値が格納されるメモリシステム20に接続される。データ処理装置10はメモリ20から取得される一連の命令を実行するようにされている。特に、各命令は命令デコーダ70によりメモリ20から取得され、そこで命令はデコードされ命令に応じて適切な制御信号がデータ処理装置の他のエレメントに送られて命令により指定された操作がインプリメントされる。
データ処理装置10はメモリ20からのデータ値をデータ処理装置のレジスタファイル30内にロードし、レジスタファイル30からのデータ値をメモリ20に格納するロード/ストア・ユニット60を内蔵している。
データ値に算術演算を実施するために算術論理演算装置(ALU)パイプライン50が設けられ、ALUパイプライン50への入力データ値は入力マルチプレクサ40により与えられる。典型的に、ALUパイプライン50内で算術演算を実行する時は、必要な入力データ値がレジスタファイル30から入力マルチプレクサ40を介してALUパイプライン50へ送られる(これらのデータ値は算術演算を指定する命令を実行する前にレジスタファイル30内に格納されている)。
ALUパイプライン50から出力されたデータ値は適切なデスティネーションレジスタに格納するためにレジスタファイル30へ送ることができ、さらに/またはそのデータ値が後続算術演算用入力として必要であれば入力マルチプレクサ40への入力として転送し戻すことができる。本発明の実施例では、2つの一定値を入力マルチプレクサ40に与えることもでき、それらは命令デコーダ70から与えられる制御信号に応じて入力マルチプレクサ40が選択することができる。
後述するように、データ処理装置が精緻化ステップの反復実行を伴う逆数演算を実施している時は、精緻化ステップの一部は乗算-累算演算の実施を必要とすることがあり、そこでは2つの値が乗算され次に定数から減じられる。特に、一実施例では、逆数演算は結果値として入力値の逆数を作り出し、ここでは必要な定数は値「2」であり、この値はレジスタファイル30のレジスタに予めロードすることなく入力マルチプレクサ40へ一入力の一つとして与えられる。同様に、もう1つの実施例では、逆数演算は結果値として入力値の逆平方根を作り出し、ここでは必要な定数は値「3」である。図1に示すように、やはりこの一定値はレジスタファイル30のレジスタに最初にロードすることなく入力マルチプレクサ40に直接与えられる。
図2はデータ処理装置10内の前記したタイプの逆数演算をインプリメントするために実施されるステップのシーケンスを示すフロー図である。最初に、ステップ110において、逆数演算の対象である入力値がフォーマット化されてテーブルルックアップを実施するのに必要なビットを抽出することができる修正入力値を作り出し、テーブルルックアップの出力は結果値に対する初期推定値を引き出すのに使用される。
逆数演算は入力値として固定小数点データ値または浮動小数点データ値を指定することができる。固定小数点データ値は小数点がデータ値内の予め定められた点に存在することを意味する値である。たとえば、16.16固定小数点フォーマットは32ビット値が小数点の前に16ビットを有し、小数点の後に16ビットを有するものと推定する。整数値は最下位ビットのすぐ右に小数点が存在すると考えられる固定小数点値の特定例である。
規定された正規範囲内の浮動小数点データ値は次のように表すことができ、
±1.x*2y
ここに、x=小数部(fraction)
1.x=仮数部(significand)(mantissaとしても知られる)
y=指数部
規定された正規以下範囲内の浮動小数点データ値は次のように表すことができ、
±0.x*2min
ここに、x=小数部(fraction)
0.x=仮数部(significand)(mantissaとしても知られる)
min=-126(単精度値に対して)、-1022(2倍精度値に対して)
ここに記述される実施例は正規浮動小数点値および特殊ケース(無限大、非数値(Not−a−Number values:NaNs)およびゼロ)を処理するようにされており、正規値以下は符号付ゼロ値に揃えられる。しかしながら、代替実施例はここに記述されたある原理を使用して直接正規値以下を処理するようにすることができる。
最初に逆数演算の対象である入力値が浮動小数点値である状況を考えると、修正入力値がALUパイプライン50内で評価され、修正入力値の仮数部(significand)が予め定められた範囲内となるようにされる。特に、逆数演算が結果値として入力値の逆数を作り出す場合、修正入力値はその仮数部(significand)が0.5以上で1よりも小さい範囲内の値である。ステップ110において、修正入力値のこのような評価はオリジナル入力値により指定されるある小数部(fraction)ビットを、図3に略示するような、テーブル入力として選択できるようにするALUパイプライン50内での入力値の適切なフォーマット化を介して達成することができる。
図3に示すように、単精度浮動小数点値、すなわち32ビット値、を考えると、浮動小数点値の小数部(fraction)はビット22から0により与えられる。入力値は1.ab..x2nの形であり、したがって、仮数部(significand)は当然1以上で2よりも小さい範囲内である。0.5以上で1よりも小さい範囲内の仮数部(significand)を作り出すために、指数値の関連する増分と共に、仮数部(significand)の有効な1ビット右シフトが必要である。したがって、修正入力値の仮数部(significand)は0.1ab...でありテーブルルックアップは0.1ab...の値に基づいて実施される。
しかしながら、先導する「1」が含まれる、オリジナル入力値から小数部(fraction)ビットを適切に選択するだけで同じ効果を実現できるため、実際には修正入力値を作り出すのにシフト操作を実施する必要はない。特に、図3に示すように、小数部(fraction)の最上位8ビット(F7からF0)が抽出されテーブルルックアップを実施するのに使用される。
再度浮動小数点値について、逆数演算が結果値として入力値の逆平方根を作り出す状況を考えると、ステップ110において実施されるフォーマット化はその仮数部(significand)が0.25以上で1よりも小さい範囲内である修正入力値を選択する。それにより、ルックアップテーブルからの出力値を直接使用して1以上で2よりも小さい範囲内に仮数部(significand)を形成することが保証される。
一実施例では、図3に示すように、ステップ110における必要なフォーマット化は修正入力値(この段階で実際に作り出される必要はない)の形に関連する入力値の23ビット小数部(fraction)から適切なビットを選択することができるマルチプレクサ論理によりALUパイプライン50内で実施される。特に、この状況においてその指数部が偶数である修正入力値を作り出すように、修正入力値は入力値の指数部の関連する増分と共に、入力値の仮数部(significand)の有効1ビットまたは有効2ビット右シフトの結果であると考えることができる。次に、テーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、修正入力値の指数部を半分にしかつ否定する(negating)ことにより結果値の推定値の指数部を作り出して結果値の初期推定値を引き出すことができる。修正入力値の指数部を半分にして初期結果値の指数部を作り出す必要があるため、それが偶数の指数部を有するように修正入力値が選択される理由となる。
図3の最後の2つのエントリについて、入力浮動小数点値が偶数指数部を有するか奇数指数部を有するかに応じて異なるテーブル入力が発生されることが判る。特に、入力浮動小数点値が偶数指数部を有する場合には、修正入力値はその中に偶数指数部を保持するように有効2ビット右シフトから生じる値となり、入力値が奇数指数部を有する場合には、修正入力値が偶数指数部を有するように有効1ビット右シフトにより修正入力値が作り出される。
図3に示すビットはオリジナル入力値のビットであり、前記したように、修正入力値はこの段階で直接作り出される必要はなく、その代りオリジナル入力ビットがテーブル入力として選択される方法によりシミュレートすることができる。特に、図3に示すように、入力浮動小数点値が偶数指数部を有する場合、8ビットテーブル入力値が作り出されその最上位ビットは0であり、残りの7ビットは入力値の小数部(fraction)の最上位7ビットにより形成される。同様に、浮動小数点値が奇数指数部を有する場合、8ビットテーブル入力値は最上位ビットとして論理1値を有し、入力値の小数部(fraction)の最上位7ビットに対応する7ビットが続く。
次に、入力値が固定小数点値である状況について考えると、一実施例ではフォーマット化ステップ110は論理1値が最上位ビット位置または最上位ビット位置の次に現れるようにソフトウェアにより実施される有効シフト操作を含んでいる。次にルックアップテーブルへの入力を決定するためにALUパイプライン50により使用されるのは得られる修正入力値であり、図3に示されているのはこの修正入力値である。特に、図3は32ビット固定小数点値を示し、ソフトウェアは先導する1がビット位置31またはビット位置30となるようにオリジナル値を既に修正しているものとする。
逆数演算が結果値として入力値の逆数を作り出す場合、図3のトップエントリに示すように、ソフトウェアは固定小数点値の先導する1が最上位ビット位置(すなわち、ビット31)となるように必要な左シフトを実施する。その後、ステップ110においてALUパイプライン50はテーブル入力として修正入力値のビット30から23を形成する8ビットを選択するようにされる。
逆数演算が結果値として入力値の逆平方根を作り出す状況に付いて考えると、ソフトウェアは先導する1が2つの最上位ビット位置のいずれか一方となるようにオリジナルの固定小数点値の偶数ビット位置の左シフトを実施する。特に、図3に示すように、その結果最上位ビット(ビット31)が論理ゼロ値であれば、最上位ビット位置にゼロを設定し、次に、ビット29から23を使用してテーブル入力の他の7ビットを形成することによりALUパイプライン50内で8ビットテーブル値が作り出される。修正固定小数点値が最上位ビット位置に論理1値を有する場合には、テーブル入力値は最上位ビット位置に論理1値を有するように選択され、修正入力値のビット30から24を使用してテーブル入力値の残りの7ビットを形成する。
ステップ110におけるフォーマット化ステップに続いて、結果値Xの推定値を作り出すために図3について前記した8ビットテーブル入力値を使用して、ステップ120においてテーブルルックアップが実施される。逆数演算が結果値として入力値の逆平方根を作り出す時に使用されるルックアップテーブルは、逆数演算が結果値として入力値の逆数を作り出す時に使用されるルックアップテーブルとは異なるが、これら2つのタイプの逆数演算の両方に対して同じルックアップテーブルを固定小数点値および浮動小数点値の両方に使用することができる。ルックアップテーブルの出力からこの推定値が作り出される方法については図4に関してより詳細に説明する。
その後、ステップ130において、変数iがゼロに等しく設定され、次に、ステップ140においてXが十分な精度であるかどうか、すなわち、結果値が所望の後続アプリケーションに対して必要な精度であるかどうかが確認される。Xは8ビットの精度を有し、それで十分なケースもある。そうであれば、プロセスはステップ150に分岐し、そこで値Xが結果値として返される。
しかしながら、Xが十分な精度であると見なされなければ、ステップ160においてiは1だけ増分され、次に、ステップ170において精緻化ステップが実施されて結果値Xの訂正値を作り出す。実施される精緻化ステップは逆数演算が入力値の逆数を作り出すか入力値の逆平方根を作り出すかによって決まり、図5および6についてより詳細に説明する。本発明の実施例では、精緻化ステップが実施される度に結果値の精度のビット数は有効に2倍とされる。したがって、最初の反復後に結果値Xには有効に16ビットの精度がある。
ステップ170において、プロセスはステップ140へループバックし、そこで結果値Xは十分な精度であるかどうか再度確認される。十分でなければ、精緻化ステップが繰り返されるが、必要な精度が作り出されておれば、プロセスはステップ150へ分岐しそこで結果Xが返される。
図4は初期推定値Xを作り出すためにテーブルルックアッププロセスが使用される方法をより詳細に示すフロー図である。ステップ200において、フォーマット化された入力値が受信され、その後ステップ210においてそのフォーマット化された入力値は所要範囲内であるかどうか確認される。固定小数点入力は全ビットの左にインプリシット2進点を有するものと解釈される、すなわち、任意の入力ビッットパターンがゼロ以上で1よりも小さいと解釈される。有効な入力の範囲は、さらに、次のように制限される。
1)逆数演算が固定小数点入力の逆数を作り出している時は、範囲内は高位ビットが1であることを意味する(したがって、数は1/2以上である)。
2)逆数演算が固定小数点入力の逆平方根を作り出している時は、範囲内は高位2ビットの少なくとも1つが1であることを意味する(したがって、数は1/4以上である)。
浮動小数点入力に対して、フォーマット化された入力値が範囲内であるかどうかの確認はオリジナル入力浮動小数点値が規定された「正規の」範囲内であることの確認を伴うにすぎない。
ステップ210において、フォーマット化された入力値が範囲内でないことが確認されると、適切なデフォールト結果値を発生するためにステップ220において例外処理が実施される。特に、入力値が固定小数点値であるがALUパイプライン50により判断された値の最上位ビット(図3参照)が逆機能を作り出す時に論理1値ではない、あるいは最上位2ビットのいずれも逆平方根機能を実施する時に論理1値ではなければ、ステップ220における例外処理はオール1からなる結果値を返す。
逆数演算が入力浮動小数点値の逆数を求めている状況を考えると、入力値がNaNであればステップ220はデフォルトNaNを返し、入力値がゼロまたは正規値以下であれば、例外処理ステップ220は同符号の無限大を返し、入力値が無限大であれば、例外処理ステップ220は同符号のゼロを返す。
逆数演算が入力浮動小数点値の逆平方根を作り出している時は、入力値がNaN、負の正規または負の無限大であれば、例外処理ステップ220はデフォルトNaNを返し、入力値がゼロまたは正規値以下(正または負)であれば例外処理ステップ220は正の無限大値を返し、入力値が正の無限大であれば、例外処理ステップ220は正のゼロ値を返す。
ステップ210において、フォーマット化された入力値が範囲内であることが確認されるものと仮定すると、ステップ230において選択されたビットがテーブルルックアップを実施するために抽出され、このプロセスは図3について前記されている。その後、ルックアップテーブルから8ビット出力値を作り出すために、図3について前記した8ビットテーブル入力値を使用してステップ235においてテーブルルックアップが実施される。
ステップ240において、プロセスは入力値が固定小数点値であるか浮動小数点値であるかに応じて2つの方法のいずれかに分岐する。入力値が固定小数点値であれば、プロセスはステップ245へ分岐し、そこで32ビット値の上位9ビットにテーブルルックアップ出力値が出力される(9ビットの最上位は含意論理1値である)。
その後、修正入力値を作り出すために実施された前の左シフト操作の影響を取り消すのに十分な右シフト操作を実施するための付加ステップが典型的にステップ250においてソフトウェアによりとられる。
入力値が浮動小数点値であれば、プロセスは替わりにステップ255へ分岐し、そこで初期推定値に対する指数部が計算される。前記したように、逆数演算が結果値として入力値の逆数を作り出す時は、ALUパイプラインは修正入力値として、指数部への関連する増分と共に、仮数部(significand)を所要範囲内とする仮数部(significand)の有効1ビット右シフト結果を選択する。これはルックアップテーブルからの出力を直接使用して1以上で2よりも小さい範囲内に仮数部(significand)を形成することができることを保証し、したがって、ステップ255において初期推定値の指数部を発生するのに必要なのは入力値の指数部を1だけ増分し、次に、その値を否定(negate)して初期推定値に対する指数部を作り出すことだけである。
逆数演算が結果値として入力値の逆平方根を作り出す時は、前記したように、ALUパイプラインは修正入力値として、その指数部を形成する指数部の関連する増分と共に、有効1ビットまたは2ビット右シフトの結果を選択する。ステップ255において、修正入力値のこの指数部が求められ、次に、修正入力値のこの指数部を2で除して結果値を否定することにより初期推定値の指数部が引き出される。入力値のオリジナル指数部の値に応じた仮数部の有効1ビットまたは2ビット右シフトの選択により修正入力値は常に偶数指数部を有するものとすれば、このプロセスは容易に実施することができる。
その後、ルックアップテーブルからの8ビット出力を小数部(fraction)の最上位8ビットとして使用し、かつステップ255で計算された指数部を指数部として使用することにより、ステップ260において初期浮動小数点推定値Xが発生される。符号はオリジナル入力値の符号と同じである。その後、ステップ265においてプロセスは終了する。
一実施例では、前記した両方のタイプの逆数演算に対して別々の推定値命令が与えられるが、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じ推定値命令が使用される。入力値が浮動小数点値であれば、その推定値命令はオペランドとしてオリジナル入力値を指定し、ALUパイプラインは推定値命令に応答して修正入力値を評価し、テーブルルックアッププロセスを実施し、テーブル出力値から結果値の初期推定値を引き出す。しかしながら、入力値が固定小数点値であれば、このような固定小数点数に対する多数の異なるフォーマットが与えられれば(理論上、含意2進点はソフトウェアしか知らない固定小数点値内の任意のビット位置とすることができる)、図3について前記したように、オリジナル入力値は推定値命令を発行する前にソフトウェアにより修正され、推定値命令はその修正入力値を指定する。さらに、ALUパイプライン内での推定値命令の実行は32ビット値の上位9ビット内にテーブル出力値を作り出すにすぎず、ソフトウェアは次にオリジナル入力固定小数点値のフォーマットの知識に基づいて初期固定小数点推定値Xを発生するために任意所要のシフトを実施する責任がある。
図2について前記したように、一度初期推定値Xが求められると、次に、ステップ140においてその推定値は十分な精度であるかどうかを確認することができる。最初に入力値が固定小数点値である状況を考えると、結果値Xのオリジナル推定値は所要レベルの精度を有するケースが多い。しかしながら、そうでなければ、図2のステップ170で必要とされる任意の精緻化ステップがソフトウェアで実施される。
入力値が浮動小数点値であれば、一実施例では、図2のステップ170で識別される必要な精緻化ステップを実施するためにALUパイプライン50内で実行することができる付加命令が定義される。特に、精緻化ステップは下記の計算を実施するものと考えることができる。
=Xi-1*M(ここに、Xはi番目の反復に対する結果値の推定値)である。
逆数演算が入力値の逆数計算である状況では、
M=2-Xi-1*d(ここに、dは入力値)である。
また、逆数演算が入力値の逆平方根計算であれば、
M=(3-Zi-1*d)/2,ここに、Zi-1=(Xi-1)である。
一実施例では、データ処理装置は2つの特定の命令を指定し、その一方によりデータ処理装置は逆数演算が入力値の逆数を求めている場合のMを計算し、その他方によりデータ処理装置は逆数演算が入力値の逆平方根を求めている場合のMを計算する。
逆数演算が入力値の逆数を求めている場合の精緻化ステップの実施が図5に略示されている。ステップ300において、データ処理装置は計算M=2-Xi-1*dを実施するようにされる。これは、ここではvrecps命令と呼ばれる、単一命令を発行して達成される。この命令はそのオペランドの2つとしてXi-1およびdの値を含むレジスタを指定する。計算に必要な一定値2は命令デコーダ70内の命令のデコーディングにより導かれ、それは必要な制御信号を入力マルチプレクサ40に送って定数2を適切なポイントにおいて選択させる。
一実施例では、ALUパイプライン50は2つの機能ユニット、すなわち、加算演算を処理する加算ユニットおよび乗算演算を処理する乗算ユニット、を含み各ユニットは4ステージパイプラインを含んでいる。ステップ300で規定された計算の実施は各機能ユニットにおける4サイクル実行を含んでいる。特に、最初の4サイクルにおいて乗算演算が乗算機能ユニット内で実施され、次の4サイクルにおいて一定値2からの積の減算が加算機能ユニットにおいて実施される。したがって、このステップはALUパイプライン50内で8クロックサイクルを要する。
その後、ステップ310において、さらに乗算機能を発行することによりX=Xi-1*Mの計算が実施され、この計算はALUパイプラインを通る単一パスをとるため、さらに4サイクルを要する。
図6は逆数演算が入力値の逆平方根を求めることである場合に精緻化ステップをインプリメントするために実施されるステップを示すフロー図である。ステップ350において、乗算命令が発行されて結果値の前の推定値を二乗させて値Zi-1を作り出す。これはALUパイプライン50を通る単一パスをとるため、4サイクルを要する。
その後、ステップ360において、以後vrsqrts命令と呼ばれる単一命令が発行され、それによりデータ処理装置はM=(3-Zi-1*d)/2の計算をするようにされ,ここに、Zi-1=(Xi-1)である。ALUパイプラインを通る最初のパス中に乗算ステップが実施され、その後パイプラインを通る後続パスにおいて一定値3から積が減じられる。前記した精緻化命令vrecpsと同様に、一定値3は命令デコーダ70内で実施される命令のデコーディングにより導かれ、次に、それは必要な制御信号を入力マルチプレクサ40に送って一定値3を適切なポイントにおいて選択させる。
乗算-累算結果を2の因子で除算することは純粋に指数値から1を減じることにより達成され、これはALUパイプライン50を通る第2パス中にALUパイプラインの指数パス内で実施される。
その後、ステップ370において、X=Xi-1*Mの計算が実施され、それはALUパイプライン50を通る単一パスをとるため、さらに4サイクルを要する。
下記の簡単な説明は、レジスタファイル30内の特定のレジスタをどのように使用できるかの一例の指示と共に、図5および6のプロセスをインプリメントするために発行することができる命令のシーケンスを示す。
逆数
レジスタファイル内で、reg S0はdを保持し、
reg SはX(ここに、X=1/d)を保持し、
reg Sは仮の値を保持する。
下記の命令シーケンスが実施される。
Vrecpe S1,S0 S0内の値を使用してテーブルルックアップを実施してX0を求め、レジス
タS1内にX0を置く。
Vrecps S2,S1,S0 M=2-X0dの計算を実施し、レジスタS2内にMを置く。
Vmul S1,S2,S1 X1=X0xMの計算を実施し、レジスタS1内にX1を置く。
そこで命令VrecpsおよびVmulは結果が所望の精度を有するまで繰り返される。
逆平方根
レジスタファイル内で、reg S0はdを保持し、
reg SはX(ここに、X=1/√d)を保持し、
reg Sは仮の値を保持する。
下記の命令シーケンスが実施される。
Vrsqrte S1,S0 S0内の値を使用してテーブルルックアップを実施してX0を求め、レジ
スタS1内にX0を置く。
Vmul S2,S1,S1 Z0=(X0)2の計算を実施し、レジスタS2内にz0を置く。
Vrsqrts S2,S2,S0 M=(3-Z0d)/2の計算を実施し、レジスタS2内にMを置く。
Vmul S1,S2,S1 X1=X0xMの計算を実施し、レジスタS1内にX1を置く。
命令Vmul, VrsqrtsおよびVmulは結果が所望の精度を有するまで繰り返される。
図7は図5および6の精緻化ステップをインプリメントするためにALUパイプライン50内に設けられる論理を示すブロック図である。乗算ユニット400が設けられそれは、パス402,404を介してそれぞれ2つの入力値AおよびBを受信することができる。さらに、パス415を介して乗算ユニット400に制御信号mul_instが入力されその乗算ユニットの動作を制御する。
累算論理420も設けられ、乗算ユニット400からの出力の反転バージョンをパス444を介して受信し、さらにマルチプレクサ430からの出力をパス442を介して受信するようにされた加算器ユニット440を含んでいる。加算器ユニットはパス446上の+1のキャリーイン値も受信する。したがって、加算器ユニット440は乗算ユニット400により発生された積をマルチプレクサ430からパス442を介して与えられた値から減じる。累算ユニット420の動作を制御するために、パス450を介して制御信号add_instが与えられる。
マルチプレクサ430は入力としてオペランドC、定数2および定数3を有する。図1について、マルチプレクサ430は実際にはALUパイプライン50ではなく入力マルチプレクサ40内に典型的に存在するが、図7の説明を簡単にするために、add_inst制御信号により制御される累算論理420の一部として示されている。
制御信号mul_instは正規乗算命令が実行されているかあるいは前記した精緻化命令vrecpsまたはvrsqrtsが実施されているかを乗算ユニット400に対して確認する。この情報は乗算ユニットが任意の例外条件をどのように処理するかを決定できるようにするのに必要である。特に、オペランドA,Bの一方が+0または-0であり他方のオペランドが+無限大または-無限大であれば、正規の乗算演算に対して乗算ユニットはデフォールトNaN値を出力する。しかしながら、いずれかの精緻化命令が実施されている時に同じ状況が生じると、乗算ユニットは命令がvrecps命令であれば値2を出力し命令がvrsqrts命令であれば値3/2を出力する。
制御信号add_instは累算論理が正規累算命令により指定された累算演算を実施しているか、あるいは命令がvrecps命令またはvrsqrts命令であるかを識別し、それによりマルチプレクサ430の入力の1つを適切に選択させる。また、それは加算器ユニットが加算または減算を実施するかどうかも確認する(図7には減算に対する入力パスしか示されていないが、加算に対しては乗算ユニット400から加算器ユニット440へ非反転出力を与えてキャリーイン値をゼロを設定するだけでよい)。vrecpsまたはvrsqrts命令に対して、加算器ユニットは常に減算を実施する。特に、vrecps命令に対して、加算器ユニットは2-AxBの計算を実施する。vrsqrts命令に対して、加算器ユニットは(3-AxB)/2の計算を実施する。vrecps命令に対して、オペランドAは値Xi-1でありオペランドBは値dである。vrsqrts命令に対して、オペランドAは(Xi-1でありオペランドBはdである。
一実施例に従った前記装置を使用して実施した逆数または逆平方根機能の6つの例を下記に示す。
1) 浮動小数点逆数
推定値プロセス
d=6=40c00000
1/d=0.1666667=3e2aaaab
6=1.1000 0000x22 浮動小数点フォーマット
したがって、小数部(fraction)は.1000 0000
ルックアッププロセスはテーブルから返される値として.01010101を作り出す
=1.01010101 プリペンドされた1を有する
最終指数部は-(exp+1)=-3
返される推定値=3e2a8000
=0.166504
精緻化ステップ
d=6.0=40c00000
X0=0.166504=3e2a8000
2=4000 0000
M=2-X0*d=4000 0000-(3e2a8000x40c00000)
=4000 0000-3f7c0009
=3f801ffc
X1 =M*X0
=3f801ffcx3e2a8000
X 1 =3e2aaa9b=0.1666664(すなわち、1/dへの良い近似値)
2)浮動小数点逆平方根(奇数指数部を有する)
推定値プロセス
d=0.875 =3f60 0000
1/√d=1.0690445=3f88d677
d=1.1100 0000x2-1 浮動小数点フォーマット(指数部は奇数)
=0.1110 0000x20
ルックアッププロセスはテーブルから返される値として.0001 0001を与える
=1.0001 0001 プリペンドされた1を有する
推定値指数部=-(-1+1)/2=0
返される推定値=1.00010001x20
=3f888000
精緻化ステップ
Z=X0*X0
=3f888000*3f888000
=3f919080
M=(3-Z*d)/2
=(4040 0000-(3f919080x3f600000)/2
=(4040 0000-3f7ebcco)/2
=3f8050c8
X1=X0*M
=3f888000x3f8050c8
X1=3f88d625
=1.0690352(すなわち、1/√dへの良い近似値)
3) 浮動小数点逆平方根(偶数指数部を有する)
推定値プロセス
d=6.0=40c00000
1/√d=0.4082483=3ed105eb
d=6.0=1.10000000x22 浮動小数点フォーマット(指数部は偶数)
=0.01100000x24 2だけ右シフトの場合
テーブルルックアップにより.10100010が与えられる。
=1.10100010 1がプリペンドされている。
推定値指数部=-exp/2=-4/2=-2
返される推定値=3ed10000
精緻化ステップ
Z=X0*X0=3ed10000.3ed10000
=3e2aa100
M=(3-Z*d)/2
=(3-(3e2aa100x40c00000))/2
=(40400000-3f7ff180)/2
M=3f8003a0
X1=X0*M
=3ed10000.3f8003a0
X 1 =3ed105eb
=0.4082483 (すなわち、1/√dの良い近似値)
4. 1/6, 16.16フォーマットに対する固定小数点推定
入力d=6=0000000000000110.0000000000000000(2進)
ソフトウェアは先導する1が高位ビットにあるように13だけ左シフトを実施する。
d’=1100000000000000.0000000000000000
テーブルルックアップは下記を返す。
X’=1010101010000000.0000000000000000
ソフトウェアは31-13=18ビット位置だけ右シフトして16.16フォーマットを回復する。
=0000000000000000.0010101010100000=0.166504
真の1/6=0.166667(6有効数字)
5. 1/√6, 16.16フォーマットに対する固定小数点推定
入力d=6=0000000000000110.0000000000000000(2進)
ソフトウェアは先導する1が高位2ビットにあるように12だけ左シフトを実施する。
左シフトは偶数のビット位置でなければならない。
d’=0110000000000000.0000000000000000
テーブルルックアップは下記を返す。
X’=1101000100000000.0000000000000000
ソフトウェアは23-(12/2)=17ビット位置だけ右シフトして16.16フォーマットを回復する。
=0000000000000000.0110100010000000=.408203
真の1/√6=0.408248(6有効数字)
6. 1/√3, 16.16フォーマットに対する固定小数点推定値
入力d=3=0000000000000011.0000000000000000(2進)
ソフトウェアは先導する1が高位2ビットにあるように14だけ左シフトを実施する。
左シフトは偶数のビット位置でなければならない。
d’=1100000000000000.0000000000000000
テーブルルックアップは下記を返す。
X’=1001001110000000.0000000000000000
ソフトウェアは23-(14/2)=16ビット位置だけ右シフトして16.16フォーマットを回復する。
=0000000000000000.1001001110000000=.576172
真の1/√3=0.577350(6有効数字)
本発明の実施例で使用される推定値命令および精緻化命令は多様な形をとることができる。図8Aから8Dはこれらの命令に対するフォーマットの例を示す。特に、図8Aは結果値として入力値の逆数を作り出す逆数演算に対する初期推定値を求めるのに使用される推定値命令の符号化を示し、図8Bは結果値として入力値の逆平方根を作り出す逆数演算に対する初期推定値を求めるのに使用される推定値命令の符号化を示す。いずれの場合でもVm(5ビット)はソースレジスタの識別でありVd(5ビット)はデスティネーションレジスタの識別である。
図8Aから8Dに開示された実施例において、命令は実際上Single Instruction Multiple Data (SIMD)処理を実施するようにされたALUパイプライン上で実行するSIMD命令である。Qビット(ビット6)はオペランドレジスタ内のデータが2つの32ビットデータ値を表すか4つの32ビットデータ値を表すかを示す。この実施例では、ALU論理は2つの32ビットデータ値に並列に動作することができ、したがって、一時に2つの入力値に対する推定値を計算することができる。4つの入力値に対しては、一時に2つの値がALUパイプラインのパイプラインステージに通される。Tビット(ビット8)はデータタイプ、すなわち、データが固定小数点データであるか浮動小数点データであるかを識別する。
図8Cはvrecps命令に対するフォーマット、すなわち、逆数演算が結果値として入力値の逆数を作り出す場合にM=2-Xi-1*dの計算を実施するのに使用される精緻化命令の例を示す。図8Dは、たとえば、逆数演算が結果値として入力値の逆平方根を作り出す場合に、M=(3-Zi-1*d)/2の計算を実施するのに使用されるvrsqrts命令に対する符号化を示し、Zi-1=(Xi-1)2である。
値VmおよびVnはソースレジスタを識別し、値Vdはデスティネーションレジスタを識別する。例示した実施例でも、命令はSIMD処理を実施するようにされたALUパイプライン上で実行するSIMD命令であり、Qビット(ビット6)はオペランドレジスタ内のデータが2つの32ビットデータ値を表すか4つの32ビットデータ値を表すかを示す。
前記説明から、前記した実施例は入力値に逆数演算を実施することにより作り出される結果値の初期推定値を求めるための効率的技術を提供することが理解できる。特に、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず、その初期値を発生するのに同じ処理論理が使用され、ルックアップテーブルへの入力として使用される特定の修正入力値に対しては、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生される。
さらに、前記した実施例は初期推定値から結果値を発生する時に実施される精緻化ステップをインプリメントするための非常に効率的な技術を提供する。特に、逆数演算が入力値の逆数を評価している状況、および逆数演算が入力値の逆平方根を評価している状況の両方に対して、単一精緻化命令が与えられてデータ処理装置に精緻化ステップの臨界部分を実施させる。これはコード密度を著しく改善する。さらに、精緻化ステップのその部分で必要な定数は命令自体により予め決定されており、精緻化ステップのその部分を実行する前にレジスタファイル内にロードする必要がない。精緻化ステップが実施される度に、その目的に対してレジスタファイルに書き込まれている任意の一定値は典型的にオーバライトされ、したがって、精緻化ステップを再度実行する必要があればレジスタファイル内にリライトし戻す必要があるため、これはレジスタファイルの使用効率の改善に関して特に有利である。
本発明の特定の実施例について説明してきたが、本発明はそれに限定はされず、発明の範囲内で多くの修正および変更を行えることがお判りであろう。たとえば、本発明の範囲を逸脱することなく従属項の特徴と独立項の特徴をさまざまに組み合わせることができる。
本発明の一実施例に従ったデータ処理装置のブロック図である。 逆数演算をインプリメントするために一実施例におけるデータ処理装置内で実施されるステップを示すフロー図である。 図2の過程の実行中にルックアップテーブルにアクセスするのに修正入力値がどのように使用されるかを示す図である。 一実施例に従った逆数演算の結果値に対する初期推定値の発生をより詳細に示すフロー図である。 入力値の逆数を求める時に精緻化ステップをインプリメントするために一実施例に従って実施される一連の計算を示すフロー図である。 入力値の逆平方根を求める時に精緻化ステップをインプリメントするために一実施例に従って実施される一連の計算を示すフロー図である。 図5および図6の過程をインプリメントするために図1のデータ処理装置内に設けられたエレメントを略示する図である。 AからDは一実施例に従った推定値命令および精緻化ステップ命令のフォーマットを示す図である。
符号の説明
10 データ処理装置
20 メモリシステム
30 レジスタファイル
40 入力マルチプレクサ
50 ALUパイプライン
60 ロード/ストア・ユニット
70 命令デコーダ
400 乗算ユニット
402,404,415,442,444,446,450 パス
420 累算ユニット
430 マルチプレクサ
440 加算器ユニット

Claims (13)

  1. 入力値に逆数演算を実施することにより作り出される結果値の初期推定値を発生するデータ処理装置であって、入力値および結果値は固定小数点値または浮動小数点値であり、前記データ処理装置は、
    命令を実行してデータにデータ処理演算を実施するように動作する処理論理と、
    結果値の初期推定値の発生中に処理論理が参照するルックアップテーブルと、
    を含み、
    処理論理は推定値命令に応答してルックアップテーブルを参照し、予め定められた範囲内の修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、
    結果値の初期推定値はテーブル出力値から引き出すことができるデータ処理装置。
  2. 請求項1に記載のデータ処理装置であって、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じ推定値命令が使用されるデータ処理装置。
  3. 請求項1に記載のデータ処理装置であって、
    入力値および結果値は浮動小数点数であり、
    推定値命令はオペランドとして入力値を指定するように動作することができ、
    処理論理は推定値命令に応答して修正入力値を評価し、ルックアップテーブルを参照してテーブル出力値を発生し、テーブル出力値から結果値の初期推定値を引き出すように動作することができる、データ処理装置。
  4. 請求項3に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆数を作り出し、処理論理はその仮数部(significand)が0.5以上1未満の範囲内である値を修正入力値として選択するように入力値を操作するように動作することができるデータ処理装置。
  5. 請求項4に記載のデータ処理装置であって、処理論理は修正入力値として入力値の仮数部(significand)の有効1ビット右シフトの結果を選択するように動作することができ、結果値の初期推定値はテーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、入力値の指数部を増分かつ否定して結果値の推定値の指数部を作り出すことにより引き出されるデータ処理装置。
  6. 請求項3に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆平方根を作り出し、処理論理はその仮数部(significand)が0.25以上1未満の範囲内である値を修正入力値として選択するように入力値を操作するように動作することができるデータ処理装置。
  7. 請求項6に記載のデータ処理装置であって、処理論理は、修正入力値が偶数の指数部を有するように、入力値の指数部の関連する増分と共に、入力値の仮数部(significand)の有効1ビットまたは有効2ビット右シフトの結果を修正入力値として選択するように動作することができ、結果値の初期推定値はテーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、かつ修正入力値の指数部を半分して否定することにより結果値の推定値の指数部を作り出すことにより引き出されるデータ処理装置。
  8. 請求項1に記載のデータ処理装置であって、
    入力値および結果値は固定小数点数であり、
    修正入力値は推定値命令を実行する前に作り出され、
    推定値命令はオペランドとして修正入力値を指定し、
    処理論理は推定値命令に応答してルックアップテーブルを参照しテーブル出力値を発生し、
    推定値命令を実行した後で後続処理ステップが実施されてテーブル出力値から結果値の初期推定値を引き出す、データ処理装置。
  9. 請求項8に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆数を作り出し、修正入力値は0.5以上1未満の範囲内の値であるデータ処理装置。
  10. 請求項8に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆平方根を作り出し、修正入力値は0.25以上1未満の範囲内の値であるデータ処理装置。
  11. 請求項8に記載のデータ処理装置であって、修正入力値は入力値の有効左シフトを実施して予め定められた範囲内の値を作り出すことにより作り出され、結果値の初期推定値は前の有効左シフトの影響を取り消すのに十分なテーブル出力値の有効右シフトを実施して作り出されるデータ処理装置。
  12. 入力値に逆数演算を実施することにより作り出される結果値の初期推定値を発生するデータ処理装置であって、入力値および結果値は固定小数点値または浮動小数点値であり、前記データ処理装置は、
    命令を実行してデータにデータ処理演算を実施する処理手段と、
    結果値の初期推定値の発生中に処理手段が参照するルックアップテーブルと、
    を含み、
    処理手段は推定値命令に応答してルックアップテーブルを参照し、予め定められた範囲内の修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、
    結果値の初期推定値はテーブル出力値から引き出すことができるデータ処理装置。
  13. 入力値に逆数演算を実施することにより作り出される結果値の初期推定値を発生するデータ処理装置の動作方法であって、入力値および結果値は固定小数点値または浮動小数点値であり、前記方法は、
    (a)入力値から予め定められた範囲内である修正入力値を評価するステップと、
    (b)推定値命令に応答し、処理論理を利用してルックアップテーブルを参照して、修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生されるステップと、
    (c)テーブル出力値から結果値の初期推定値を引き出すステップと、
    を含む方法。
JP2005341857A 2005-02-16 2005-11-28 逆数演算の結果値の初期推定値を求めるデータ処理装置および方法 Active JP4476210B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/058,421 US7747667B2 (en) 2005-02-16 2005-02-16 Data processing apparatus and method for determining an initial estimate of a result value of a reciprocal operation

Publications (2)

Publication Number Publication Date
JP2006228191A JP2006228191A (ja) 2006-08-31
JP4476210B2 true JP4476210B2 (ja) 2010-06-09

Family

ID=34976544

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005341857A Active JP4476210B2 (ja) 2005-02-16 2005-11-28 逆数演算の結果値の初期推定値を求めるデータ処理装置および方法

Country Status (3)

Country Link
US (1) US7747667B2 (ja)
JP (1) JP4476210B2 (ja)
GB (1) GB2423385B (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8015228B2 (en) 2005-02-16 2011-09-06 Arm Limited Data processing apparatus and method for performing a reciprocal operation on an input value to produce a result value
JP4546557B2 (ja) * 2008-04-21 2010-09-15 三菱電機株式会社 演算装置
CN103348300B (zh) 2011-01-21 2016-03-23 飞思卡尔半导体公司 计算函数的函数值的装置和方法
US8990278B1 (en) * 2011-10-17 2015-03-24 Xilinx, Inc. Circuitry for computing mathematical functions
JP2016062404A (ja) * 2014-09-19 2016-04-25 サンケン電気株式会社 演算処理方法及び演算処理装置
US20170169132A1 (en) * 2015-12-15 2017-06-15 Analog Devices, Inc. Accelerated lookup table based function evaluation
GB2582146B (en) * 2019-03-11 2021-08-18 Graphcore Ltd Execution Unit for Evaluating Functions Using Newton Raphson Iterations

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3828175A (en) * 1972-10-30 1974-08-06 Amdahl Corp Method and apparatus for division employing table-lookup and functional iteration
US4878190A (en) * 1988-01-29 1989-10-31 Texas Instruments Incorporated Floating point/integer processor with divide and square root functions
US4999801A (en) * 1988-07-15 1991-03-12 Fujitsu Limited Floating point operation unit in division and square root operations
DE68928376T2 (de) * 1988-11-04 1998-04-02 Hitachi Ltd Vorrichtung zum multiplizieren, teilen und ziehen der quadratwurzel
JPH02156328A (ja) 1988-12-08 1990-06-15 Toshiba Corp 逆数回路
US5249149A (en) * 1989-01-13 1993-09-28 International Business Machines Corporation Method and apparatus for performining floating point division
US5274580A (en) * 1990-03-21 1993-12-28 Bull, S.A. Method for calculating the inverse of a number, and computer for performing the method
US5220524A (en) * 1990-12-13 1993-06-15 Micron Technology, Inc. Machine method to perform newton iterations for reciprocals
US5537345A (en) * 1993-10-14 1996-07-16 Matsushita Electrical Industrial Co. Ltd. Mathematical function processor utilizing table information
JPH07253874A (ja) 1994-03-15 1995-10-03 Fujitsu Ltd 演算装置
US5768170A (en) * 1996-07-25 1998-06-16 Motorola Inc. Method and apparatus for performing microprocessor integer division operations using floating point hardware
JP3352887B2 (ja) * 1996-09-09 2002-12-03 株式会社東芝 クランプ付除算器、このクランプ付除算器を備えた情報処理装置及び除算処理におけるクランプ方法
US6115733A (en) * 1997-10-23 2000-09-05 Advanced Micro Devices, Inc. Method and apparatus for calculating reciprocals and reciprocal square roots
US6163791A (en) 1998-02-02 2000-12-19 International Business Machines Corporation High accuracy estimates of elementary functions
US6341300B1 (en) * 1999-01-29 2002-01-22 Sun Microsystems, Inc. Parallel fixed point square root and reciprocal square root computation unit in a processor
JP3447614B2 (ja) * 1999-05-31 2003-09-16 株式会社東芝 分数演算器、グラフィック用セットアップエンジン、分数演算方法、及び機械読み出し可能な記憶媒体
US6912559B1 (en) * 1999-07-30 2005-06-28 Mips Technologies, Inc. System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit
US7366748B1 (en) * 2000-06-30 2008-04-29 Intel Corporation Methods and apparatus for fast argument reduction in a computing system
US6598063B1 (en) * 2000-08-14 2003-07-22 Lntel Corporation Fast calculation of (A/B)K by a parallel floating-point processor
US6732134B1 (en) * 2000-09-11 2004-05-04 Apple Computer, Inc. Handler for floating-point denormalized numbers
GB2372353A (en) 2000-12-20 2002-08-21 Sicon Video Corp Method and apparatus for calculating a reciprocal
US7080112B2 (en) * 2002-11-13 2006-07-18 International Business Machines Corporation Method and apparatus for computing an approximation to the reciprocal of a floating point number in IEEE format
US7346642B1 (en) * 2003-11-14 2008-03-18 Advanced Micro Devices, Inc. Arithmetic processor utilizing multi-table look up to obtain reciprocal operands
US7467174B2 (en) * 2004-09-23 2008-12-16 Wisconsin Alumni Research Foundation Processing unit having decimal floating-point divider using Newton-Raphson iteration
US20060179092A1 (en) * 2005-02-10 2006-08-10 Schmookler Martin S System and method for executing fixed point divide operations using a floating point multiply-add pipeline

Also Published As

Publication number Publication date
US7747667B2 (en) 2010-06-29
JP2006228191A (ja) 2006-08-31
GB0515256D0 (en) 2005-08-31
US20060184594A1 (en) 2006-08-17
GB2423385B (en) 2009-05-13
GB2423385A (en) 2006-08-23

Similar Documents

Publication Publication Date Title
JP6694880B2 (ja) 有効度整合
US20170139677A1 (en) Multiplication of first and second operands using redundant representation
JP4476210B2 (ja) 逆数演算の結果値の初期推定値を求めるデータ処理装置および方法
US9733899B2 (en) Lane position information for processing of vector
US8965946B2 (en) Data processing apparatus and method for performing a reciprocal operation on an input value to produce a result value
US9720646B2 (en) Redundant representation of numeric value using overlap bits
JP2011501310A (ja) 算術演算のためにマグニチュード検出を実行するための装置および方法
WO2018138469A1 (en) An apparatus and method for processing input operand values
US6912559B1 (en) System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit
US10459688B1 (en) Encoding special value in anchored-data element
US6598065B1 (en) Method for achieving correctly rounded quotients in algorithms based on fused multiply-accumulate without requiring the intermediate calculation of a correctly rounded reciprocal
US20170139675A1 (en) Overlap propagation operation
JPH04355827A (ja) 開平演算装置
US10963245B2 (en) Anchored data element conversion
TWI822952B (zh) 迭代運算的處理
JP4613992B2 (ja) Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
JP3727039B2 (ja) コンパイラにおける乗算実施方法
Kehtarnavaz et al. Fixed-Point vs. Floating-Point
Ziaullah et al. Design and Implementation of Floating Point ALU with Parity Generator Using Verilog HDL
WO2000048080A1 (en) Processor having a compare extension of an instruction set architecture
Kumazawa et al. Hardware algorithm for computing reciprocal of euclidean norm of a 3-D vector
JPH04358224A (ja) 開平演算装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100204

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100219

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100309

R150 Certificate of patent or registration of utility model

Ref document number: 4476210

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130319

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130319

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140319

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250