关于OpenMP的归约操作reduction

这里提一个重要的点

像这样

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

别踩坑啦

posted @ 2018-11-24 18:17  cckk4467  阅读(1644)  评论(0)    收藏  举报