OpenMP で for ループを並列化しようとしています。通常、これはかなり簡単です。ただし、for ループを実行する前に、スレッド固有の初期化を実行する必要があります。
具体的には、次の問題があります。スレッドセーフではない乱数ジェネレーターがあるため、スレッドごとに RNG のインスタンスを作成する必要があります。しかし、すべてのスレッドが同じ乱数を生成するわけではないことを確認したいと思います。
だから私は次のことを試しました:
#pragma omp parallel
{
int rndseed = 42;
#ifdef _OPENMP
rndseed += omp_get_thread_num();
#endif
// initialize randon number generator
#pragma omp for
for (int sampleid = 0; sampleid < numsamples; ++sampleid)
{
// do stuff
}
}
この構成を使用すると、実行時に次のエラー メッセージが表示されます。
致命的なユーザー エラー 1002: '#pragma omp for' がワークシェアリング構造に不適切にネストされている
スレッド固有の初期化を行う方法はありますか?
ありがとう