Introdução à Computação de Alto Desempenho. Essa apresentação foi usada como base para uma aula de Sistemas Distribuídos ministrada na FURG. Pode servir como introdução ao tema. Para mais informações sobre o assunto consultar as referências ao final da apresentação. Nas minhas apresentações aqui no slideshare existe a parte I que aborda conceitos complementares. Embora não exista uma dependência rígida entre as duas apresentações é recomendável visualizar a parte 1 primeiro. O endereço da parte 1 é: http://www.slideshare.net/viniciushax/introduo-computao-de-alto-desempenho
Introdução à Computação de Alto Desempenho - Parte II
1. Introdução à Computação de Alto
Desempenho – pt II
Vinícius Alves Hax
Sistemas Distribuídos - FURG
Dezembro de 2012
2. Sobre mim
Engenheiro de Computação
Especialista em Aplicações para a Web
Aluno Mestrado Engenharia de
Computação
Analista de Tecnologia de Informação (FURG)
Empreendedor (Zetaflops)
Interesses: Software Livre, Linux, Metodologias
Ágeis, Rails, Computação de Alto Desempenho,
Internet das Coisas, Governo Eletrônico, Web
2
3. Computação de Alto Desempenho é praticamente
um sinônimo de Computação Paralela
3
4. Por que paralelizar?
Economizar tempo e/ou dinheiro
Resolver problemas grandes que não caberiam na
memória de um único computador
Concorrência
Recursos não locais
4
8. Overhead por paralelização
Tempo de inicialização de tarefas
Sincronização
Comunicação de dados
Overhead por bibliotecas de software
Tempo de término de tarefas
Massivamente paralelo
Sistema com “muitos” processadores
8
9. Escalabilidade
Capacidade de um sistema aumentar o speedup
proporcionalmente ao incremento de processadores
Embaraçosamente paralelo
“Solving many similar, but independent tasks
simultaneously; little to no need for coordination
between the tasks.”
9
11. Automática VS Manual
Geralmente a paralelização é feita manualmente
Leva tempo
Sujeita a erros
Compilador paralelo pode ser de dois tipos
Automático
Laços são os elementos mais paralelizados
Semi-automático (diretivas de compilação)
Pode ser usado em conjunto com métodos automáticos
Problemas da automatização
Pode produzir erros
A performance pode piorar
Geralmente se limita aos laços de repetição
11
13. Entender bem o problema e se existir um código
serial entendê-lo também
Descobrir se o problema é paralelizável
Identificar os pontos críticos do código
Paralelizar primeiro os trechos de código que
consomem mais tempo de CPU
Utilizar ferramentas de análise de código
Identificar gargalos do sistema
Quais pontos que podem fazer o programa executar
mais lentamente? (Ex: I/O)
Mudar o programa ou algoritmo para evitar essas áreas
13
14. Identificar inibidores de paralelismo (Ex: dependência
de dados)
Verificar algoritmos alternativos
Utilizar quando possível bibliotecas paralelas
existentes
14
15. Comunicação
Comunicação SEMPRE implica em custo
Pode resultar em tarefas esperando
desnecessariamente
Pode saturar a largura de banda
Latência e largura de banda
Latência é o tempo que leva para uma mensagem de
tamanho 0 leva para chegar
Largura de banda é a quantidade de dados que pode
ser enviada em um instante de tempo (geralmente
megabyte/segundo ou gigabyte/segundo)
15
18. Balanceamento de carga
Significa procurar fazer com que os processos não
fiquem ociosos
Se todas as tarefas precisarem sincronizar, o tempo
irá depender da tarefa mais lenta
Como fazer?
Particionar os dados (previamente) de maneira igual
Particionar os dados dinamicamente
18
20. I/O representam problemas para a paralelização
Nem sempre a I/O pode ser feita de forma paralela
É preciso tomar cuidado com sobrescrita de dados
I/O sobre a rede tem vários gargalos e pode causar
inconsistências (NFS)
Existem sistemas de arquivos paralelos (Ex: Lustre,
PVFS, GPFS, etc)
Evite I/O!
Quando for necessário é preferível minimizar o nr de
operações de escrita (pacotes grandes)
20
23. Dicas finais
The ability of a parallel program's performance to
scale is a result of a number of interrelated factors.
Simply adding more machines is rarely the answer.
The algorithm may have inherent limits to scalability.
At some point, adding more resources causes
performance to decrease. Most parallel solutions
demonstrate this characteristic at some point.
Parallel support libraries and subsystems software
can limit scalability independent of your application.
23
24. Paralelismo é o futuro da computação?
Até 2020, vários países (China, Índia, etc) querem
ter um computador com 1 Exaflops
24