Estou compilando meu aplicativo C ++ usando o GCC 4.3. Em vez de selecionar manualmente os sinalizadores de otimização que estou usando -march=native
, o que, em teoria, deve adicionar todos os sinalizadores de otimização aplicáveis ao hardware no qual estou compilando. Mas como posso verificar quais sinalizadores ele realmente está usando?
165
--param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512
-v
opção, embora como parte dacc1
linha de comando ...-march=native
e irá funcionar em todos os lugares apenas seguir:gcc -Q --help=target
.Para ver sinalizadores de linha de comando, use:
Se você deseja ver as definições do compilador / pré-compilador definidas por determinados parâmetros, faça o seguinte:
fonte
native
realmente significa.Deve ser (
-###
é semelhante a-v
):Para mostrar os sinalizadores nativos "reais" para o gcc.
Você pode fazê-los aparecer mais "claramente" com um comando:
e você pode se livrar de sinalizadores com -mno- * com:
fonte
Se você quiser descobrir como configurar uma compilação cruzada não nativa, achei útil:
Na máquina de destino,
Em seguida, use isso na máquina de construção:
fonte
echo | gcc-6 -dM -E - -march=sandybridge | grep AVX #define __AVX__ 1
mas os tamanhos de cache parecem ausentes.Vou jogar meus dois centavos nessa questão e sugerir uma extensão um pouco mais detalhada da resposta de Elias. A partir do gcc 4.6, a execução de
gcc -march=native -v -E - < /dev/null
uma quantidade crescente de spam na forma de-mno-*
sinalizadores supérfluos . O seguinte removerá estes:No entanto, verifiquei apenas a correção disso em duas CPUs diferentes (Intel Core2 e AMD Phenom), por isso sugiro executar o script a seguir para garantir que todos esses
-mno-*
sinalizadores possam ser removidos com segurança.Não encontrei diferença entre
gcc -march=native -v -E - < /dev/null
egcc -march=native -### -E - < /dev/null
além de alguns parâmetros serem citados - e parâmetros que não contêm caracteres especiais; portanto, não tenho certeza em que circunstâncias isso faz alguma diferença real.Por fim, observe que
--march=native
foi introduzido no gcc 4.2, antes do qual é apenas um argumento não reconhecido.fonte