如果错误的争论传递到MPI_Allreduce会发生什么?

时间:2018-03-17 16:16:37

标签: fortran mpi

我正在使用MPI_Allreduce编写fortran。我意外地使用MPI_DOUBLE_PRECISION而不是MPI_INTEGER来获取整数和。有时我会得到一个正确的答案,有时我会得到一些非常大的负数。我正在学习并行计算课程并查看我的教科书。我没有发现如果我将错误的MPI_Datatype传递给MPI_Allreduce会发生什么。 另外,编译器或代码根本不会抱怨调试非常困难!有没有一种方法可以识别错误的MPI_Datatype传入MPI_Allreduce?有人可以解释一下如果错误的参数被传递到MPI_ALlreduce将如何工作吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

一般来说,错误的程序有不确定的行为。

在您的情况下,使用MPI_DOUBLE_PRECISION代替MPI_INTEGER可能会导致阵列溢出,从而导致内存损坏,然后所有投注都会关闭。

此外,您将使用对浮点数而不是整数进行操作的运算符(+MPI_SUM),这是不正确的。 请随意学习DOUBLE PRECISION数字的格式,看看如果将它们视为整数并执行添加会发生什么。