【发布时间】:2015-01-19 16:24:43
【问题描述】:
我从 openMP 开始,我想并行化这部分代码
int A[n][m+1];
int B[k][m];
for (h=0;h<100;h++){
for (i=0;i<n;i++){p=0;
for (j=0;j<k;j++){s=0;
for (l=0;l<m;l++){
s+=(A[i][l]-B[j][l]);
}
s=sqrt(s);
if (j==0) min =s;
else
if (min > s){min =s;p=j;}
}
A[i][m]=p;
}
}
这是我使用 openMP 进行并行化的尝试
#pragma omp parallel for private(s)
for (h=0;h<100;h++){
for (i=0;i<n;i++){p=0;
for (j=0;j<k;j++){s=0;
for (l=0;l<m;l++){
s+=(A[i][l]-B[j][l]);
}
s=sqrt(s);
if (j==0) min =s;
else
if (min > s){min =s;p=j;}
}
A[i][m]=p;
}
}
我怎样才能正确地做到这一点?我需要你的帮助。
【问题讨论】:
-
你认为你做错了什么?
-
首先正确缩进您的代码并添加空格。不要使用变量名
l,因为它与1很难区分;它在自找麻烦。 -
也许
h, i,j,p,l和min也应该是私有的:每个线程都应该处理自己的h,i,j,l和min值。
标签: c++ c multithreading parallel-processing openmp