我正在使用MPI_Allreduce编写fortran。我意外地使用MPI_DOUBLE_PRECISION而不是MPI_INTEGER来获取整数和。有时我会得到一个正确的答案,有时我会得到一些非常大的负数。我正在学习并行计算课程并查看我的教科书。我没有发现如果我将错误的MPI_Datatype传递给MPI_Allreduce会发生什么。 另外,编译器或代码根本不会抱怨调试非常困难!有没有一种方法可以识别错误的MPI_Datatype传入MPI_Allreduce?有人可以解释一下如果错误的参数被传递到MPI_ALlreduce将如何工作吗?
非常感谢!
答案 0 :(得分:1)
一般来说,错误的程序有不确定的行为。
在您的情况下,使用MPI_DOUBLE_PRECISION
代替MPI_INTEGER
可能会导致阵列溢出,从而导致内存损坏,然后所有投注都会关闭。
此外,您将使用对浮点数而不是整数进行操作的运算符(+
为MPI_SUM
),这是不正确的。
请随意学习DOUBLE PRECISION
数字的格式,看看如果将它们视为整数并执行添加会发生什么。