【发布时间】:2021-06-22 10:48:27
【问题描述】:
我们的目标是将 OpenMP 并行化添加到 for (i = 0; i < n; i++),以用于形式 Ax=b 的下三角求解器。预期结果与没有添加到 for (i = 0; i < n; i++) 的并行化时的结果完全相同。
vector<vector<double>> 表示二维矩阵。 makeMatrix(int m, int n) 初始化大小为 mxn 的全零的 vector<vector<double>>。
cmets 中留下了两个最突出的尝试。
vector<vector<double>> lowerTriangleSolver(vector<vector<double>> A, vector<vector<double>> b)
{
vector<vector<double>> x = makeMatrix(A.size(), 1);
int i, j;
int n = A.size();
double s;
//#pragma omp parallel for reduction(+: s)
//#pragma omp parallel for shared(s)
for (i = 0; i < n; i++)
{
s = 0.0;
#pragma omp parallel for
for (j = 0; j < i; j++)
{
s = s + A[i][j] * x[j][0];
}
x[i][0] = (b[i][0] - s) / A[i][i];
}
return x;
}
【问题讨论】:
标签: c++ multithreading performance parallel-processing openmp