JP6770777B2 - 数学的関数を計算するためのシステム及び方法 - Google Patents

数学的関数を計算するためのシステム及び方法 Download PDF

Info

Publication number
JP6770777B2
JP6770777B2 JP2016075643A JP2016075643A JP6770777B2 JP 6770777 B2 JP6770777 B2 JP 6770777B2 JP 2016075643 A JP2016075643 A JP 2016075643A JP 2016075643 A JP2016075643 A JP 2016075643A JP 6770777 B2 JP6770777 B2 JP 6770777B2
Authority
JP
Japan
Prior art keywords
hardware stage
inverse function
arguments
stage
tables
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
JP2016075643A
Other languages
English (en)
Other versions
JP2016201108A (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
Priority claimed from US14/680,791 external-priority patent/US9703530B2/en
Application filed by ビバンテ コーポレーション, ビバンテ コーポレーション filed Critical ビバンテ コーポレーション
Publication of JP2016201108A publication Critical patent/JP2016201108A/ja
Application granted granted Critical
Publication of JP6770777B2 publication Critical patent/JP6770777B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)

Description

<関連出願>
この出願は、2014年9月15日出願の、数学的関数の計算をするためのシステム及び方法という名称の米国特許出願第14/486,891号の一部継続出願である。
<技術分野>
本発明は、一般に、コンピュータシステムの分野に関し、より詳細には、グラフィックスプロセッサチップ用の計算機能に関する。
グラフィックスプロセッサチップは、伝統的に、高速な描画とレンダリング速度のために、ハードウェアで実装された様々な数学的関数を用いる。これらの数学的関数の幾つかの例は、逆数関数(「RCP」、reciprocal function)、逆平方根関数(「SQRT」、reciprocal square root function)、指数関数(「EXP」)、及び、対数関数(「LOG」)を含む。これらの数学的関数は、従来技術において、異なるアルゴリズムの個別の回路ブロックとして実装される。
例えば、従来技術における3サイクルのRCPの実装においては、浮動小数点数xを、上位ビット(「MSB」、most significant bits)部分x0と下位ビット(「LSB」、least significant bits)部分x1の連結として表すことができ、ここで、x1=x−x0である。xの逆数の主な計算は、仮数の計算におけるものである。仮数は、典型的には、aとbをデータルックアップテーブルとして、従来技術において、2つの項を持つ関数:f(x)=a+b(x−x0)で計算される。典型的な例だと、グラフィックスプロセッサのために21ビットよりも上の精度が要求されるわけだが、要求される精度を達成するために、データルックアップテーブルa及びbのそれぞれにおいて、16,000個を超えるエントリが必要とされる。これは、14ビットのx0と、それぞれが2.sup.14個のエントリを持つデータルックアップテーブルに基づく。そのような大きなデータルックアップテーブルのハードウェア実装は、データルックアップテーブルのサイズに比例した大きなゲート数、という結果となる。グラフィックプロセッサチップは、幾つかの数学的関数のハードウェア実装を含むことがある。従来技術の例においては、これらの数学的関数のそれぞれは、大きなゲート数を必要とし、典型的には他の方法と組み合わされる。これらの数学的関数のそれぞれを個別の論理回路と個別の大きなデータルックアップテーブルを使って実装することは、従来技術において、一般的な技法である。高速さとモバイルアプリケーションには、より高い集積度とより低い電力消費を要するので、これらの様々な数学的関数を実装する効率的なアルゴリズムへのニーズがある。
本発明の利点が容易に理解されるように、簡単に上に記した本発明のより詳細な記述が、添付の図面に図示される特定の実施形態を参照して、与えられるだろう。これらの図面が単に本発明の典型的な実施形態を図示するだけであることと、従って、これらの図面は本発明の範囲を限定するものと考えられるべきではないこととの理解の下に、本発明は、添付の図面を用いて、追加的な特殊性及び詳細とともに、記述され、説明されるだろう。
コンピュータシステムの模式的ブロック図である。 本発明の実施形態による、6ステージ統合型ハードウェアパイプラインを図示するブロック図である。 本発明の実施形態による、3ステージのRCPハードウェアパイプラインを図示するブロック図である。 本発明の実施形態による、様々な例示的データルックアップテーブルを計算するアルゴリズムを図示するフローチャート図である。 本発明の実施形態による、別の統合型ハードウェアパイプラインを図示するフローチャート図である。 本発明の実施形態による、逆三角関数を計算する別のパイプラインを図示するフローチャート図である。
本願の図に一般的に記述され図示されるような、本発明のコンポーネントを、多種多様な異なる構成で配置したり、設計したりすることが可能である、ということは、容易に理解されるだろう。従って、図に表されているような本発明の実施形態についてのより詳細な以下の記述は、請求項に記載されたような本発明の範囲を限定することを意図したものではなく、本発明による、現在考えられる実施形態の、ある幾つかの例を単に代表しているだけである。ここに記述される実施形態は、図面を参照することにより最も良く理解されるだろうし、図面においては、同様な部分は、全体に渡って、同様な参照符号によって示される。
本発明は、現在の最先端の技術に応じて、特に、現在利用可能な装置及び方法によってはまだ完全には解決されていない当分野の問題とニーズに応じて、開発された。
本発明による実施形態は、装置、方法、あるいはコンピュータプログラム製品として実施することが出来る。従って、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、あるいは、ソフトウェアとハードウェアの側面を組み合わせる実施形態の形を取ることが出来、これらはすべて、本明細書において一般的に、「モジュール」あるいは「システム」と呼ばれることがある。更に、本発明は、媒体内に具現化されたコンピュータ利用可能なプログラムコードを有する任意の有形の表現媒体において具現化されたコンピュータプログラム製品、という形を取ることが出来る。
一つ以上の、コンピュータ利用可能あるいはコンピュータ読み取り可能な媒体の、任意の組み合わせが利用され得る。例えば、コンピュータ読み取り可能な媒体は、携帯型コンピュータ・ディスケット、ハードディスク、ランダムアクセスメモリ(RAM)装置、リードオンリメモリ(ROM)装置、イレーサブル・プログラマブル・リードオンリメモリ(EPROMあるいはフラッシュメモリ)装置、携帯型コンパクトディスク・リードオンリメモリ(CDROM)、光ストレージ装置、及び磁気ストレージ装置のうちの、一つ以上を含んでいてもよい。選択された実施形態においては、コンピュータ読み取り可能な媒体は、命令実行システム、命令実行装置、もしくは命令実行デバイスによって使用されるためのプログラム、もしくは、こうしたものとつながるプログラムを、含み、格納し、通信し、伝播し、又は伝送することが出来るような、任意の非一時的媒体を含んでいてもよい。
本発明の動作を実行するためのコンピュータプログラムコードは、Java、Smalltalk、C++などのオブジェクト指向プログラミング言語や、「C」プログラミング言語あるいは同様なプログラミング言語などの従来の手続き的なプログラミング言語などを含む、一つ以上のプログラミング言語の任意の組み合わせによって、書かれてもよい。プログラムコードは、スタンドアロンのソフトウェアパッケージとして全体がコンピュータシステム上で実行されてもよく、スタンドアロンのハードウェアユニット上で実行されてもよく、当該コンピュータからある程度離れたリモートコンピュータ上で一部が実行されてもよく、あるいは、全体がリモートコンピュータ上あるいはリモートサーバ上で実行されてもよい。後者のシナリオにおいては、リモートコンピュータは、ローカルエリアネットワーク(LAN)あるいはワイドエリアネットワーク(WAN)を含む、任意のタイプのネットワークを介して、コンピュータに接続されてもよく、あるいは、その接続は、外部コンピュータに対して(例えば、インターネットサービスプロバイダを利用して、インターネットを介して)なされてもよい。
本発明の実施形態による方法、装置(システム)及びコンピュータプログラム製品の、フローチャート図及び/又はブロック図を参照して、本発明が以下に記述される。フローチャート図及び/又はブロック図のそれぞれのブロックと、フローチャート図及び/又はブロック図におけるブロックの組み合わせは、コンピュータプログラム命令あるいはコードによって実装され得ることが理解されるだろう。これらのコンピュータプログラム命令は、汎用コンピュータのプロセッサか、専用コンピュータのプロセッサか、あるいは、マシンを作り出す他のプログラマブルなデータ処理装置のプロセッサに、以下のように与えられてもよい。すなわち、それらの命令、つまりコンピュータあるいは他のプログラマブルなデータ処理装置のプロセッサを介して実行される命令が、フローチャート及び/又はブロック図の一つ又は複数のブロックに規定された機能/動作を実現する手段を作成するように、与えられてもよい。
これらのコンピュータプログラム命令は、また、コンピュータ又は他のプログラマブルなデータ処理装置を特定の方法で機能させることが出来る非一時的なコンピュータ読み取り可能な媒体に、以下のように格納されてもよい。すなわち、コンピュータ読み取り可能な媒体に格納された命令が、フローチャート及び/又はブロック図の一つ又は複数のブロックに規定された機能/動作を実現する命令手段を含む製品を作り出すように、格納されてもよい。
また、コンピュータあるいは他のプログラマブルな装置上で実行される命令が、フローチャート及び/又はブロック図の一つ又は複数のブロックに規定された機能/動作を実現するプロセスを生み出すように、コンピュータプログラム命令が、コンピュータあるいは他のプログラマブルなデータ処理装置にロードされて、コンピュータあるいは他のプログラマブルな装置上で一連の動作ステップが実行されるようにして、コンピュータで実装されたプロセスを作り出す、ということも可能である。
図1は、例示的コンピューティング装置100を図示するブロック図である。コンピューティング装置100は、本明細書で議論される手続きなどの、様々な手続きを実行するために用いられてもよい。コンピューティング装置100は、サーバ、クライアント、あるいは、任意の他のコンピューティング・エンティティとして機能することが出来る。コンピューティング装置は、本明細書で議論するような様々な監視機能を実行することが出来、本明細書で説明されるアプリケーションプログラムなどの、一つ以上のアプリケーションプログラムを実行することが出来る。コンピューティング装置100は、デスクトップ・コンピュータ、ノートブック・コンピュータ、サーバ・コンピュータ、ハンドヘルド・コンピュータ、タブレット・コンピュータなどの、広範囲の様々なコンピューティング装置のうちの任意のものとすることが出来る。
コンピューティング装置100は、一つ以上のプロセッサ102、一つ以上のメモリ装置104、一つ以上のインタフェース106、一つ以上の大容量記憶装置108、一つ以上の入出力(I/O)装置110、及びディスプレイ装置130を含み、これらは全てバス112に接続される。プロセッサ102は、メモリ装置104及び/又は大容量記憶装置108に格納された命令を実行する、一つ以上のプロセッサあるいはコントローラを含む。プロセッサ102は、また、キャッシュメモリなどの、様々なタイプのコンピュータ読み取り可能な媒体を含むことが出来る。
メモリ装置104は、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)114)及び/又は不揮発性メモリ(例えば、リードオンリメモリ(ROM)116)などの、様々なコンピュータ読み取り可能な媒体を含む。メモリ装置104は、また、フラッシュメモリなどの書き換え可能なROMを含むことが出来る。
大容量記憶装置108は、磁気テープ、磁気ディスク、光ディスク、固体メモリ(例えば、フラッシュメモリ)などの、様々なコンピュータ読み取り可能な媒体を含む。図1に示されるように、ある特定の大容量記憶装置は、ハードディスクドライブ124である。様々なコンピュータ読み取り可能な媒体に対して読み書きを可能とするために、様々なドライブも大容量記憶装置108に含まれていてよい。大容量記憶装置108は、リムーバブルな媒体126及び/又は、リムーバブルでない媒体を含む。
I/O装置110は、データ及び/又は他の情報がコンピューティング装置100に入力されたりコンピューティング装置100から取り出されたりすることを可能とする、さまざまな装置を含む。例示的なI/O装置110は、カーソル制御装置、キーボード、キーパッド、マイク、モニタあるいは他のディスプレイ装置、スピーカ、プリンタ、ネットワークインタフェースカード、モデム、レンズ、CCDあるいは他の撮像装置、などを含む。
ディスプレイ装置130は、コンピューティング装置100の一人以上のユーザに対して情報を表示することが出来る任意のタイプの装置を含む。ディスプレイ装置130の例は、モニタ、ディスプレイ端末、ビデオ投影装置などを含む。
インタフェース106は、コンピューティング装置100が他のシステム、装置、又はコンピューティング環境と相互作用することを可能とする、様々なインタフェースを含む。例示的なインタフェース106は、例えばローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、無線ネットワーク、及びインターネットへのインタフェースのような、任意の個数の異なるネットワークインタフェース120を含む。他のインタフェースは、ユーザインタフェース118と周辺装置インタフェース122を含む。インタフェース106は、また、一つ以上のユーザインタフェース要素118を含むことも出来る。インタフェース106は、また、例えばプリンタ、ポインティングデバイス(マウス、トラックパッドなど)、キーボードなどへのインタフェースといった、一つ以上の周辺装置インタフェースを含むことも出来る。
バス112は、プロセッサ102、メモリ装置104、インタフェース106、大容量記憶装置108、及びI/O装置110が相互に通信することを可能とし、バス112に接続された他の装置あるいはコンポーネントについても同様である。バス112は、システムバス、PCIバス、IEEE1394バス、USBバスなどの何種類かのバス構造のうちの、一つ以上を代表している。
説明のために、プログラム及び他の実行可能なプログラムコンポーネントは、本図面には個別のブロックとして示されているが、とはいえ、そのようなプログラムとコンポーネントは、様々な時点においてコンピューティング装置100の異なる記憶コンポーネントに存在し得るもので、かつ、プロセッサ102によって実行されるものだ、と理解される。あるいは、本明細書に記述されるシステム及び手続きを、ハードウェアによって、あるいは、ハードウェア、ソフトウェア、及び/又はファームウェアの組み合わせによって、実装することが出来る。例えば、一つ以上の特定用途向け集積回路(ASIC)を、本明細書に記述されるシステムと手続きのうちの一つ以上を実行するように、プログラムすることが出来る。
図2は、本発明の実施形態による、6ステージ統合型ハードウェアパイプラインを図示するブロック図である。ここで、ブロック101、ブロック103、ブロック105、ブロック107、ブロック109、ブロック111、及びブロック113は、パイプラインのレジスタステージである。ブロック102は、浮動小数点から固定小数点への変換器である。ブロック112は、固定小数点から浮動小数点への変換器である。一例においては、ブロック112は、EXP関数を実装するためのオペコード(つまり、構成(configuration)命令、マイクロコードなど)に応じてバイパス回路となるように構成されてもよい。他の例においては、ブロック102は、LOG関数を実装するための他のオペコード(つまり、構成命令、マイクロコードなど)に応じてバイパス回路となるように構成されてもよい。更に他の例においては、ブロック102とブロック112の両方は、RCPあるいはSQRT関数を実装するに際し、更に他のオペコード(つまり、構成命令、マイクロコードなど)に応じてバイパス回路となるように構成されてもよい。幾つかの例においては、ブロック104、106、108、及び110は、個別のデータルックアップテーブルに基づいて、RCP、SQRT、EXP、LOGなどの数学的関数を計算するための二次近似の様々な部分を実装することが出来る。例えば、ブロック104は、浮動小数点数xの仮数に対応する整数iに基づいて、cについてのデータテーブルのルックアップを実装する。同様に、ブロック106は、bについてのデータテーブルのルックアップを実装する。同一のパイプラインステージの間に、ブロック106は、また、c(x−x0)を計算する。同様に、ブロック108は、aについてのデータテーブルのルックアップを実装し、b(x−x0)とc(x−x0)(x−x1)の計算も実装する。ブロック110は、二次近似を計算するために、3個の項の合算を実装する。上記記述は、上記詳細には限定されず、上記記述により自明となったような様々な改変あるいは交替がなされてもよい。
図3は、本発明の実施形態による、3ステージのRCPハードウェアパイプラインを図示するブロック図である。ここで、ブロック201、ブロック203、ブロック205、及びブロック207は、パイプラインのレジスタステージである。幾つかの例においては、ブロック202、204、及び206は、二次近似の様々な部分を実装することが出来る。例えば、ブロック202は、浮動小数点数の仮数のMSBに対応する整数iに基づいて、bとcについてのデータテーブルのルックアップを実装する。同一のパイプラインステージの間に、ブロック202は、また、(x−x0)(x−x1)を計算する。同様に、ブロック204は、aについてのデータテーブルのルックアップを実装し、b(x−x0)とc(x−x0)(x−x1)の計算も実装する。幾つかの実装においては、(x1−x)は、NOT(x−x0)として計算されてもよく、ここで、NOTは、1を0に、0を1に変更する、ビットごとの演算である。ブロック206は、二次近似を計算するために、3個の項の合算を実装する。上記記述は、上記詳細には限定されず、上記記述によって自明となったような様々な改変あるいは交替がなされてもよい。
図4は、本発明の実施形態による、様々なデータルックアップテーブルを計算する例示的アルゴリズムを図示するフローチャート図である。ここで、例示的アルゴリズムは、SQRT用のデータテーブルa、b及びcを計算するために図示されている。この例においては、table[0][i]=a, table[1][i]=b 及び table[2][i]=c である。三つの一次方程式が、三つの値a、b及びcを計算するために用いられる。これらの三つの方程式は、まずセグメントの開始点(つまり、x)、中間点(つまり、x.sub.――5)及び終点(つまり、x1)を計算することにより(301)、解かれる。ブロック302及び303は、浮動小数点形式でa、b及びcを計算する。ブロック304は、a、b及びcを整数形式に変換する。ブロック305は、丸めを行い、最終的な値を生成する。他の例として、ブロック302における「sqrt」関数は、本アルゴリズムをRCP用のデータテーブルa、b及びcを計算することに転用するために、逆数関数によって置換されてもよい。他の例においては、ブロック302における「sqrt」関数は、本アルゴリズムを他の関数(例えば、EXP、LOGなど)用のデータテーブルa、b及びcを計算することに転用するために、これらの他の関数によって置換されてもよい。上記記述は、上記詳細には限定されず、上記記述によって自明となったような様々な改変あるいは変更がなされてもよい。図4のフローチャートは、64個のエントリのテーブルを実装するのに適しているだろう。128個のエントリなどの他の個数のエントリも用いることができる。
上記方法は、例えばモバイル・グラフィックス・チップにおけるバーテックスシェーダやピクセルシェーダなどに対して、一つの統合型ハードウェアパイプラインを用いて浮動小数点値で上記の超越関数のリストを計算するための統一的方法を、提供する。この技法は、F(x) = 1/x; F(x) = 1/x^(1/2); F(x) = 2 ^x 及び F(x) = LOG2(x) の計算に基づいていてもよい。
これらの関数は、以下の関数、すなわち、F(x) = a + b(x-x0) + c(x-x0)(x-x1)(以下、「補間関数」)を実行する、統合型ハードウェアパイプによって、実装される。近似は、64個、128個あるいは、ある他の個数のセグメントで行うことができ、ここで、x0はセグメントの開始値であり、x1はセグメントの終了値である。x0は、xのMSB(most significant bits)部分であり、(x−x0)は、xのLSB(least significant bits)部分である。xの値は、x0とx1の間である(x0 <= x < x1)。値a、b及びcは、例えばハードウェアに埋め込まれたテーブルなどの、三つの個別のテーブルからのものである。
EXPに対しては、浮動小数点から固定小数点への数の変換ステージが、統合型ハードウェアパイプの前段に配置される。LOGに対しては、統合型ハードウェアパイプの後段に、固定小数点から浮動小数点への数の変換がある。ハードウェアの流れと機能は、各関数について選択されるテーブルが異なるほかは、四つの関数のそれぞれについて同一である。入力オペコードが関数を選択する。このアプローチに基づいた、低レイテンシの効率的RCP(逆数)の実装は、3サイクルにまで減少され得る。
図5を参照すると、Sin(πx), Cos(πx), LOG2(x) 及び DIV (つまり、y/x)の計算を高速化するために、ロジックデバイスが図1と図2のパイプラインに追加されてもよい。例えば、追加のロジックは、Sin(πx) = Sin(π*(IntX+ FracX)) = (-1)^IntX*Sin(π*FracX) という公式に基づいて実装されてもよく、ここで、IntXは入力浮動小数点引数xの整数部分であり、FracXは入力xの小数部分である。よって、直接Sin(πx)を近似するのではなくて、F(x) = Sin(π*FracX)/FracXに従って近似されてもよい。従って、図5の改変されたパイプラインは、例えば浮動小数点から固定小数点への変換ロジック202などから、追加のパイプライン500を用いて、追加の出力(output2)を生成してもよく、ここでoutput2はFracXに等しい。パイプラインは、Sin(πx) = F(x)*output2を計算するように更に改変されてもよく、ここでF(x)は、例えばパイプラインステージ203-214による、関数Sin(π*FracX)/FracXの近似である。具体的には、F(x)は、例えば上記したパイプラインと方法による、入力引数としてのFracXの値に従って選択されたテーブルのエントリ間での、補間の結果である。図示された実施形態では、F(x)とoutput2の乗算は、パイプラインのステージ216において実行されてもよい。Cos(πx)については、Cos(πx) = Sin(π(x+0.5))である。従って、Sin(πx)の同じロジックが、結果を得るために用いられてもよい。ある実施形態においては、Sin(πx)は、FracX <= 0.5fならば、F(x) = Sin(π*FracX)/FracX とoutput2 = FracX とを用いて計算され、ここで0.5f は、1/2に等しい浮動小数点値である。Sin(πx)用の幾つかの実施形態においては、FracX > 0.5f ならば、F(x) = Sin(π*(1.0 - FracX) )/(1.0 - FracX)であり、output2は1.0-FracX である。例えば、より一般的には、Sin(πx)に対し、F(x) = ((-1)^IntX)*Sin(π*Min(FracX, 1.0 - FracX) )/Min(FracX, 1.0 - FracX) であり、output2 はMin(FracX, 1.0 - FracX)であり、ここでIntXはxの整数部分である。
入力引数xが1.0に近いとき、Log2(x)は非常に小さい。直接LOG2(x)を近似するのではなく、F(x) = Log2(x - 1)/(x - 1)として近似されてもよい。従って、LOG2について、output2は、x - 1に等しく設定されてもよい。従って、LOG2(x) = F(x)*output2であり、ここでoutput2は(x - 1)に等しく、F(x)は、本明細書に記載したようにハードウェアパイプライン内でテーブルと補間を用いて計算される、LOG2(x-1)/(x-1)の近似である。この改変が実行される対象のxの値は、用いられる浮動小数点表現に基づいて選択されるべきである。例えば、幾つかの実施形態においては、xが[0.75,1.5)の範囲内にあるとき、F(x) = LOG2(x-1)/(x-1) かつ output2 = (x-1)である。そうでない場合は、LOG2(x)に対しては、F(x) = LOG2(x) かつ output2 = 1.0fである。
DIV(例えば、y/x)については、y/x = y*(1/x) = y*Rcp(x)という関係を用いると、1/xのアンダーフローの問題があるかもしれず、つまり、|x| > 2^126のとき、32ビットの浮動小数点表現では 1/x = 0 であるかもしれない。|x| > 2^126におけるアンダーフローは、最大の浮動小数点値が、2^127*1.11111111であり、かつ、「浮動小数点正規化数表現」において、最小値が、2^(-126)であるので、発生する。非正規化数を用いる場合、最小値は、2^(-149)となり得る。この場合、入力引数x及びyの双方は、2^32によってスケーリングされてもよく、つまり、y/x = (y/2^32)/(x/2^32)である。従って、ハードウェアパイプラインにおいては、xがある範囲を超えている(例えば、2^64より大きい)場合にy/xの双方をスケールダウンするために、追加のパイプラインステージが用いられてもよい。この追加のステージは、本明細書に記述したようにテーブル値を選択して補間ステップを実行するためのパイプラインステップの前に、実行されてもよい。
G(x) = Acos(x)/Sqrt(1-x*x)は、[0, 1.0]において非常に滑らかであり、すなわち、その導関数が、有限で、多項式を用いて容易に近似出来る。G(x)は、SinPi(x)/x について上記したのと同様の方法で近似されてもよい。特に、引数が浮動小数点から24ビット固定小数点値に変換されてもよく、それから、G(x)が、上記したようにルックアップテーブルと多項式近似を用いて、固定小数点バージョンで実行されてもよく、その後、多項式近似の出力が浮動小数点値に変換されてもよい。特に、多項式近似は、上記したように、区分的な二次近似を用いて、実行されてもよい。更に、aTan2(x,y)についての前処理関数が、正負の無限大の(x,y)成分を調整するために用いられてもよい。
Acos(x)は、以下のようにして、G(x)から得ることが出来る。すなわち、x≧0に対して、Acos(x) = G(x) * Sqrt(1-x*x) 及び Acos(-x) = π - G(-x)*Sqrt(1-x*x) である。
上記の二つの式を統合するために(さもなければ、「if else」命令が必要になるだろう)、幾つかの実施形態では、 (out1, out2) = InvTrig(x, y, opcode) という関数を用いるのだが、これは、二つの入力(x,y)をとり、関数G(Z)に基づいてOut1 及び Out2を出力するもので、ここで、Zはオペコードに基づいて決定される入力である。
図6を参照すると、逆三角関数を計算する装置は、図示されるようなものであってもよい。前処理ステージ600は、入力引数x、あるいは、入力引数xとyを処理し、一つ以上の出力を生成する。特に、前処理ステージ600は、表1に概要が示されているように入力引数に応答して、出力引数を提供するのに効果的な回路を含んでもよい。
前処理ステージ600からの出力引数は、関数「InvTrig()」を実行するステージ602に入力されてもよく、関数「InvTrig()」は、入力引数と共に受け取ったオペコードにより、表2に概要が示されているように、前処理ステージの出力引数及び/又は元の入力引数を処理する。InvTrigステージ602は、二つの出力Out1及びOut2を生成することが出来、その一方が使用されてもよく、あるいは、両方が使用されてもよい。表1において、「Fma」は、オーバーフローを避けるためにaとbの精度を落とすのとは反対に、cを加算する前の高精度のaとbを用いて関数a*b+cを実行する演算を指す。表1において、「Dp2」は、関数a*b+kc*dが二通りの精度で実行される、つまり、乗算(a*b)及び(c*d)が、オーバーフローを避けるために半精度の引数a、b、c、及びdを用いて実行され、加算が全精度で実行される、関数を指す。
表2において明らかなように、各オペコードについて、入力引数のうち少なくとも幾つかの値は、関数G(Z)を計算するという結果をもたらすだろう(Zは、表2に概要が示されるように、x、sなどである)。図示された実施形態においては、G(Z)は、値G(Z) = Acos(Z)/Sqrt(1 - x*x)を出力する。G(Z)を計算することは、図5のパイプラインを用いて実行されてもよい。同様に、Sqrt(二乗根)及びRsqrt(二乗根の逆数)もまた、図2-5のパイプラインの属性のうちの幾つかあるいは全部を有することが出来るパイプライン604を用いて、計算されてもよい。具体的には、これらの関数の値は、係数a、b、c用のルックアップテーブルを用いて計算されてもよく、上記のように補間されてもよい。
InvTrig ステージ602の出力の一方あるいは両方は、オペコードに対応する逆三角関数を近似する出力608を得るために、前処理ステージ600の出力と元の入力引数のうちの一つ以上と共に、後処理ステージ606によって処理されてもよい。特に、後処理ステージ606によって実行される計算と、各オペコードについて後処理ステージ606が演算を行う対象の値が、表3に記述されている。1/Piの値は、必要なときに毎回計算しなくてよいように、予め計算されていてもよい(0.31830988618379067153776752674503f)。
さてこれからnew(x,y)の動作を記述しよう。特に、new(x,y)は、オーバーフロー、アンダーフロー、0による割り算、及び、幾つかの入力引数について起こりうる他のエラーを避けるために用いられてもよい。例えば、new(x,y)は、Atan2piの出力が、Atan2piに対するOpenCL標準の要件に合致するように、出力x’とy’を生成してもよい:
atan2pi ( ±0, -0 ) = ±1.
atan2pi ( ±0, +0 ) = ± 0.
atan2pi ( ±0, x ) x < 0に対し、± 1を返す。
atan2pi ( ±0, x ) x > 0に対し、± 0を返す。
atan2pi ( y, ±0 ) y < 0に対し、-0.5を返す。
atan2pi ( y, ±0 ) y > 0に対し、0.5を返す。
atan2pi ( ±y, -∞ ) 有限な y > 0に対し、± 1を返す。
atan2pi ( ±y, +∞ ) 有限な y > 0に対し、± 0を返す。
atan2pi ( ±∞, x ) 有限な x に対し、± 0.5を返す。
atan2pi (±∞, -∞ ) ± 0.75を返す。
atan2pi (±∞, +∞ ) ± 0.25を返す。
図示された実施形態において、上記結果は、表4において以下に示されるようにnew(x,y)を実装することによって、達成される。例えば、x=y=2^68で、new(x,y)が用いられなかった場合、u=(x*x+y*y)=2^137となり、オーバーフローを起こすだろう(max=2^127*1.11111…)。u= +infのときは、v=0,(s,t)=(0,0)である。最終結果は、従って、w=0である。正しい結果は、0.25である。x=y=2^(-68)ならば、アンダーフロー、u=0,v=Inf,(s, t)=Infにより、間違った結果が、また得られるだろう。最終結果は、w=Nanである。G(s)の計算において、|s|>1.0である場合、InvTrigの出力は、out1=out2= Nanであってもよい。
上記装置及び方法は、少しの命令で、Asin, Acos, Atan, Atan及び Atan2のうちの複数あるいは全てを実行することが出来る、2入力・2出力関数(前処理ステージ600と、InvTrigステージ602)を提供する。
本発明の上記実施形態は、例示と説明として提供されている。これらは、本発明を、記述されたとおりのまさにその形態に限定することを意図したものではない。特に、本明細書に記述された発明の機能的実装は、ハードウェア、ソフトウェア、ファームウェア、及び/又は、他の利用可能な機能的なコンポーネント若しくは基本構成要素で、等価に実装され得るということ、そして、ネットワークは、有線、無線、あるいは、有線と無線の組み合わせであってよいこと、が考えられる。他の変形、及び、実施形態が、上記教示の下に可能であり、従って、発明の範囲は、この詳細な説明によって限定されず、むしろ、以下の請求項によって限定されることを意図している。
本発明は、その精神あるいは本質的特性から外れることなく、他の特定の形態で実施され得る。記述された実施形態は、全ての点で、例示的であるのみであり、限定的ではない、と考えられるべきである。従って、本発明の範囲は、上記記述によってではなく、添付の請求項によって示される。請求項の均等物の意味と範囲の内にある全ての変更は、請求項の範囲内に含まれるべきである。

Claims (20)

  1. 数学的関数を計算する装置であって、
    オペコード及び一つ以上の入力引数を入力として取り、前記一つ以上の入力引数と前記オペコードに従って、一つ以上の出力引数を生成するように構成された、前処理ハードウェアステージと、
    値G(Z)を計算し一つまたは二つの出力を求めて出力するように構成された逆関数ハードウェアステージであって、Zは、前記オペコードがAsin、AtanまたはAtan2に対応する場合は前記出力引数のうちの一つに基づくものであり、前記オペコードがAcosに対応する場合は前記一つ以上の入力引数のうちの一つに基づくものであり、かつ、G(Z)=Acos(Z)/Sqrt(1-Z*Z)である、逆関数ハードウェアステージと、
    前記逆関数ハードウェアステージからの一つまたは二つの出力と、前記一つ以上の入力引数と前記一つ以上の出力引数のうちの一つを、前記オペコードに従って処理し、最終結果を得るように構成された、後処理ハードウェアステージと、
    を備える装置。
  2. 前記逆関数ハードウェアステージは、一つ以上のルックアップテーブルから、G(Z)を計算するように構成されている、請求項1に記載の装置。
  3. 前記逆関数ハードウェアステージは、前記一つ以上のルックアップテーブルからの値を用いて、多項式近似を行うことによって、前記一つ以上のルックアップテーブルからG(Z)を計算するように構成されている、請求項2に記載の装置。
  4. 前記逆関数ハードウェアステージは、(Z-Z0)と(Z-Z1)の値を用いて多項式を計算することによって、前記多項式近似を実行するように構成されており、前記一つ以上のルックアップテーブルは、Zより小さいZ0に対応する値、及び、Zより大きいZ1に対応する値を含む、請求項3に記載の装置。
  5. 逆関数ハードウェアステージは、(Z-Z1)をNOT(Z-Z0)と計算するように構成されている、請求項4に記載の装置。
  6. 前記逆関数ハードウェアステージは、(Z-Z0)*(Z-Z1)の値を用いて多項式を更に計算することによって、前記多項式近似を実行するように構成されている、請求項4に記載の装置。
  7. 前記逆関数ハードウェアステージは、G(Z)=a+b*(Z-Z0)+c*(Z-Z0)*(Z-Z1)を計算することによって前記多項式近似を実行するように構成されており、値a、b、及びcは、値Z0とZ1に対応し、前記一つ以上のルックアップテーブルから取得される、請求項6に記載の装置。
  8. 表1を
    表4を
    とするとき、
    前記前処理ハードウェアステージは、表1と表4に従って、前記入力引数に応じて前記出力引数を計算するように構成されている、請求項1に記載の装置。
  9. 表2を
    とするとき、
    前記逆関数ハードウェアステージは、表2に従って、前記一つまたは二つの出力を求めて出力するように構成されている、請求項1に記載の装置。
  10. 表3を
    とするとき、
    前記後処理ハードウェアステージは、表3に従って、前記オペコード、前記逆関数ハードウェアステージからの一つまたは二つの出力、及び、前記一つ以上の入力引数と前記一つ以上の出力引数のうちの一つに応じて前記最終結果を計算するように構成されている、請求項1に記載の装置。
  11. 数学的関数を計算する方法であって、
    前処理ハードウェアステージによって、オペコード、及び一つ以上の入力引数を受け取ることと、
    前記前処理ハードウェアステージによって、前記一つ以上の入力引数と前記オペコードに従って、一つ以上の出力引数を生成することと、
    逆関数ハードウェアステージによって、値G(Z)を計算し一つまたは二つの出力を求めて出力することであって、Zは、前記オペコードがAsin、AtanまたはAtan2に対応する場合は前記出力引数のうちの一つに基づくものであり、前記オペコードがAcosに対応する場合は前記一つ以上の入力引数のうちの一つに基づくものであり、かつ、G(Z)=Acos(Z)/Sqrt(1-Z*Z)である、値G(Z)を計算し一つまたは二つの出力を求めて出力することと、
    後処理ハードウェアステージによって、前記オペコードに従って、前記逆関数ハードウェアステージからの一つまたは二つの出力と、前記一つ以上の入力引数と前記一つ以上の出力引数のうちの一つとを処理し、最終結果を得ることと、
    を含む、方法。
  12. 前記逆関数ハードウェアステージによって、一つ以上のルックアップテーブルからG(Z)を計算することを、更に含む、請求項11に記載の方法。
  13. 前記逆関数ハードウェアステージによって、前記一つ以上のルックアップテーブルからの値を用いて、多項式近似を実行することによって、前記一つ以上のルックアップテーブルからG(Z)を計算することを更に含む、請求項12に記載の方法。
  14. 前記逆関数ハードウェアステージによって、(Z-Z0)と(Z-Z1)の値を用いて多項式を計算することによって、前記多項式近似を求めることを更に含み、前記一つ以上のルックアップテーブルは、Zより小さいZ0に対応する値、及び、Zより大きいZ1に対応する値を含む、請求項13に記載の方法。
  15. 前記逆関数ハードウェアステージによって、(Z-Z1)をNOT(Z-Z0)と計算することを更に含む、請求項14に記載の方法。
  16. 前記逆関数ハードウェアステージによって、(Z-Z0)*(Z-Z1)の値を用いて、前記多項式近似を求めることを更に含む、請求項14に記載の方法。
  17. 前記逆関数ハードウェアステージによって、G(Z)=a+b*(Z-Z0)+c*(Z-Z0)*(Z-Z1)を計算することによって、前記多項式近似を求めることを更に含み、値a、b、及びcは、値Z0とZ1に対応し、前記一つ以上のルックアップテーブルから取得される、請求項16に記載の方法。
  18. 表1を
    とし、
    表4を

    とするとき、
    前記前処理ハードウェアステージによって、表1と表4に従って、前記入力引数に応じて前記出力引数を計算することを更に含む、請求項11に記載の方法。
  19. 表2を
    とするとき、
    前記逆関数ハードウェアステージによって、表2に従って、一つまたは二つの出力を求めて出力することを更に含む、請求項11に記載の方法。
  20. 表3を
    とするとき、
    前記後処理ハードウェアステージによって、表3に従って、前記オペコード、前記逆関数ハードウェアステージからの一つまたは二つの出力、及び、前記一つ以上の入力引数と前記一つ以上の出力引数のうちの一つに応じて前記最終結果を計算することを更に含む、請求項11に記載の方法。
JP2016075643A 2015-04-07 2016-04-05 数学的関数を計算するためのシステム及び方法 Active JP6770777B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/680,791 2015-04-07
US14/680,791 US9703530B2 (en) 2006-07-25 2015-04-07 Systems and methods for computing mathematical functions

Publications (2)

Publication Number Publication Date
JP2016201108A JP2016201108A (ja) 2016-12-01
JP6770777B2 true JP6770777B2 (ja) 2020-10-21

Family

ID=55808945

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016075643A Active JP6770777B2 (ja) 2015-04-07 2016-04-05 数学的関数を計算するためのシステム及び方法

Country Status (3)

Country Link
EP (1) EP3079056B1 (ja)
JP (1) JP6770777B2 (ja)
KR (1) KR102503498B1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180217814A1 (en) * 2017-02-02 2018-08-02 Vivante Corporation Systems And Methods For Computing Mathematical Functions
KR102567603B1 (ko) 2021-07-23 2023-08-17 세종대학교산학협력단 선형 보간법을 이용한 삼각함수 계산 방법 및 장치
KR102670314B1 (ko) * 2021-07-30 2024-05-29 주식회사 사피온코리아 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2084989A1 (en) * 1990-07-19 1992-01-20 Brett L. Lindsley Device for evaluating inverse trigonometric functions
JP2005275626A (ja) * 2004-03-23 2005-10-06 Fujitsu Ltd 演算種別と精度を選択可能な近似演算処理方法および近似演算処理装置
JP2006059084A (ja) * 2004-08-19 2006-03-02 Renesas Technology Corp データプロセッサ、データ処理方法及び演算処理プログラム
US8346831B1 (en) * 2006-07-25 2013-01-01 Vivante Corporation Systems and methods for computing mathematical functions
US9600236B2 (en) * 2006-07-25 2017-03-21 Vivante Corporation Systems and methods for computing mathematical functions
US8862650B2 (en) * 2010-06-25 2014-10-14 Altera Corporation Calculation of trigonometric functions in an integrated circuit device

Also Published As

Publication number Publication date
EP3079056A3 (en) 2017-01-25
EP3079056B1 (en) 2020-12-16
EP3079056A2 (en) 2016-10-12
KR20160120249A (ko) 2016-10-17
JP2016201108A (ja) 2016-12-01
KR102503498B1 (ko) 2023-02-23

Similar Documents

Publication Publication Date Title
JP5731937B2 (ja) ベクトル浮動小数点引数削減
JP2017059229A (ja) 算術演算を行う方法及び処理装置
JP6770777B2 (ja) 数学的関数を計算するためのシステム及び方法
US8874630B2 (en) Apparatus and method for converting data between a floating-point number and an integer
JP2012069116A5 (ja)
US9600236B2 (en) Systems and methods for computing mathematical functions
US20130091189A1 (en) Single datapath floating point implementation of RCP, SQRT, EXP and LOG functions and a low latency RCP based on the same techniques
JP4953978B2 (ja) 平方値に線形従属する計算結果の表示を生成する方法
US9703530B2 (en) Systems and methods for computing mathematical functions
KR102559930B1 (ko) 수학적 함수들을 연산하기 위한 시스템 및 방법들
US10140090B2 (en) Computing and summing up multiple products in a single multiplier
TWI386845B (zh) Error calculation of the integer division operation circuit
JP2015015026A (ja) 様々な数値フォーマットのデータを用いてデータに基づく関数モデルを計算するためのモデル計算ユニット、および制御装置
KR102281047B1 (ko) 4개의 입력 내적 회로를 사용하는 삼각 함수 계산
US8924447B2 (en) Double precision approximation of a single precision operation
EP3923132B1 (en) Device for performing multiply/accumulate operations
US11314482B2 (en) Low latency floating-point division operations
JP2008097194A (ja) 逆数算出装置、逆数算出方法、及び逆数算出プログラム
CN117992122A (zh) 特殊函数单元sfu计算装置及数据计算方法
JP2016071861A (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: 20190327

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200122

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200303

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200602

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200616

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200727

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20200727

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200831

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200924

R150 Certificate of patent or registration of utility model

Ref document number: 6770777

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250