【发布时间】:2022-01-11 21:43:13
【问题描述】:
如何实现并行化在 MPI 上查找矩阵行列式的方法?如何并行化矩阵的填充,是否可以将数据从前一个进程传递到每个进程,以及如何将其应用于我的代码?
double GaussDet(double** mat, int size) {
int determinant = 1;
for (int i = 1; i < size; ++i)
{
for (int k = i; k < size; ++k)
{
for (int j = size - 1; j >= 0; --j)
{
mat[k][j] -= mat[k][i - 1] / mat[i - 1][i - 1] * mat[i - 1][j];
}
}
}
for (int i = 0; i < size; i++) {
for(int j = 0; j < size; j++) {
if(i == j)
determinant *= mat[i][j];
}
}
return determinant;
}
int main(int argc, const char * argv[])
{
srand(time(NULL));
int N = 4;
double **matrix = malloc(N * sizeof(double*));
for (int i = 0; i < N; i++) {
matrix[i] = malloc(N * sizeof(double*));
}
fill_matrix(matrix, N);
print_matrix(matrix, N);
double det = GaussDet(matrix, N);
print_matrix(matrix, N);
printf("det = %f\n", det);
}
【问题讨论】:
-
int determinant = 1;很奇怪。为什么int? -
避免
matrix[i] = malloc(N * sizeof(double*));中的大小错误。而是将大小设置为引用值:matrix[i] = malloc(N * sizeof matrix[i][0]);. -
"如何将它应用到我的代码中?" --> 我建议先让代码作为一个进程正确运行,然后再尝试多个进程。
-
所以他做对了。或者如果有错误在哪里?除了记忆,我更正了它