programação em memória compartilhada com...

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

Upload: others

Post on 27-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

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