c++ - gcc flags
Tiempo de ejecuciĆ³n optimizado (2)
Sí, es usual. Tome la optimización -Ox como líneas guía. En promedio, producen optimización que se anuncia, pero mucho depende del estilo en que se escribe el código, el diseño de la memoria y el compilador. Algunas veces, debes intentar fallar muchas veces antes de obtener el código óptimo. -O2 de hecho ofrece la mejor optimización en la mayoría de los casos.
Debido a una tarea escolar, tengo que convertir un código C ++ en ensamblaje (ARMv8). Luego, tengo que compilar el código C ++ utilizando las optimizaciones de -O0, -O1, -O2, -O3 y -Os de GCC, anote la hora y compárela con el tiempo de ejecución de mi código de ensamblaje. Como, creo que sé que -O3 tiene que ser más rápido que -O1 y -O2. Sin embargo, entiendo que -O2 es el más rápido, luego son -O1, -O3, -Os, -O0. Es eso usual? (Los tiempos calculados son aproximadamente 30 segundos).
Tenga en cuenta que GCC tiene muchos otros indicadores de optimización .
No hay garantía de que -O3
proporcione un código más rápido que -O2
; un compilador puede aplicar más pases de optimización, pero todos son heurísticos y pueden ser infructuosos (o incluso ralentizar un poco su código particular). Por lo tanto, sucede que -O3
proporciona un código ligeramente más lento que -O2
(en algún código fuente de entrada particular ).
Puede probar una versión más reciente de GCC (la última -en noviembre de 2017- es GCC 7 , GCC 8 saldrá en pocos meses). También podría probar alguna mejor opción -march=
o -mtune=
.
Por último, con su complemento GCC , puede agregar su propia aprobación de optimización o cambiar el orden (y el conjunto) de las pases de optimización aplicadas (hay varios cientos de pases de optimización diferentes en GCC). Pero necesitará mucho trabajo (tal vez un año o dos) para poder ampliar GCC.
Puede ajustar los parámetros de optimización, y algunos proyectos ( MILEPOST ) incluso han utilizado técnicas de aprendizaje automático para mejorarlos.
Ver también diapositivas y referencias en mi (antigua) documentación GCC MELT .