GPUはどのように正弦を計算しますか?


7

最近、GPUが正弦と余弦をどのように計算するのか疑問に思っています。Googleは正確な答えを見つけるのに役立ちませんでした。

最初は、計算をできるだけ速くするために、GPUがなんらかのルックアップテーブルを使用すると考えていました。しかし、私は、[0、2 * pi]の間のdoubleの範囲のテーブルにすべての罪の値を格納することは、膨大なものになるため、有効なオプションではないことに気付きました。

テーブルの解像度が低下する可能性があり、ルックアップの欠損値を許容できるようになります。ただし、これは、計算を複数回実行するときに、より大きくて許容できないエラーに波及する可能性のあるエラーをもたらします。

私の最後の考えは、それらがテイラー近似を使用している可能性があるということですが、これにはかなりの算術が含まれ、GPUには遅すぎる可能性があります。では、問題は、GPUが正弦を計算するために何を使用するかということです。それはルックアップテーブル、近似、または両方のハイブリッドですか?そして、可能であれば、sqrt()のような他の計算にも同じメソッドを使用しますか?


1
三角関数を計算するための効率的なアルゴリズムがいくつかあります。たとえばCORDICを調べます。エリア全体が非常に魅力的です...
フォンブランド

回答:


11

NVidia GPUは、テーブルルックアップを使用し、その後に2次補間が続くと思います。私は彼らが以下で説明されているものと同様のアルゴリズムを使用していると思います:Oberman、Stuart F; Siu、Michael Y:「A Performance-Efficienct Mutlifunction Interpolator」、_ IEEE Int'l Symp Comp Arithmetic、(ARITH-17):272-279、2005

テーブルルックアップは、入力最上位ビットでインデックスが付けられ、3つの係数、、を返します。最終的な結果は、評価することによって生成されます。各範囲の係数は、その範囲にわたってターゲット関数からの最大誤差を最小化するように選択されます。mxc0c1c2c0+c1x+c2x2x

ユニットを完全にパイプライン処理してサイクルごとに1つの結果を生成できるように、ユニットには特別な2乗ユニットと2つのブースエンコードされたウォレスツリー乗算器が含まれています。特別な関数ごとに、テーブルエントリの数()を選択します。これにより、多項式の評価により、最後の数ユニット内で正しい単精度IEEE FP回答が得られます。2m

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.