2017-09-23 62 views
0

我想問一下函數mpi_send和mpi_recv是否有類似於mpi_reduce的舍入錯誤?我認爲這不應該是因爲mpr_reduce函數的舍入錯誤來自處理器執行順序的差異,但函數mpi_send和mpr_recv沒有類似的過程。mpi_send mpi_recv舍入錯誤

那麼我想問一下,通過比較一個並行代碼和一個串行代碼來驗證只有mpi_send和mpi_recv函數的並行代碼是否合乎邏輯?

謝謝你的時間。

回答

0

MPI_SendMPI_Recv不執行取整本身。但是,在使用更高內部精度的系統上,串行代碼和並行代碼的結果之間仍然存在差異。一個典型的例子是使用x87 FPU時的x86(大部分是32位代碼)。 x87在一小堆80位值上運行,所有操作,即使涉及精度較低的值,都以80位內部精度執行。無論何時需要將中間值轉移到另一個MPI等級,它首先被取整爲floatdouble,除非使用非標準的擴展精度類型,否則將刪除在該值保留在x87堆棧。這不是一個MPI特有的問題,因爲它可能會以串行代碼的形式表現爲不同的結果,具體取決於編譯器執行的寄存器優化級別。