这里提一个重要的点
像这样
double sum = 0; void ff() { sum += 0.5; } //main() #pragma omp parallel for reduction(+:sum) for (int i = 1; i <= 40000; i++) { ff(); } cout << sum << endl;
对归约对象的操作“隐藏”在其他函数内部 ,reduction(+:sum)是没有效果的!
但:
double sum = 0; void ff(double *x) { *x+= 0.5; } //main #pragma omp parallel for reduction(+:sum) for (int i = 1; i <= 40000; i++) { ff(&sum); } cout << sum << endl;
或:
double sum = 0; void ff(double &x) { x+= 0.5; } //main #pragma omp parallel for reduction(+:sum) for (int i = 1; i <= 40000; i++) { ff(sum); } cout << sum << endl;
这用指针或引用的方式传参是生效的qwq
别踩坑啦