CodeOptimization

De ccppbrasil.org

Tabela de conteúdo

Otimização de código

Este projeto é fruto de uma percepção de que o poder computacional das máquinas atuais é muito grande e que não existe explicação, para muitos programas, de um desempenho ruim nestas.


Deduzimos então que, provavelmente, os recursos da máquina não estão sendo bem aproveitados. Assim acreditamos que o problema está, seja por descuido ou desconhecimento, na falta de um projeto de otimização dos códigos.


Os sistemas são construídos corretamente, porém sem tomar o cuidado com o uso eficiente dos recursos da máquina e dos sistemas operacionais modernos. Muito antes de análise de desempenho (profiler), questões como complexidade de algoritmos, instruções vetoriais (MMX, SSE, etc.), I/O assíncrono, multiprocessamento e utilização racional de memória não são normalmente tratadas.


O projeto

O objetivo deste projeto é buscar projetos de código livre e realizar um trabalho de estruturação para melhora do seu desempenho. Procuramos selecionar projetos que possuam a necessidade de um bom desempenho e que sejam amplamente utilizados.


Este trabalho de análise se baseia principalmente em um estudo do programa verificando gargalos, algoritmos utilizados, uso de memória, o tratamento de I/O, ou seja, em todos os pontos que podem gerar queda no desempenho dos mesmos. Por exemplo, um software que faz tratamento de imagem é um grande candidato a utilização de instruções vetoriais, um compactador de arquivo normalmente demanda um I/O assíncrono, sendo que os dois podem se beneficiar de multiprocessamento.


Uma vez análise feita, implementamos as alterações que achamos pertinentes, entramos em contato com as equipes oficiais de manutenção e sugerimos as nossas alterações nos projetos. Para a melhora do desempenho utilizamos todas as ferramentas disponíveis, mas sempre tentamos implementar as modificações que geram os melhores resultados primeiro.


Subprojetos atuais

Biblioteca pixman: Biblioteca de tratamento de imagens participante do projeto cairo.


Palestras

Proposta feita para o 1o Seminário de C e C++, que será realizado pelo Grupo em parceria com a Tempo Real Eventos.


Links

Agner Fog's Software optimization resources

Vários manuais, utilitários e pequenas rotinas sobre otimização de código.


Intel® 64 and IA-32 Architectures Software Developer's Manuals

Vários manuais sobre a estrutura dos processadores Intel, inclusive com o conjunto de instruções.


AMD Developer Central

Área de documentação técnica da AMD. (necessita de cadastro)


Nvidia Cuda Zone

Documentação da Nvidia para a API de desenvolvimento para processamento de dados em placas gráficas GeForce8+ (processamento mesmo, não é processamento gráfico).

Ferramentas pessoais