Respuestas:
Se usa en Gentoo, y no noté nada inusual.
-O3
tiene varias desventajas:
-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 memoria caché.-O3
.-O3
El indicador no cambiará el costo del cambio de contexto o la velocidad de E / S. No creo que algo como <0.1% de aceleración del rendimiento general valga la pena.Tenga en cuenta que grandes fragmentos de la cadena de herramientas (en particular, glibc) no se compilan si cambia los niveles de optimización. El sistema de compilación está configurado para ignorar sus preferencias de -O para estas secciones en la mayoría de las distribuciones sensatas.
En pocas palabras, ciertas funciones fundamentales de la biblioteca y el sistema operativo dependen de que el código realmente haga lo que dice, no lo que sería más rápido en muchos casos. -fgcse-after-reload en particular (habilitado por -O3) puede causar problemas extraños.
Durante los últimos 10 años, he estado ejecutando múltiples sistemas Gentoo con más de 1000 paquetes usando -O3 -march=native
globalmente y aún no he encontrado ninguno de estos problemas de estabilidad míticos que -O3
se supone que tienen. Los puntos de referencia de las aplicaciones intensivas de CPU (como las aplicaciones de matemáticas / ciencias) muestran constantemente -O3
que producen código más rápido, después de todo, sería inútil si no lo hiciera. Para la mayoría de las aplicaciones de escritorio CFLAGS
no importan mucho de todos modos ya que están vinculadas a IO, pero es muy importante para las cosas del lado del servidor que están vinculadas a la CPU.
-O3 utiliza algunas optimizaciones agresivas que solo son seguras si ciertas suposiciones sobre el uso del registro, cómo interactúan los marcos de la pila y la reentrada de la función son verdaderas, y estas suposiciones no están garantizadas como ciertas en algún código como el núcleo, especialmente cuando el ensamblaje en línea es utilizado (como está en algunas partes de muy bajo nivel del núcleo y sus módulos de controlador).
-O2
para saber si el clima o no duele o ayuda
Si bien puede evitar el uso de -O3 y otras perillas de optimización en la mayoría de las aplicaciones (y puede dar lugar a mejoras de velocidad), dudaría en usar tales ajustes en el núcleo en sí o en la cadena de herramientas necesaria para construirlo (compilador, binutils, etc.)
Piénselo: ¿vale la pena un aumento del 5% en el rendimiento de los subsistemas raid y ext3 por fallas del sistema o posibles pérdidas y / o corrupción de datos?
Ajusta todas las perillas que desees para ese puerto Quake que estás reproduciendo o los códecs de audio / video que usas para copiar tu colección de DVD a archivos divx. Es probable que veas una mejora. Simplemente no te metas con el kernel a menos que tengas tiempo que perder y datos que puedas soportar perder.
-O0
tampoco es compatible en absoluto! stackoverflow.com/questions/29151235/…