Gccに利用可能な-march = Archオプションを出力させる方法はありますか?ビルドエラーが発生し(-march=x86_64
を試しました)、オプションが何であるかわかりません。
私が使用しているコンパイラは、-march=skylake
が好きではないように見えるgccの独自のラッパーです。フラグは同じである必要があるため、アーキテクチャをダンプするためにgccに送信するオプションは、このラッパーでも同じであると想定しています。
偽のパラメータでgccにエラーを発生させ、リストをダンプしましたが、ラッパーを通過しているため、それが表示されません。
Gccにサポート内容を教えてもらうにはどうすればよいですか?
gcc --target-help
を使用します
-march=CPU[,+EXTENSION...]
generate code for CPU and EXTENSION, CPU is one of:
generic32, generic64, i386, i486, i586, i686,
pentium, pentiumpro, pentiumii, pentiumiii, pentium4,
prescott, nocona, core, core2, corei7, l1om, k1om,
iamcu, k6, k6_2, athlon, opteron, k8, amdfam10,
bdver1, bdver2, bdver3, bdver4, znver1, znver2,
btver1, btver2
...
多くの場合、x86
やx86-64
のような一般的なアーキテクチャではなく、特定のマイクロアーキテクチャです。ただし、64ビット拡張機能を備えた汎用x86 CPUにはx86-64
(x86_64
ではありません)があります。各アーキテクチャの完全なリストは GCCの-march
マニュアル にあります。 x86の場合:
-march=cpu-type
マシンタイプcpu-typeの命令を生成します。生成されたコードを指定された
-mtune=cpu-type
に合わせて調整するだけのcpu-type
とは対照的に、-march=cpu-type
を使用すると、GCCは指定されたプロセッサ以外のプロセッサではまったく実行されないコードを生成できます。-march=cpu-type
を指定すると、-mtune=cpu-type
を意味します。.。
https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#index-march-1
-march
のベースラインバージョンは-march=x86-64
ですが、ベースライン/デフォルトの調整オプションは-mtune=generic
です。これは、どこでもひどいことをしないことを目的としており、追加の命令やコードサイズを犠牲にしても、パフォーマンスの落とし穴を回避します。
-march=native
は、コンパイラが実行されているマシンの正しいアーチと調整設定を選択します。コンパイラが実行していない場合はtune=generic
実行されているCPUの特定のモデルを認識しません。
(たとえば、Skylakeの古いgccは、引き続き-mavx2 -mpopcnt -mbmi2
などを有効にしますが、適切に近いものではなく-mtune=generic
を設定します。)
gcc --target-help
を使用するのは正しい考えのようですが、リストが不完全です。
最新のgccバージョンでの回避策の1つは、偽の値を-march
に渡すことです。
$ gcc --target-help -march=foo
cc1: error: bad value (‘foo’) for ‘-march=’ switch
cc1: note: valid arguments to ‘-march=’ switch are: nocona core2 nehalem corei7 westmere sandybridge corei7-avx ivybridge core-avx-i haswell core-avx2 broadwell skylake skylake-avx512 cannonlake icelake-client icelake-server bonnell atom silvermont slm knl knm x86-64 eden-x2 nano nano-1000 nano-2000 nano-3000 nano-x2 eden-x4 nano-x4 k8 k8-sse3 opteron opteron-sse3 athlon64 athlon64-sse3 athlon-fx amdfam10 barcelona bdver1 bdver2 bdver3 bdver4 znver1 btver1 btver2 native
...
--target-help
からの出力と比較して、より多くのオプションがあることに注意してください。