我正在尝试使用 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”未正确嵌套在工作共享结构中
那么有没有办法进行线程特定的初始化?
谢谢