我有一个非常耗时的功能,因为n的值非常大
sum=0; for(i=0;i<n;i++)
{
a=func(i,b);
c=func(i,a);
sum+=c;
}
是否可以使用openMp并行化此循环?
答案 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;
}
}