C 循环并行化

C 循环并行化,c,loops,openmp,C,Loops,Openmp,我想用OpenMP并行化以下代码: for(i=0; i<n; i++) { int sum=0; for(j=0; j<m; j++) { sum += A[i][j]*x[j]; } y[i]=sum } for(i=0;iA#pragma omp parallel for对于您的外部环路,您应该使用以下代码获得预期结果: #pragma omp para

我想用OpenMP并行化以下代码:

  for(i=0; i<n; i++)
    {
        int sum=0;
        for(j=0; j<m; j++)
        {
            sum += A[i][j]*x[j];
        }
        y[i]=sum
    }
for(i=0;iA
#pragma omp parallel for
对于您的外部环路,您应该使用以下代码获得预期结果:

#pragma omp parallel for private(i, j, sum) shared(y, n, m, A, x)
for(i=0; i<n; i++)
{
    int sum=0;
    for(j=0; j<m; j++)
    {
        sum += A[i][j]*x[j];
    }
    y[i]=sum
}
#专用(i,j,sum)共享(y,n,m,A,x)的pragma omp并行

对于(i=0;iYes,
#pragma omp parallel for
for
for external loop是可以的。我怀疑他的最终意图是总结
y
,因为这显然是一个密集的矩阵向量乘法代码。MVM被认为是内存,而不是计算范围。任何
n*m
的组合都会导致
a[]
大于最后一级缓存将导致并行加速性能差或根本没有。