Uma das motivações para o desenvolvimento de programas paralelos é acelerar aplicações científicas. Aplicações deste tipo geralmente demandam de um grande tempo de computação para uma versão com um único fluxo de execução, o que pode levar minutos, horas ou até mesmo dias, dependendo do tamanho do domínio ou resolução do problema adotado. Uma das maneiras de gerar paralelismo a partir de um código é inserir diretivas (pragmas), os quais geram fluxos concorrentes de código, que podem ser executados tanto em arquiteturas multi-core como many-core. Neste sentido, este minicurso tem como objetivo apresentar técnicas de exploração de paralelismo em diferentes trechos de código para um conjunto de aplicações científicas usando as interfaces de programação OpenMP e OpenACC. Serão demonstrados exemplos reais do impacto do uso de pragmas no desempenho de códigos, incluindo situações em que a granularidade impede que se obtenha a aceleração do programa. 5.1. Introdução Este Capítulo aborda a prática de programação com diretivas paralelos. Diretivas de précompilação possibilitam a geração de código específico e automatizado. Inicialmente serão vistos alguns conceitos sobre as arquiteturas de programação Multi-core e GPUs. Na sequência também serão introduzidas as interfaces de programação OpenMP e Ope-nACC, apresentando a estrutura e organização de suas diretivas. Por fim, serão mostrados os códigos-fonte de 2 aplicações científicas, destacando o objetivo de cada uma, bem como as funcionalidades existentes. A partir disso, uma avaliação do custo sequencial de cada função ou rotina de código será então realizada. Trechos de código previamente selecionados serão indicados para que abordagens de paralelização sejam utilizadas, avaliando o impacto na aceleração da aplicação. Com isso, o objetivo é testar e validar diretivas que possam reduzir o tempo total de execução da aplicação.