【问题标题】:mpi_send mpi_recv rounding errormpi_send mpi_recv 舍入错误
【发布时间】:2018-03-05 03:22:56
【问题描述】:

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

那么我想问一下,通过将其结果与串行代码进行比较来验证仅具有 mpi_send 和 mpi_recv 函数的并行代码的计算是否合乎逻辑?

感谢您的宝贵时间。

【问题讨论】:

    标签: mpi rounding-error


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-25
      • 2019-06-08
      • 2011-11-11
      • 2016-04-22
      • 2014-04-17
      • 2011-01-24
      • 1970-01-01
      • 2016-09-09
      相关资源
      最近更新 更多