0

CURAND ライブラリを使用して、互いに完全に独立した乱数を生成しようとしています。したがって、各スレッドに異なるシードを与えたいと思います。では、質問 1: 各スレッドに異なるシードを与えるにはどうすればよいですか?(CUDA に使用できる時間関数はありますか?)

ここで、この乱数を 0 から 10000 の範囲で生成したいと考えています。これを実現するにはどうすればよいですか。

現在、curand_normal を使用しています (正規分布の数値を取得したいため) が、望ましくない負の同じ数値が返されます。

4

1 に答える 1

0

異なるシードを設定することは、(単一の乱数ジェネレーターを使用して) 独立した (相関のない) 乱数を取得するための統計的に適切な方法ではありません。単一のシーケンスの異なるサブシーケンスを選択する方がよいでしょう。cuRAND を含むほとんどの乱数ライブラリでそれが可能です。

CUDA SDK の例を確認してください。たとえば、EstimatePiP または EstimatePiInlineP の例では、cuRAND を使用して疑似乱数を生成します。

質問の 2 番目の部分については、cuRAND マニュアルに記載されているように、curand_normal()ルーチンは平均 0.0 と標準偏差 1.0 の正規分布数 (つまり、標準正規分布) を返します。明らかに、これは最大 50% の負の数になることを意味します。

正規分布とともに固定範囲を指定しても意味がありません。固定範囲の他の分布 (一様分布など) が必要な場合もあれば、特定の平均と標準分布を持つ正規分布が必要な場合もあります。標準法線からターゲットの mean/std.dev に到達するには。無作為抽出にターゲット標準偏差を掛けて、ターゲット平均を追加するだけです。

于 2012-09-14T11:57:31.887 に答える