3

いくつかの数学演算を GPU にオフロードすることを考えていました。私はすでに D3D11 を使用しているので、計算シェーダーを使用して作業を行います。しかし、問題は、ユーザーがどの GPU を使用していても、同じ入力に対して結果が同じである必要があるということです。(計算シェーダー 4.0 をサポートするという要件のみ)。

では、浮動小数点演算は GPU で決定論的ですか?

そうでない場合、GPU は整数演算をサポートしていますか?

4

1 に答える 1

3

私は DirectCompute を使用しておらず、OpenCL のみを使用しています。


GPU は、32 ビット整数と 64 ビット整数の両方の整数演算を確実にサポートしています。いくつかの質問には、すでにこの議論があります。

基本的に、最新の GPU では、32 ビットの浮動小数点演算と整数演算のパフォーマンスは同等です。


決定論的な結果については、コードによって異なります。たとえば、複数のスレッドが同じメモリでアトミック操作を実行し、そのメモリを他のスレッドから読み取り、その値に応じて操作を実行することに依存している場合、結果は毎回まったく同じではない可能性があります。

個人的な経験から、乱数を生成する必要がありましたが、一貫した結果も必要でした。したがって、基本的には、スレッドごとに 1 つずつ、シードの大規模な配列があり、それぞれが完全に独立していました。アトミック操作とバリアに依存する他の乱数ジェネレーターはそうではありませんでした。

決定論的な結果を得ることの残りの半分は、異なるハードウェアで同じ結果を得ることです。整数演算を使用すると、かなり安全になるはずです。OpenCL の浮動小数点演算では、高速で緩和された数学オプションと関数のネイティブ バリアントを回避すると、異なるハードウェアで同じ結果が得られる可能性が高くなります。

于 2014-02-24T22:19:55.460 に答える