Introdução à Computação de Alto Desempenho - Parte II

807 views
692 views

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
807
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
20
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Introdução à Computação de Alto Desempenho - Parte II

  1. 1. Introdução à Computação de Alto Desempenho – pt II Vinícius Alves Hax Sistemas Distribuídos - FURG Dezembro de 2012
  2. 2. Sobre mimEngenheiro de ComputaçãoEspecialista em Aplicações para a WebAluno Mestrado Engenharia deComputaçãoAnalista 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. 3. Computação de Alto Desempenho é praticamente um sinônimo de Computação Paralela 3
  4. 4. Por que paralelizar?Economizar tempo e/ou dinheiroResolver problemas grandes que não caberiam namemória de um único computadorConcorrênciaRecursos não locais 4
  5. 5. 5
  6. 6. 6
  7. 7. Conceitos importantesTarefaPipelineMemória compartilhadaSymmetric Multi-Processor (SMP)SincronizaçãoSpeedup Observado Tempo programa serial / Tempo programa paralelo 7
  8. 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 tarefasMassivamente paralelo Sistema com “muitos” processadores 8
  9. 9. Escalabilidade Capacidade de um sistema aumentar o speedup proporcionalmente ao incremento de processadoresEmbaraçosamente paralelo “Solving many similar, but independent tasks simultaneously; little to no need for coordination between the tasks.” 9
  10. 10. Desenvolvendo programas paralelos 10
  11. 11. Automática VS ManualGeralmente a paralelização é feita manualmente Leva tempo Sujeita a errosCompilador 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áticosProblemas da automatização Pode produzir erros A performance pode piorar Geralmente se limita aos laços de repetição 11
  12. 12. Dicas de paralelização manual 12
  13. 13. Entender bem o problema e se existir um códigoserial entendê-lo tambémDescobrir se o problema é paralelizávelIdentificar 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ódigoIdentificar 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. 14. Identificar inibidores de paralelismo (Ex: dependênciade dados)Verificar algoritmos alternativosUtilizar quando possível bibliotecas paralelasexistentes 14
  15. 15. ComunicaçãoComunicação SEMPRE implica em custoPode resultar em tarefas esperandodesnecessariamentePode saturar a largura de bandaLatê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
  16. 16. ComunicaçãoTransparente (dados paralelos)Não transparente (passagem de mensagens)Síncrona VS Não síncrona 16
  17. 17. 17
  18. 18. Balanceamento de cargaSignifica procurar fazer com que os processos nãofiquem ociososSe todas as tarefas precisarem sincronizar, o tempoirá depender da tarefa mais lentaComo fazer? Particionar os dados (previamente) de maneira igual Particionar os dados dinamicamente 18
  19. 19. I/O 19
  20. 20. I/O representam problemas para a paralelizaçãoNem sempre a I/O pode ser feita de forma paralelaÉ preciso tomar cuidado com sobrescrita de dadosI/O sobre a rede tem vários gargalos e pode causarinconsistências (NFS)Existem sistemas de arquivos paralelos (Ex: Lustre,PVFS, GPFS, etc)Evite I/O!Quando for necessário é preferível minimizar o nr deoperações de escrita (pacotes grandes) 20
  21. 21. Speedup teórico 21
  22. 22. 22
  23. 23. Dicas finaisThe ability of a parallel programs performance toscale 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 causesperformance to decrease. Most parallel solutionsdemonstrate this characteristic at some point.Parallel support libraries and subsystems softwarecan limit scalability independent of your application. 23
  24. 24. Paralelismo é o futuro da computação?Até 2020, vários países (China, Índia, etc) querem ter um computador com 1 Exaflops 24
  25. 25. 25
  26. 26. Titan: 17.59 Petaflops 560640 processadores, sendo 261632 núcleos NVIDIA GPU 26
  27. 27. Leituras adicionais e referênciashttp://en.wikipedia.org/wiki/Parallel_computershttps://computing.llnl.gov/tutorials/parallel_comp/ 27

×