gcc関連コンパイルオプションのまとめ
gcc自動量子化関連指令
gcc-O 3レベルの最適化には「-free-vectore」のオプションが含まれています.プログラムを自動量子化し、量子化に関するオプションは-fno-tree-vectoreです.-free-vectorizer-verbose=nオプションを使用して、自動量子化の結果を表示することができます.ここで、nの取得範囲は0から9までです.nについての説明は以下のURLを参照することができます.http://blog.csdn.net/waverider2012/article/details/8529257
同時に、コマンド−mavx−msse−msse 2−msse 3によって、対応するコマンドセットが生成されてもよく、ここでmはハードウェア関連を表す.上記コマンドセットに対応しているかどうか確認してください.cacheのサイズを確認するとlscpuコマンドによることができます.Linuxシステムに関する情報検索のためのブログアドレスを提供します.http://www.cnblogs.com/lhj588/archive/2012/05/15/2501007.html
「relocation truncated to fit:RuX 86_32 S against`.bss'」問題の解決方法について:
インターネットで見た資料によると、配列が大きすぎて(2 G以上)リンクに失敗したため、解決方法はコンパイルオプションを追加することによって「-mcmodel=medium」と表示されます.
コンパイルオプションについての説明は以下の通りです.http://stackoverflow.com/questions/12916176/gfortran-for-dummies-what-does-mcmodel-medium-do-exactly
2016/3/29訂正部分の内容
gcc 4.9.2で「-free-vectorize」と「-free-vectorizer-verbose=n」のコンパイルオプションは機能しません.自動量子化のコンパイルオプションを「-O 3」または「-Ofast」に有効にし、量子化中に関連情報を出力するオプションは「-fot-info-vec-missed」です.
コードは以下の通りです
gcc-O 3レベルの最適化には「-free-vectore」のオプションが含まれています.プログラムを自動量子化し、量子化に関するオプションは-fno-tree-vectoreです.-free-vectorizer-verbose=nオプションを使用して、自動量子化の結果を表示することができます.ここで、nの取得範囲は0から9までです.nについての説明は以下のURLを参照することができます.http://blog.csdn.net/waverider2012/article/details/8529257
同時に、コマンド−mavx−msse−msse 2−msse 3によって、対応するコマンドセットが生成されてもよく、ここでmはハードウェア関連を表す.上記コマンドセットに対応しているかどうか確認してください.cacheのサイズを確認するとlscpuコマンドによることができます.Linuxシステムに関する情報検索のためのブログアドレスを提供します.http://www.cnblogs.com/lhj588/archive/2012/05/15/2501007.html
「relocation truncated to fit:RuX 86_32 S against`.bss'」問題の解決方法について:
インターネットで見た資料によると、配列が大きすぎて(2 G以上)リンクに失敗したため、解決方法はコンパイルオプションを追加することによって「-mcmodel=medium」と表示されます.
コンパイルオプションについての説明は以下の通りです.http://stackoverflow.com/questions/12916176/gfortran-for-dummies-what-does-mcmodel-medium-do-exactly
2016/3/29訂正部分の内容
gcc 4.9.2で「-free-vectorize」と「-free-vectorizer-verbose=n」のコンパイルオプションは機能しません.自動量子化のコンパイルオプションを「-O 3」または「-Ofast」に有効にし、量子化中に関連情報を出力するオプションは「-fot-info-vec-missed」です.
コードは以下の通りです
int a[256], b[256], c[256];
foo () {
int i;
for (i=0; i<256; i++){
a[i] = b[i] + c[i];
}
}
makefileのシナリオは以下の通りです.ex1.o:ex1.c
gcc -O3 -c -fopt-info-vec-missed ex1.c
出力は以下の通りですgcc -O3 -c -fopt-info-vec-missed ex1.c
ex1.c:5:3: note: misalign = 0 bytes of ref b[i_11]
ex1.c:5:3: note: misalign = 0 bytes of ref c[i_11]
ex1.c:5:3: note: misalign = 0 bytes of ref a[i_11]
ex1.c:5:3: note: virtual phi. skip.
ex1.c:5:3: note: num. args = 4 (not unary/binary/ternary op).
ex1.c:5:3: note: not ssa-name.
ex1.c:5:3: note: use not simple.
ex1.c:5:3: note: num. args = 4 (not unary/binary/ternary op).
ex1.c:5:3: note: not ssa-name.
ex1.c:5:3: note: use not simple.
ex1.c:2:1: note: not vectorized: not enough data-refs in basic block.
ex1.c:6:13: note: not vectorized: no vectype for stmt: vect__4.5_1 = MEM[(int *)vectp_b.3_9];
scalar_type: vector(4) int
ex1.c:6:13: note: not vectorized: not enough data-refs in basic block.
ex1.c:2:1: note: not vectorized: not enough data-refs in basic block.
ex1.c:8:1: note: not vectorized: not enough data-refs in basic block.