30
Introdução Diretivas em OpenMP Meu primeiro programa Programação em Memória Compartilhada com OpenMP Esbel Tomás Valero Orellana Bacharelado em Ciência da Computação Departamento de Ciências Exatas e Tecnológicas Universidade Estadual de Santa Cruz [email protected] 25 de Maio de 2010 Introdução ao OpenMP 1 / 29

Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 2: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 3: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 4: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 5: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 6: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 7: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 8: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 9: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 10: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 11: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 12: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

IntroduçãoDiretivas em OpenMP

Meu primeiro programa

Componentes do OpenMP

Introdução ao OpenMP 12 / 29

Page 13: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 14: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 15: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 16: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 17: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 18: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

IntroduçãoDiretivas em OpenMP

Meu primeiro programa

Estrutura de um programa OpenMP

Introdução ao OpenMP 17 / 29

Page 19: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 20: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 21: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 22: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 23: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 24: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 25: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 26: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 27: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 28: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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

Page 29: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

IntroduçãoDiretivas em OpenMP

Meu primeiro programa

Hello word!!!

Introdução ao OpenMP 28 / 29

Page 30: Programação em Memória Compartilhada com OpenMPnbcgib.uesc.br/nbcgib/files/PP/Aula05_OpenMP.pdf · 2013-04-12 · Ao completarem a execução paralela o grupo de threads sincro-niza

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