Optimization
Optimizations for Fortran or C compilers
Last modified: 2014/08/17
cray:
-h omp
OpenMPディレクティブを有効化
-h autothread
自動並列を有効化
-h byteswapio
ビッグエンディアンに変更
-f free
Fortran自由形式をサポート
-O0 -ra -m2 -eI -Rb -en -eo -ez -h pic -dynamic
バグ取り用
g77 :
-O[0/1/2/3] (大文字の'オー', 数字の'3') : 最適化
-o output.exe : 実行ファイルの指定
g95 :
-O0 -Wall -pedantic -std=f95 -fbounds-check -Wuninitialized -ftrace=full
バグ取り用
pgfortran : (ver. 12.5)
-byteswapio
Little or Big endian をデフォルトとは逆にする
-fast
最適化
-fastsse
SSE命令の最適化
-fPIC
他のコンパイラとの互換性を有する独立コードを生成。
-pc [32/64/80]
浮動小数点計算時のアーキテクチャ上レジスタビット長制御
-time
コンパイルステップ毎の実行時間を表示
-tp [sandybridge-64/istanbul-64/bulldozer-64]
クロスコンパイル時のCPUアーキテクチャ毎の最適化
-Mconcur
自動並列化
-Mipa=fast
最適化
-Minfo
コンパイル時の情報を標準出力する
-Mfree
F90ソースコードとして認識させる
-mp
OpenMPディレクティブを有効にする
-pc 64 -Kieee -O0 -Ktrap=fp -Minform=inform -Mbounds -Mvect=noassoc -Mlre=noassoc
バグ取り用
参考URL:
http://www.softek.co.jp/SPG/Pgi/TIPS/option_for_PDF.html
http://www.softek.co.jp/SPG/Pgi/comp-tips.html
ifort (ver.11 - 13) :
-assume byterecl
(指定したレコード長)*4byte をバイナリファイルの1レコード長にする。 pgi や gccコンパイラなどでは、 指定したレコード長をデフォルトで(指定したレコード長)*4byte とするが、 ifortでは指定したレコード長で1レコード長が決まるため.
-convert big_endian
ファイルの処理をbig endianで行う。(g77 にはない)
-o
デフォルトで作成される実行ファイル(a.out,a.exe)を、-o 以下に続くファイル名に変える。
(e.g.) ifort hoge.f -o jikkou.exe => jikkou.exe が実行ファイル。
-mcmodel=[small/medium/large]
Memoryが2GBを越える配列を使用する場合のオプション.
デフォルトは "small"
-xSSE[2/3/4.1/4.2], -msse[2/3]
アーキテクチャ毎の最適化オプション.
-unroll0
ループアンロールを無効にする.
-parallel
自動並列化を有効にして、マルチスレッド・コードを生成.
-par-report2
自動並列化の状態を表示.
-fno-alias
外部関数からのエイリアシング解消(ポインタ関連).
-O0 -check all -warn all -gen_interfaces -fpe0 -ftrapuv -traceback -assume byterecl
バグ取り用
gfortran :
-fconvert=big-endian : ファイルの処理をbig endianで行う.
-O0 -Wall -Wuninitialized -ffpe-trap=invalid,zero,overflow -fbounds-check -frecord-marker=4
バグ取り用
AMD x86 open64 Compiler :
-O[0/1/2/3/s] : 最適化
-convert big_endian : ファイルの処理をbig endianで処理.
-msse[2/3/4/4.1/4.2/4a] : CPUアーキテクチャ毎の最適化
-mcpu=[anyx86/auto/athlon/athlon64/core/opteron/xeon] : CPUのコードネーム毎の最適化
(-mtune も同様らしいです.)
-LNO:vintr=[0/1/2] : ループ内のベクトル化
-LNO:vintr_verbose=[ON/OFF] : ベクトル化の表示の有無.
-LNO:simd=[0/1/2] : ループ内のSIMDベクトル化.
-LNO:simd_verbose=[ON/OFF] : SIMDベクトル化の表示の有無.
-LNO:loop_model_simd=[ON/OFF] :
-g[0/1/2/3] : デバッグ
-Wall : ありったけの警告を表示させる.
-w : 警告があれば一部を表示.
-apo : 自動並列化.
C のOptimization (icc で確認)
Intel Compiler (ver.11 - 12くらい) :
-Wall : ありったけのエラーを出力.
CPP のOptimization
-C : コメント行等を保持したまま実行
これをUbuntu 13.10 上の cpp で付加して実行すると、cpp のコメントも挿入してしまう場合がある。
特にFortranのマクロを食わせる場合に注意。
参考URL:
デバッグ関係:
Crayコンパイラオプション:
http://web.kudpc.kyoto-u.ac.jp/manual/ja/compiler/cray#option
PGIコンパイラオプション:
Intel コンパイラオプション:
http://web.kudpc.kyoto-u.ac.jp/manual/ja/compiler/intel#option
f95 コンパイラオプション:
http://northstar-www.dartmouth.edu/doc/solaris-forte/manuals/fortran/user_guide/3_options.html
http://docs.oracle.com/cd/E19205-01/820-4180/man1/f95.1.html
g95 コンパイラオプション:
x86 open64 Compiler オプション:
AMD のツール集
プログラムの基本的なことについて:
http://wwweic.eri.u-tokyo.ac.jp/computer/manual/altix/prog/prog1.html