Otimização

November 12, 2009

[Warning: This post is a backup recovery from my previous Wordpress blog. All content was automatically converted accessing a MySQL database using a Python script (details). Mostly are in Portuguese but if you are interest I can translate to English. If you found any problem dont’t hesitate to contact me in comments.]

Dentre as diversas apresentaes no Linux Kongress 2009 a palestra do Felix von Leitner's me chamou ateno. Com ttulo "Compiler Optimization Survey" ele discutiu os aspectos relacionados a programao nos compiladores modermos e as possibilidades de otimizao (slides). A idia bsica que:

  • Otimizao importante
  • Mas frequentemente: Cdigo legvel mais importante
  • Aprenda o que seu compilador faz E ento deixe-o faz-lo.

Exemplo. As quatro instrues abaixo fazem a mesma coisa, zeram um registrador da CPU x86, qual a melhor forma?

Zerando registros

Analisando no GDB (x/FMT ADDRESS) temos:

movl 0xb8 0x00 0x00 0x00 0x00
andl 0x83 0xe0 0x00
subl 0x29 0xc0 
xorl 0x31 0xc0

E agora? sub ou xor, veja que ambos produzem uma falsa dependncia em %eax, mas a CPU sabe como ignorar no caso do xor.

Voc sabia?

O compilador sim.

Se voc usar o sub na prova seu professor provavelmente ir descontar alguns pontos ou te dar zero...

  • Se voc fizer uma otimizaco, teste em dados reais.
  • Se tornar o cdigo ilegvel no tornar o programa drasticamente rpido, no faa.
movl 0xb8 0x00 0x00 0x00 0x00 andl 0x83 0xe0 0x00 subl 0x29 0xc0 xorl 0x31 0xc0