Otimização de desempenho utilizando contadores de hardware - Ricardo Varela Corrêa (2000)
A disponibilidade de microcomputadores cada vez mais potentes, com capacidade computacional e área de armazenamento próximos da capacidade de estações de trabalho caríssimas, tem colocado a comunidade científica diante de uma nova ferramenta para o desenvolvimento de aplicações científicas. A utilização dessas novas plataformas no meio científico criou a necessidade para um sistema operacional que fosse estável e confiável, abrindo o caminho para que o Linux assumisse a tarefa de gerenciar essas máquinas. Este aumento da capacidade somado a um ambiente estável, traz a necessidade de se melhorar o desempenho de algumas aplicações científicas, uma vez que o aumento das dimensões dos dados a analisar vem crescendo continuamente. Assim, com o aumento da complexidade dos problemas científicos e principalmente com a necessidade de tratamento de grandes quantidades de dados, tem colocado a otimização de desempenho como fator importante no desenvolvimento de uma aplicação. Especificamente nos processadores fabricados pela Intel, existem recursos internos que podem facilmente auxiliar no estudo do desempenho de um programa. A captura de dados internos que monitorem a atividade do código executando internamente ao processador e em tempo real, pode fornecer informações que mostrem onde estão os pontos problemáticos. O acesso a eventos internos aos processadores pode ser realizado através dos denominados contadores de hardware, que trazem informações precisas sobre o estado do processador. A forma de utilização desses contadores, principalmente como acioná-los a partir de uma aplicação de alto nível e estando trabalhando no ambiente Linux, exige alguns conhecimentos que estão discutidos com detalhes neste trabalho. A captura dos dados de desempenho permite assim conhecer como um trecho de programa interage com o processador e através de técnicas clássicas de otimização, pode-se reduzir consideravelmente os pontos de interação adversa com o processador. Uma interface foi desenvolvida para permitir ao programador a captura desses dados. A metodologia aqui descrita foi aplicada inicialmente a simulações de pequenos trechos de código e a uma aplicação sequencial. Posteriormente, foi aplicada a um exemplo de cálculo de desvio padrão onde contagens de diversos eventos foram realizadas. A otimização de um programa sequencial real partindo da reestruturação do código original em Fortran 77 foi executada com o código em notação Fortran 90, instrumentado e monitorado em diversos eventos. A paralelização desse código e execução em paralelo, mostra a eficiência do método, disponibilizando aos programadores uma sequência de etapas para análise de uma aplicação científica, visando a otimização de desempenho. A monitoração de programas paralelos permite assim que o desempenho de uma aplicação paralela seja analisada e através da inspeção e monitoração de seu código, mostrar como torná-lo mais eficiente. Os dados obtidos mostram que o método pode ser utilizado em aplicações sequenciais ou paralelas fornecendo informações claras do funcionamento de trechos de programa, permitindo ao programador identificar os pontos de interação adversa com a arquitetura.