回答:
次の-Q --help=target
オプションを使用できます。
gcc -march=native -Q --help=target ...
この-v
オプションも役立つ場合があります。
--help
オプションに関するドキュメントはこちらでご覧いただけます。
-v
、cc1
コマンドラインの一部としてではありますが、オプションを使用してこれらのパラメーターを表示します...
-march=native
とそれはどこでもどこでも動作します:gcc -Q --help=target
。
コマンドラインフラグを表示するには、次のコマンドを使用します。
gcc -march=native -E -v - </dev/null 2>&1 | grep cc1
特定のパラメーターで設定されたコンパイラー/プリコンパイラー定義を確認する場合は、次のようにします。
echo | gcc -dM -E - -march=native
native
実際に何に相当するかをリストするために、受け入れられた回答と同じくらい多くの投票に値します。
それは(-###
に似ています-v
):
echo | gcc -### -E - -march=native
gccの「実際の」ネイティブフラグを表示します。
コマンドを使用して、それらをより「はっきり」表示させることができます。
gcc -### -E - -march=native 2>&1 | sed -r '/cc1/!d;s/(")|(^.* - )//g'
そして、あなたは-mno- *でフラグを取り除くことができます:
gcc -### -E - -march=native 2>&1 | sed -r '/cc1/!d;s/(")|(^.* - )|( -mno-[^\ ]+)//g'
非ネイティブクロスコンパイルを設定する方法を知りたい場合は、次のようにすると便利です。
ターゲットマシンで、
% gcc -march=native -Q --help=target | grep march
-march= core-avx-i
次に、ビルドマシンでこれを使用します。
% gcc -march=core-avx-i ...
echo | gcc-6 -dM -E - -march=sandybridge | grep AVX #define __AVX__ 1
しかし、キャッシュサイズは存在しないようです。
私はこの質問に2セントを投入し、エリアスの回答をもう少し詳細に拡張することを提案します。gcc 4.6以降、を実行gcc -march=native -v -E - < /dev/null
すると、不要な-mno-*
フラグの形でスパムの量が増加します。以下はこれらを取り除きます:
gcc -march=native -v -E - < /dev/null 2>&1 | grep cc1 | perl -pe 's/ -mno-\S+//g; s/^.* - //g;'
ただし、これが正しいことを確認したのは2つの異なるCPU(Intel Core2とAMD Phenom)だけなので、次のスクリプトを実行して、これらの-mno-*
フラグをすべて安全に削除できることを確認することをお勧めします。
#!/bin/bash
gcc_cmd="gcc"
# Optionally supply path to gcc as first argument
if (($#)); then
gcc_cmd="$1"
fi
with_mno=$(
"${gcc_cmd}" -march=native -mtune=native -v -E - < /dev/null 2>&1 |
grep cc1 |
perl -pe 's/^.* - //g;'
)
without_mno=$(echo "${with_mno}" | perl -pe 's/ -mno-\S+//g;')
"${gcc_cmd}" ${with_mno} -dM -E - < /dev/null > /tmp/gcctest.a.$$
"${gcc_cmd}" ${without_mno} -dM -E - < /dev/null > /tmp/gcctest.b.$$
if diff -u /tmp/gcctest.{a,b}.$$; then
echo "Safe to strip -mno-* options."
else
echo
echo "WARNING! Some -mno-* options are needed!"
exit 1
fi
rm /tmp/gcctest.{a,b}.$$
私は違いを発見していないgcc -march=native -v -E - < /dev/null
と、gcc -march=native -### -E - < /dev/null
いくつかのパラメータが引用されている他よりも-と私は確信して、これは任意の本当の違いはどのような状況の下ではないよので、特殊文字を含まないパラメータ。
最後に、これ--march=native
はgcc 4.2で導入されたもので、その前は単に認識されない引数でした。
--param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512