如何在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;
}
请告诉我,如果我所做的是正确的,或者我已经使用简化并行化了外循环,并且每个线程都有一个单独的数字。
答案 0 :(得分:2)
看起来是正确的并行化。
您应该添加的唯一内容是指定使用A的术语。 您依赖于共享默认情况。您应该使用
明确命名状态#pragma omp parallel for reduction(+:num) default(shared)
或
#pragma omp parallel for reduction(+:num) shared(A)
你也不需要在pragma
行的末尾写一个分号(;)(但写它不会有错误)