Programação Paralela para Arquiteturas Híbridas Com OpenMP, OpenACC e MPI

Calebe P. Bianchini, Gabriel P. Silva, Evaldo B. Costa

*Você terá acesso às futuras atualizações do livro.

Prefácio

“Parece provável que, uma vez iniciado o método de pensamento da máquina, não leve muito tempo para que superem nossa capacidade limitada… Elas seriam então capazes de conversar entre si para aguçar sua inteligência. Em algum momento, portanto, devemos esperar que as máquinas assumam o controle de tudo.” Alan Turing (1912-1954)

A evolução contínua do cenário computacional, impulsionada pela crescente complexidade dos desafios científicos e de engenharia, solidificou a programação paralela como habilidade essencial para os profissionais das áreas de computação. Atualmente, as arquiteturas de alto desempenho vão além dos tradicionais sistemas multiprocessadores com memória compartilhada ou clusters de memória distribuída, incorporando cada vez mais aceleradores de hardware, como as GPUs, com seu massivo poder de processamento paralelo.

As aplicações para essas arquiteturas paralelas são construídas com uso de interfaces de programação e bibliotecas associadas a linguagens de programação convencionais tais como C e FORTRAN, fazendo a utilização de plataformas de computação paralelas como clusters, sistemas multiprocessadores de memória compartilhada e aceleradores com alto poder computacional para formatar aplicações de alto desempenho.

A formação de recursos humanos especializados nesta área demanda um longo período de investimento e deve ser iniciada o mais cedo possível, já nos primeiros anos dos cursos de graduação, seja nos cursos de Engenharia da Computação, Ciência da Computação ou Engenharia de Software.

Este livro foi concebido para estudantes de graduação que já possuem um conhecimento básico em programação paralela, particularmente com os paradigmas de troca de mensagens (MPI) e memória compartilhada (OpenMP). Nosso objetivo é servir como guia seguro para os próximos passos, introduzindo conceitos e técnicas essenciais para programar de forma eficiente e produtiva em arquiteturas modernas e heterogêneas, com um foco especial no uso de aceleradores.

Partindo dos fundamentos de arquiteturas paralelas, este livro explora tópicos que expandem seu conhecimento inicial. Apresentamos o modelo de tarefas (tasks) do OpenMP, uma forma flexível de expressar paralelismo, detalhando suas diretivas e cláusulas. Aprofundamos na programação para aceleradores, abordando primeiramente o OpenMP offloading, que permite descarregar computação para dispositivos como GPUs usando diretivas e cláusulas para gerenciamento da movimentação de dados entre hospedeiro e acelerador. Em seguida, introduzimos conceitos de OpenACC avançado, outro padrão poderoso baseado em diretivas para programação em aceleradores, com uso de operações assíncronas e múltiplas GPUs.

Reconhecendo a realidade dos sistemas de alto desempenho modernos, que combinam nós de memória distribuída com processadores multicore e aceleradores, dedicamos uma seção essencial à Programação Híbrida com MPI. Exploramos como combinar MPI com OpenMP threads para otimizar o uso de recursos dentro dos nós, e, crucialmente, como integrar MPI com OpenMP offloading e OpenACC para explorar o paralelismo entre nós e, simultaneamente, aproveitar o poder das GPUs locais. Essa abordagem híbrida é fundamental para escalabilidade e alto desempenho em clusters contemporâneos.

Para facilitar o aprendizado, utilizamos a linguagem ‘C’ para apresentar exemplos simples, práticos e testados. Todos os códigos foram cuidadosamente elaborados e podem ser facilmente reproduzidos. O livro inclui estudos de caso e exercícios propostos ao final de cada capítulo para reforçar os conceitos. Neste livro, buscamos fornecer as ferramentas e o entendimento necessários para que você possa dar os próximos passos na programação paralela para arquiteturas com aceleradores e em ambientes híbridos.

Esperamos que esta obra seja um valioso recurso em sua jornada para dominar as técnicas de programação paralela avançada necessárias no mundo da computação de alto desempenho.

Rio de Janeiro, 27 de janeiro de 2026

Gabriel P. Silva

Calebe Bianchini

Evaldo B. Costa

Sumário

  • 1 Arquiteturas paralelas
    • 1.1 Introdução
    • 1.2 Classificação de Flynn
    • 1.3 Aceleradores
    • 1.4 Exercícios
  • 2 OpenMP tasks
    • 2.1 Introdução
    • 2.2 Tarefas
    • 2.3 Diretiva task
    • 2.4 Escopo das variáveis
    • 2.5 Diretiva barrier
    • 2.6 Diretiva taskwait
    • 2.7 Diretiva taskgroup
    • 2.8 Diretiva taskyield
    • 2.9 Diretiva taskloop
    • 2.10 Diretivas cancel e cancellation point
    • 2.11 Diretiva target
    • 2.12 Variáveis internas de controle
    • 2.13 Estudos de caso
    • 2.14 Exercícios
  • 3 OpenMP para aceleradores
    • 3.1 Introdução
    • 3.2 Diretiva target
    • 3.3 Diretiva target data
    • 3.4 Diretivas target enter data, target exit data e target update
    • 3.5 Diretiva teams
    • 3.6 Diretiva distribute
    • 3.7 Diretiva parallel for
    • 3.8 Diretiva simd
    • 3.9 Funções OpenMP para offloading
    • 3.10 Estudos de caso
    • 3.11 Exercícios
  • 4 OpenACC
    • 4.1 Introdução
    • 4.2 Níveis de paralelismo do OpenACC
    • 4.3 Movimentação de dados
    • 4.4 Diretivas e cláusulas avançadas
    • 4.5 Operações assíncronas
    • 4.6 Programação multi-GPUs com OpenACC
    • 4.7 Variáveis de ambiente
    • 4.8 Estudos de caso
    • 4.9 Exercícios
  • 5 Programação Híbrida com MPI
    • 5.1 Introdução
    • 5.2 MPI + OpenMP threads
    • 5.3 MPI + OpenMP offloading para GPU
    • 5.4 Programação Híbrida com MPI + OpenACC
    • 5.5 Exercícios
  • Referências

Dados do produto

Número de páginas:
222
ISBN:
978-85-5519-433-7
Data publicação:
07/2026

Compartilhe!

Compartilhe no Facebook Compartilhe no Twitter

*Você terá acesso às futuras atualizações do livro.