質問: ### 前提・実現したいこと mkl_blas.fiのデバッグのエラーを設定等でパスできるようにしたい fortran77で構造計算のプログラムを作成しています。 環境はvisual studio2010で、コンパイラはvisual fortran composer XE 2013です。 行列の計算にmkl_blas.fiをインクルードファイルとして使用しているのですが、Debugでビルドをするとエラーが出ます。コードの書き方が旧式であるためだと思われます。コードを1つ1つ書き直す、もしくはReleaseモードでビルドするとエラーは出ないのですが、そもそもmklのライブラリーなので、debugレベルを下げるなり、ディレクティブ等でエラーを無視することができないかと考えています。(後学のためにも) もしご存知の方がいましたら、ご教示いただけましたら幸いです。 ### 発生している問題・エラーメッセージ エラーメッセージ Error1 error #5082: Syntax error, found '&' when expecting one of: * C:\Program Files (x86)\Intel\Composer XE 2013\mkl\include\mkl_blas.fi 630 上記のエラーが2,30箇所で発生しています。ただ、mkl_blas.fiはmklのincludeファイルなので、コード自体は本来は問題ないはずです。 debugレベルを下げる等して対応できないでしょうか? 最悪、1つ1つ書き直してエラーに対処することはできると思いますが、includeファイルなのもあり、あまり触りたくありません。 ### 該当のソースコード subroutine sgemv ( trans, m, n, alpha, a, lda, x, incx, & &beta, y, incy ) real alpha, beta integer incx, incy, lda, m, n character*1 trans real a( lda, * ), x( * ), y( * ) END END INTERFACE ### 試したこと Releaseモードでビルド:正常にビルドできます ### 補足情報(言語/FW/ツール等のバージョンなど) Fortran77 開発環境:visual studio 2010 composer コンパイラ:visual fortran composer XE 2013
回答: 説明が足りずに申し訳ありませんが、そもそもの目的はreleaseビルド&実行で発見できない浮動小数点エラー、領域外参照、それらの発生したコードの箇所を把握する手法を構築することでした。その手法の1つとしてdebugビルドを考え、質問のようなエラーが出たので質問させていただいた次第です。 エラーの発見は、fortranのコンパイルオプションで、/traceback /CB /CU /fpe0 を付加することでreleaseモードにおいてもスムーズに行うことができるようになりました。 特にtracebackはエラーの生じたコード行を示してくれるのでとても便利です。CUは未初期化の配列を使用、CBは領域外参照、fpe0は浮動小数点例外の発見にそれぞれ役立ちます。 なお、上記の例では/CU /CBを使用していますが、/Checkall を使用すると、debugビルドモードと同じレベルでエラーチェックを行います。(しかし、ビルドに時間がかかるのと、最適化がO0になり計算が遅くなるので、一度チェックした後はCB,CUを使用しています) これらの詳細については、下記のHPにわかりやすく記載されています。 https://www.hpc-sol.co.jp/support/intel_compiler_recipes/20130109_ifort_debug.html http://wwweic.eri.u-tokyo.ac.jp/computer/manual/altix/compile/Fortran/Intel_Fdoc91/main_for/mergedProjects/bldaps_for/using_the_floating_point_exception_handling_(-fpe)_option.htm なお、visual studioにおけるコンパイルオプションの記載先は下記の通りです。 プロジェクト>プロパティ>Fortran>コマンドライン>追加のオプション ※追加のオプションの箇所に"/traceback /CB /CU /fpe0"を記載すればOKです。(""の中だけ記載します)