IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Programação em Memória Compartilhada comOpenMP
Esbel Tomás Valero Orellana
Bacharelado em Ciência da ComputaçãoDepartamento de Ciências Exatas e Tecnológicas
Universidade Estadual de Santa [email protected]
25 de Maio de 2010
Introdução ao OpenMP 1 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Conteúdo
1 Introdução
2 Diretivas em OpenMP
3 Meu primeiro programa
Introdução ao OpenMP 2 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Conteúdo
1 Introdução
2 Diretivas em OpenMP
3 Meu primeiro programa
Introdução ao OpenMP 3 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Técnicas de programação em MC
Programas construídos para um modelo de programação
de memória compartilhada precisam de ferramentas que
englobem:
técnicas para criação e manipulação de threads,
mecanismos de sincronização entre as threads,
recursos para manipulação de memória compartilhada.
Processos vs Threads?
Introdução ao OpenMP 4 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Técnicas de programação em MC
As ferramentas mais comuns para ambientes de memóriacompartilhada são baseadas em:
Threading explícitoDiretivas de Compilação (threading implícito)Troca de mensagensLinguagens paralelas
Threading explícito: O programador cria explicitamentemúltiplas threads dentro de um mesmo processo e dividetambém explicitamente o trabalho a ser realizado.
Posix ThreadsWin32 ThreadsAlgumas linguagens de alto nível
Introdução ao OpenMP 5 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Técnicas de programação em MC
Diretivas de compilação: O programador utiliza diretivasde compilação, que são inseridas no código seqüencial,para informar ao compilador as regiões que devem ser pa-ralelizadas.
OpenMP
Troca de mensagens: A comunicação via troca de men-sagem também é utilizada como técnica para programaçãoem ambientes de memória compartilhada.
MPI
Linguagens paralelas: Linguagens de alto nível criadasou estendidas para trabalhar com esse modelo de progra-mação.
HPF - High Performance Fortran
Introdução ao OpenMP 6 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
OpenMP
O que significa OpenMP:
Open specifications for Multi Processing via collaborativework between interested parties from the hardware and soft-ware industry, goverment and academia.
Open + MP = Padrão aberto + Maquinas multiprocessadas
O que é o OpenMP:
Um modelo de programação em memória compartilhadaque nasceu da cooperação de grandes fabricantes de hard-ware e software (Sun, Intel, Fujitsu, SGI, AMD, HP, IBM,PGI, KAI, ...)
Definida para ser utilizada em programas C\C++ e Fortran,
Introdução ao OpenMP 7 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
OpenMP
O que é o OpenMP...
Desenvolvido e mantido pelo grupo OpenMP ARB (Archi-
tecture Review Board),
É uma API para programação paralela em arquiteturas multi-
processadas,
Permite a criação de programas paralelos com comparti-
lhamento de memória, através da criação automática e oti-
mizada de um conjunto de threads,
Introdução ao OpenMP 8 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
OpenMP
O que é o OpenMP...
OpenMP não é uma linguagem de programação,
É um padrão que define como os compiladores devem ge-
rar códigos paralelos através de diretivas e funções,
Implementação 6= Especificação,
O “resultado” depende do compilador utilizado,
http://www.openmp.org
Introdução ao OpenMP 9 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Cronologia
Fortran versão 1.0, Outubro de 1997
C\C++ versão 1.0, Outubro de 1998
Fortran versão 1.1, Novembro de 1999
Fortran versão 2.0, Novembro de 2000
C\C++ versão 2.0, Março de 2002
C\C++ e Fortran versão 2.5, Maio de 2005 (unificado)
C\C++ e Fortran versão 3.0, Maio de 2008
Introdução ao OpenMP 10 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Objetivos do OpenMP
Ser o standard de programação para arquiteturas de me-
mória compartilhada,
Estabelecer um conjunto muito simples e limitado de direti-
vas de programação,
Permitir a paralelização incremental de programas seqüen-
ciais,
Conseguir implementações eficientes em problemas de gra-
nularidade fina, média e grossa.
Introdução ao OpenMP 11 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Componentes do OpenMP
Introdução ao OpenMP 12 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Modelo de programação do OpenMP
Paralelismo explícito
Multi-thread implícito
Paralelismo explícito
Cabe ao programador identificar as tarefas para execução
em paralelo e definir os pontos de sincronização,
Essas operações são feitas utilizando diretivas de compila-
ção embebidas no código do programa.
Introdução ao OpenMP 13 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Modelo de programação do OpenMP
Paralelismo explícito
Multi-thread implícito
Paralelismo explícito
Cabe ao programador identificar as tarefas para execução
em paralelo e definir os pontos de sincronização,
Essas operações são feitas utilizando diretivas de compila-
ção embebidas no código do programa.
Introdução ao OpenMP 13 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Modelo de programação do OpenMP
Multi-thread implícito:Um processo é visto como um conjunto de threads que secomunicam entre através da utilização de variáveis compar-tilhadas,A criação, iniciação e finalização das threads é feita peloambiente de execução de ocultando os detalhes do progra-mador,O espaço de endereçamento global é compartilhado por to-dos os threads,As variáveis podem ser compartilhadas ou privadas (dupli-cadas) para cada thread,O controle, manuseio e sincronização das variáveis envolvi-das nas tarefas paralelas é transparente ao programador.
Introdução ao OpenMP 14 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Modelo de execução do OpenMP
Modelo de execução Fork-Join
Todos os programas iniciam sua execução com um processo, omaster thread,
O master thread executa seqüencialmente até encontrar um cons-trutor paralelo, momento em que cria um grupo de threads,
O código delimitado pelo construtor paralelo é executado em pa-ralelo pelo master thread e pelo grupo de threads,
Ao completarem a execução paralela o grupo de threads sincro-niza uma barreira implícita com o master thread,
O grupo de threads termina a sua execução e o master threadcontinua a executar seqüencialmente até encontrar um novo cons-trutor paralelo.
Introdução ao OpenMP 15 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Modelo de execução do OpenMP
Modelo de execução Fork-Join
Introdução ao OpenMP 16 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Estrutura de um programa OpenMP
Introdução ao OpenMP 17 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Compiladores com suporte a OpenMP
Compilador Distribuidor Informações
XL IBM Proprietário, SO: Windows e Li-
nux
SC Sun Microsystems Proprietário, Sun studio compi-
ladores e ferramentas, download
gratuito para Linux e Solaris
ICC Intel Propietário, SO: Windows, Linux
e MacOS
gcc (4.3.2) GNULivre de código aberto, SO: Linux,
Windows, Solaris, MacOS
Introdução ao OpenMP 18 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Vantagens do OpenMP
Facilidade de conversão de programas seqüenciais em pa-
ralelos,
Maneira simples de explorar o paralelismo,
Fácil compreensão e uso das diretivas,
Minimiza a interferência na estrutura do algoritmo,
Compila e executa em ambientes paralelo e seqüencial.
Introdução ao OpenMP 19 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
OpenMP e arquiteturas multicore
Arquiteturas multicore,
Fraco desempenho das aplicações atuais em arquiteturas
multicore,
Incremento do número de núcleos,
Aplicações eficientes em processadores multicore devem
utilizar intensivamente o conceito de threads.
Introdução ao OpenMP 20 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Conteúdo
1 Introdução
2 Diretivas em OpenMP
3 Meu primeiro programa
Introdução ao OpenMP 21 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Diretivas de compilação em OpenMP
Diretivas são linhas de código com significado “especial”
para o compilador;
#pragma omp, indica ao compilador a presença de uma
diretiva de compilação, sinalizando que deverá dar criar có-
digo paralelo otimizado para o ambiente OpenMP;
diretive, deverá ser uma diretiva válida de OpenMP;
clause, representa um conjunto de parâmetros e informa-
ções a serem aplicados a essa diretiva, (opcional).
Introdução ao OpenMP 22 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Diretivas de compilação em OpenMP
As diretivas se aplicam a blocos sintáticos,
Bloco sintático composto
Bloco sintático simples
Introdução ao OpenMP 23 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Diretivas de compilação em OpenMP
Diretivas Clausulas: Definem o compor-tamento das regiões paralelase das variáveis aos quais estãoassociadas.
Introdução ao OpenMP 24 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Compilação condicional
Quando um código que contém diretivas do OpenMP é com-
pilado por um compilador que não suporta o OpenMP este
simplesmente ignora as diretivas e compila o programa de
forma seqüencial,
Entretanto, se o código conter chamadas a funções do Open-
MP teremos erros de compilação,
Para escrever código que funcione com e sem OpenMP
devemos utilizar a compilação condicional.
Introdução ao OpenMP 25 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Compilação condicional
Para termos compilação um código robusto devemos pro-teger as chamadas a funções do OpenMP com a diretiva#ifdef _OpenMP,
A macro _OpenMP esta definida se a biblioteca do OpenMPestiver disponível,
Exemplo
Introdução ao OpenMP 26 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Conteúdo
1 Introdução
2 Diretivas em OpenMP
3 Meu primeiro programa
Introdução ao OpenMP 27 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Hello word!!!
Introdução ao OpenMP 28 / 29
IntroduçãoDiretivas em OpenMP
Meu primeiro programa
Atividades
1 Compile e execute o programa anterior, comente sobre a
saída.
2 Modifique a diretiva #pragma omp paralell para #pragma
omp paralell num_threads(4), compile e execute no-
vamente, comente o resultado.
3 Visite a página http://www.openmp.org.
Introdução ao OpenMP 29 / 29