Computação de Alto Desempenho: você conhece esta área?

Computação de Alto Desempenho: você conhece esta área?

Computação de Alto Desempenho (CAD), do inglês High-Performance Computing (HPC), é uma área da computação que visa aplicar diferentes técnicas para atingir alto desempenho em aplicações paralelas e distribuídas, além de monitorar o desempenho de aplicações e dos sistemas computacionais disponíveis com foco em supercomputadores.

Neste artigo, vamos te contar um pouco mais sobre o que é, conhecimentos básicos necessários, tecnologias utilizadas e algumas dicas de materiais técnicos para aprender mais sobre.

Supercomputadores são máquinas super poderosas com diversos nós computacionais e processadores com múltiplos cores que vão poder atingir um desempenho extremamente alto, hoje na casa de exaflops (simplesmente 10¹⁸ operações de ponto flutuante por segundo).

Uma área multidisciplinar

Computação de Alto Desempenho é uma área que avança muito rápido! Novos problemas, aplicações e sistemas a serem otimizados surgem a todo momento. A parte mais legal da área é que ela pode lidar com aplicações em diferentes campos de pesquisa como geologia, astronomia, física, e medicina.

Um exemplo é o COVID-19 HPC Consortium, que juntou esforços de diversas instituições públicas e privadas para compartilhamento de seus supercomputadores para execução de aplicações relacionadas a pesquisas sobre a pandemia.

A área é uma mistura de hardware e software. O profissional em CAD pode trabalhar com o design de processadores e memórias, com o design de programas escalonadores de processos, com programação paralela e distribuída e com avaliação de desempenho.

Conhecimentos básicos

Além de ser uma pessoa muito curiosa, visto todo o constante avanço na área, você precisará de conhecimento de alguns conceitos técnicos. Caso você venha de um background em computação, saiba que várias das aulas que você teve na graduação serão úteis como conhecimento base na área:

  • Sistemas operacionais: sim, você vai precisar ser mais do que apenas usuário(a) de um sistema operacional. Usar o terminal/prompt de comando fará parte do seu dia-a-dia. Entender a estrutura de seu sistema, uso de recursos, e sistemas de arquivos, por exemplo, vai te ajudar na avaliação de desempenho de suas aplicações.
  • Arquitetura de computadores: entender como funciona o processamento de instruções em seu computador, as diferentes arquiteturas existentes e os seus impactos nas suas aplicações será essencial.
  • Redes de computadores: entender os modelos e topologia da rede utilizada vai te dar base para entender o impacto de processos executando em sistemas distribuídos.
  • Estatística: será utilizada para avaliar o desempenho de seus experimentos e investigações.
  • Programação: conhecimento em algoritmos, complexidade de algoritmos, e estruturas de dados.

Tecnologias usadas no dia-a-dia

São diversos os caminhos dentro deste campo, mas gostaria de compartilhar com vocês algumas das ferramentas que utilizo diariamente como pesquisadora na área há 3 anos:

  • Linguagens de programação: a linguagem de programação mais popular para implementar programas paralelos é o C/C++ devido ao suporte de diferentes modelos de programação para sistemas paralelos e distribuídos que vão facilitar a paralelização de seu código. Por exemplo: MPI e OpenMP para CPUs, OpenACC e CUDA para GPUs.
  • Scripts: muitos! Essa é a minha parte favorita: poder modelar como será feita a execução de meus experimentos e automatizar tarefas. No começo você pode sentir que vai usar mais tempo desenvolvendo o script do que se fosse executar seus 10 experimentos manualmente (sempre lembro dessa tirinha do xkcd), mas depois você pega o jeito.
  • Rastreadores e perfis de execução: diversas ferramentas podem te ajudar a monitorar o desempenho de seus experimentos, como rastreadores de perfil de execução e profilers, que trazem resumos sobre o desempenho de sua aplicação.
  • Git: versionamento de código é essencial em quase todas as áreas de computação. Para você não perder o controle de seus avanços, poder documentar e gerar projetos colaborativamente de forma mais fácil, use git em todos seus projetos.
  • Ferramentas de Data Science: Por fim, muito código para poder analisar estatisticamente todos os resultados coletados. Eu uso R e Python para análise de dados e geração de gráficos. Uma ferramenta bastante popular para visualização de dados e monitoramento de sistemas hoje é o Grafana.

Aprenda CAD na prática

Tem mais dúvidas sobre Computação de Alto Desempenho? Vou ficar feliz em continuar com esta troca nos comentários do post.