1

CUDAを使用してカーネルコードで__cos(x)(およびそれぞれ)をどのように使用するのか疑問に思っていました。__sin(x)そのようなデバイス関数があることをCUDAマニュアルで調べましたが、それを実装すると、コンパイラはデバイスでホスト関数を呼び出すことができないとだけ言います。

ただし、2 つの姉妹関数がcosf(x)あり、後者は SFU 上で実行され、元の関数__cosf(x)よりも全体的にはるかに高速であることがわかりました。cosf(x)もちろん、コンパイラは機能について文句を言いません__cosf(x)

不足しているライブラリはありますか? この三角関数について間違っていますか?

4

1 に答える 1

4

SFU は特定の単精度演算のみをサポートするため、倍精度の __cos() および __sin() デバイス関数はありません。単精度の __cosf() および __sinf() デバイス関数、および CUDA 4.2 プログラミング マニュアルの表 C-4 に詳述されているその他の関数があります。

標準の数学関数 sin() および cos() の倍精度バージョンのより高速な代替手段を探していると思いますか? 同じ引数のサインとコサインが必要な場合は、パフォーマンスを大幅に向上させるために sincos() を使用する必要があります。サインまたはコサインの引数が π で乗算される場合、パフォーマンスをさらに向上させるために、代わりに sinpi()、cospi()、または sincospi() を使用することをお勧めします。たとえば、sincospi() は、正規分布の乱数を生成するための Box-Muller アルゴリズムを実装する場合に非常に役立ちます。また、可能な限り最高のパフォーマンスを得るために CUDA 5.0 プレビューを確認してください (プレビューはアルファ版リリースの品質を提供することに注意してください)。

于 2012-07-19T05:02:54.037 に答える