0

他の関数から何度も呼び出される関数を書きたいです。この関数の内部では、多くの乱数が生成されることになっており、この部分は並行して処理されます。1回の実行のみの場合、シードはスレッドごとに異なる方法で選択できるため、乱数は無相関になります。ただし、この関数を2回目に呼び出すと、後の呼び出しでシードが再度変更されない限り、乱数が繰り返されるようです。

だから私の質問は、乱数を生成したり、シードをリセットして、この関数の繰り返しの呼び出しやさまざまなスレッドによって生成された乱数が本当にランダムになるようにする良い方法はありますか?

openMPでこれを行う必要があります。関数を呼び出すたびに、スレッドごとにジェネレーターの状態を個別に保存して、次に関数が呼び出されたときに、乱数ジェネレーターが最後の状態から開始し、無相関の数値を生成し続けることは可能ですか?

ありがとうございました。

4

1 に答える 1

0

まず、MT のような強力な乱数ジェネレーターを使用します。スレッドの問題を解決するには、各スレッドのシードを生成するミューテックスによって保護された 1 つのジェネレーターを作成します。次に、各スレッドで異なるジェネレーターを使用します。
重要なのは、必要な最小限の回数を初期化することです。そのためには、おそらくシード ジェネレーター用のプログラム グローバルと、各スレッドのジェネレーター用のスレッド ローカル ストレージが必要になります。

于 2012-06-10T04:43:27.090 に答える