我想运行一个并行的计划(例如静态/动态/引导)for循环,其中每个线程都有自己的一组变量,基于它们的线程ID。我知道在并行编译指示中声明的任何变量都是私有的,但我不想在 for 循环的每次迭代中重新声明变量。
在我的具体情况下,每当一组生成坐标位于圆的内部或外部时,我都会计算以近似 pi。我正在使用 erand48(int[3] seed) 在每个线程中生成这些坐标,并通过为每个线程提供一组不同的“seed”值,我将获得更多种类的数字用于近似值(也是此模拟的要求)。
long long int global_result = 0;
int tID = omp_get_thread_num();
int[3] seed;
seed[0] = (((tid*tid + 15) * 3)/7);
seed[1] = ((((tid + tid) * 44)/3) + 2);
seed[2] = tid;
int this_result = 0;
# pragma omp parallel for num_threads(thread_count) schedule(runtime)
for(i = 0; i < chunksize; i++){
x = erand48(seed);
y = erand48(seed);
((x*x+y*y)>=1)?(this_result++):;
}
# pragma omp critical{
global_result+= this_result;
}
这是尽我所能代表我正在尝试做的事情。我希望 'this_result'、'tid' 和 'seed' 的值具有私有范围。