Optimization

Optimizations for Fortran or C compilers

Last modified: 2014/08/17

cray

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アーキテクチャ毎の最適化

  • http://www.softek.co.jp/SPG/Pgi/TIPS/cross.html

  • -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 :

http://developer.amd.com.php53-23.ord1-1.websitetestlink.com/wordpress/media/2012/10/x86Open64QuickRef.pdf

    • -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: