并行化C OpenMP中的函数

时间:2013-12-08 18:07:29

标签: c parallel-processing openmp multicore

如何在OpenMP for C

中并行化此功能
int zeroRow(int**A,int n) {
int i, j, sum, num = 0;
for(i= 0;i< n;i++) {
  sum = 0;
  for(j = 0; j < n; j++) {
    sum += A[i][j];
  }
 if(sum == 0) {
   num++;
  }
}
return num;
}

我检查了这是否是正确的程序。

int zeroRow(int**A,int n) {
int  num = 0;
#pragma omp parallel for reduction(+:num);
for(int i= 0;i< n;i++) {
  int sum = 0;
  for(int j = 0; j < n; j++) {
   sum += A[i][j];
   }
  if(sum == 0) {
    num++;
  }
}
return num;
}

请告诉我,如果我所做的是正确的,或者我已经使用简化并行化了外循环,并且每个线程都有一个单独的数字。

1 个答案:

答案 0 :(得分:2)

看起来是正确的并行化。

您应该添加的唯一内容是指定使用A的术语。  您依赖于共享默认情况。您应该使用

明确命名状态
#pragma omp parallel for reduction(+:num) default(shared)

#pragma omp parallel for reduction(+:num) shared(A)

你也不需要在pragma行的末尾写一个分号(;)(但写它不会有错误)