it-swarm-es.tech

Compilar GNU / Linux con optimización -O3

Se dice que compilar GNU herramientas y kernel de Linux con -O3 La opción de optimización gcc producirá errores extraños y raros. ¿Es verdad? ¿Alguien lo ha probado o es solo un engaño?

18
uray

Se usa en Gentoo y no noté nada inusual.

8
izaac

-O3 tiene varias desventajas:

  1. En primer lugar, a menudo produce un código más lento que -O2 o -Os. A veces produce un código más largo debido al desenrollado del bucle que, de hecho, puede ser más lento debido al peor rendimiento del código en la caché.
  2. Como se dijo, a veces produce código incorrecto. Puede deberse a un error en la optimización o un error en el código (como ignorar el alias estricto). Como el código del kernel a veces es y otras veces tiene que ser "inteligente", yo diría que es posible que algún desarrollador del kernel haya cometido algún error. Experimenté varios problemas extraños, como el bloqueo de las utilidades del espacio de usuario, cuando compilé el kernel con gcc 4.5, que en ese momento era estable. Sigo usando gcc 4.4 para el kernel y varias utilidades de espacio de usuario seleccionadas debido a varios errores. Lo mismo puede aplicarse a -O3.
  3. No creo que ofrezca muchos beneficios para el kernel de Linux. El kernel no realiza cálculos pesados ​​y, en algunos lugares, está optimizado con Assembly. -O3 flag no cambiará el costo del cambio de contexto o la velocidad de E/S. No creo que valga la pena algo como una aceleración <0.1% del rendimiento general.
16
Maciej Piechotka

Tenga en cuenta que grandes trozos de la cadena de herramientas (glibc en particular) no se compilan si cambia los niveles de optimización. El sistema de compilación está configurado para ignorar sus preferencias -O para estas secciones en la mayoría de las distribuciones cuerdas.

En pocas palabras, ciertas características fundamentales de la biblioteca y el sistema operativo dependen de que el código haga realmente lo que dice, no de lo que sería más rápido en muchos casos. -fgcse-after-reload en particular (habilitado por -O3) puede causar problemas extraños.

6
user455

Durante los últimos 10 años he estado ejecutando múltiples sistemas Gentoo con más de 1000 paquetes usando -O3 -march=native a nivel mundial y aún no he encontrado ninguno de estos problemas míticos de estabilidad que -O3 se supone que tiene. Los puntos de referencia de las aplicaciones con uso intensivo de la CPU (como las aplicaciones de matemáticas/ciencias) muestran constantemente -O3 para producir código más rápido, después de todo, no tendría sentido si no lo hiciera. Para la mayoría de las aplicaciones de escritorio CFLAGS no importa tanto de todos modos, ya que están vinculadas IO, pero es muy importante para las cosas del lado del servidor que están vinculadas a la CPU).

5
Mark Pariente

-O3 usa algunas optimizaciones agresivas que solo son seguras si ciertas suposiciones sobre el uso de registros, cómo interactúan los marcos de pila y reentrada de funciones son verdaderas, y no se garantiza que estas suposiciones sean ciertas en algunos códigos como el kernel, especialmente cuando el ensamblaje en línea es utilizado (como en algunas partes de nivel muy bajo del kernel y sus módulos de controlador).

3
David Spillett

Si bien puede salirse con la suya usando -O3 y otras perillas de optimización en la mayoría de las aplicaciones (y puede resultar en mejoras de velocidad), dudaría en usar tales ajustes en el kernel o en la cadena de herramientas requerida para construyéndolo (compilador, binutils, etc.).

Piénselo: ¿una ganancia de rendimiento del 5% de los subsistemas raid y ext3 vale la pena los bloqueos del sistema o la posible pérdida y/o corrupción de datos?

Modifique todas las perillas que desee para ese puerto Quake que está reproduciendo o los códecs de audio/video que usa para copiar su colección de DVD a archivos divx. Probablemente verá una mejora. Simplemente no se meta con el kernel a menos que tenga tiempo que perder y datos que pueda soportar perder.

0
Geoff Fritz