Respostas:
É usado no Gentoo, e eu não notei nada incomum.
-O3
tem várias desvantagens:
-O2
ou -Os
. Às vezes, ele produz código mais longo devido ao desenrolar do loop, que pode ser mais lento devido ao desempenho pior do cache do código.-O3
.-O3
O sinalizador não alterará o custo da alternância de contexto ou a velocidade da E / S. Não acho que algo como uma aceleração <0,1% do desempenho geral valha a pena.Observe que grandes partes da cadeia de ferramentas (em particular a glibc) não compilam se você alterar os níveis de otimização. O sistema de compilação está configurado para ignorar suas preferências -O para essas seções na maioria das distribuições sãs.
Simplificando, certas funcionalidades fundamentais da biblioteca e do sistema operacional dependem do código que está realmente fazendo o que diz, e não do que seria mais rápido em muitos casos. -fgcse-after-reload em particular (ativado por -O3) pode causar problemas estranhos.
Nos últimos 10 anos, eu tenho executado vários sistemas Gentoo com mais de 1000 pacotes usando -O3 -march=native
globalmente e ainda não encontrei nenhum desses problemas míticos de estabilidade que -O3
deveriam ter. Os benchmarks de aplicativos intensivos de CPU (como aplicativos de matemática / ciências) mostram consistentemente -O3
produzir código mais rápido, afinal, seria inútil se não o fizessem. De qualquer maneira, para a maioria dos aplicativos de desktop CFLAGS
, não importa tanto, pois eles são vinculados à IO, mas isso importa muito para as coisas do lado do servidor vinculadas à CPU.
-O3 usa otimizações agressivas que só são seguras se certas suposições sobre o uso de registros, como os quadros de pilha forem interagidos e a reentrada de funções forem verdadeiras, e não é garantido que essas suposições sejam verdadeiras em alguns códigos como o kernel, especialmente quando a montagem em linha é usado (como em algumas partes de nível muito baixo do kernel e de seus módulos de driver).
-O2
saber o tempo ou não fere ou ajuda
Embora você possa usar o -O3 e outros botões de otimização na maioria dos aplicativos (e isso pode resultar em melhorias de velocidade), hesitaria em usar esses ajustes no próprio kernel ou na cadeia de ferramentas necessária para construí-lo (compilador, binutils, etc.)
Pense nisso: um ganho de 5% no desempenho dos subsistemas raid e ext3 vale a pena travar o sistema ou potencial perda de dados e / ou corrupção?
Ajuste todos os botões desejados para a porta do Quake que você está reproduzindo ou os codecs de áudio / vídeo que você usa para copiar sua coleção de DVD para arquivos divx. Você provavelmente verá uma melhoria. Apenas não mexa com o kernel, a menos que você tenha tempo a perder e dados que pode suportar perder.
-O0
não é suportado! stackoverflow.com/questions/29151235/…