Início > Livros > Code Optimization: Effective Memory Usage

Code Optimization: Effective Memory Usage

Terminei de ler o livro Code Optimization: Effective Memory Usage e a seguir um pequeno (espero) review sobre ele :)

O livro contem uma introdução e 4 capítulos (onde o segundo e o terceiro correspondem a ~70% do livro).

A introdução tem o papel de definir o bom senso das coisas:

  • Nunca tentar otimizar nada antes de estar tudo pronto e funcionando.
  • Gastar os esforços de otimização nos lugares onde o programa gasta mais tempo e não naquela função que é chamada uma vez a cada semana e gasta 0.1 segundo de tempo de processamento.
  • Otimização não é necessariamente implementação em assembly.
  • Que a otimização de código nunca fará um algoritmo exponencial virar polinomial :)
  • Etc

O primeiro capítulo fala sobre profiling em geral, mostra o que é e como se deveria fazer, demonstra também alguns problemas na medição de tempo. Após isso, um pouco sobre 2 profilers: o Intel VTune e o AMD Code Analyst e depois ele chega a conclusão que o VTune é o mais legal e o resto do capítulo é um tutorial de profiling e otimização usando o VTune.

Os capítulos 2 e 3 são estruturalmente idênticos, enquanto o primeiro fala sobre memória RAM o segundo fala sobre memória cache (e como dito antes, compõem o core do livro). Essencialmente cada capitulo começa explicando como a tecnologia em questão funciona, mais a parte de engenharia de hardware e em seguida parte para a otimização com base no que foi dito.

Enquanto as otimizações do capitulo 2 são mais relacionadas com loops (unroll, separar loops, juntar loops) e otimizar o fluxo de dados, as otimizações do capítulos 3 são mais relacionadas a otimizações com base no que cabe dentro das memórias cache (e como fazer caso não), como fazer prefetching de forma eficiente, etc.

Finalmente, o ultimo capitulo demonstra otimizações que podem (ou poderiam) ser feitas pelos compiladores avaliados (Visual C++, Borland C++ e Watson), algumas inclusive são otimizações que foram explicadas no capitulo 2, a comparação dos compiladores pode ser resumida a “Visual C++ rlz. O resto é resto”. E depois um pouco sobre “Otimização manual Vs Otimização do compilador”.

O livro é de setembro de 2003, então bem… os sistemas utilizados nas demonstrações de ganho c/ otimização são quase sempre um Pentium 3 e/ou um Athlon (não era nem o Athlon XP), com algumas referências sobre Pentium 2 e o K6 e fazendo referência ao Pentium 4 como a coisa mais moderna que existe, OMG! E isso já é uma das coisas que eu não gostei… algumas otimizações propostas melhoravam o desempenho no Athlon, mas pioravam no Pentium 3… sempre com uma explicação baseada nos processadores e chipsets utilizados (Intel para o Pentium 3 e VIA para o Athlon -_-‘ ), mas que mesmo assim torna as otimizações dependentes de plataforma. Além disso, o autor tem uma grande inclinação para com a Intel, se você puder fazer algo que melhore o desempenho em um Pentium, mas prejudique em um processador da AMD, faça… afinal quase ninguém usa AMD (ou usava em 2003, o que eu não concordo :P ).

E mesmo com a introdução, algumas vezes o autor parte para a guerra de baixar alguns clocks e mais para o final o assembly começa a rolar mais (enquanto durante grande parte do livro, é utilizado C mesmo).

 

Podemos reduzir esse tempo de execução em 15 clocks! Atacaaaaaaaaaaaarr......

 

Outro ponto que achei que podia ser melhor, é que alguns gráficos poderiam ser de fato coloridos… principalmente os que tem muitas linhas, fica confuso distinguir 4 tons de cinza.

Agora, falando da parte boa… achei um bom texto para demonstrar quais técnicas de otimização *podem* (não necessariamente devem) ser utilizadas.

Além disso, a explicação sobre memória RAM e memória cache é bem legal e poderia ser de interesse de alguém que está fazendo uma disciplina como Arquitetura de Computadores I (ou então o trabalho sobre arquitetura que existe no início de Sistemas Operacionais I na UFRJ). A parte sobre as otimizações feitas pela máquina, ou seja pelo compilador, poderia ser útil para quem estivesse fazendo Compiladores I e quisesse brincar um pouco com o que seu compilador pode fazer :)

O livro não é um espetáculo e não é um livro que recomendo para todos, mas para quem tem algum interesse em arquitetura de computadores e em otimização de performance.

Só queria destacar uma citação da página 363 (ou seja, final do livro):

Futhermore, manual optimization will become a laughing-stock if it is used inskillfully (or if knowledge gained from 10-year-old optimization manual is applied).

O livro tem 7 anos agora, será que ele não poderia ter avisado isso no início? :P

O destino do livro será a biblioteca do NCE, assim como a maioria dos livros de computação que eu acabo doando. Então caso alguem queira ler… a partir de alguma data de janeiro (quando eu for a UFRJ), o livro estará lá :)

Anúncios
Categorias:Livros
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: