1

我正在使用在Fortran中編寫的CFD代碼。它的某些部分已與OpenMP並行化。即使我打開OpenMP並在Windows上的Linux機器上使用相同的編譯器選項(-O3),我也會得到不同的結果。嘗試關閉優化(-O0)並向我的編譯器選項添加(-fp-model源)後,它僅在2次迭代步驟後才顯示NaN。是否有其他原因,有一個不同的結果,以及如何我可以保證,它們是相同的)取決於操作系統的不同結果

感謝, 塞巴斯蒂安

PS:這兩款機器都使用相同的英特爾Fortran編譯器2013年,是64位並配備英特爾至強處理器。

+0

結果有什麼不同? – 2013-03-22 22:23:55

+0

他們在Linux機器上發散,而在Windows機器上運行1000多個時間步。 – Sebu 2013-03-25 09:18:57

+0

你還沒有真正回答我的問題 - 你在Windows版本和Linux版本上得到的數字有什麼區別?從你寫的內容來看,不可能排除一個不穩定的(實現一個)算法。 – 2013-03-25 12:34:52

回答

1

根據算法和分辨率的不同,無錯誤的CFD代碼可能會通過打開並行性獲得明顯不同的結果。

正如HPMark所建議的那樣,在更換平臺時可以預料到很小的差異。較大的差異表明您有一些編譯器或系統特定的代碼,需要進行移植。當您關閉優化級別時遇到主要問題可能是內存錯誤。

當你進入這樣令人困惑的情況時,一定要小心只能改變一件事。

+0

即使完全關閉並行性,我也有不同的結果。我發現編譯-O1和-fp-model的源碼在兩臺機器上給了我相同的結果。因此,更積極的優化負責不同的結果。所以我必須考慮性能增益是否值得。 – Sebu 2013-03-25 09:21:51

相關問題