void TestReduction2()
{
int sum = 100; // Assign an initial value.
int su1 = 200;
int su2 = 200;
int su3 = 200;
#pragma omp parallel for reduction(+:sum,su2,su3)
for (int i = 0; i < 100; i++)
{
sum += i;
su1 = i;
su2 = i;
su3 = 1;
}
printf("ThreadNo.%d, Sum: %d\n", omp_get_thread_num(), sum);
printf("ThreadNo.%d, su1: %d\n", omp_get_thread_num(), su1);
printf("ThreadNo.%d, su2: %d\n", omp_get_thread_num(), su2);
printf("ThreadNo.%d, su3: %d\n", omp_get_thread_num(), su3);
}
int main()
{
for (int i = 0; i < 4; ++i)
{
TestReduction2();
cout << endl;
}
return 0;
}
代码中sum是正常写法,su2和su3都是赋值运算,su3的值是标准的200+线程数(*1),但su2不是(八核笔记本计算结果是650,四核台式机计算结果是446,且这个值不会发生变化),请问su2的值是怎么计算出来的?