2012-06-19 9 views
8

cabal dist que desalienta el uso de -O2 ya que produce veces más tiempo de compilación y el manual de GHC dice:Diferencia entre -O de GHC y O2

Por el momento, -O2 es poco probable que produzca un mejor código de -O.

sé que siempre puedo referencia a la biblioteca para ver si -O2 da un mejor rendimiento, pero me preguntaba si alguien podría explicar lo -O2 hace diferente de -O así que podría conseguir una intuición de por qué consideran que es poco probable que producir un mejor código

+2

La única forma en que '-O2' aún no es probable que produzca un código mejor que' -O' sería un código donde la diferencia es significativa o tal vez presente en absoluto, no sé si lo es. A veces hace una gran diferencia, cf. mi comentario sobre la respuesta de Don. Recomiendo usar '-O2' a menos que tengas una razón para no hacerlo. –

Respuesta

15

-O2 realiza la especialización de constructor. Hay algunas otras optimizaciones que solo están habilitadas en -O2 también, incluyendo -fliberate-case, -fstatic-argument-transformation,

Tengo la sospecha de que -O2 ahora siempre produce un mejor código, ya que esa recomendación data de hace unos 10 años.

+0

No siempre, hay un montón de código donde no hay diferencia. Pero también hay un montón de código donde '-O2' hace mucho mejor que' -O'. Para mi primer tamiz, hace una diferencia de 2,5 ×, por ejemplo (con ghc-7.4.2). –

+0

No es que haya hecho pruebas exhaustivas, pero no he visto un caso en el que '-O2' peores que' -O' por un tiempo (pre-ghc7, creo). –

Cuestiones relacionadas