2014-08-27 140 views
0

我目前在串行(單核)/並行(48核)上運行fortran代碼,並且輸出中存在諸如「infinity」或「NaN」沒有任何其他信息)。我想使用編譯器選項來幫助我找到無窮大/ NaN的來源。我嘗試了「-O0 -g -traceback -fpe3」的組合,然後在運行期間,在比正常情況(無調試選項)的情況下出現更早的無窮大。但是,仍然沒有關於源代碼中的哪一行導致此類行爲的信息。所以,我想知道,有沒有可用的編譯器選項可以幫助我找到無窮大/ NaN的來源?或者我使用正確的標誌組合?關於英特爾Fortran編譯器選項的問題

在此先感謝! =)

+2

你可以嘗試通過類似'gdb'或'idb'的調試器來運行你的代碼。 – 2014-08-27 19:05:51

+2

https://software.intel.com/en-us/forums/topic/267945 – agentp 2014-08-27 19:34:15

+0

感謝您的上述建議!我會試試看看它是否有效。 – elfsummer 2014-08-27 21:11:44

回答

2

fpe選項是正確的想法!但是您使用了錯誤的編號:根據Intel Fortran Compiler documentation,當fpe之後的整數爲3時:

所有浮點異常都被禁用。浮點下溢 是漸進式的,除非您明確指定編譯器選項 將IA-32和 Intel EM64T系統上的-ftz或/ Qftz,O3或O2啓用清零。此設置提供完整的IEEE支持。

您需要使用-fpe0,這會導致:

浮點無效,除以零和溢出的例外是啓用 。如果發生任何此類異常,則中止執行。此 選項設置-ftz(Linux和Mac OS)或/ Qftz(Windows)選項; 因此,下溢結果將被設置爲零,除非您明確指定 指定-no-ftz(Linux和Mac OS)或/ Qftz-(Windows)。在 基於Itanium®的系統上,下溢行爲等同於指定 選項-ftz或/ Qftz。