我被指派在不使用归约子句的情况下实现归约变量的想法。我设置了这个基本代码来测试它。
int i = 0;
int n = 100000000;
double sum = 0.0;
double val = 0.0;
for (int i = 0; i < n; ++i)
{
val += 1;
}
sum += val;
Run Code Online (Sandbox Code Playgroud)
所以最后sum == n。
每个线程应该将val设置为私有变量,然后对sum的加法应该是线程收敛的关键部分,例如
int i = 0;
int n = 100000000;
double sum = 0.0;
double val = 0.0;
#pragma omp parallel for private(i, val) shared(n) num_threads(nthreads)
for (int i = 0; i < n; ++i)
{
val += 1;
}
#pragma omp …Run Code Online (Sandbox Code Playgroud)