web-dev-qa-db-ja.com

利用可能なマーチ/ mtuneオプションは何ですか?

Gccに利用可能な-march = Archオプションを出力させる方法はありますか?ビルドエラーが発生し(-march=x86_64を試しました)、オプションが何であるかわかりません。

私が使用しているコンパイラは、-march=skylakeが好きではないように見えるgccの独自のラッパーです。フラグは同じである必要があるため、アーキテクチャをダンプするためにgccに送信するオプションは、このラッパーでも同じであると想定しています。

偽のパラメータでgccにエラーを発生させ、リストをダンプしましたが、ラッパーを通過しているため、それが表示されません。

Gccにサポート内容を教えてもらうにはどうすればよいですか?

7
Brydon Gibson

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
...

多くの場合、x86x86-64のような一般的なアーキテクチャではなく、特定のマイクロアーキテクチャです。ただし、64ビット拡張機能を備えた汎用x86 CPUにはx86-64x86_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を設定します。)

5
phuclv

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からの出力と比較して、より多くのオプションがあることに注意してください。

2
BeeOnRope