MiniCurso Programação Paralela com OpenMP - SACTA 2013
-
Upload
arthur-francisco-lorenzon -
Category
Documents
-
view
817 -
download
1
Transcript of MiniCurso Programação Paralela com OpenMP - SACTA 2013
![Page 1: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/1.jpg)
Mini Curso: Programação Paralela utilizando OpenMP
Arthur F. Lorenzon Antonio Carlos S. B. F.
Henrique O. GresslerMárcia C. Cera
![Page 2: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/2.jpg)
2
Quem somos...
● Arthur Francisco Lorenzon:
● Bacharel em CC pela UNIPAMPA
● Aluno do PPGC/UFRGS
● Integrante do Laboratório de Sistemas Embarcados – UFRGS
● Henrique de Oliveira Gressler
● Márcia Cristina Cera
● Antonio Carlos S. B. Filho
![Page 3: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/3.jpg)
3
Quem somos...
● Arthur Francisco Lorenzon
● Henrique de Oliveira Gressler:
● Bacharel em Ciência da Computação pela UNIPAMPA
● Márcia Cristina Cera
● Antonio Carlos S. B. Filho
![Page 4: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/4.jpg)
4
Quem somos...
● Arthur Francisco Lorenzon
● Henrique de Oliveira Gressler
● Márcia Cristina Cera:
● Doutorado em Computação pela UFRGS
● Professora Adjunta da UNIPAMPA
● Pesquisadora da área de PPD
● Antonio Carlos S. B. Filho
![Page 5: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/5.jpg)
5
Quem somos...
● Arthur Francisco Lorenzon
● Henrique de Oliveira Gressler
● Márcia Cristina Cera
● Antonio Carlos S. B. Filho:
● Pós-Doutorado em Computação – UFRGS
● Professor Adjunto da UFRGS
● Bolsista de Produtividade em Pesquisa do CNPq – Nível 2
![Page 6: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/6.jpg)
6
Experiência dos Palestrantes...
● Diversas aplicações paralelizadas utilizando OpenMP
● Diversos trabalhos publicados utilizando OpenMP
● Participação em eventos/grupos de pesquisa:
● Maratona de Programação Paralela – Petrópolis/RJ 2012
● Grupo de Estudos para Maratonas de Prog. Paralela – GEMPP
● Trabalho de Conclusão de Curso
![Page 7: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/7.jpg)
7
Objetivos deste Mini-Curso
● Programação Paralela
● Técnicas de Programação Paralela com OpenMP
● Teoria
● Prática
● Desafios Futuros para a área de PPD
![Page 8: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/8.jpg)
8
Roteiro
● Evolução dos Microprocessadores
● Cenário Atual
● Programar Paralelo, Porque? Onde? Como?
● OpenMP:
● Noções Básicas
● Paralelismo de Laços
● Paralelismo de Seções
● Diretivas de Sincronização
● Desafios Futuros
![Page 9: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/9.jpg)
9
Evolução dos Microprocessadores
![Page 10: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/10.jpg)
10
Evolução dos Microprocessadores
Sobreposição na execução de etapas da instrução
IF ID EX ME WBIF ID EX ME WB
IF ID EX ME WB
![Page 11: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/11.jpg)
11
Evolução dos Microprocessadores
Múltiplas Unidades FuncionaisHardware: SuperscalarSoftware: VLIW
![Page 12: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/12.jpg)
12
Evolução dos Microprocessadores
Melhora do desempenho utilizando técnicas de computação paralela!
![Page 13: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/13.jpg)
13
Evolução dos Microprocessadores
Preocupação com gerenciamento de energia!!!
![Page 14: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/14.jpg)
14
Evolução dos Microprocessadores
Paralelismo no Nível de ThreadAumento da Performance
![Page 15: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/15.jpg)
15
Arquiteturas Multi-Core
● De forma simplificada um processador multi-core é colocar dois ou mais processadores num mesmo processador/chip.
● Trabalho de processsamento ficará dividido entre os cores.
CPU 0 CPU 1
![Page 16: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/16.jpg)
16
Arquiteturas Multi-Core
● De forma simplificada um processador multi-core é colocar dois ou mais processadores num mesmo processador/chip.
● Trabalho de processsamento ficará dividido entre os cores.
CPU 0 CPU 1
![Page 17: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/17.jpg)
17
Arquiteturas Multi-Core
● De forma simplificada um processador multi-core é colocar dois ou mais processadores num mesmo processador/chip.
● Trabalho de processsamento ficará dividido entre os cores.
CPU 0 CPU 1
![Page 18: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/18.jpg)
18
Programação Paralela
“Programação Paralela é a capacidade de dividirmos
uma carga de trabalho entre vários processadores
dinamicamente e de forma eficiente!”
![Page 19: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/19.jpg)
19
O que paralelizar?
● Previsão do tempo e do clima
● Cálculos matemáticos
● Processamento de imagens
● Simuladores
● Componentes de Jogos*
![Page 20: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/20.jpg)
20
Porque Paralelizar?
● Processamento simultâneo de diversas tarefas
● Melhorar aproveitamento do hardware – ciclos ociosos
● Aumentar o desempenho da CPU
● Aplicações mais rápidas e eficientes – Redução do tempo de computação
![Page 21: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/21.jpg)
21
Cenário Atual
Arquiteturas Multicore
Ferramentas
Motivos
Aplicações
Prós Contra
![Page 22: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/22.jpg)
22
Cenário Atual
Arquiteturas Multicore
Ferramentas
Motivos
Aplicações
Prós Contra
Pensamento e ProgramaçãoSequencial
![Page 23: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/23.jpg)
23
Programar Paralelo é Díficil?
![Page 24: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/24.jpg)
24
Identificando Oportunidades de Paralelismo
● Estudar a aplicação:
● Tempo de execução● Ferramentas de geração de profile● Avaliar potênciais funções e loops
● Identificar tarefas que possam ser executadas concorrentemente
● Definir a maneira mais eficiente de paraleliza-lá
● Obter um código paralelo ideal pode levar horas, dias, semanas e até meses
![Page 25: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/25.jpg)
25
1. Preparar a tinta = 30 s;
2. Pintar 300 estacas = 3000 s;
3. Aguardar tinta secar = 30 s;
Quanto tempo levará um pintor?
Exemplo
![Page 26: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/26.jpg)
26
1. Preparar a tinta = 30 s;
2. Pintar 300 estacas = 3000 s;
3. Aguardar tinta secar = 30 s;
Quanto tempo levará um pintor?
Exemplo
3060 s
![Page 27: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/27.jpg)
27
1. Preparar a tinta = 30 s;
2. Pintar 300 estacas = 3000 s;
3. Aguardar tinta secar = 30 s;
Quanto tempo levará um pintor?
Exemplo
3060 s
1530 s 1560 s
Quanto tempo levarão dois pintores?
![Page 28: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/28.jpg)
28
1. Preparar a tinta = 30 s;
2. Pintar 300 estacas = 3000 s;
3. Aguardar tinta secar = 30 s;
Quanto tempo levará um pintor?
Exemplo
3060 s
1530 s 1560 s
Quanto tempo levarão dois pintores?
![Page 29: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/29.jpg)
29
Exemplo
● Sempre existirão partes sequenciais em um programa!
1. Preparar a tinta
2. Pintar 300 estacas
3. Aguardar tinta secar
Região Paralela
Região Sequencial
Região Sequencial
![Page 30: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/30.jpg)
30
Exemplo
● Sempre existirão partes sequenciais em um programa!
1. Preparar a tinta
2. Pintar 300 estacas
3. Aguardar tinta secar
Região Paralela
Região Sequencial
Região Sequencial
Pintar 150
Secar a tinta
Preparar a tinta
Pintar 150Pintar 300
Secar a tinta
Preparar a tinta
Tempo
Sequencial:
Tempo
Paralelo:
![Page 31: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/31.jpg)
31
Modelos de Programação Paralela
Memória Distribuída Memória Compartilhada
![Page 32: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/32.jpg)
32
● Open Multi-Processing
● Teve início por volta de 1997
● Padrão que define como os compiladores devem gerar códigos paralelos através de diretivas e funções. (Não é linguagem!)
● Disponível para Fortran 77, Fortran 90, C e C++
● Baseia-se na criação de várias threads que compartilham o mesmo recurso de memória
● Regiões Privadas
● Regiões Compartilhadas
Noções Básicas de OpenMP
![Page 33: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/33.jpg)
33
● Open Multi-Processing
● Teve início por volta de 1997
● Padrão que define como os compiladores devem gerar códigos paralelos através de diretivas e funções. (Não é linguagem!)
● Disponível para Fortran 77, Fortran 90, C e C++
● Baseia-se na criação de várias threads que compartilham o mesmo recurso de memória
● Regiões Privadas
● Regiões Compartilhadas
Noções Básicas de OpenMP
![Page 34: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/34.jpg)
34
● Facilidade de conversão de programas seqüenciais em paralelos
● Fácil compreensão e uso das diretivas
● Minimiza a interferência na estrutura do algoritmo
● Compila e executa em ambientes paralelo e sequencial
● Maneira simples de explorar o paralelismo
Noções Básicas de OpenMP
![Page 35: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/35.jpg)
35
● Facilidade de conversão de programas seqüenciais em paralelos
● Fácil compreensão e uso das diretivas
● Minimiza a interferência na estrutura do algoritmo
● Compila e executa em ambientes paralelo e sequencial
● Maneira simples de explorar o paralelismo
Noções Básicas de OpenMP
!!! CUIDADO !!!
OpenMP é simples, mas demanda conhecimento: - Aplicação - Arquitetura - Melhor “opção” de paralelismo
![Page 36: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/36.jpg)
36
Modelo de Programação
![Page 37: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/37.jpg)
37
Elementos do OpenMP
#pragma omp diretiva [cláusula]
omp_serviço(...)OMP_NOME
![Page 38: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/38.jpg)
38
● Consiste em uma linha de código com significado especial para o compilador.
● Identificadas pelo #pragma omp
● Formato padrão:
#pragma omp nome_diretiva [cláusula,...] novaLinha
● Inclusão header: “omp.h”
Diretivas de Compilação
Construtor ParaleloConstrutores de Compartilhamento de Trabalho
Diretivas de Sincronização
![Page 39: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/39.jpg)
39
● Diretiva mais importante do OpenMP
● Informa ao compilador a área que deverá ser executada em paralelo
Construtor Paralelo
#include <omp.h>int main(){
#pragma omp parallel{printf(“Ola Mundo\n”);
}}
if, private, shared, firstprivate, default,
copyin, reduction num_threads
![Page 40: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/40.jpg)
40
● Exemplos:● www.inf.ufrgs.br/~aflorenzon/curso_OpenMP/
● gcc nome_programa.c -o nome_saida -fopenmp
● hello.c e exemplo1.c
Construtor Paralelo
#include <omp.h>int main(){
#pragma omp parallel{
for(i=0;i<n;i++)a[i] = b[i]+c[i];
}}
![Page 41: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/41.jpg)
41
● Exemplos:● www.inf.ufrgs.br/~aflorenzon/curso_OpenMP/
● gcc nome_programa.c -o nome_saida -fopenmp
● hello.c e exemplo1.c
Construtor Paralelo
#include <omp.h>int main(){
#pragma omp parallel{
for(i=0;i<n;i++)a[i] = b[i]+c[i];
}}
O que há de errado com o código ao lado?
![Page 42: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/42.jpg)
42
● Exemplos:● www.inf.ufrgs.br/~aflorenzon/curso_OpenMP/
● gcc nome_programa.c -o nome_saida -fopenmp
● hello.c e exemplo1.c
Construtor Paralelo
#include <omp.h>int main(){
#pragma omp parallel{
for(i=0;i<n;i++)a[i] = b[i]+c[i];
}}
O que há de errado com o código ao lado?
Variáveis compartilhadas entre todas as
threads, por padrão!
![Page 43: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/43.jpg)
43
● Exemplos:● www.inf.ufrgs.br/~aflorenzon/curso_OpenMP/
● gcc nome_programa.c -o nome_saida -fopenmp
● hello.c e exemplo1.c
Construtor Paralelo
#include <omp.h>int main(){
#pragma omp parallel private(i){
for(i=0;i<n;i++)a[i] = b[i]+c[i];
}}
Variáveis de controlede laço devem ser
privadas à cada thread!
![Page 44: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/44.jpg)
44
● Construtor de Compartilhamento de Trabalho:
● Responsáveis pela distribuição de trabalho entre as threads e determinam como o trabalho será dividido entre as threads.
● Necessariamente interna a uma região paralela.
#pragma omp construtor[clausula [clausula] …]
– #pragma omp for
– #pragma omp sections
– #pragma omp single
Construtor Paralelo
![Page 45: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/45.jpg)
45
● #pragma omp for
– Iterações dos laços for são executadas em paralelo.
– Número de iterações deve ser previamente conhecido e não possui variação durante a execução – (while).
– Implementa SIMD (Single Instruction Multiple Data).
Construtor de Trabalho
![Page 46: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/46.jpg)
46
● #pragma omp for
– Iterações dos laços for são executadas em paralelo.
– Número de iterações deve ser previamente conhecido e não possui variação durante a execução – (while).
– Implementa SIMD (Single Instruction Multiple Data).
Construtor de Trabalho
#include <omp.h>int main(){
#pragma omp parallel private(i){ #pragma omp for
for(i=0;i<n;i++) a[i] = b[i]+c[i];
}}
Ex: ex_omp_for_1.c
![Page 47: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/47.jpg)
47
● #pragma omp for
– Schedulers alteram a forma como as iterações do loop são distribuídas entre as threads
– #pragma omp for schedule (name_schedule, chunk)
– Guided, Dynamic, Static and Runtime
Construtor de Trabalho
![Page 48: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/48.jpg)
48
● Cláusula schedule:
Construtores de Trabalho
Ex: ex_omp_for_static.c
ex_omp_for_dynamic.cex_omp_for_guided.c
![Page 49: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/49.jpg)
49
Intervalo
● Nos vemos novamente as 21:00 hs para a segunda etapa do curso!
● OpenMP Sections
● Diretivas de Sincronização
● Desafios Futuros
● Considerações Finais
![Page 50: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/50.jpg)
50
● #pragma omp sections
– Utilizado para dividir tarefas entre as threads em blocos de códigos que não possuem iterações.
Construtor de Trabalho
#include <omp.h>int main(){
#pragma omp parallel {
#pragma omp sections{
#pragma omp sectioninstrução
#pragma omp sectioninstruçao
}}
}
![Page 51: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/51.jpg)
51
● #pragma omp sections
– Utilizado para dividir tarefas entre as threads em blocos de códigos que não possuem iterações.
Construtor de Trabalho
#include <omp.h>int main(){
#pragma omp parallel {
#pragma omp sections{
#pragma omp sectioninstrução
#pragma omp sectioninstruçao
}}
}
Região paralela
Indica que cada thread irá executar um bloco
de instruções diferentes
Qual instrução que cadathread irá executar
Fim região paralela
![Page 52: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/52.jpg)
52
● #pragma omp sections
– Manter coerência entre número de blocos x número de threads– Mais blocos → algumas threads irão executar mais de um bloco– Mais threads → algumas threads ficarão ociosas– Apenas uma thread → execução seqüencial– Implementa MIMD (Multiple Instructions Multiple Data)
Construtor de Trabalho
Serial Paralelo
![Page 53: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/53.jpg)
53
● #pragma omp sections
Construtor de Trabalho
#include <omp.h>int main(){
#pragma omp parallel {
#pragma omp sections{
#pragma omp sectionsoma_vet(a,b,c);
#pragma omp sectionmult_vet(a,b,d);
#pragma omp sectiondiv_vet(a,b,e);
#pragma omp sectionsub_vet(a,b,f);
}}
}
Ex1: ex_omp_sections.cEx1: ex_omp_sections.c
![Page 54: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/54.jpg)
54
● #pragma omp sections
Construtor de Trabalho
#include <omp.h>int main(){
#pragma omp parallel {
#pragma omp sections{
#pragma omp sectionsoma_vet(a,b,c);
#pragma omp sectionmult_vet(a,b,d);
#pragma omp sectiondiv_vet(a,b,e);
#pragma omp sectionsub_vet(a,b,f);
}}
}
Ex1: ex_omp_sections.cEx1: ex_omp_sections.c
Ex1: ex_omp_sections.cEx2: ex_omp_sections_2.c./ex_omp_sections_2 numero_threads
Ex1: ex_omp_sections.comp_set_num_threads(NUM)
![Page 55: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/55.jpg)
55
● #pragma omp single
● Trecho de código será executado apenas por uma thread
● Demais threads aguardam em uma barreira implícita
Construtor de Trabalho
#include <omp.h>int main(){
#pragma omp parallel {
#pragma omp singleprintf(“Inicio região paralela\n”);
#pragma omp for…
}}
![Page 56: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/56.jpg)
56
● Primeiro devemos entender o que são “condições de corrida”
● Quando duas ou mais threads tentam atualizar, ao mesmo tempo, uma mesma variável
● Quando uma thread atualiza uma variável e outra acesso o valor ao mesmo tempo
● Quando isto acontece, o resultado tende a ser incorreto!
Diretivas de Sincronização
![Page 57: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/57.jpg)
57
● Primeiro devemos entender o que são “condições de corrida”
● Quando duas ou mais threads tentam atualizar, ao mesmo tempo, uma mesma variável
● Quando uma thread atualiza uma variável e outra acesso o valor ao mesmo tempo
● Quando isto acontece, o resultado tende a ser incorreto!
Diretivas de Sincronização
Diretivas de sincronização garantem que o acesso ou atualização de uma determinada variável
Compartilhada aconteça no momento certo
![Page 58: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/58.jpg)
58
● Construtores:
● Critical:
– Restringe a execução de uma determinada tarefa a apenas uma thread por vez
● Atomic
● Barrier
Diretivas de Sincronização
![Page 59: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/59.jpg)
59
● Construtores:
● Critical:
– Restringe a execução de uma determinada tarefa a apenas uma thread por vez
● Atomic:
– Um local específico da memória deve ser atualizado atomicamente, ao invés de deixar várias threads tentarem escrever nele
– Em essência, esta directiva prevê uma seção mini-critical.
● Barrier
Diretivas de Sincronização
![Page 60: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/60.jpg)
60
● Construtores:
● Critical
● Atomic
● Barrier:
– Utilizada para sincronizar todas as threads em um determinado ponto do código
Diretivas de Sincronização
![Page 61: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/61.jpg)
61
● Classificadas em:
● Funções de ambiente de execução
● Funções de bloqueio
● Funções de tempo
Funções de Interface
![Page 62: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/62.jpg)
62
● Paralelismo utilizando tasks!
● Utilizado para paralelizar algoritmos irregulares:
● Recursividade
● Repetições utilizando While
● Exemplos de aplicações:
● Algoritmos de ordenação → Merge sort, Quick sort...
● Manipulação de ponteiros → Listas
OpenMP Avançado
![Page 63: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/63.jpg)
63
● #pragma omp task
● Interna a uma região paralela
● Thread que executar o #pragma omp task criará uma nova task
OpenMP Avançado
#include <omp.h>int main(){
#pragma omp parallel {
#pragma omp single nowaitsort();
}}
void sort(){….for(i=0;i<N;i++){
#pragma omp tasksort();
}}
![Page 64: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/64.jpg)
64
● Poderosa API de programação paralela
● Fácil implementação
● Pouca modificação do código sequencial
● Bastante utilizada para computação hibrida (MPI + OpenMP)
Resumo OpenMP
![Page 65: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/65.jpg)
65
Desafios Futuros - Exascale
![Page 66: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/66.jpg)
66
Desafios Futuros – Eficiência Energética
![Page 67: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/67.jpg)
67
● Eficiência Energética
● Aumentar/Manter desempenho
● Diminuir o consumo de energia
● Arquiteturas Heterogêneas
Desafios Futuros
![Page 68: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/68.jpg)
68
● Eficiência Energética
● Aumentar/Manter desempenho
● Diminuir o consumo de energia
● Arquiteturas Heterogêneas
Desafios Futuros
![Page 69: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/69.jpg)
69
Desafios Futuros – Sistemas Embarcados Multicore
![Page 70: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/70.jpg)
70
Limitações
● Sistemas alimentados por bateria
● Consumo de potência
● Paralelismo implica em compartilhamento
● Acesso a memória compartilhada
● Maior consumo de energia
![Page 71: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/71.jpg)
71
O que estamos pesquisando?
● Objetivo do trabalho:
● Prover framework para informar ao desenvolvedor qual o melhor configuração que possui a melhor eficiência-energética.
– Acesso a memória compartilhada e privada
– Performance – speedup, eficiência, tempo...
– Diferentes cenários (Arq, API, threads, caract.)● Comparar arquiteturas para propósito geral (Intel IA32) e arquiteturas
para sistemas embarcados (Intel Atom, ARM,...)
● Analisar diferentes interfaces de programação paralela (OpenMP, Pthreads, Cilk++, MPI,...)
![Page 72: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/72.jpg)
72
Integrantes
● UFRGS:
● Antonio Carlos S. B. Filho
● Arthur F. Lorenzon
● UNIPAMPA:
● Márcia C. Cera
![Page 73: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/73.jpg)
73
Integrantes
● UFRGS:
● Antonio Carlos S. B. Filho
● Arthur F. Lorenzon
● UNIPAMPA:
● Márcia C. Cera
- O que necessito saber?- Como fazer parte?- Como fazer o Mestrado no grupo?- Mais alguma pergunta?
Quero ser um integrante do projeto/LSE!
![Page 74: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/74.jpg)
74
Laboratório de Sistemas Embarcados - UFRGS
• Professores/Orientadores:– Dr. Antonio Carlos S. B. Filho, – Dr. Luigi Carro– Dr. Flávio R. Wagner
• Doutorandos:– Gabriel Luca Nazar – Tese defendida– Ronaldo R. Ferreira– Ulisses Brisolara Corrêa
• Mestrandos (Alunos Regulares):– Andrws Aires Vieira– Arthur Lorenzon– Paulo Cesar Santos– Thiago Santini
• ICs:– Anderson, Jefferson...
![Page 75: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/75.jpg)
75
Laboratório de Sistemas Embarcados - UFRGS
• Cooperações Internacionais
Delft University TechnologyHolanda
Politecnico Di TorinoItália
![Page 76: MiniCurso Programação Paralela com OpenMP - SACTA 2013](https://reader034.fdocument.pub/reader034/viewer/2022042701/55a96c431a28ab8b358b45ff/html5/thumbnails/76.jpg)
Muito Obrigado!Perguntas
[email protected]@unipampa.edu.br
Arthur F. Lorenzon Antonio Carlos S. B. F.
Henrique O. GresslerMárcia C. Cera
[email protected]@inf.ufrgs.br