Programação em Memória Compartilhada com...
Transcript of Programação em Memória Compartilhada com...
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