下面是使用OpenMP并行化的C中的伪代码。并行OpenMP代码有什么问题会阻止它产生正确的结果,如串行代码,你将如何纠正?
void ccode (float a[], float b[], float c[], int n) {
float x, y ; int i;
#pragma omp parallel for shared (a,b,c,n,x,y) private i
for (i = 0 ; i < n ; i++){
x = a[i] - b[i] ;
y = b[i] + a[i] ;
c[i] = x * y ;
}
答案 0 :(得分:1)
我认为问题是
x = a[i] - b[i] ;
y = b[i] + a[i] ;
其中x
和y
都应声明为private
,因为每个帖子应使用自己的x
和y
对。