mpi_send mpi_recv 舍入误差

mpi_send mpi_recv rounding error

请问函数mpi_send和mpi_recv是否有类似mpi_reduce的舍入误差?我认为不应该,因为 mpr_reduce 函数的舍入误差来自处理器执行顺序的差异,但函数 mpi_send 和 mpr_recv 没有类似的过程。

那我想问一下,用mpi_send和mpi_recv函数来验证并行代码的计算结果与串行代码比较是否合乎逻辑?

感谢您的宝贵时间。

MPI_SendMPI_Recv 本身不执行舍入 。但是在使用更高内部精度的系统上,串行代码和并行代码的结果仍然可能存在差异。一个典型的例子是使用 x87 FPU 时的 x86(主要是在 32 位代码中)。 x87 对 80 位值的小堆栈进行操作,所有操作,即使是那些涉及精度较低的值的操作,都以 80 位内部精度执行。每当必须将中间值转移到另一个 MPI 等级时,它首先被四舍五入为 floatdouble,除非使用非标准扩展精度类型,这会删除有效位如果该值保留在 x87 堆栈中。这不是特定于 MPI 的问题,因为它也可能在串行代码中表现为不同的结果,具体取决于编译器执行的寄存器优化级别。