如何并行化这个功能

时间:2011-11-02 06:27:16

标签: openmp

我有一个非常耗时的功能,因为n的值非常大

sum=0; for(i=0;i<n;i++)
{
     a=func(i,b);
     c=func(i,a);
     sum+=c;  
}

是否可以使用openMp并行化此循环?

1 个答案:

答案 0 :(得分:4)

这是简短的方法:

int sum = 0;

#pragma omp parallel for reduction(+:sum)
    for(i = 0; i < n; i++){
        int a = func(i,b);
        int c = func(i,a);
        sum += c;
    }

这是一种更长(但更灵活)的方式:

int sum = 0;

#pragma omp parallel
    {
        int local_sum = 0;

#pragma omp for
        for(i = 0; i < n; i++){
            a = func(i,b);
            c = func(i,a);
            local_sum += c;
        }

#pragma omp critical
        {
            sum += local_sum;
        }
    }
相关问题