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 apresentações no Linux Kongress 2009 a palestra do Felix von Leitner's me chamou atenção. Com título "Compiler Optimization Survey" ele discutiu os aspectos relacionados a programação nos compiladores modermos e as possibilidades de otimização (slides).  A idéia básica é que:

  • Otimização é importante
  • Mas frequentemente: Código legível é mais importante
  • Aprenda o que seu compilador faz E então deixe-o fazê-lo.

Exemplo. As quatro instruções 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 dependência 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 otimizacão, teste em dados reais.
  • Se tornar o código ilegível não tornar o programa drasticamente rápido, não faça.
movl  0xb8    0x00    0x00    0x00    0x00 andl  0x83    0xe0    0x00 subl  0x29    0xc0 xorl  0x31    0xc0