2013-10-06 48 views
0

嗯,我一直在問自己相當長的一段時間這個問題現在。於Linux x86/x86-64的Fortran語言編譯器90/95/2003/2008,這?爲什麼?

我開始使用GNU Fortran編譯器(gfortran),我很開心。但後來我開始聽到的是,英特爾Fortran編譯器(ifort)是更好,因爲它是爲英特爾處理器優化的(因此對於大多數計算機優化今天的後果是英特爾的市場更大的份額)。從那以後,我開始使用ifort,但事實是,我不與它完全滿意,因爲它沒有檢測到一些錯誤gfortran做(即Question: "Reference passing is changing the values of a matrix")。

確實還有其他的Fortran編譯器,但實際上,我從來沒有使用過除gfortranifort以外的其他編譯器。

所以我想問你:每一個的優點和缺點是什麼?如果優化不重要,哪個最好?

+1

這是不是這樣一個問題的正確的地方。 –

+0

順便說一句,我看着你參考的問題。你不能真的叫它gfortran檢測到錯誤。該程序只是損害了glibc的內部數據結構,沒有gfotran注意到任何事情。 glibc會引發非常低的級別錯誤。 –

+0

你說得對。儘管如此,gfortran沒有提供任何目標代碼的事實對於檢測錯誤非常有用。感謝您的知識。 –

回答

3

在我看來,最好堅持你所熟悉的標準,並編寫符合本標準的代碼。然後,編譯器的選擇取決於對該標準的支持。

下面是一個廣泛的20032008標準的編譯器支持列表。

我自己用g95很多,因爲我喜歡調試信息。如今,我通常使用Fortran 2008功能,並使用gfortran(因爲它是開源的)和ifort(因爲它對於非商業用途是免費的)。 g95的Fortran的2003年和2008年的支持是相當有限的。

我通常使用兩種編譯器編譯代碼並打開所有警告,而且我很驚訝其中一個編譯器錯過了什麼錯誤。就編譯代碼的性能而言,我從未注意到其中的差異(不包括捆綁的數學庫)。

大多數市售的編譯器具有非標準擴展,如OpenACC(例如CrayPGI)或特殊特徵(例如PGI CUDA Fortran)捆紮庫(例如Intel MKL)。這些也可能影響你的選擇。對於某些硬件,您可能需要/可能從特殊編譯器中獲益(如Cray編譯器)。

編輯:Here是不同編譯器和機器的基準測試結果。