JP6923350B2 - 4入力内積回路を用いる三角関数の計算 - Google Patents

4入力内積回路を用いる三角関数の計算 Download PDF

Info

Publication number
JP6923350B2
JP6923350B2 JP2017086804A JP2017086804A JP6923350B2 JP 6923350 B2 JP6923350 B2 JP 6923350B2 JP 2017086804 A JP2017086804 A JP 2017086804A JP 2017086804 A JP2017086804 A JP 2017086804A JP 6923350 B2 JP6923350 B2 JP 6923350B2
Authority
JP
Japan
Prior art keywords
expx
adder12
bit
adder34
equal
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
JP2017086804A
Other languages
English (en)
Other versions
JP2017199370A (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 JP2017199370A publication Critical patent/JP2017199370A/ja
Application granted granted Critical
Publication of JP6923350B2 publication Critical patent/JP6923350B2/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/544Methods 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 for evaluating functions by calculation
    • G06F7/548Trigonometric functions; Co-ordinate transformations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2101/00Indexing scheme relating to the type of digital function generated
    • G06F2101/04Trigonometric functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Nonlinear Science (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)

Description

この発明は、電子回路を用いて三角関数の計算を実行するためのシステム及び方法に関する。
従来のコンピュータシステムにおいては、三角関数は、(a)基礎的数学演算(加算、減算、乗算、除算など)を用いて、三角関数を計算する一連のコンピュータ命令(b)特定の入力引数又は引数の組に対する三角関数の出力を補間するために用いられるルックアップテーブル(c)三角関数を計算する為に特別にプログラムされた専用回路、のいずれかとして実装される。これらのアプローチのすべては、(a)三角関数が複雑である程度に非常に遅い、(b)ルックアップテーブルが小さい場合、低精度である、又は、非常に大きいルックアップテーブルを必要とする高精度である、(c)サイズ制約内では利用できないであろうシリコンチップ上の大面積を必要とする、という欠点を有している。
三角関数を計算するための一般的なアプローチは、xを入力引数として、sinPi(t) = sin(π*t), cosPi(t) = cos(π*t), tanPi(t) = tan(π*t)などで関数を計算するように、三角回路を規定することである。入力引数は、しばしば、πの倍数ではなく、ラジアンで表現されるので、そのような関数への入力引数は、xをラジアンでの入力引数として、t = x/ πとして計算されなくてはならない。したがって、入力引数を計算することは、処理時間を必要とするか、チップ上のスペースを必要とする追加の処理を必要とする。
本明細書で開示するシステム及び方法は、入力引数t = x/ πを計算するための改善されたアプローチを提供する。
本発明の利点が容易に理解されるように、上に簡単に記述した本発明のより具体的な記述が、添付の図面に図示される特定の実施形態を参照してなされるだろう。これらの図面は、本発明の典型的な実施形態を図示するのみであり、従って、その範囲を限定するとは考えられるべきではないということの理解の下に、本発明は、添付の図面の使用を通して、更なる具体性及び詳細を持って記述され、説明されるだろう。
本発明の実施形態による、三角関数を計算するためのコンポーネントの模式的ブロック図である。 本発明の実施形態による、4要素内積(Dp4)回路を用いて、t = x/ πを計算するための方法の処理フロー図である。 本発明の実施形態による、4要素内積(Dp4)回路を用いて、t = x/ πを計算するための方法の処理フロー図である。 本発明の実施形態による、4要素内積(Dp4)回路を用いて、t = x/ πを計算するための方法の処理フロー図である。 本発明の実施形態による、4要素内積(Dp4)回路を用いて、t = x/ πを計算するための方法の処理フロー図である。 本発明の実施形態による、4要素内積(Dp4)回路を用いて、t = x/ πを計算するための方法の処理フロー図である。 本発明の実施形態による、4要素内積(Dp4)回路を用いて、t = x/ πを計算するための方法の処理フロー図である。 本明細書で開示される回路を実装可能なコンピューティングデバイスの図である。
ここに図面において一般に記述され、図示されるように、本発明のコンポーネントは、広範な様々な異なる構成に配置され、設計されることができることは容易に理解されるだろう。したがって、図に表現されているように、本発明の実施形態の以下のより詳細な記述は、請求されるとおりの本発明の範囲を限定する意図はなく、むしろ、本発明により、現在考えられる実施形態のある例の表現に過ぎない。ここに記述される実施形態は、図面を参照することにより最も良く理解され、図面においては、同様な要素は、全体に渡って、同様な参照番号によって指定されるだろう。
本発明による実施形態は、装置、方法、又はコンピュータプログラム製品として実施されることができる。したがって、本発明は、全体的にハードウェア実施形態、全体的にソフトウェア実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、又は、全て、一般に、ここに「モジュール」もしくは「システム」として参照され得るソフトウェアとハードウェアの態様を組み合わせる実施形態の形態を取ることができる。更に、本発明は、媒体に実装されるコンピュータ利用可能なプログラムコードを有する表現の任意の有形な媒体において実装されるコンピュータプログラム製品の形態を取ることができる。
非一時的媒体を含む、1以上のコンピュータ利用可能又はコンピュータ読み取り可能な媒体の任意の組み合わせは、利用されることができる。例えば、コンピュータ読み取り可能な媒体は、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)デバイス、リードオンリーメモリ(ROM)デバイス、消去可能プログラマブルリードオンリーメモリ(EPROM,又は、フラッシュメモリ)デバイス、ポータブルコンパクトディスクリードオンリーメモリ(CDROM)、光ストレージデバイス、及び、磁気ストレージデバイスの1以上を含むことができる。選択された実施形態においては、コンピュータ読み取り可能な媒体は、命令実行システム、装置、もしくは、デバイスによって、又は、これらに関連して、用いられるプログラムを含み、記憶し、通信し、伝搬し、又は、輸送することができる、任意の非一時的媒体を含むことができる。
本発明の動作を実行するためのコンピュータプログラムコードは、Java, Smalltalk, C++などのオブジェクト指向プログラミング言語及び「C」プログラミング言語又は同様なプログラミング言語などの従来のプロシジャープログラミング言語を含む、1以上のプログラミング言語の任意の組み合わせで書かれることができる。プログラムコードは、全体として、スタンドアロンソフトウェアパッケージとしてコンピュータシステム上で、スタンドアロンハードウェアユニット上で、コンピュータからある距離離れたリモートコンピュータ上で部分的に、又は、リモートコンピュータもしくはサーバ上で全体的に、実行されることができる。後者のシナリオにおいては、リモートコンピュータは、ローカルエリアネットワーク(LAN)、もしくは、ワイドエリアネットワーク(WAN)、を含む、任意の種類のネットワークを介して、コンピュータと接続されることができ、又は、接続は、(例えば、インターネットサービスプロバイダを用いたインターネットを介してなど)外部コンピュータに対してなされることができる。
本発明は、本発明の実施形態による、フローチャート図及び/又は、方法、装置(システム)及びコンピュータプログラム製品のブロック図を参照して、以下に記述される。フローチャート図及び/又はブロック図の各ブロック、フローチャート図及び/又はブロック図のブロックの組み合わせは、コンピュータプログラム命令又はコードによって実装されることができることは、理解されるだろう。これらのコンピュータプログラム命令は、汎用コンピュータ、専用コンピュータ又は、マシンを生成するための他のプログラマブルデータ処理装置のプロセッサに提供されることが出来、コンピュータ又は他のプログラマブルデータ処理装置のプロセッサによって実行する命令が、フローチャート及び/又はブロック図のブロックもしくは複数のブロックで指定される機能/動作を実装するための手段を生成するようにする。
これらのコンピュータプログラム命令は、また、コンピュータ又は他のプログラマブルデータ処理措置を特定の方法で機能させることができる非一時的コンピュータ読み取り可能な媒体に格納されることができ、コンピュータ読み取り可能な媒体に格納される命令が、フローチャート及び/又はブロック図のブロックもしくは複数のブロックで指定される機能/動作を実装する命令手段を含む製造製品を生成するようにする。
コンピュータプログラム命令は、また、一連の動作ステップがコンピュータ又は他のプログラマブル装置上で実行されるようにコンピュータ又は他のプログラマブルデータ処理装置にロードされることができ、コンピュータ又は他のプログラマブル装置上で実行される命令が、フローチャート及び/又はブロック図のブロックもしくは複数のブロックで指定される機能/動作を実装するためのプロセスを提供するように、コンピュータ実装プロセスを生成する。
図1を参照すると、多くの現在のコンピューティングシステムは、内積を計算するための専用回路を実装する、汎用プロセッサ又はグラフィック処理ユニット(GPU)を含む。例えば、4入力内積(Dp4)は、一般に実装回路である。Dp4回路は、4つの第1の入力(u1, u2, u3, u4)と4つの第2の入力(v1, v2, v3, v4)を受信する。これらの入力は、それから、それぞれ出力Mul1, Mul2, Mul3, 及びMul4を生成する乗算器100a〜100dに入力される。例えば、u1及びv1は、乗算器100aに入力され、入力u2及びv2は、乗算器100bに入力され、入力u3及びv3は、乗算器100cに入力され、及び、入力u4及びv4は、乗算器100dに入力される。各乗算器100a〜100dは、それらの2つの入力引数が入力されたなら、積を出力する。乗算器100a、100bの2つの出力は第1の加算器102aに入力され、出力Adder12_0を生成し、他の2つの乗算器100c、100dの出力は、第2の加算器102bに入力され、出力Adder34_0を生成する。加算器102a、102bの出力は、先頭のゼロを特定する先頭0及び丸め込みステージ104によって更に処理され、加算器102a、102bの出力の指数を決定し、加算器102a、102bの出力を丸め込んで、適切な仮数サイズにする。
先頭0及び丸め込みステージ104の出力は、それから、最終加算器ステージ106に入力される。最終加算器ステージ106の出力(“AdderAll”)は、第1と第2の入力引数の内積である。
図1に明らかなように、他のコンポーネントは、入力引数t = x/ πを計算する為に、Dp4回路100a〜100d、102a〜102b、104、及び106を用いるために、本明細書で開示する実施形態により、従来のDp4へ追加されることができる。特に、1/ πの表現は、第1の引数として、乗算器100a〜100dに入力されることができ、入力引数xは、第2の引数として、乗算器100a〜100dに入力されることができる。特に、1/ πの表現のビットの異なるセグメントは、引数u1からu4として入力されることができ、第2の入力引数は、v1 = v2 = v3 = v4 = xに設定される。
引数ステージ108は、u1からu4として入力される、1/πの表現の一部を計算する。引数ステージ108の動作は、図2Aに示されるステップの幾つか又は全てを実装することができる。
シフトステージ110は、図2B〜図2Eに示されるステップの幾つか又は全てを実行することなどによって、乗算器100a〜100dの出力を調整する。加算器102a、102bの出力は、また、図2Eに示されるステップの幾つかを実行することなどによって、アド調整及び符号ステージ112によって調整されることができる。加算器106の出力の符号は、図2Fの方法を実装することなどによって、最終符号ステージ114によって調整される。
ステージ108、110、112、114の動作の結果は、(1)によって入力引数を計算することである。
Figure 0006923350
特に、ステージ108、110、112、114の動作は、浮動小数点制度の限界内で、(1)を近似することである。この用途のため、式を「近似する」ことは、式の出力を表すために用いられる浮動小数点の10ULP(unit in last place)内で、式の出力を近似することを意味する。同様に、数学的関数としてここに示される任意の計算は、数学的関数の出力の浮動小数点表現の10ULP内にその数学的関数を近似する浮動小数点動作を開示するものと理解されることができる。
(1)に対する動機は、t = x/ πを計算するときに、中間値を表すために、利用可能な制限されたビット数から帰結する誤差を避けることである。指数(expV)、仮数(mantissaV)、及び符号sign (signV)の3つの部分を含む、浮動小数点値Vとして、数を表現することができる。幾つかの表現においては、任意の浮動小数点値Vは、#BitsMantissaVを、仮数を表すために用いられるビット数として、(2)によるこれらの3つの部分を用いて、近似されることができる。
Figure 0006923350
SignV は二値であり、値Vが、負(1−>負、0−>非負)であるか否かを表す。ExpVは、値Vのスケールを表す整数であり、整数仮数Vは、データの精度である。
Dp4の幾つかの実装においては、4つの乗算器100a〜100dの夫々は、48ビット仮数を出力する。加算器102a、102bは、72ビット仮数を出力し(Adder12_0, Adder34_0)、それから、48ビット仮数に丸め込む。u1*v1 + u2*v2において、ビットキャンセルが存在しえるので、Adder12_0の先頭0位置を発見し、先頭0位置から48ビット仮数を維持しなければならない。
最終加算器106は、2つの入力を得、両者は、48ビット仮数が標準32ビット浮動小数点値(23ビット仮数+1の後ろの1ビット)を出力させる。
浮動乗算器100a〜100c内部では、浮動小数点値を指数と仮数に分離する。乗算器100a〜100cの結果は、新規仮数=仮数U1*仮数V1(48ビット)及び新規指数=指数U1+指数V1+1として考えることができる。
三角関数Sin(x), Cos(x) 及び Tan(x)を計算するとき、高精度SinPi(t)命令が利用可能であるので、上記したように、Sin(x) = SinPi(x/π)として、関数を計算することができる。しかし、t = x/πを処理するとき、問題がある。|x| < 2-126*πならば、tは、(2-126より小さい)非規格化数である。幾つかの処理デバイスは、非規格化数をサポートしないので、そのような小さな値は、ゼロと解釈されるだろう。したがって、|x| < 2-126*π対し、Sin(x) = SinPi(t) = 0である。相対誤差は、正しい値が実際に、xにとても近いので、100%である。他の問題は、t = x/πの精度をどのように維持するかである。xが非常に大きい(226より大きい)場合、t = x/πの通常の浮動小数点計算は、整数部分のみが維持でき、これは、Sin(x) = SinPi(t) = 0である。相対誤差は、また、100%である。
Sin(x)を正しく計算する多くの方法がある。最も有名なものは、“Payne and Hanek’s reduction method” (M. Payne and R. Hanek, “Radian reduction for trigonometric functions,” SIGNUM Newsletter, 18:19-24, 1983)であり、これは、その全体が、参照により、本明細書に組み込まれる。しかし、直接この方法を実装することは、多くの命令を必要とするだろう。本明細書で開示する実施形態においては、従来のDp4回路を、xの実数値について(3)を計算する為に変形する。
Figure 0006923350
数学的には、この式では、Sin(x) = Sin(π*t) = SinPi(t), 及び |t|≦0.5である。しかし、|x| < 2-126*πの場合、(3)の出力は、|x|/πにおける非正規化浮動小数点値である。この場合を正しく扱うために、tは、(4)によって決定される。
Figure 0006923350
|t|<2.0について、SinPi(t)を計算するために、SinPi()パイプラインにtが渡されるとき、SinPi パイプラインは、|t|>=2.0のときに、t/2128(入力の指数を調整する)に返すために、少し変更される。数学的には、tは、したがって、(1)によって決定される。
図2A〜図2Fを参照すると、図示した方法は、最終計算の精度を改善し、そのために、多くのコンピューティングシステムにおいて一般的に利用可能な回路を用いるために、(1)により、t = x/πの近似を出力するために、Dp4回路の中間と最終の値を変換するステージ108、110、112、及び114の関数を例示する。
図2Aを特に参照すると、値“Fraction_RCP_PI”は、予め定義され、方法2Aを実装する回路に格納されることができ、ここで、Fraction_RCP_PIは、1/ πの近似である。幾つかの実施形態において、Fraction_RCP_PI は、216ビット値である:Fraction_RCP_PI[215:0] = {0xa2f983_6e4e44_1529fc_2757d1_f534dd_c0db62_95993c_439041_fe5148}
図2Aの方法は、xの大きさにより、Fraction_RCP_PI の一部を選択することを含む。例えば、この方法は、xから指数部分(expX)を取得すること200と、expXが、25以上か否かを評価すること202とを含むことができる。そうでなければ、値Fraction_EffectBits は、Fraction_RCP_PI[215:215-95]、つまり、Fraction_RCP_PI の最初の96ビットに等しく設定される204。そうであれば、Fraction_EffectBitsは、Fraction_RCP_PI[215-expX+25:215-expX+25-95]に等しく設定され206、つまり、expXが25を超える量だけ、右(LSB方向)に96ビットウィンドウを移動する。
Fraction_EffectBits の異なる部分と、xの仮数(manX)は、乗算器100a〜100cに入力される。特に、Fraction_EffectBits は、high, mid, low1, 及び low2値に分割されることができ、ここで、high = Fraction_EffectBits[95:72], mid = Fraction_EffectBits[71:48], low1 = Fraction_EffectBits[47:24], low2 = Fraction_EffectBits[23:0]である。換言すれば、Fraction_EffectBits = {high[23:0], mid[23:0], low1[23:0], low2[23:0]}であり、ここで{}は、連結を表す。
図2Aに示されるように、乗算器100a〜100dは、manX*high として、値Mul1を計算し208;manX*mid として、値Mul2を計算し210;manX*low1 として、値Mul3を計算し212;manX*low2 として、値Mul4を計算する214。個別の回路が、各乗算器100a〜100cを実装することが可能な限り、ステップ208〜214は、並列に実行されることができる。
Mul1からMul4に用いられるFraction_EffectBits の指数は、式(expX >= 25)?-2+25-expX:-2の出力として、値ExpOfFraction_EffectBits を計算すること216によって計算され、ここで、(a?b:c)は、aがtrue(1)ならbを、aがfalse(0)ならcを出力する三値演算子である。Fraction_EffectBits (high, mid, low1, 及び low2)の一部についての指数(expHigh, expMid, expLow1, expLow2)は、以下のようにして計算される218〜224:
expHigh = ExpOfFraction_EffectBits
expMid = expHigh-24
expLow1 = expHigh-48
expLow2 = expHigh-72
上記したように、乗算するときは、引数の仮数が乗算され、指数が加算される。従って、各乗算器出力Mul1, Mul2, Mul3, 及び Mul4については、対応する指数は、それぞれ、expX+expHigh, expX+expMid, expX + expLow1, 及び expX+expLow2であろう。
図2Bを参照すると、乗算器100a〜100dの出力(つまり、仮数部分)は、(1)を実装し、精度の損失を避けるために、調整されることができる。
加算器102aは、Mul1及びMul2を受信し、ステップ226において、その和を出力する。Mul1及びMul2は、単純に加算器102aに入力されるのではなく、シフトされ、処理されるだろう。例えば、Mul1[47:0] 及び Mul2[47:24]は、加算器102aに入力されることができる。加算器の出力は、それから、ビットBit[71:0]を有する値Adder12_0を得る為に、Mul2[23:0]と連結される。
値expX’は、ステップ228において、expX 及び25のうちの大きい方に等しく計算されることができる。expX’が、ゼロより小さいことがわかったなら230、以下に記述する、図2Cにおいて、処理が継続する。expX’が、2以上であると分かったなら232、Bit[71:73-expX’]は、ステップ234において、ゼロに設定される。
expX’が1以上であると分かったなら236、Bit[72-expX’]は、(isSin ? Bit[72-expX’] : Bit[72-expX’]^Bit[71-expX’])に等しく設定され238、ここで、tがSinPi()への入力引数として用いられるだろうことを示すオペコードが受信されるとき、isSin は1である。この開示の目的のため、記号「^」は、XOR(排他的OR)演算を示す。expX’が、1以上であると分かったなら236、値FinalSign は、Bit[72-expX’]に等しく設定され240、ここで、FinalSignは、以下に記述するように、加算器106の出力の符号を変更するために用いられる。同様に、expX’が1以上であると分かったなら236、Bit[72-expX’]は、ゼロに等しく設定される242。
expX’が1以上であり、expX’がゼロより小さくないことが分かったなら236、FinalSignは、(isSin ? 0 : Bit[71])に等しく設定される244。
何れの場合においても、FinalSign は、加算器106の出力を調整するために用いるために出力され246、Bit[71-expX’]は、Bit[71-expX]^isCos に等しく設定され248、ここで、isCos は、tがCosPi()を計算するために用いられるべきことを示すときに受信されるオペコードである。もっとも、CosPi()の近似は、SinPi(t)を実装する回路の出力を操作することにより得られえる。幾つかの実施形態においては、単一のフラグが設定され、つまり、SinPi(t)が計算されるべきことをオペコードが示す場合、isSin は1に設定されえ、その他の場合は、0である。フラグisCosは、NOT(isSin)に等しく設定されるだろう。
図2Cを参照すると、expX’が、ゼロより小さいと分かった場合には230、FinalSign は、ゼロ(符号変更なし)に設定され250、値S34From 12が、ゼロに設定され252、値S34From 12の使用は、図2Eについて以下に記述するように、加算器102bの出力の符号を調整するために用いられる。先頭0及び丸め込みの特定が実行され254、それぞれ、当分野で知られているように、Adder12_0における先頭0の位置により調整されたAdder12_0とexpX’に基づいて、仮数と指数を有する新規の浮動小数点値Adder12_1となる。Adder12_1は、更に、(isSin ? Adder12_1 : -Adder12_1)に等しく設定されること256ができる。
expX’がゼロより小さいと分かった場合には230、図2Dのステップが、図2Bのステップに続いて実行される。特に、Bit[71-expX’]が、1に等しいと分かった場合には258、S34From12は、Bit[71-expX’]に等しく設定され260、Bit[71-expX’:0]は、Bit[71-expX’:0]の2の補数に等しく設定される262。S34From12は、出力され264、先頭0及び丸め込みの特定は、Adder12_1を得る為のステップ254についてと同様に、Adder12_0について、実行される266。
図2B〜図2Dの処理は、加算器102aの出力について実行される。図2Eの処理は、加算器102bの出力を処理するための図2B〜図2Dの処理と並列して実行されることができる。
値Adder34_0は、Mul3[47:0] 及び Mul4[47:24]を加算器102bに入力し、Mul4[23:0] = 0つまり、24ビットのゼロと加算器102bの出力とを連結することにより計算されることができる268。値Adder34_1は、値Adder12_0について上記したような同様な方法で、Adder34_0について先頭0及び丸め込みの特定を実行すること270によって計算されることができる。S34From12が、1であると分かった場合には272、Adder34_1の符号は変更される。Adder34_1の値は、更に、((expX’ < 0 && isCos) ? 0.5 : Adder34:0)に等しく設定される276。
図2Fを参照すると、値AdderAll_0は、図2Bから図2Eのステップからの出力として、Adder12_1 及び Adder34_1を、加算器106に入力し、加算器106の出力として、AdderAll_0を受信することによって、計算される278ことができる。FinalSign が1であると分かった場合には280、AdderAll_0の符号は変更される。いずれの場合においても、AdderAll_0は、出力され、SinPi(t), CosPi(t), TanPi(t)又は任意の他の三角関数などの三角関数回路に対する入力引数tとして用いられる。特に、オペコードがisSin の場合、tは、SinPi(t)に対応する三角関数回路に入力される。オペコードがisCos である場合は、tは、CosPi(t)に対応する三角関数回路に入力される。他のオペコードは、他の三角回路へのtの入力を引き起こしうる。
入力引数t(AdderAll_0)は、先頭0及び丸め込みステップ266、270により決定されるように、Adder12_1 及び Adder34_1の仮数と指数により決定される仮数(ManT)と指数(ExpT)を含む。幾つかの実施形態においては、t>=2ならば、tをSinPi()に入力する前に、tは、t/(2128)に等しく設定される。これは、単純な演算で、ExpT: ExpT = ExpT - 128への演算が必要なだけである。
上記した回路がどのように用いられうるかの説明と例が以下に記述される。
入力が浮動形式x、expX の指数=exp(x)、manXの仮数=man(x)であると仮定する。この方法は、1/πの小数部分の216ビットを節約する(1/πのexpは-2
)ことを含む。従って、1/π=Fraction_rcp_pi[215:0] *2-128で、Fraction_rcp_pi[215] = 1である。
Fraction_rcp_pi を16進数表記で書く場合、それは、Fraction_rcp_pi[215:0] = {0xa2f983_6e4e44_1529fc_2757d1_f534dd_c0db62_95993c_439041_fe5148}である。Fraction_rcp_pi = -2の指数部分(MSB1は0.25を意味する)で、(2)に従う。
Fraction_rcp_pi の96ビットは、expX の大きさに基づいて選択される。数学的には、x/π = manX * Fraction_rcp_pi[215:0]*2-128+expX-23である。これが完全に実装されれば、非常に大きな面積を必要とする24×216ビット整数乗算器が必要であろう。結果が、小数部分の仮数部分の24ビットのみを維持するので、そのような巨大な乗算器は必要ない。
expX が非常に大きい場合、x/pi は、sin(x)の精度に対しては不要な多くの整数ビットを生成するだろう。従って、fraction_rcp_piの一部が選択される:
Fraction_EffectBits[95:0] = (expX) ≧25 ? Fraction_rcp_pi [215-expX+25: 215-expX+25-95]: Fraction_rcp_pi [215: 215-95]
値high, mid, low1, low2が、有効な小数Fraction_EffectBitsの96ビットから選択される:{high[23:0], mid[23:0], low1[23:0], low2[23:0] } = Fraction_EffectBits [95:0]。
上記したDp4エンジン(図1)は、manX * Fraction_EffectBits [95:0]を計算する為に用いられる:
manX * Fraction_EffectBits [95:0] = manX*high + manX*mid + manX * low1 + manX*low2 = mul1 + mul2 + mul3 + mul4
ExpOfFranction_EffectBits = (expX)≧25 ? -2 + 25 - expX : -2
expHigh = ExpOfFranction_EffectBits, expMid = expHigh - 24, expLow1 = expHigh - 48, and expLow2 = expHigh - 72
mul1 + mul2は、いかなるキャンセルも有しないので、Adder12_0は、72ビットの仮数(仮数Adder12_0)及び指数expAdder12_0 = expHigh+expX + 1を出力する。
expX ≧ 25, expAdder12_0 = 24のとき、これは、71 - 24 = 47の位置の1のビットを意味する。x/πの幾つかの偶数の数を表す、仮数ExpAdder12_0[71: 48]を除去する(値ゼロに設定する)ことができる。expMul1 = expMul2 + 2且つDp4内で、48ビット加算器のみが用いられるので、われわれは、仮数Adder12_0[71:24] = (Mul1[47:0]<<24) + Mul2[47:24]を設定し、Mul2[23:0]を仮数Adder12_0[23:0]に送る。
可変仮数Adder12_0[47: 47]は、最終結果AdderAll の符号ビットである。従って、FinalSign = mantissaAdder12_0[47: 47]であり、符号ビット情報をAddAllに設定後、われわれは、仮数Adder12_0[47: 47]もゼロに設定する。
可変仮数ExpAdder12_0[46: 46]は、式(1)の第2行を適用するか、又は第1行を適用するかを決定する、
Figure 0006923350
であるか否かを示す。従って、S34From12 = mantissaExpAdder12_0[46: 46]とすると、仮数ExpAdder12_0[46:0]を以下のように変更する:
mantissaAdder12_0[46:0] =
mantissaAdder12_0[46:0]^S34From12 + S34From12 (5)
更に、Adder34の符号ビットとして、S34From12を出力する。式(5)は、2の補数でのAdder12_0部分についてのS34From12 = 1の間、
Figure 0006923350
を処理し、Adder34についての符号を変更し、それによって、減算を発生させる。
そのような変更をした後、改変Adder12_0を先頭0及び丸め込みステップに出力し、丸め込み後48ビット精度の新規のexpAdder12 及び mantissaAdder12を有するAdder12を得る。Adder34_0 から Adder34_1へは、以前のDp4処理と同一であるが、Adder34の符号ビットは、S34From12に変更されるだろう。
1≦ expX < 25のとき、high = Fraction_rcp_pi[215:215-23]である。
値expAdder12_0 = expHigh+expX + 1 = expX - 1。Adder12_0の1の位置は、71 - (expX - 1)である。expX ≧ 25を扱うことに関して、73 - expX ≦ 71ならば、mantissaAdder12_0[71: 73-expX]をゼロに設定する。そして、1の位置ビットmantissaAdder12_0[72-expX: 72-expX]をAdderAllの符号に送る。そして、FinalSign = mantissaAdder12_0[72-expX: 72-expX]である。符号ビット情報をAdderAllに設定後、mantissaAdder12_0[72-expX: 72-expX]をゼロに設定する。S34From12 = mantissaAdder12_0[71-expX: 71-expX] (1/2の位置)であり:
Figure 0006923350
を得る。
Adder34の符号ビットとして、S34From12を更に出力する。2の補数と共に、Adder12_0部分について、S34From12 = 1である間、式(6)は、
Figure 0006923350
を処理し、Adder34の符号を変更し、それによって、減算を発生させる。
そのような変更を行った後、改変Adder12_0を先頭0及び丸め込みステップに出力し、丸め込み後48ビット精度で、新規のexpAdder12 及び mantissaAdder12を有するAdder12_1を得る。Adder34_0から Adder34_1へは、以前のDp4処理と同一であるが、Adder34_1の符号ビットは、S34From12へと変わるだろう。
expX = 0のとき、1/2の位置は、71である。S34From12 = Adder12_0[71: 71]であり、式(6)も適用される。Adder12_0は、先頭0及び丸め込みステップに渡され、丸め込み後、48ビット精度の新規のexpAdder12 及び mantissaAdder12を有するAdder12を得る。
Adder34_0 から Adder34_1へは、以前のDp4処理と同一であるが、Adder34の符号ビットは、S34From12に変更されるだろう。
expX < 0のとき、|x|<1.0、|x|/π< 0.32<0.5であり、1/2のビットは、常時0である。Adder12_0は、先頭0及び丸め込みステップに渡され、丸め込み後、48ビット精度を有する新規のexpAdder12及び matissaAdder12を有するAdder12_1を得る。Adder34_0 から Adder34_1へは、以前のDp4処理と同一である。しかし、Mul4のLSB24ビットを切り捨てることができる。
先頭0計算は、実際に、mantissaAdder12_0の71ビットを有するように見えるが、mantissaAdder12_0[1/2’s pos -1: 1/2’s_pos-48]の48ビットを先頭0計算に入れるのみである。全単精度について、mantissaAdder12_0[1/2’s pos]の後、多くても32個のゼロしかない。
式(6)は、71ビット固定小数点加算器(S34From12 = 1なら、NOTを実行した後+1)を有することができる。mantissaAdder12_0 = Fraction_rcp_pi[215:215-23]*manX = 0xa2f983_6e4e44*manX なので、少し簡単化を行う。多くとも23+2 LSB のゼロしかないので、LSB26ビットについて、~MantissaAdder12_0[0,25]+1を計算するのみでよく、残りのMSBについては、〜(NOT)演算をするのみである。これは、71ビットの2の補数を、26ビットの2の補数と45ビットのNOT演算に分離する。
先頭ゼロ計算の後、48ビット精度で、mantissaAdder12を維持するのみである。問題は、48ビット精度で十分か?ということである。Adder12は、減算が発生する場合(S34From12 = 1 の場合)、Adder34において、幾つかのビットをキャンセルすることができる。mantissaAdder34[47,47]がmantissaAdder12_0[23,23]と整列するので、mantissaAdder12_0の先頭ゼロが23又は24のとき、キャンセルが発生するのみである。両者の場合、Adder12の全精度を有し、48ビット仮数を維持する。
理論的には証明できないが(理論的には、mantissaAdder34のMSBの24ビットは、おそらく、キャンセルし、24ビット精度のみを残す)、mantissaAdder34の48ビットを維持することは、十分である。しかし、すべての浮動小数点値を尽くしたので、mantissaAdder34でキャンセルするビットの最大数は、8である。これは、Adder12_1+Adder34_1の後、少なくとも40有効ビットを維持することを意味する。これは、24ビット仮数精度でAddAllを得るために、Adder12_0 及び Adder34_1について、32ビット仮数を用いることができることを意味する。
以下の例は、Cos(x) = Sin(x + 0.5π) = Sin(0.5π - x)を計算するために、上記した回路を用いることを扱う。0.5πを加算することは、1/2の位置で、Adder12_0に1を加算することと同一である。もちろん、1/2の位置を知らなくてはならない。1/2の位置で1を加算するべきならば、他の固定小数点加算器が必要だろう。幾つかの実施形態においては、以下の条件により、S34From12, FinalSignのみを計算する。
Figure 0006923350
式(5)は、Cos(x)を計算するとき、expX ≧ 25について、依然適用される。式(6)は、同様に、0≦ expX < 25について適用される。expX < 0について、Cos(x) = Sin(0.5π - x) = SinPi(0.5 - x/π)であり、Adder12符号を負に変更するのみで、Adder34を0.5にする(expAdder34 = -1, mantissaAdder34 = 1<<47)。そして、adder12において、48ビット高精度を有するので、AdderAllにおいて、十分な精度で、0.5 - x/πを有する。
以下の例は、先頭0の31ビットを有するSin(x)を計算することを扱う。この例は、X = 0x67098498; (S=0, expX=79, manX=0x898498) 及びFraction_rcp_pi[215:0] = {0xa2f983_6e4e44_1529fc_2757d1_f534dd_c0db62_95993c_439041_fe5148}を仮定する;
ステップ1は、関数Fraction_EffectBits[95:0] = (expX) ≧25 ? Fraction_rcp_pi [215-expX+25: 215-expX+25-95]: Fraction_rcp_pi [215: 215-95]により、96ビットの有効な小数部分を選択することである。Fraction_rcp_pi[215:0]の79〜25ビットを左シフトし、それから、高96ビットを得、したがって、Fraction_EffectBits[95:0] =4a7f09_d5f47d_4d3770_36d8a5。
Fraction_EffectBits54ビットを左シフトしたので、Fraction_EffectBitsの指数は、ExpOfFranction_EffectBits = -2 -54 (Fraction_rcp_piの初期指数は -2 )である。
ステップ2は、manX * Fraction_EffectBits[95:0]を計算するために、Dp4エンジンを用いることである。最初、{high[23:0], mid[23:0], low1[23:0], low2[23:0] } = Fraction_EffectBits [95:0]を設定する。したがって、manX * Fraction_EffectBits [95:0] = manX*high + manX*mid + manX * low1 + manX*low2 = mul1 + mul2 + mul3 + mul4を得る。
ステップ2においては、すべての乗算結果は、以下の通り、48ビットの仮数を維持し、4つの指数を乗算する:
exp_of_mul1 = 79+(-2-54) +1=24 ; mul1 = 0x280491_8d1158;
exp_of_mul2 = exp_of_mul1 -24; mul2 = 0x72eea7_fe9e38;
exp_of_mul3 = exp_of_mul1 -48; mul3 = 0x297aa9_5eaa80; 及び
exp_of_mul4 = exp_of_mul1 -72; mul4 = 0x1d7658_92b5f8.
4個の乗算結果は、表2に示されるように、アラインメントであるべきである。
Figure 0006923350
ステップ3において、個別に、Adder12_0 及び Adder34_0を計算する為に、2個の並列加算器を用いる。このステップでは、Adder12 = mul0 + mul1を計算する為に、72ビット加算器を用いる。幾つかの実装においては、実際の72ビット加算器は、実装されない。むしろ、Dp4エンジンは、48ビット加算器を持つのみであろう。従って、Adder12_0は、Adder12_0[71:24]] = Mul1[47:0] + Mul2[47:24] (整列された LSBs)として計算され、Adder12_0[23:0]は、Mul2[23:0]と等しく設定される。
例示された例においては、これは、Adder12_0 [71:0] = 0x280491_FFFFFF_fe9e38を与える。1の位置が47であるので、47より上のビットをゼロに設定し、ビット−47を最終符号に移動する。つまり、mantissaAdder12_0[46:46] = 1, つまり S34From12 = 1, 及び mantissaAdder12_0[46:0] = (mantissaAdder12_0[46:0]^0x7FFFFF_FFFFFF) + 1 = 0x000000_0161c8なので、FinalSign = 1, mantissaAdder12_0[71:0] = 0x000000_7FFFFF_FE9E38である。
最後に、先頭0(31)及び丸め込み(この場合は丸め込みは不必要)の発見を実行する。したがって、expAdder12 = -31, mantissaAdder12 = 0xB0E400000000を有する。
ステップ3は、改変されていないDp4エンジンによる処理を実行することを含みうる、Adder34_1を得ることを更に含む。幾つかの実施形態においては、Adder34_0[47:0]は、Mul3[47:0] + Mul4[47:24] (LSBにおいて整列された)に等しく設定される。Mul4[23:0]は単純に無視される。
この例においては、これは、leading 0 = 2でAdder34_0 [47:0] = 0x297AA9_7C20D8を与える。したがって、Adder34_0は、規格化され、Adder34_1: expAdder34 = -24 - 2 = -26, mantissaAdder34[47:0] = 0x A5EAA5_F08360, signAdder34 = S34From12 = 1を得る。
ステップ4において、FinalSign で、(Adder12 + Adder34)を計算する。expAdder34 = expAdder12 + 5なので、mantissaAdder12を1/32にスケーリングし、加算に進む。Adder34の符号が、Adder12の符号と異なることを考慮すると、
mantissaAdderAll = |0xB0E400000000/32 - 0x A5EAA5_F08360| = 0xA06385_F08360,
expAdderAll = expAdder34 - leading0(mantissaAdderAll) = -26,及び
signAdder12 = signAdder34 ^ FinalSign = 1^1 = 0を得る。
丸め込みで、最終出力t = 0xA06386*2-26*2-23を得る。
ハイド1(hide 1)を除去すると、16進数表現Hex(t) = 0x32A06386を得る。
図3は、例示的コンピューティングデバイス300を図示するブロック図である。コンピューティングデバイス300は、本明細書で議論したような様々なプロシジャーを実行するために用いられることができる。コンピューティングデバイス300は、サーバ、クライアント、又は、任意の他のコンピューティングエンティティとして機能することができる。コンピューティングデバイスは、本明細書で開示した方法を実行する回路を組み込むことができ、三角関数を計算する為に、本明細書で開示された方法を実施するアプリケーションプログラムなどの1以上のアプリケーションプログラムを実行することができる。コンピューティングデバイス300は、デスクトップコンピュータ、ノートブックコンピュータ、サーバコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータなどの広範な様々のコンピューティングデバイスの任意のものとすることができる。
コンピューティングデバイス300は、1以上のプロセッサ302、1以上のメモリデバイス304、1以上のインタフェース306、1以上の大容量ストレージデバイス308、1以上の入出力(I/O)デバイス310、及び、ディスプレイデバイス330を含み、これらすべては、バス312によって結合される。(複数の)プロセッサ302は、(複数の)メモリデバイス304及び/又は(複数の)大容量ストレージデバイス308に格納される命令を実行する1以上のプロセッサ又はコントローラを含む。(複数の)プロセッサ302は、また、キャッシュメモリなどの様々な種類のコンピュータ読み取り可能な媒体を含むことができる。
(複数の)メモリデバイス304は、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)314)及び/又は不揮発性メモリ(例えば、リードオンリーメモリ(ROM)316)などの様々なコンピュータ読み取り可能な媒体を含む。(複数の)メモリデバイス304は、また、フラッシュメモリなどの書き換え可能なROMも含むことができる。
(複数の)大容量ストレージデバイス308は、磁気テープ、磁気ディスク、光ディスク、固体メモリ(例えば、フラッシュメモリ)などの様々なコンピュータ読み取り可能な媒体を含む。図3に示されるように、特定の大容量ストレージデバイスは、ハードディスクドライブ324である。様々なドライブは、また、様々なコンピュータ読み取り可能な媒体との読み書きを可能とするために、(複数の)大容量ストレージデバイス308に含まれることができる。(複数の)大容量ストレージデバイス308は、着脱可能な媒体326及び/又は着脱不可能な媒体を含む。
(複数の)I/Oデバイス310は、データ及び/又は他の情報が、コンピューティングデバイス300へ入力され、又は、コンピューティングデバイス300から検索されたりすることを可能とする様々なデバイスを含む。(複数の)例示的I/Oデバイス310は、カーソル制御デバイス、キーボード、キーパッド、マイク、モニタ又は他のディスプレイデバイス、スピーカ、プリンタ、ネットワークインタフェースカード、モデム、レンズ、CCD又は他の画像捕捉デバイスなどを含む。
ディスプレイデバイス330は、コンピューティングデバイス300の1以上のユーザに、情報を表示することができる任意の種類のデバイスを含む。ディスプレイデバイス330の例は、モニタ、ディスプレイ端末、ビデオ投影デバイスなどを含む。
グラフィック処理ユニット(GPU)332は、(複数の)プロセッサ302及び/又はディスプレイデバイス330と結合することができる。GPUは、コンピュータが生成した画像をレンダリングし、他のグラフィック処理を実行するように動作することができる。GPUは、(複数の)プロセッサ302などの汎用プロセッサの機能の幾つか又は全部を含むことができる。GPUは、また、グラフィック処理に特有の更なる機能を含むこともできる。GPUは、変換、網掛け、テクスチャリング、ラスタリング、及び、コンピュータが生成した画像をレンダリングするために有用な他の機能を調整することに関連した、ハードコードされた、及び/又は、ハードワイヤードグラフィック機能を含むことができる。
(複数の)インタフェース306は、コンピューティングデバイス300が、他のシステム、デバイス又はコンピューティング環境と相互作用することを可能とする様々なインタフェースを含む。(複数の)例示的インタフェース306は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、無線ネットワーク、及びインターネットへのインタフェースなど、任意の数の異なるネットワークインタフェース320を含む。(複数の)他のインタフェースは、ユーザインタフェース318、及び周辺デバイスインタフェース322を含む。(複数の)インタフェース306は、また、1以上のユーザインタフェース素子318を含むこともできる。(複数の)インタフェース306は、また、プリンタ、ポインティングデバイス(マウス、トラックパッドなど)、キーボードなどのためのインタフェースなど、1以上の周辺インタフェースを含むこともできる。
バス312は、(複数の)プロセッサ302、(複数の)メモリデバイス304、(複数の)インタフェース306、(複数の)大容量ストレージデバイス308、及び(複数の)I/Oデバイス310が、バス312に結合された他のデバイス又はコンポーネントと共に、相互に通信可能とする。バス312は、システムバス、PCIバス、IEEE1394バス、USBバスなどの幾つかの種類のバス構造の1以上を表す。
図示のために、プログラム及び他の実行可能なプログラムコンポーネントが、個別のブロックとしてここに示されるが、もっとも、そのようなプログラム及びコンポーネントは、様々な時点で、コンピューティングデバイス300の異なるストレージコンポーネントに常駐し、(複数の)プロセッサ302によって実行されることが可能であることは理解される。あるいは、本明細書で記述したシステム及びプロシジャーは、ハードウェア、又は、ハードウェア、ソフトウェア、及び/もしくはファームウェアの組み合わせによって実装されることができる。例えば、1以上の特定用途向け集積回路(ASIC)は、本明細書で記述したシステム及びプロシジャーの1以上を実行するためにプログラムされることができる。
本発明は、その趣旨又は本質的な特性から逸脱することなく、他の特定の形態で実装されることができる。記述された実施形態は、あらゆる意味で、例示としてのみであり、限定ではないと考えられるべきである。本発明の範囲は、従って、上記説明によってではなく、添付の請求項によって示される。請求項の均等の意味及び範囲内に来るすべての変更は、それらの範囲内に含まれるべきである。

Claims (11)

  1. (a)4個の第1の入力(v1, v2, v3, v4)と、4個の第2の入力(u1, u2, u3, u4)とを受信し、
    (b)前記4個の第1の入力と4個の第2の入力を4個の乗算器(Mul1, Mul2, Mul3, 及び Mul4)へ入力し、
    (c)乗算器Mul1 及び Mul2の出力を加算器Adder12へ入力し、
    (d)乗算器Mul3 及び Mul4の出力を加算器Adder34へ入力し、
    (e)Adder12 及び Adder34の出力を加算器AdderAllへ入力し、
    (f)AdderAllの出力を出力するように構成された4要素内積回路(Dp4)と、
    1/piとxの表現を前記乗算器Mul1, Mul2, Mul3, Mul4に入力することにより、x/piの概算を計算し、
    三角関数回路に対応する三角関数の理論的に正しい値に対する入力引数としてtを受信し、前記入力引数として、Mul1 + Mul2 + Mul3 + Mul4に対する三角回路の出力と比較したとき、入力として、x/piを取る前記三角関数回路の出力の精度を増加するのに効果的なtを計算するために、加算器Adder12, Adder34, 及び AdderAllを用いて、前記乗算器Mul1, Mul2, Mul3, 及び Mul4の前記出力を処理する、ように構成された前記三角回路と、を備えるシステム。
  2. 前記三角回路は、
    Figure 0006923350
    を近似するのに有効なtを計算するために、加算器Adder12, Adder34, 及びAdderAllを用いて、前記乗算器Mul1, Mul2, Mul3, 及び Mul4の前記出力を処理するように更に構成されている、請求項1に記載のシステム。
  3. 前記三角回路は、Fraction_RCP_PI内のFraction_EffectBitsのビット位置がexpXの大きさと共に減少するように、xの指数部分(expX)の大きさにより、1/piの二値表現(Fraction_RCP_PI)の一部(Fraction_EffectBits)を選択することによって、x/piの概算を計算するように更に構成されている、請求項2に記載のシステム。
  4. Fraction_RCP_PIは216ビットを有しており、前記三角回路は、
    expXが25以上ではない場合には、Fraction_EffectBits = Fraction_RCP_PI[215:215-95]とし、
    expXが25以上である場合には、Fraction_EffectBits = Fraction_RCP_PI[215-expX+25:215-expX+25-95]とすることによって、Fraction_EffectBitsを選択するように更に構成されている、請求項3に記載のシステム。
  5. 前記三角回路は、
    Fraction_RCP_PIを4個の部分High, Mid, Low1, 及び Low2に分割し、
    x(manX)の仮数にMul1のHighを乗算し、
    manXにMul2のMidを乗算し、
    manXに、Mul3のLow1を乗算し、
    manXに、Mul4のLow2を乗算する、ことによって、
    x/piの概算を計算するように更に構成されている、請求項4に記載のシステム。
  6. 前記三角回路は、
    ExpOfFraction_EffectBits = (expX >= 25) ? 2 + 25 - expX : 2を定義し、
    manXに、ExpOfFraction_EffectBitsに等しいHighの指数(expHigh)を有する、
    Mul1のHighを乗算し、
    manXに、expHigh - 24に等しいMidの指数(expMid)を有する、Mul2のMidを乗算し、
    manXに、expHigh - 48に等しいLow1の指数(expLow1)を有する、Mul3のLow1を乗算し、
    manXに、expHigh - 72に等しいLow2の指数(expLow2)を有する、Mul4のLow2を乗算することによって、x/piの概算を計算するように更に構成されている、請求項5に記載のシステム。
  7. 前記三角回路は、
    expXがゼロより小さいとき、AdderAllの前記出力の符号が、前記三角回路によって変更されないように、値FinalSignを0に等しく設定することによって、
    tを計算するのに有効な、前記加算器Adder12, Adder34, 及び AdderAllを用いて、前記乗算器Mul1, Mul2, Mul3, 及び Mul4の前記出力を処理するように構成されている、請求項1に記載のシステム。
  8. 前記三角回路は、少なくともオペコードを受信し、前記オペコードが、Sineを示す場合、値isSignを1に等しく設定し、前記オペコードがCosineを示す場合には、値isCosを1に等しく設定するように構成されており、
    前記三角回路は、
    expXが25より大きい場合、expX'を25に設定し、
    expXが25以下の場合、expX'をexpXに等しく設定し、
    Mul1の前記出力と、Mul2の前記出力のビット47〜24をAdder12に入力し、
    Mul2の前記出力のビット23〜0と連結されたAdder12の前記出力と等しい72 bits (Bit[71:0])を含む値Adder12_0を設定することによって、tを計算するのに有効な前記加算器Adder12, Adder34, 及び AdderAllを用いて、前記乗算器Mul1, Mul2, Mul3, 及び Mul4の前記出力を処理し、
    最初に、expX’が2以上である場合、Bit[71:73-expX’] = 0と設定し、
    二番目に、expX’が1以上の場合、(a)Bit[72-ExpX’] = isSin ? Bit[72 - ExpX’] : Bit[72 - ExpX’]^Bit[71 - ExpX’]と設定し、次に、(b)FinalSignをBit[72 - ExpX’]に等しく設定し、次に、(c)Bit[72 - ExpX’] = 0と設定し、
    三番目に、expX’が1以上でないが、0より小さくはない場合には、FinalSign = isSin ? 0 : Bit[71]と設定し、
    四番目に、expX’が0より小さくない場合には、Bit[71 - ExpX’] = Bit[71 - ExpX’]^isCosと設定することにより、Adder12_0を処理する、
    ように構成されている、請求項7に記載のシステム。
  9. 前記三角回路は、
    expX’がゼロより小さい場合、(a)FinalSignをゼロに等しく設定し、(b)値S34From12をゼロに等しく設定し、(c)Adder12_0について、先頭0及び丸め込みを実行することによって、Adder12_1を計算し、(d)Adder12_1 = isSin ? Adder12_1 : -Adder12_1を設定し、
    expX’がゼロより小さくなく、Bit[71 - ExpX’]が1に等しい場合、(a)S34From12を、Bit[71 - ExpX’]に等しく設定し、(b)Bit[71 - ExpX’:0]を、Bit[71 - ExpX’ : 0]の2の補数に等しく設定し、
    expX’がゼロより小さくない場合、Adder12_0について、先頭0及び丸め込みを実行することによって、Adder12_1を計算することによって、tを計算するのに有効な、前記加算器Adder12, Adder34, 及び AdderAllを用いて、前記乗算器Mul1, Mul2, Mul3, 及び Mul4の前記出力を処理するように構成されている、請求項8に記載のシステム。
  10. 前記三角回路は、
    Mul3の前記出力と、Mul4の前記出力のビット47〜24とをAdder34に入力し、
    Mul4の前記出力のビット23〜0と連結されたAdder34の前記出力と等しい48ビットを含む値Adder34_0を設定し、
    Adder34_0について先頭0及び丸め込みを実行することによってAdder34_1を計算し、
    S34From12が1に設定された場合、Adder34_1の前記符号を変更し、
    Adder34_1 を (expX’ < 0 && isCos) ? 0.5 : Adder34_0に等しく設定することによって、tを計算するのに有効な前記加算器Adder12, Adder34, 及び AdderAllを用いて、前記乗算器Mul1, Mul2, Mul3, 及び Mul4の前記出力を処理するように構成されている、請求項9に記載のシステム。
  11. 前記三角回路は、
    Adder12_1 及び Adder34_1の和として、AdderAllを用いて、AdderAll_0を計算し、
    FinalSignが1に等しい場合、AdderAll_0の前記符号を変更し、
    tとして、AdderAll_0を出力し、
    t>=0の場合、t = t/2128を設定し、
    SinPi(t) 及び CosPi(t)の少なくとも一つを近似するように構成された三角関数回路にtを入力する、ことによって、tを計算するのに有効な、前記加算器Adder12, Adder34, 及び AdderAllを用いて、前記乗算器Mul1, Mul2, Mul3, 及び Mul4の前記出力を処理するように構成されている、請求項10に記載のシステム。
JP2017086804A 2016-04-28 2017-04-26 4入力内積回路を用いる三角関数の計算 Active JP6923350B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/141,625 2016-04-28
US15/141,625 US9875084B2 (en) 2016-04-28 2016-04-28 Calculating trigonometric functions using a four input dot product circuit

Publications (2)

Publication Number Publication Date
JP2017199370A JP2017199370A (ja) 2017-11-02
JP6923350B2 true JP6923350B2 (ja) 2021-08-18

Family

ID=58644925

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017086804A Active JP6923350B2 (ja) 2016-04-28 2017-04-26 4入力内積回路を用いる三角関数の計算

Country Status (5)

Country Link
US (1) US9875084B2 (ja)
EP (1) EP3239833B1 (ja)
JP (1) JP6923350B2 (ja)
KR (1) KR102281047B1 (ja)
CN (1) CN108182050B (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10921122B2 (en) * 2018-02-06 2021-02-16 Stmicroelectronics S.R.L. Tilt event detection device, system and method

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3688098A (en) 1971-01-21 1972-08-29 Singer General Precision Sine-cosine function generator using a power series
EP0218724A1 (en) 1985-04-22 1987-04-22 AT&T Corp. Fast sine and cosine generating apparatus
US4777613A (en) 1986-04-01 1988-10-11 Motorola Inc. Floating point numeric data processor
EP0259514A1 (de) 1986-09-11 1988-03-16 Deutsche ITT Industries GmbH Digitalschaltung zur gleichzeitigen Erzeugung von digitalen Sinus- und Cosinusfunktionswerten
JPH0766372B2 (ja) 1986-11-26 1995-07-19 株式会社日立製作所 浮動小数点演算処理装置
JPH0776916B2 (ja) 1987-06-30 1995-08-16 日本電気株式会社 疑似除算方式を用いた三角関数演算装置
US5276633A (en) 1992-08-14 1994-01-04 Harris Corporation Sine/cosine generator and method
EP0622727A1 (en) 1993-04-29 1994-11-02 International Business Machines Corporation System for optimizing argument reduction
JPH086766A (ja) * 1994-06-23 1996-01-12 Matsushita Electric Ind Co Ltd 正弦余弦演算装置
US5953241A (en) * 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
JP3790307B2 (ja) 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US5963460A (en) 1996-12-17 1999-10-05 Metaflow Technologies, Inc. Apparatus for computing transcendental functions quickly
US6055553A (en) 1997-02-25 2000-04-25 Kantabutra; Vitit Apparatus for computing exponential and trigonometric functions
US5774082A (en) 1997-03-13 1998-06-30 Raytheon Company Digital phase to digital sine and cosine amplitude translator
US6021423A (en) * 1997-09-26 2000-02-01 Xilinx, Inc. Method for parallel-efficient configuring an FPGA for large FFTS and other vector rotation computations
US6141670A (en) 1997-09-30 2000-10-31 Intel Corporation Apparatus and method useful for evaluating periodic functions
US6640237B1 (en) 1999-07-27 2003-10-28 Raytheon Company Method and system for generating a trigonometric function
AU2001289045A1 (en) 2000-09-08 2002-03-22 Avaz Networks Hardware function generator support in a dsp
CA2327924A1 (en) * 2000-12-08 2002-06-08 Ibm Canada Limited-Ibm Canada Limitee Processor design for extended-precision arithmetic
US7003536B2 (en) * 2002-08-15 2006-02-21 Comsys Communications & Signal Processing Ltd. Reduced complexity fast hadamard transform
US20050203980A1 (en) 2004-03-11 2005-09-15 Harrison John R. Computing transcendental functions using single instruction multiple data (SIMD) operations
KR100911786B1 (ko) * 2004-11-10 2009-08-12 엔비디아 코포레이션 다목적 승산-가산 기능 유닛
US7912887B2 (en) * 2006-05-10 2011-03-22 Qualcomm Incorporated Mode-based multiply-add recoding for denormal operands
US9703530B2 (en) * 2006-07-25 2017-07-11 Vivante Corporation Systems and methods for computing mathematical functions
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8090756B2 (en) 2007-01-29 2012-01-03 International Business Machines Corporation Method and apparatus for generating trigonometric results
US8838663B2 (en) * 2007-03-30 2014-09-16 Intel Corporation Method and apparatus for performing multiplicative functions
US8200728B2 (en) 2008-05-29 2012-06-12 Harris Corporation Sine/cosine generator
US8166091B2 (en) * 2008-11-10 2012-04-24 Crossfield Technology LLC Floating-point fused dot-product unit
US8601044B2 (en) * 2010-03-02 2013-12-03 Altera Corporation Discrete Fourier Transform in an integrated circuit device
US8589463B2 (en) 2010-06-25 2013-11-19 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
US9563402B2 (en) 2011-09-01 2017-02-07 Advanced Micro Devices, Inc. Method and apparatus for additive range reduction
CN103150137A (zh) 2013-03-01 2013-06-12 北京理工大学 一种覆盖全圆周角度的单精度浮点三角函数的实现方法
US8626813B1 (en) * 2013-08-12 2014-01-07 Board Of Regents, The University Of Texas System Dual-path fused floating-point two-term dot product unit

Also Published As

Publication number Publication date
CN108182050A (zh) 2018-06-19
US20170315780A1 (en) 2017-11-02
CN108182050B (zh) 2023-08-18
JP2017199370A (ja) 2017-11-02
EP3239833A1 (en) 2017-11-01
KR20170123230A (ko) 2017-11-07
EP3239833B1 (en) 2019-03-13
US9875084B2 (en) 2018-01-23
KR102281047B1 (ko) 2021-07-22

Similar Documents

Publication Publication Date Title
JP6360450B2 (ja) 浮動小数点オペランドを乗算するためのデータ処理装置及び方法
CN107769791B (zh) 用于定点到浮点的转换的装置和方法及2的负幂检测器
JP5731937B2 (ja) ベクトル浮動小数点引数削減
US9696964B2 (en) Multiply adder
JP2004213622A (ja) 固定小数点表示と浮動小数点表示との間で数を変換するデータ処理装置および方法
CN107025091B (zh) 二进制融合乘加浮点计算
WO2013109532A1 (en) Algebraic processor
US7406589B2 (en) Processor having efficient function estimate instructions
KR20050089067A (ko) 계산 장치 및 방법, 컴퓨터 프로그램을 저장하는 컴퓨터 프로그램 저장 매체
JP6923350B2 (ja) 4入力内積回路を用いる三角関数の計算
US9767073B2 (en) Arithmetic operation in a data processing system
JP6770777B2 (ja) 数学的関数を計算するためのシステム及び方法
JP7228956B2 (ja) 数学的関数を計算するためのシステムおよび方法
JP5794385B2 (ja) 演算処理装置及び演算処理装置の制御方法
GB2549153A (en) Apparatus and method for supporting a conversion instruction
JP6919539B2 (ja) 演算処理装置および演算処理装置の制御方法
TW201905845A (zh) 全精度及部分精度數值的計算方法及裝置
KR100974190B1 (ko) 부동 소수점을 이용한 복소수 곱셈방법
US20210149633A1 (en) Low latency floating-point division operations
JP2015082152A (ja) 誤差評価を伴う数値演算方法およびこのための装置
Madian et al. A Multi Cordic Architecture on FPGA Platform
JP2010049614A (ja) 計算機
JP2006243826A (ja) 浮動小数点数値のm乗根を演算する浮動小数点演算装置及びコンピュータプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200424

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210303

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210309

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210607

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20210607

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: 20210706

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210729

R150 Certificate of patent or registration of utility model

Ref document number: 6923350

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150