Estoy compilando mi aplicación C ++ usando GCC 4.3. En lugar de seleccionar manualmente los indicadores de optimización que estoy usando -march=native
, que en teoría debería agregar todos los indicadores de optimización aplicables al hardware en el que estoy compilando. Pero, ¿cómo puedo verificar qué banderas está usando realmente?
165
--param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512
-v
opción, aunque como parte de lacc1
línea de comando ...-march=native
y funcionará en todas partes simplemente siguiente:gcc -Q --help=target
.Para ver banderas de línea de comandos, use:
Si desea ver las definiciones del compilador / precompilador establecidas por ciertos parámetros, haga lo siguiente:
fuente
native
realmente equivale.Debería ser (
-###
es similar a-v
):Para mostrar las banderas nativas "reales" para gcc.
Puede hacer que aparezcan más "claramente" con un comando:
y puedes deshacerte de las banderas con -mno- * con:
fuente
Si desea averiguar cómo configurar una compilación cruzada no nativa, esto me pareció útil:
En la máquina de destino,
Luego use esto en la máquina de compilación:
fuente
echo | gcc-6 -dM -E - -march=sandybridge | grep AVX #define __AVX__ 1
pero los tamaños de caché parecen ausentes.Voy a poner mis dos centavos en esta pregunta y sugerir una extensión un poco más detallada de la respuesta de elias. A partir de gcc 4.6, la ejecución de
gcc -march=native -v -E - < /dev/null
emite una cantidad cada vez mayor de correo no deseado en forma de-mno-*
indicadores superfluos . Lo siguiente los quitará:Sin embargo, solo he verificado la corrección de esto en dos CPU diferentes (un Intel Core2 y AMD Phenom), por lo que sugiero también ejecutar el siguiente script para asegurarme de que todos estos
-mno-*
indicadores se puedan quitar de forma segura.No he encontrado una diferencia entre
gcc -march=native -v -E - < /dev/null
ygcc -march=native -### -E - < /dev/null
aparte de algunos parámetros que se citan, y parámetros que no contienen caracteres especiales, por lo que no estoy seguro de en qué circunstancias esto hace una diferencia real.Finalmente, tenga en cuenta que
--march=native
se introdujo en gcc 4.2, antes de lo cual es solo un argumento no reconocido.fuente