next up previous
Next: Objetivos Up: Proposta de Projeto: Instrumentação Previous: Introdução

Justificativa

 

Sistemas computacionais de alto desempenho, principalmente sob a forma paralela, têm se difundido bastante nos últimos anos. Vários modelos estão hoje disponíveis comercialmente, cobrindo uma variada gama de configurações e níveis de desempenho. Existe, contudo, um razoável consenso de que a popularização definitiva destes sistemas só ocorrerá quando se tornar ``fácil'' a sua programação. Ou seja, quando usuários comuns, sem maiores esforços, consiguirem obter consistentemente, em suas aplicações, uma fração significativa do desempenho de pico dos sistemas.

Várias iniciativas neste sentido estão em andamento, atualmente, tanto a nível acadêmico quanto comercial. Em sua maioria, estas iniciativas têm procurado, até aqui, propiciar ao programador um ambiente ``familiar'', isto é, que seja possível aplicar a sistemas paralelos os mesmos métodos de programação já consagrados em sistemas uniprocessados. Tais métodos incluem a utilização de extensões de linguagens convencionais, como em High Performance Fortran (HPF) [1], ou ainda o uso de bibliotecas padronizadas, voltadas para a portabilidade entre diferentes sistemas, como no caso de Message-Passing Interface (MPI) [2].

Um problema ainda em aberto, contudo, é como obter alto desempenho, consistentemente, adotando-se estas abordagens ``familiares''. Em outras palavras, como permitir ao programador aplicar tais métodos de programação a sistemas paralelos, mas ao mesmo tempo garantir que o desempenho resultante seja próximo do esperado.

Uma outra característica marcante dos sistemas de alto desempenho atuais é o uso de microprocessadores comerciais como elemento de processamento. Tal fato tem origem em fatores econômicos, já que os preços dos microprocessadores modernos, bem como as perspectivas de evolução dentro de uma determinada marca, fazem com que eles representem a melhor relação custo/desempenho disponível. Boa parte destes novos processadores apresenta, incorporados ao hardware básico, recursos extras para monitoração de desempenho [3][4][5]. É previsto que tal tendência se amplie ainda mais, pois com a crescente complexidade dos circuitos internos nos modelos mais recentes, os próprios fabricantes acabam tendo necessidade de utilizar estes recursos, para testar e garantir que os componentes atendam às suas especificações.

Diante deste cenário, torna-se bastante atraente a possibilidade de se explorar este hardware interno, já existente nos processadores e portanto com custo ``zero''. Através da sua correta utilização, é possível obter-se informações até então inaccessíveis por métodos convencionais, tais como sinais internos da CPU, contagens de acertos em caches internas, etc. Este novo conjunto de informações, se bem manipulado, pode fornecer indicações preciosas ao usuário sobre possíveis causas de gargalos de desempenho em suas aplicações.


next up previous
Next: Objetivos Up: Proposta de Projeto: Instrumentação Previous: Introdução

Celso Luiz Mendes LAC-ES
Wed Feb 18 09:48:20 EST 1998