我试图在https://courses.engr.illinois.edu/cs554/fa2015/notes/06_lu_8up.pdf中遵循Guassian消除算法,以实现LU分解并最终将其与openmp并行化。以下算法是否正确,其中l
是乘数,m是矩阵?
void decompose2(double **m) {
begin =clock();
int i=0, j=0, k=0;
for(k = 1; k < size - 1; k++)
{
for(i = k + 1; i < size; i++)
{
l[i][k] = m[i][k]/m[k][k];
}
for(j = k + 1; j < size; j++)
{
for(i = k + 1; k < size; k++)
{
m[i][j] = m[i][j] - (l[i][k]*m[k][j]);
}
}
}
end = clock();
}
我不认为这是正确的,因为根据另一篇论文,我在相同数量的处理器上进行并行化后得到的时间是完全不同的。
答案 0 :(得分:0)
&#34;以下算法看起来是否正确,...&#34; - 不,因为
double[size][size]
(您可能使用的)无法转换为double**
,int
不是迭代器的好类型(改为使用size_t
),m[k][k]
是否(接近)为零。请注意,我只查看了明显的实现错误,而不是在可能的情况下使代码更好,例如提高计算的稳定性。