我想问一下mpi_send和mpi_recv函数是否有类似于mpi_reduce的舍入错误?我认为不应该是因为mpr_reduce函数的舍入误差来自处理器执行顺序的差异,但函数mpi_send和mpr_recv没有类似的过程。
然后我想问一下,通过将其结果与串行代码进行比较来验证仅使用mpi_send和mpi_recv函数计算并行代码是否合乎逻辑?
感谢您的时间。
答案 0 :(得分:0)
MPI_Send
和MPI_Recv
不执行舍入本身。但是,在使用更高内部精度的系统上,串行代码和并行代码的结果之间仍然存在差异。使用x87 FPU时,典型的例子是x86(主要是32位代码)。 x87在80位值的小堆栈上运行,所有操作,甚至包括精度较低的值的操作,都以80位内部精度执行。每当中间值必须转移到另一个MPI等级时,它首先会四舍五入到float
或double
,除非使用非标准的扩展精度类型,这将删除本来会有的重要位。如果值保留在x87堆栈中。这不是MPI特定的问题,因为它可能在串行代码中表现为不同的结果,具体取决于编译器执行的寄存器优化级别。