C 循环并行化
我想用OpenMP并行化以下代码: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
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[]
大于最后一级缓存将导致并行加速性能差或根本没有。