(57)【要約】      （修正有）【課題】数学的関数を計算するためのシステムおよび方法を提供する。【解決手段】数学的関数は、データテーブルを用いた多項式近似（二次近似など）を行う１つのパイプラインで計算される。１つのパイプラインは、１つ以上のオペコードに従って、ＲＣＰ関数、ＳＱＲＴ関数、ＥＸＰ関数、もしくは、ＬＯＧ関数のうちの少なくとも１つを計算できる。ＳＩＮおよびＣＯＳも、近似によりパイプラインを用いて計算される。【選択図】図２
2018129040.tif 000002
【特許請求の範囲】
【請求項１】
（ｉ）電子デバイスによって、Ｘの関数を入力として受け付けて第１の超越関数を計算し、前記第１の超越関数は、Ｍ１Ｈ、Ｍ１Ｌ、および、Ｍ２を出力するステップと、ここで、Ｍ２は第１の精度を有し、Ｍ１ＨとＭ１Ｌの組合せは前記第１の精度よりも大きい第２の精度を有し、
（ｉｉ）前記電子デバイスの２エレメントドット積（Ｄｐ２）回路によって、Ｍ１ＨとＭ２の積、および、Ｍ１ＬとＭ２の積に従って、ＫＨとＫＬを計算するステップと、
（ｉｉｉ）前記電子デバイスによって、有意性の高い出力ＴＨと有意性の低い出力ＴＬを得るために、（ａ）Ｙの関数と（ｂ）ＫＨおよびＫＬの両方との積を計算するステップと、
（ｉｖ）前記電子デバイスによって、関数ＴＨとＴＬに従って、ＸのＹ乗（X^Y）の見積もり値である出力を得るために、第２の超越関数を計算するステップ
を含むことを特徴とするＸのＹ乗の値を計算する方法。
【請求項２】
前記Ｄｐ２回路が、ＫＨとＫＬの各々がＭ２と同じ精度を有するように、ＫＨとＫＬを生成する
ことを特徴とする請求項１に記載の方法。
【請求項３】
Ｘが指数ｋおよび仮数ｓを有する浮動小数点値である場合、
前記電子デバイスによって、ｐ＝ｓ≧０．５  ？  （１＋ｓ）／２  ：  （１＋ｓ）を計算するステップと、
前記電子回路によって、Ｍ２を１−ｐとして計算するステップと、
前記電子回路によって、Ｍ１Ｈが（Ｌｏｇ２（１−ｐ））／（１−ｐ）の計算結果の有意性の高い部分であり、Ｍ１Ｌが（Ｌｏｇ２（１−ｐ））／（１−ｐ）の計算結果の有意性の低い部分となるように、｛Ｍ１Ｈ，Ｍ１Ｌ｝を（Ｌｏｇ２（１−ｐ））／（１−ｐ）として計算するステップと、
前記電子回路によって、ｎ＝ｓ≧０．５  ？  ｋ＋１  ：  ｋを計算するステップと、
前記電子回路によって、ＫＨが  ｎ＊１．０＋Ｍ１Ｈ＊Ｍ２＋Ｍ１Ｌ＊Ｍ２  の計算結果の有意性の高い部分であり、ＫＬが  ｎ＊１．０＋Ｍ１Ｈ＊Ｍ２＋Ｍ１Ｌ＊Ｍ２  の計算結果の有意性の低い部分となるように、｛ＫＨ，ＫＬ｝＝ｎ＊１．０＋Ｍ１Ｈ＊Ｍ２＋Ｍ１Ｌ＊Ｍ２  を計算するステップ
を前記方法がさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
（Ｌｏｇ２（１−ｐ））／（１−ｐ）の計算は、前記電子回路によって、テーブルを用いて行われる
ことを特徴とする請求項３に記載の方法。
【請求項５】
３エレメントドット積（Ｄｐ３）回路を用いて  ｎ＊１．０＋Ｍ１Ｈ＊Ｍ２＋Ｍ１Ｌ＊Ｍ２  が計算される
ことを特徴とする請求項４に記載の方法。
【請求項６】
ＫＨおよびＫＬがＭ２と同じ精度を有する
ことを特徴とする請求項５に記載の方法。
【請求項７】
Ｍ１ＬがＭ１Ｈよりも小さいビット数の精度を有する
ことを特徴とする請求項１に記載の方法。
【請求項８】
前記Ｙの関数、および、前記Ｘの関数が表１に従って定義される
ことを特徴とする請求項１に記載の方法。
【請求項９】
表１に定義されたＸとＹに応じてｓｉｇｎ値を決定するステップ
をさらに含み、
前記方法が、さらに、外部デバイスによって、前記ｓｉｇｎ値に応じた前記第２の超越関数からの出力をｓｉｇｎに設定するステップを含む
ことを特徴とする請求項８に記載の方法。
【請求項１０】
前記第２の超越関数を前記ＴＨの関数およびＴＬの関数に従って計算するステップが、
前記電子デバイスによって、ＴＨの整数部分をＴＨ＿Ｉｎｔとして取得するステップと、
前記電子デバイスによって、ＴＨの小数部分をＴＨ＿Ｆｒａｃとして取得するステップと、
前記電子デバイスによって、Ｔ＿Ａｌｌ＿Ｆｒａｃを取得するために、ＴＨ＿ＦｒａｃとＴＬを組合せるステップと、
前記電子デバイスによって、前記ＸのＹ乗の見積もり値を取得するために、ＴＨ＿ＦｒａｃおよびＴ＿Ａｌｌ＿Ｆｒａｃを前記第２の超越関数に入力するステップ
を含むことを特徴とする、請求項１に記載の方法。
【請求項１１】
（ｉ）Ｘの関数を入力として受け付けて、Ｍ１Ｈ、Ｍ１Ｌ、および、Ｍ２を出力するようにプログラムされた第１の超越関数ステージと、ここで、Ｍ２は第１の精度を有し、Ｍ１ＨとＭ１Ｌの組合せは前記第１の精度よりも大きい第２の精度を有し、
（ｉｉ）Ｍ１ＨとＭ２の積、および、Ｍ１ＬとＭ２の積に従って、ＫＨとＫＬを出力するようにプログラムされた第１のドット積ステージと、
（ｉｉｉ）有意性の高い出力ＴＨと有意性の低い出力ＴＬを得るために、（ａ）Ｙの関数と（ｂ）ＫＨおよびＫＬの両方との積を計算するようにプログラムされた第２のドット積ステージと、
（ｉｖ）ＴＨの関数およびＴＬの関数を入力として受け付けて、ＸのＹ乗の見積もり値を出力するようにプログラムされた第２の超越関数ステージ
を含み、
Ｍ１ＬはＭ１Ｈよりも低いビット数の精度を有し、
前記第１のドット積ステージ、および、前記第２のドット積ステージは、１つ以上の４エレメントドット積（Ｄｐ４）回路を用いて実装される
ことを特徴とするＸのＹ乗の値を計算するための電子デバイス。
【請求項１２】
前記第１のドット積ステージは、２エレメントドット積（Ｄｐ２）回路を含み、
前記Ｄｐ２回路は、ＫＨとＫＬの各々がＭ２と同じ精度を有するように、ＫＨとＫＬを出力するようにプログラムされている
ことを特徴とする請求項１１に記載の電子デバイス。
【請求項１３】
Ｘが指数ｋおよび仮数ｓを有する浮動小数点値である場合、
ｐ＝ｓ≧０．５  ？  （１＋ｓ）／２  ：  （１＋ｓ）を計算し、
Ｍ２を１−ｐとして計算し、
Ｍ１Ｈが（Ｌｏｇ２（１−ｐ））／（１−ｐ）の計算結果の有意性の高い部分であり、Ｍ１Ｌが（Ｌｏｇ２（１−ｐ））／（１−ｐ）の計算結果の有意性の低い部分となるように、｛Ｍ１Ｈ，Ｍ１Ｌ｝を（Ｌｏｇ２（１−ｐ））／（１−ｐ）として計算し、ここで、Ｌｏｇ２（１−ｐ）は前記第１の超越関数ステージを用いて実装され、
ｎ＝ｓ≧０．５  ？  ｋ＋１  ：  ｋを計算し、
ＫＨが  ｎ＊１．０＋Ｍ１Ｈ＊Ｍ２＋Ｍ１Ｌ＊Ｍ２  の計算結果の有意性の高い部分であり、ＫＬが  ｎ＊１．０＋Ｍ１Ｈ＊Ｍ２＋Ｍ１Ｌ＊Ｍ２  の計算結果の有意性の低い部分となるように、｛ＫＨ，ＫＬ｝＝ｎ＊１．０＋Ｍ１Ｈ＊Ｍ２＋Ｍ１Ｌ＊Ｍ２  を計算する
処理を行うように前記電子デバイスがさらにプログラムされることを特徴とする、請求項１１に記載の電子デバイス。
【請求項１４】
前記電子デバイスは、表１に従って前記Ｘの関数、および、前記Ｙの関数を計算するように、さらにプログラムされ、
前記電子デバイスは、表１に従ったＸとＹに応じてｓｉｇｎ値を決定し、前記ｓｉｇｎ値に応じた前記第２の超越関数からの出力をｓｉｇｎに設定するように、さらにプログラムされている
ことを特徴とする請求項１１に記載の電子デバイス。
【請求項１５】
前記ＴＨの関数、および、ＴＬの関数を計算するために、
ＴＨ＿ＩｎｔをＴＨの整数部分として取得し、
ＴＨ＿ＦｒａｃをＴＨの小数部分として取得し、
ＴＨ＿ＦｒａｃおよびＴＬからＴ＿Ａｌｌ＿Ｆｒａｃを取得し、
ＴＨ＿ＦｒａｃおよびＴ＿Ａｌｌ＿Ｆｒａｃを前記第２の超越関数ステージに入力する
処理を行うように、前記電子デバイスがさらにプログラムされていることを特徴とする、請求項１１に記載の電子デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
＜関連出願＞
本出願は、２０１４年９月１５日出願の「数学的関数を計算するためのシステムおよび方法」という名称の米国特許出願第１４／４８６８９１号に関連しており、この出願は参照することによって本明細書に含まれる。
【０００２】
＜技術分野＞
本発明は、一般にコンピュータシステムの分野に関連し、より詳細には、グラフィックプロセッサチップの計算機能に関する。
【背景技術】
【０００３】
グラフィックプロセッサチップは、従来から、高速な描画とレンダリング速度のためにハードウェアで実装された様々な数学的関数を用いる。これらの数学的関数のいくつかの例は、逆関数（「ＲＣＰ」、reciprocal function）、逆平方根関数（「ＳＱＲＴ」、reciprocal square root function）、指数関数（「ＥＸＰ」）、対数関数（「ＬＯＧ」）を含む。これらの数学的関数は、従来技術において、異なるアルゴリズムの個別の回路ブロックとして実装される。
【０００４】
例えば、従来技術における３サイクルのＲＣＰの実装においては、浮動小数点数ｘを、上位ビット（「ＭＳＢ」、most significant bits）部分ｘ０と下位ビット（「ＬＳＢ」、least significant bits）部分ｘ１の連結として表すことができ、ここで、ｘ１＝ｘ-ｘ０である。ｘの逆数の主な計算は、仮数の計算におけるものである。仮数は、従来技術において、典型的には２つの項を持つ関数：ｆ（ｘ）＝ａ＋ｂ（ｘ-ｘ０）で計算される。ここで、ａとｂはデータルックアップテーブルである。典型的な例だと、グラフィックプロセッサのために２１ビット以上の精度が要求されるが、要求される精度を達成するために、データルックアップテーブルａ及びｂのそれぞれにおいて、１６，０００個を超えるエントリが必要とされる。これは、１４ビットのｘ０と、それぞれが２の１４乗（2.sup.14）個のエントリを持つデータルックアップテーブルに基づく。このような大きなデータルックアップテーブルのハードウェア実装は、データルックアップテーブルのサイズに比例した大きなゲート数をもたらす。グラフィックプロセッサチップは、幾つかの数学的関数のハードウェア実装を含むことがある。従来技術の例においては、これらの数学的関数の各々は、大きなゲート数を必要とし、典型的には他の方法と組み合わされる。これらの数学的関数の各々を個別の論理回路と個別の大きなデータルックアップテーブルを使って実装することは、従来技術において、一般的な技術である。高速さとモバイルアプリケーションがより高い集積度とより低い電力消費を要することから、これらの様々な数学的関数を実装する効率的なアルゴリズムへのニーズがある。
【図面の簡単な説明】
【０００５】
本発明の利点が容易に理解されるように、簡単に上述した本発明のより詳細な記述が、添付の図面に図示される特定の実施形態を参照して提供される。これらの図面が単に本発明の典型的な実施形態を図示するだけであり、従って、これらの図面は本発明の範囲を限定するものと考えられるべきではないという理解の下で、本発明は、添付の図面を用いて、追加的な特異性及び詳細とともに、記述され、説明される。
【０００６】
【図１】コンピュータシステムの概略ブロック図である。
【図２】本発明の実施形態による、６ステージ統合型ハードウェアパイプラインを説明するブロック図である。
【図３】本発明の実施形態による、３ステージのＲＣＰハードウェアパイプラインを説明するブロック図である。
【図４】本発明の実施形態による、様々な例示的データルックアップテーブルを計算するアルゴリズムを説明するフローチャート図である。
【図５】本発明の実施形態による、別の統合型ハードウェアパイプラインを説明するフローチャート図である。
【図６】本発明の実施形態による、ＸＹを計算する装置と方法を説明するブロック図である。
【図７】本発明の実施形態による、Log2(x)を計算する代替の装置と方法を説明するブロック図である。
【発明を実施するための形態】
【０００７】
本出願の図に一般的に記述され図示されるような、本発明のコンポーネントを、多種多様な異なる構成で配置したり、設計したりすることが可能である、ということは、容易に理解されるだろう。従って、図に表されているような本発明の実施形態についてのより詳細な以下の記述は、請求項に記載されている本発明の範囲を限定することを意図したものではなく、本発明による、現在考えられる実施形態の、ある幾つかの例を単に代表しているにすぎない。ここに記述される実施形態は、図面を参照することにより最も良く理解されるだろう。図面においては、同様な部分は、全体に渡って、同様な参照符号によって指定される。
【０００８】
本発明は、現在の最先端の技術に応じて、特に、現在利用可能な装置及び方法によってはまだ完全には解決されていない当分野の問題とニーズに応じて、開発された。
【０００９】
本発明の実施形態は、装置、方法、あるいはコンピュータプログラム製品であり得る。従って、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、あるいは、ソフトウェアの態様とハードウェアの態様を組み合わせた実施形態の形を取りうる。これらは全て、本明細書において一般的に、「モジュール」あるいは「システム」と呼ばれることがある。更に、本発明は、媒体内に具現化されたコンピュータ利用可能なプログラムコードを有する任意の有形の表現媒体において具現化されたコンピュータプログラム製品、という形を取っても良い。
【００１０】
１つ以上の、コンピュータ利用可能あるいはコンピュータ読み取り可能な媒体の、任意の組み合わせが利用され得る。例えば、コンピュータ読み取り可能な媒体は、携帯型コンピュータ・ディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）装置、リードオンリメモリ（ＲＯＭ）装置、イレーサブル・プログラマブル・リードオンリメモリ（ＥＰＲＯＭあるいはフラッシュメモリ）装置、携帯型コンパクトディスク・リードオンリメモリ（ＣＤＲＯＭ）、光ストレージ装置、及び磁気ストレージ装置のうちの、１つ以上を含んでいてもよい。選択された実施形態においては、コンピュータ読み取り可能な媒体は、命令実行システム、命令実行装置、もしくは命令実行デバイスによって使用されるためのプログラム、あるいは、命令実行システム、命令実行装置、もしくは命令実行デバイスに接続して使用されるプログラムを、含み、格納し、通信し、伝播し、又は伝送することができるような、任意の非一時的媒体を含んでいてもよい。
【００１１】
本発明の動作を実行するためのコンピュータプログラムコードは、Java、Smalltalk、C++などのオブジェクト指向プログラミング言語や、「Ｃ」プログラミング言語あるいは同様なプログラミング言語などの従来の手続き型のプログラミング言語などを含む、一つ以上のプログラミング言語の任意の組み合わせによって、書かれてもよい。プログラムコードは、スタンドアロンのソフトウェアパッケージとして全体がコンピュータシステム上で実行されてもよく、スタンドアロンのハードウェアユニット上で実行されてもよく、当該コンピュータからある程度離れたリモートコンピュータ上で一部が実行されてもよく、あるいは、全体がリモートコンピュータ上あるいはリモートサーバ上で実行されてもよい。後者の状況では、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）もしくはワイドエリアネットワーク（ＷＡＮ）を含む、任意のタイプのネットワークを介して、コンピュータに接続されてもよく、また、その接続は、外部コンピュータに対して（例えば、インターネットサービスプロバイダを利用して、インターネットを介して）なされてもよい。
【００１２】
本発明の実施形態による方法、装置（システム）及びコンピュータプログラム製品の、フローチャート図、および／または、ブロック図を参照しながら、本発明が以下に記述される。フローチャート図、および／または、ブロック図の各々のブロックと、フローチャート図、および／または、ブロック図におけるブロックの組み合わせは、コンピュータプログラム命令あるいはコードによって実装され得ることが理解されるだろう。これらのコンピュータプログラム命令は、汎用コンピュータのプロセッサか、専用コンピュータのプロセッサか、あるいは、マシンを作り出す他のプログラマブルなデータ処理装置のプロセッサに、それらの命令（すなわちコンピュータあるいは他のプログラマブルなデータ処理装置のプロセッサを介して実行される命令）が、フローチャートおよび／またはブロック図の１つ以上のブロックに規定された機能／動作を実現する手段を作成するように、与えられてもよい。
【００１３】
これらのコンピュータプログラム命令は、また、コンピュータ又は他のプログラマブルなデータ処理装置を特定の方法で機能させることができる非一時的なコンピュータ読み取り可能な媒体に、コンピュータ読み取り可能な媒体に格納された命令が、フローチャートおよび／またはブロック図の１つ以上のブロックに規定された機能／動作を実現する命令手段を含む製品を作り出すように、格納されてもよい。
【００１４】
また、コンピュータあるいは他のプログラマブルな装置上で実行される命令が、フローチャートおよび／またはブロック図の１つ以上のブロックに規定された機能／動作を実現するプロセスを提供するように、コンピュータプログラム命令が、コンピュータあるいは他のプログラマブルなデータ処理装置にロードされて、コンピュータあるいは他のプログラマブルな装置上で一連の動作ステップが実行されるようにして、コンピュータで実装されたプロセスを作り出す、ということも可能である。
【００１５】
図１は、例示的コンピューティング装置１００を図示するブロック図である。コンピューティング装置１００は、本明細書で議論される手続きなどの、様々な手続きを実行するために用いられてもよい。コンピューティング装置１００は、サーバ、クライアント、あるいは、任意の他のコンピューティング・エンティティとして機能することができる。コンピューティング装置は、本明細書で議論するような様々な監視機能を実行することができ、本明細書で説明されるアプリケーションプログラムなどの、一つ以上のアプリケーションプログラムを実行することができる。コンピューティング装置１００は、デスクトップ・コンピュータ、ノートブック・コンピュータ、サーバ・コンピュータ、ハンドヘルド・コンピュータ、タブレット・コンピュータなどの、広範囲の様々なコンピューティング装置のうちの任意のものであって良い。
【００１６】
コンピューティング装置１００は、１つ以上のプロセッサ１０２、１つ以上のメモリ装置１０４、１つ以上のインタフェース１０６、１つ以上の大容量記憶装置１０８、１つ以上の入出力（Ｉ／Ｏ）装置１１０、および、ディスプレイ装置１３０を含み、これらは全てバス１１２に接続される。プロセッサ１０２は、メモリ装置１０４および／または大容量記憶装置１０８に格納された命令を実行する、１つ以上のプロセッサあるいはコントローラを含む。プロセッサ１０２は、また、キャッシュメモリなどの、様々なタイプのコンピュータ読み取り可能な媒体を含んでも良い。
【００１７】
メモリ装置１０４は、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）１１４）、および／または、不揮発性メモリ（例えば、リードオンリメモリ（ＲＯＭ）１１６）などの、様々なコンピュータ読み取り可能な媒体を含む。メモリ装置１０４は、また、フラッシュメモリなどの書き換え可能なＲＯＭを含んでも良い。
【００１８】
大容量記憶装置１０８は、磁気テープ、磁気ディスク、光ディスク、固体メモリ（例えば、フラッシュメモリ）などの、様々なコンピュータ読み取り可能な媒体を含む。図１に示されるように、ある特定の大容量記憶装置は、ハードディスクドライブ１２４である。様々なコンピュータ読み取り可能な媒体に対して読み書きを可能とするために、様々なドライブも大容量記憶装置１０８に含まれていてよい。大容量記憶装置１０８は、可搬型の媒体１２６および／または、可搬型ではない媒体を含む。
【００１９】
Ｉ／Ｏ装置１１０は、データおよび／または他の情報がコンピューティング装置１００に入力されたりコンピューティング装置１００から取り出されたりすることを可能とする、さまざまな装置を含む。例示的なＩ／Ｏ装置１１０は、カーソル制御装置、キーボード、キーパッド、マイク、モニタあるいは他のディスプレイ装置、スピーカ、プリンタ、ネットワークインタフェースカード、モデム、レンズ、ＣＣＤあるいは他の撮像装置、などを含む。
【００２０】
ディスプレイ装置１３０は、コンピューティング装置１００の１人以上のユーザに対して情報を表示することができる任意のタイプの装置を含む。ディスプレイ装置１３０の例は、モニタ、ディスプレイ端末、ビデオ投影装置などを含む。
【００２１】
インタフェース１０６は、コンピューティング装置１００が他のシステム、装置、もしくは、コンピューティング環境と相互作用することを可能とする、様々なインタフェースを含む。例示的なインタフェース１０６は、例えばローカルエリアネットワーク（ＬＡＮ）へのインタフェース、ワイドエリアネットワーク（ＷＡＮ）へのインタフェース、無線ネットワークへのインタフェース、および、インターネットへのインタフェースのような、任意の個数の異なるネットワークインタフェース１２０を含む。他のインタフェースは、ユーザインタフェース１１８と周辺装置インタフェース１２２を含む。インタフェース１０６は、また、１つ以上のユーザインタフェース要素１１８を含んでも良い。インタフェース１０６は、また、例えばプリンタ用のインタフェース、ポインティングデバイス（マウス、トラックパッドなど）用のインタフェース、キーボード用のインタフェースなどの、１つ以上の周辺装置インタフェースを含んでも良い。
【００２２】
バス１１２は、プロセッサ１０２、メモリ装置１０４、インタフェース１０６、大容量記憶装置１０８、および、Ｉ／Ｏ装置１１０が相互に通信することを可能とし、バス１１２に接続された他の装置あるいはコンポーネントについても同様である。バス１１２は、システムバス、ＰＣＩバス、ＩＥＥＥ１３９４バス、ＵＳＢバスなどの何種類かのバス構造のうちの、１つ以上を代表している。
【００２３】
説明のために、プログラム及び他の実行可能なプログラムコンポーネントは、本図面には個別のブロックとして示されているが、そのようなプログラムとコンポーネントは、様々な時点においてコンピューティング装置１００の異なる記憶コンポーネントに存在し得るもので、かつ、プロセッサ１０２によって実行されるものだ、と理解される。あるいは、本明細書に記述されるシステム及び手続きを、ハードウェアによって、あるいは、ハードウェア、ソフトウェア、および／または、ファームウェアの組み合わせによって、実装することができる。例えば、１つ以上の特定用途向け集積回路（ＡＳＩＣ）を、本明細書に記述されるシステムと手続きのうちの１つ以上を実行するように、プログラムすることができる。
【００２４】
図２は、本発明の実施形態による、６ステージ統合型ハードウェアパイプラインを説明するブロック図である。ここで、ブロック１０１、ブロック１０３、ブロック１０５、ブロック１０７、ブロック１０９、ブロック１１１、及びブロック１１３は、パイプラインのレジスタステージである。ブロック１０２は、浮動小数点から固定小数点への変換器である。ブロック１１２は、固定小数点から浮動小数点への変換器である。一例においては、ブロック１１２は、ＥＸＰ関数を実装するためのオペコード（つまり、構成（configuration）命令、マイクロコードなど）に応じてバイパス回路となるように構成されてもよい。他の例においては、ブロック１０２は、ＬＯＧ関数を実装するための他のオペコード（つまり、構成命令、マイクロコードなど）に応じてバイパス回路となるように構成されてもよい。更に他の例においては、ブロック１０２とブロック１１２の両方は、ＲＣＰあるいはＳＱＲＴ関数を実装するに際し、更に他のオペコード（つまり、構成命令、マイクロコードなど）に応じてバイパス回路となるように構成されてもよい。幾つかの例においては、ブロック１０４、１０６、１０８、及び１１０は、個別のデータルックアップテーブルに基づいて、ＲＣＰ、ＳＱＲＴ、ＥＸＰ、ＬＯＧなどの数学的関数を計算するための二次近似の様々な部分を実装しても良い。例えば、ブロック１０４は、浮動小数点数ｘの仮数に対応する整数ｉに基づいて、ｃについてのデータテーブルのルックアップを実装する。同様に、ブロック１０６は、ｂについてのデータテーブルのルックアップを実装する。同一のパイプラインステージの間に、ブロック１０６は、また、ｃ（ｘ−ｘ０）を計算する。同様に、ブロック１０８は、ａについてのデータテーブルのルックアップを実装し、ｂ（ｘ−ｘ０）とｃ（ｘ−ｘ０）（ｘ−ｘ１）の計算も実装する。ブロック１１０は、二次近似を計算するために、３個の項の合算を実装する。上記記述は、上記詳細には限定されず、上記記述により自明となったような様々な改変あるいは変更がなされてもよい。
【００２５】
図３は、本発明の実施形態による、３ステージのＲＣＰハードウェアパイプラインを説明するブロック図である。ここで、ブロック２０１、ブロック２０３、ブロック２０５、および、ブロック２０７は、パイプラインのレジスタステージである。いくつかの例においては、ブロック２０２、２０４、および、２０６は、二次近似の様々な部分を実装しても良い。例えば、ブロック２０２は、浮動小数点数の仮数のＭＳＢに対応する整数ｉに基づいて、ｂとｃについてのデータテーブルのルックアップを実装する。同一のパイプラインステージの間に、ブロック２０２は、また、（ｘ−ｘ０）（ｘ−ｘ１）を計算する。同様に、ブロック２０４は、ａについてのデータテーブルのルックアップを実装し、ｂ（ｘ−ｘ０）とｃ（ｘ−ｘ０）（ｘ−ｘ１）の計算も実装する。いくつかの実装においては、（ｘ１−ｘ）は、ＮＯＴ（ｘ−ｘ０）として計算されてもよく、ここで、ＮＯＴは、１を０に、０を１に変更する、ビットごとの演算である。ブロック２０６は、二次近似を計算するために、３個の項の合算を実装する。上記記述は、上記詳細には限定されず、上記記述によって自明となったような様々な改変あるいは変更がなされてもよい。
【００２６】
図４は、本発明の実施形態による、様々なデータルックアップテーブルを計算する例示的アルゴリズムを説明するフローチャート図である。ここで、例示的アルゴリズムは、ＳＱＲＴ用のデータテーブルａ、ｂ及びｃを計算するために説明されている。この例においては、table[0][i]=a、table[1][i]=b、および、table[2][i]=c である。３つの一次方程式が、３つの値ａ、ｂ、および、ｃを計算するために用いられる。これらの３つの方程式は、まずセグメント（３０１）の開始点（つまり、ｘ）、中間点（つまり、ｘ．ｓｕｂ．――５）及び終点（つまり、ｘ１）を計算することにより、解かれる。ブロック３０２及び３０３は、浮動小数点形式でａ、ｂ、および、ｃを計算する。ブロック３０４は、ａ、ｂ、および、ｃを整数形式に変換する。ブロック３０５は、丸めを行い、最終的な値を生成する。他の例として、ブロック３０２における「ｓｑｒｔ」関数は、本アルゴリズムをＲＣＰ用のデータテーブルａ、ｂ、および、ｃを計算することに転用するために、逆関数によって置換されてもよい。他の例においては、ブロック３０２における「ｓｑｒｔ」関数は、本アルゴリズムを他の関数（例えば、ＥＸＰ、ＬＯＧなど）用のデータテーブルａ、ｂ、および、ｃを計算することに転用するために、これらの他の関数（ＥＸＰ、ＬＯＧなど）によって置換されてもよい。上記記述は、上記詳細には限定されず、上記記述によって自明となったような様々な改変あるいは変更がなされてもよい。図４のフローチャートは、６４個のエントリのテーブルを実装するのに適しているだろう。１２８個のエントリなどの他の個数のエントリも用いることができる。
【００２７】
上記方法は、例えばモバイル・グラフィックチップにおけるバーテックスシェーダやピクセルシェーダに対して、一つの統合型ハードウェアパイプラインを用いて浮動小数点値で上記の超越関数のリストを計算するための統一的方法を、提供する。この技法は、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)（以下、「補間関数」）を実行する、統合型ハードウェアパイプによって、実装される。近似は、６４個、１２８個あるいは、ある他の個数のセグメントで行うことができ、ここで、ｘ０はセグメントの開始値であり、ｘ１はセグメントの終了値である。ｘ０は、ｘの上位ビット（ＭＳＢ、most significant bits)部分であり、（ｘ−ｘ０）は、ｘの下位ビット（ＬＳＢ、least significant bits)部分である。ｘの値は、ｘ０とｘ１の間である(x0 <=  x < x1)。値ａ、ｂ及びｃは、例えばハードウェアに埋め込まれたテーブルなどの、３つの個別のテーブルからのものである。
【００２９】
ＥＸＰに対しては、浮動小数点から固定小数点への数の変換ステージが、統合型ハードウェアパイプの前段に配置される。ＬＯＧに対しては、統合型ハードウェアパイプの後段に、固定小数点から浮動小数点への数の変換がある。ハードウェアの流れと機能は、各関数について選択されるテーブルが異なるほかは、４つの関数のそれぞれについて同一である。入力オペコードが関数を選択する。このアプローチに基づいた、低レイテンシの効率的ＲＣＰ（逆数）の実装は、３サイクルにまで減少され得る。
【００３０】
図５を参照すると、Ｓｉｎ（πｘ）、Ｃｏｓ（πｘ）、ＬＯＧ２（ｘ）、および、ＤＩＶ（つまり、ｙ／ｘ）の計算を高速化するために、ロジックデバイスが図１と図２のパイプラインに追加されてもよい。例えば、追加のロジックは、Sin(πx) = Sin(π*(IntX+ FracX)) = (-1)^IntX*Sin(π*FracX) という公式に基づいて実装されてもよい。ここで、IntXは入力浮動小数点引数ｘの整数部分であり、FracXは入力ｘの小数部分である。よって、直接Ｓｉｎ（πｘ）を近似するのではなくて、F(x) = Sin(π*FracX)/FracXに従って近似されてもよい。従って、図５の改変されたパイプラインは、例えば浮動小数点から固定小数点への変換ロジック２０２から、FracXに等しい追加の出力(output2)を生成してもよい。パイプラインは、Sin(πx) = F(x)*output2を計算するように更に改変されてもよい。ここでF(x)は、例えばパイプラインステージ２０３-２１４による、関数Sin(π*FracX)/FracXの近似である。具体的には、F(x)は、例えば上記したパイプラインと方法による、入力引数としてのFracXの値に従って選択されたテーブルのエントリ間での補間の結果である。図示された実施形態では、F(x)とoutput2の乗算は、パイプラインのステージ２１６において実行されてもよい。Ｃｏｓ（πｘ）については、Cos(πx) = Sin(π(x+0.5))である。従って、Ｓｉｎ（πｘ）と同じロジックが、結果を得るために用いられてもよい。ある実施形態においては、Sin(πx)は、FracX <= 0.5fならば、F(x) = Sin(π*FracX)/FracX とoutput2 = FracX とを用いて計算される。ここで0.5f は、１／２に等しい浮動小数点値である。Ｓｉｎ（πｘ）用のいくつかの実施形態においては、FracX > 0.5f ならば、F(x) = Sin(π*(1.0 - FracX) )/(1.0 - FracX)であり、output2は1.0-FracX である。例えば、より一般的には、Ｓｉｎ（πｘ）に対し、F(x) = ((-1)^IntX)*Sin(π*Min(FracX, 1.0 - FracX) )/Min(FracX, 1.0 - FracX) であり、output2 はMin(FracX, 1.0 - FracX)である。ここでIntXはｘの整数部分である。
【００３１】
入力引数ｘが１．０に近いとき、Ｌｏｇ２（ｘ）は非常に小さい。直接ＬＯＧ２（ｘ）を近似するのではなく、F(x) = Log2(x - 1)/(x - 1)として近似してもよい。従って、ＬＯＧ２について、output2は、x - 1に等しく設定されてもよい。従って、LOG2(x) = F(x)*output2であり、ここでoutput2は(x - 1)に等しく、F(x)は、本明細書に記載したようにハードウェアパイプライン内でテーブルと補間を用いて計算される、LOG2(x-1)/(x-1)の近似である。この改変が実行される対象のｘの値は、用いられる浮動小数点表現に基づいて選択されるべきである。例えば、いくつかの実施形態においては、ｘが[0.75,1.5)の範囲内にあるとき、F(x) = LOG2(x-1)/(x-1) かつ output2 = (x-1)である。そうでない場合は、ＬＯＧ２（ｘ）に対しては、F(x) = LOG2(x) かつ output2 = 1.0fである。
【００３２】
ＤＩＶ（例えば、ｙ／ｘ）については、y/x = y*(1/x) = y*Rcp(x)という関係を用いると、１／ｘのアンダーフローの問題があるかもしれない。つまり、|x| > 2^126のとき、３２ビットの浮動小数点表現では 1/x = 0 であるかもしれない。|x| > 2^126におけるアンダーフローは、最大の浮動小数点値が、2^127*1.11111111であり、かつ、「浮動小数点正規化数表現」において、最小値が、2^(-126)であるので、発生する。非正規化数を用いる場合、最小値は、2^(-149)となり得る。この場合、入力引数ｘおよびｙの両方は、2^32によってスケーリングされてもよく、つまり、y/x = (y/2^32)/(x/2^32)である。従って、ハードウェアパイプラインにおいては、ｘがある範囲を超えている（例えば、2^64より大きい）場合にｙ／ｘの両方をスケールダウンするために、追加のパイプラインステージが用いられてもよい。この追加のステージは、本明細書に記述したようにテーブル値を選択して補間ステップを実行するためのパイプラインステップの前に、実行されてもよい。
【００３３】
図６は、ＸＹ（本明細書中では、Ｘ＾Ｙとも記載される）を計算する方法を説明する。ＸＹを計算する際に、（１．１）が使用されうる。
【００３４】
【数１】
2018129040.tif 000003
【００３５】
2Tとy*Log2(x)の実装がより簡単であるため、この数式は特に有用である。しかし、高い精度が要求される場合（例えば、ＯｐｅｎＣＬで相対誤差が１６−ＵＬＰ（最後の桁の単位）の場合など）には、このアプローチには問題がある。
【００３６】
Ｌｏｇ２（ｘ）が相対誤差ε（典型的には±２−２４の範囲である）を有している場合、t = y * Log2(x) を計算すると、t’ = y *( Log2(x) (1+ε) = t + t*εが得られる。最終的な計算結果は、以下の値となる。
【００３７】
【数２】
2018129040.tif 000004
【００３８】
このため、相対誤差は、0.69314*t*εとなる。単精度計算では、２ｔを単精度範囲（single precision range）に保つために、ｔは（−１２６，１２７）の範囲でありうる。従って、0.69314*t*εは、88.029*εの範囲に入りうる。これは、相対誤差がεの８８倍まで増大しうることを意味する。
【００３９】
Ｌｏｇ２（）を実装するための従来のアプローチでは、ロジックは｛Ｍ１，Ｍ２｝の値を出力する。ここで、Ｍ１とＭ２は単精度を有する。その後、Ｌｏｇ２（ｘ）の最終値は、Ｍ１*Ｍ２の単精度でのコンピューティングにより計算され、その結果、相対誤差は±２−２４となる。その後の計算で更なる誤差が出なかったとしても、最終的な相対誤差は、まだ８８＊２−２４のオーダーとなるだろう。この誤差の値は、16.0ＵＬＰでの必要条件よりずいぶん大きい。
【００４０】
従って、図６に示すように、Ｌｏｇ２（ｘ）ステージ６００は、Ｍ２値と共に、Ｍ１をＭ１ＨとＭ１Ｌの２つの浮動小数点値（flowing point value）として出力するようにプログラムされ得る。Ｍ１ＨとＭ１Ｌの値は、Ｍ１Ｈ＋Ｍ１ＬがＭ１と少なくとも３０ビットの精度で等しくなるような値である。例えば、Ｍ１Ｈは、Ｍ１の上位２４ビットに相当する２４ビットの精度の浮動小数点値であり得る。Ｍ１Ｌは、Ｍ１の下位６ビットに相当する６ビットの精度の浮動小数点値であり得る。Ｍ２は単精度値（すなわち、２４ビット）のままであって良い。
【００４１】
図６に示すように、Ｍ１Ｈ、Ｍ１Ｌ、およびＭ２の値は、２入力ドット積ステージ（two input dot product (Dp2)）６０２に入力されうる。特に、Ｄｐ２関数はM2*M1H + M2*M1L = {KH, KL} を計算する。ここで、ＫＨとＫＬの各々は浮動小数点値であり、ＫＨはＤｐ２ステージ６０２の２４ビット精度での計算結果の上位値であり、ＫＬはＤｐ２ステージ６０２の２４ビット精度での計算結果の下位値である。
【００４２】
ＫＨおよびＫＬの値は、Ｙ’とともに、Ｄｐ２ステージ６０４に入力されうる。以下で概略を説明するように、Ｙ’は入力引数Ｙについて、めったに発生しない問題となるケース（problematic corner cases）に対処するために修正されたバージョンである。他の実施形態では、Ｙ’は単に入力引数Ｙと同じである。Ｄｐ２関数は、Y’*KH + Y’*KL = {TH, TL} を計算する。ここで、ＴＨおよびＴＬは２つの浮動小数点値（２４ビット精度での上位値＋２４ビット精度での下位値）である。
【００４３】
Ｄｐ２ステージ６０２と６０４は、図示された処理の両方のステージで使用されている同じハードウェアコンポーネントであっても良いことに注意されたい。いくつかの実施形態では、Ｄｐ２関数は４入力ドット積ロジック（Dp4）の一部として実装される。
【００４４】
従来の Dp2 (x1*y1 + x2*y2) のハードウェア実装では、Ｆｍａ（fused multiply add、すなわち a*b+c）とほぼ同じロジックが使用されている。Ｆｍａでは、いくつかのビット相殺ケース（bit cancellation cases）を処理するために、増大するビットの全てを保持する必要があるので、中間結果は少なくとも４８ビットの精度を有する。しかし、従来のＤｐ２は２４ビットの仮数（単精度浮動小数点）に丸めて、１つの浮動小数点値を出力する。このため、Ｄｐ２ステージ６０２、６０４は、これらのステージが２つの浮動小数点値を出力する（すなわち、Ｄｐ２内部での丸め処理前は全体で４８ビットの精度となる）ように追加のロジックを含んでも良い。
【００４５】
ＴＨ値およびＴＬ値は、入力引数Ｔとして、改良された精度の入力（すなわち、４８ビットの精度：ＴＨ、ＴＬ）を受け付ける２Ｔを実装しているトランセンデンタルステージ（transcendental stage）６０６に入力されても良い。
【００４６】
図示されている引数では、ＴＨとＴＬは、トランセンデンタルステージ６０６に入力される前に修正されている。例えば、浮動小数点から固定小数点への変換ロジック（float-to-Fix logic）６０８は、ＴＨを整数部分（ＴＨ＿Ｉｎｔ）と小数部分（ＴＨ＿Ｆｒａｃ）に分離するようにプログラムされる。ＴＬは小数部分のみを有しているだろう。その結果、プロセスは、Ｔ＿ＡＬＬ＿Ｆｒａｃを得るためにＴＨ＿ＦｒａｃとＴＬを合計する処理を含んでも良い。その後、ＴＨ＿ＩｎｔとＴ＿ＡＬＬ＿Ｆｒａｃが、2^(TH_Int + T_All_Frac) を計算するトランセンデンタルステージ６０６に入力される。トランセンデンタルステージ６０６は２＾Ｔを計算するための既知の任意のアプローチを用いて、この値を計算しうる。
【００４７】
図７を参照すると、いくつかの実施形態では、テーブルを使用してＬｏｇ２（）ステージ６００が実装される。例えば、図２〜図５について説明した上記のアプローチが用いられる。いくつかの実装では、Ｌｏｇ２（ｘ）の計算のための２つのテーブルがあり、１つのテーブルは0.75≦ｘ＜1.5のときに使用され、他方はｘが前述の範囲にない場合に使用される。高度な精度が要求されるため、0.75≦ｘ＜1.5のときに使用されるテーブルを含むいくつかの実施形態では、使用されるテーブルが大きくなる。このような実施形態では、Ｌｏｇ２（）関数は、（１．２）を実装する超越関数７００に置き換えられても良い。
TranscedentalForLog(X) = {n, M1H, M1L, M2}                （１．２）
【００４８】
ｎ、Ｍ１Ｈ、Ｍ１Ｌ、および、Ｍ２の値は以下に記載するように超越関数７００によって計算されても良い。
【００４９】
正のＸは、（１．３）の浮動小数点形式で記述できる。
x = 2k*(1+ s)                                              （１．３）
ここで、ｋは整数であり、0≦ｓ＜1.0である。
【００５０】
（１．４）の場合、（１．５）と書き表せる。
p = s ≧ 0.5 ? (1 + s)/2 : (1+s)                           （１．４）
x = 2n * p（ここで 0.75≦p＜1.5）                           （１．５）
すると、ｎは（１．６）に従って決定される。
n = s ≧ 0.5 ? k + 1: k                                    （１．６）
【００５１】
ここでは、M2 = 1 - p、かつ、 {M1H, M1L} =  (Log2(1-p))/(1-p) と計算されても良い。本実施形態では、Ｌｏｇ２（）は、0.75≦ｘ＜1.5用のテーブルを用いて実装されうる。
【００５２】
Ｌｏｇ２（ｘ）の値は（１．７）に従って計算される。
【００５３】
Log2(x) = n*1.0 + M1H*M2 + M1L*M2                              （１．７）
（１．７）は３入力ドット積関数７０２（Dp3、x1*y1 + x2*y2 + x3*y3）で処理されうる。いくつかの実施例では、同じ論理回路構造を用いてＤｐ２とＤｐ３の両方が実装され、場合によってはＤｐ４と同じ物理回路を用いて実装される。
【００５４】
上記のアプローチを用いると、（１．２）が１つの対数テーブルのみを使用するので、チップ上の領域を節約できる。（１．３）から（１．５）で通常の浮動小数点表記を用いることで、このような利点が得られた。しかしながら、（１．４）から（１．６）は非常に簡単に計算できる。（１．２）が４つの浮動小数点値を出力することに注意されたい。このため、ベクタ４GPUを用いて簡単に実装できる。
【００５５】
ＯｐｅｎＣＬ（open computing language standard）では、（１．８）のような、いくつかの問題となるケースがある。
(-3)3 = -27、(-3)2 = 9、(-3)0.33333333 = Nan                  （１．８）
【００５６】
正確に（１．１）に従った場合、Log2(-3)=Nanであるので、エラーが発生する。従って、このような問題となるケースに対処するために、入力引数XおよびYの前処理が必要となり得る。特に、図６に示したように、前処理ステージ６１０が、対応した値X’、Y’、および、Signを得るために関数Preprocess(X, Y) = {X’, Y’, Sign}に従って、入力引数XおよびYを処理しうる。
【００５７】
上述したように、ＸとＹの値は６００〜６０８のステージに従って処理されても良い。図６に示すように、ステージ６０６の出力は、ＸＹの最終の見積もり値を得るためにSignと掛け算されても良い。関数Preprocess(X, Y)は以下の表１に従って動作しうる。
【００５８】
【表１】
2018129040.tif 000005
【００５９】
ＯｐｅｎＣＬでのｐｏｗ（ｘ，ｙ）＝ｘｙの計算のために、最初から最後までに以下のプロセスが含まれ得る。
（１）X’、Y’、Signを得るためにＸおよびＹを前処理ステージ６１０に従って処理すること。
（２）その後、X’がLog2()ステージ６００に従って処理される。前述のように、Log2()関数は、テーブルを用いて実装され得るし、Ｍ１Ｈ、Ｍ１Ｌ、および、Ｍ２を出力しうる。これらの値は、図６に示すように、ＫＨとＫＬを得るために、Ｄｐ２ステージ６０２を用いて掛け算される。または、ＫＨとＫＬはX’から図７に示すアプローチを用いて前述のように求められても良い。
（３）Ｄｐ２ステージ６０４は、Y’*KH + Y’*KL = {TH, TL} を計算するために使用される。ここで、ＴＨは演算の上位２４ビットであり、ＴＬは演算の下位２４ビットである。
（４）ＴＨとＴＬは、改良された精度の入力｛Ｔ＿Ｈ，Ｔ＿Ｌ｝を受け付けるトランセンデンタルステージ６０６に従って処理される。上述のように、浮動小数点から固定小数点への変換ステージ６０８は、ＴＨを整数部分（ＴＨ＿Ｉｎｔ）と小数部分（ＴＨ＿Ｆｒａｃ）に分ける。その後、ＴＨ＿Ｆｒａｃは、Ｔ＿Ａｌｌ＿Ｆｒａｃを得るために、ＴＬに加算される。その後、ＴＨ＿ＩｎｔとＴＨ＿Ｆｒａｃは、トランセンデンタルステージ６０６に入力される。トランセンデンタルステージ６０６は、2^(TH_Int + TH_Frac)の見積もり値を出力する。
（５）トランセンデンタルステージ６０６の出力は、Ｓｉｇｎ値と掛け算されて、X^Yの見積もり値である最終結果が得られる。
【００６０】
本発明の上記実施形態は、例示と説明として提供されている。これらは、本発明を、記述されたとおりの形態に限定することを意図したものではない。特に、本明細書に記述された発明の機能的実装は、ハードウェア、ソフトウェア、ファームウェア、および／または、他の利用可能な機能的なコンポーネントもしくは基本構成要素で、等価に実装され得るということ、そして、ネットワークは、有線、無線、あるいは、有線と無線の組み合わせであってよいこと、が考えられる。他の変形、および、実施形態が、上記教示の下に可能であり、従って、発明の範囲は、この詳細な説明によって限定されず、むしろ、以下の請求項によって限定されることを意図している。
【００６１】
本発明は、その精神あるいは本質的特性から外れることなく、他の特定の形態で実施され得る。記述された実施形態は、全ての点で、例示的であるのみであり、限定的ではない、と考えられるべきである。従って、本発明の範囲は、上記記述によってではなく、添付の請求項によって示される。請求項の均等物の意味と範囲の内にある全ての変更は、請求項の範囲内に含まれるべきである。
【図１】
2018129040.tif 000006
【図２】
2018129040.tif 000007
【図３】
2018129040.tif 000008
【図４】
2018129040.tif 000009
【図５】
2018129040.tif 000010
【図６】
2018129040.tif 000011
【図７】
2018129040.tif 000012
【外国語明細書】
【発明の名称】
2018129040.tif 000013
【技術分野】
【０００１】
2018129040.tif 000014
【背景技術】
【０００２】
2018129040.tif 000015
2018129040.tif 000016
【図面の簡単な説明】
【０００３】
2018129040.tif 000017
2018129040.tif 000018
【発明を実施するための形態】
【０００４】
2018129040.tif 000019
2018129040.tif 000020
2018129040.tif 000021
2018129040.tif 000022
2018129040.tif 000023
2018129040.tif 000024
2018129040.tif 000025
2018129040.tif 000026
2018129040.tif 000027
2018129040.tif 000028
2018129040.tif 000029
2018129040.tif 000030
2018129040.tif 000031
2018129040.tif 000032
2018129040.tif 000033
2018129040.tif 000034
2018129040.tif 000035
2018129040.tif 000036
2018129040.tif 000037
2018129040.tif 000038
2018129040.tif 000039
2018129040.tif 000040
2018129040.tif 000041
【要約】
2018129040.tif 000042
【選択図】なし
【図１】
2018129040.tif 000043
【図２】
2018129040.tif 000044
【図３】
2018129040.tif 000045
【図４】
2018129040.tif 000046
【図５】
2018129040.tif 000047
【図６】
2018129040.tif 000048
【図７】
2018129040.tif 000049