OpenMP tem sido o padrão de fato para a programação em memória compartilhada. No entanto, a maioria dos programadores explora apenas o paralelismo de laços, deixando de usar novos e outros recursos disponíveis nas versões mais recentes da especificação de OpenMP (3, 4 e 5). Com isso, outras abordagens paralelas não tem sido tão difundidas. Além disso, disparar tarefas em CPU e GPU usando uma única interface de programação é um grande atrativo para a paralelização de aplicações. Neste contexto, este capítulo tem como objetivo aprofundar a programação paralela em aplicações, com recursos considerados avançados de OpenMP, geralmente não adotados ou vistos nas disciplinas introdutórias de programação paralela. Para tanto, são apresentadas técnicas de exploração do paralelismo disponibilizado pelas diretivas de execução concorrente de OpenMP em diferentes trechos de código de duas aplicações científicas.