为什么这段代码不起作用? [下面是C中的伪代码]
why isn't this code working? [below is a pseudo code in C]
以下是使用 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 ;
}
我觉得问题是
x = a[i] - b[i] ;
y = b[i] + a[i] ;
其中 x
和 y
都应声明为 private
,因为每个线程都应使用自己的 x
和 y
对。
以下是使用 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 ;
}
我觉得问题是
x = a[i] - b[i] ;
y = b[i] + a[i] ;
其中 x
和 y
都应声明为 private
,因为每个线程都应使用自己的 x
和 y
对。