Fortran 如果向MPI_Allreduce传递错误的参数,会发生什么情况?
我在用MPI_Allreduce编写fortran。我意外地将MPI_DOUBLE_PRECISION而不是MPI_INTEGER放入以获得整数和。有时我会得到一个正确的答案,有时我会得到一些非常大的负数。我正在学习并行计算课程,并检查我的课本。我没有发现如果我将错误的MPI_数据类型传递给MPI_Allreduce会发生什么另外,编译器或代码根本没有抱怨,这使得调试非常困难是否有方法识别传递到MPI\u Allreduce的错误MPI\u数据类型?如果传入错误的参数,有人能解释一下MPI_ALlreduce将如何工作吗Fortran 如果向MPI_Allreduce传递错误的参数,会发生什么情况?,fortran,mpi,Fortran,Mpi,我在用MPI_Allreduce编写fortran。我意外地将MPI_DOUBLE_PRECISION而不是MPI_INTEGER放入以获得整数和。有时我会得到一个正确的答案,有时我会得到一些非常大的负数。我正在学习并行计算课程,并检查我的课本。我没有发现如果我将错误的MPI_数据类型传递给MPI_Allreduce会发生什么另外,编译器或代码根本没有抱怨,这使得调试非常困难是否有方法识别传递到MPI\u Allreduce的错误MPI\u数据类型?如果传入错误的参数,有人能解释一下MPI_AL
非常感谢 一般来说,不正确的程序具有未定义的行为 在您的情况下,使用
MPI\u DOUBLE\u PRECISION
而不是MPI\u INTEGER
可能会导致数组溢出,从而导致内存损坏,然后所有赌注都被取消
此外,您将使用一个运算符(+
isMPI_SUM
),该运算符对浮点数而不是整数进行运算,这是不正确的。
请随意学习双精度数字的格式,看看如果您将它们视为整数并执行加法会发生什么。(a)Fortran在这方面不会欺骗您。您有责任编写正确的代码。(b) 为什么不解决这个问题呢?在这个失败的案例中,你希望通过学习它如何工作来获得什么?