SlideShare uma empresa Scribd logo
1 de 76
Mini Curso: Programação Paralela
utilizando OpenMP
Arthur F. Lorenzon
Antonio Carlos S. B. F.
Henrique O. Gressler
Márcia C. Cera
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
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
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
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
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
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
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
9
Evolução dos Microprocessadores
10
Evolução dos Microprocessadores
Sobreposição na execução
de etapas da instrução
IF ID EX ME WB
IF ID EX ME WB
IF ID EX ME WB
11
Evolução dos Microprocessadores
Múltiplas Unidades Funcionais
Hardware: Superscalar
Software: VLIW
12
Evolução dos Microprocessadores
Melhora do desempenho utilizando
técnicas de computação paralela!
13
Evolução dos Microprocessadores
Preocupação com
gerenciamento de energia!!!
14
Evolução dos Microprocessadores
Paralelismo no Nível de Thread
Aumento da Performance
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
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
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
18
Programação Paralela
“Programação Paralela é a capacidade de dividirmos
uma carga de trabalho entre vários processadores
dinamicamente e de forma eficiente!”
19
O que paralelizar?
● Previsão do tempo e do clima
● Cálculos matemáticos
● Processamento de imagens
● Simuladores
● Componentes de Jogos*
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
21
Cenário Atual
Arquiteturas Multicore
Ferramentas
Motivos
Aplicações
Prós Contra
22
Cenário Atual
Arquiteturas Multicore
Ferramentas
Motivos
Aplicações
Prós Contra
Pensamento e Programação
Sequencial
23
Programar Paralelo é Díficil?
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
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
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
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?
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?
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
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 150
Pintar 300
Secar a tinta
Preparar a tinta
Tempo
Sequencial:
Tempo
Paralelo:
31
Modelos de Programação Paralela
Memória Distribuída Memória Compartilhada
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
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
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
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
36
Modelo de Programação
37
Elementos do OpenMP
#pragma omp diretiva [cláusula]
omp_serviço(...)OMP_NOME
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 Paralelo
Construtores de Compartilhamento de Trabalho
Diretivas de Sincronização
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 Mundon”);
}
}
if, private, shared,
firstprivate, default,
copyin, reduction
num_threads
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];
}
}
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?
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!
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 controle
de laço devem ser
privadas à cada thread!
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
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
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
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
48
● Cláusula schedule:
Construtores de Trabalho
Ex:
ex_omp_for_static.c
ex_omp_for_dynamic.c
ex_omp_for_guided.c
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
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 section
instrução
#pragma omp section
instruçao
}
}
}
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 section
instrução
#pragma omp section
instruçao
}
}
}
Região paralela
Indica que cada thread
irá executar um bloco
de instruções diferentes
Qual instrução que cada
thread irá executar
Fim região paralela
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
53
● #pragma omp sections
Construtor de Trabalho
#include <omp.h>
int main(){
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
soma_vet(a,b,c);
#pragma omp section
mult_vet(a,b,d);
#pragma omp section
div_vet(a,b,e);
#pragma omp section
sub_vet(a,b,f);
}
}
}
Ex1: ex_omp_sections.cEx1: ex_omp_sections.c
54
● #pragma omp sections
Construtor de Trabalho
#include <omp.h>
int main(){
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
soma_vet(a,b,c);
#pragma omp section
mult_vet(a,b,d);
#pragma omp section
div_vet(a,b,e);
#pragma omp section
sub_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)
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 single
printf(“Inicio região paralelan”);
#pragma omp for
…
}
}
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
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
58
● Construtores:
● Critical:
– Restringe a execução de uma determinada tarefa a apenas uma thread
por vez
● Atomic
● Barrier
Diretivas de Sincronização
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
60
● Construtores:
● Critical
● Atomic
● Barrier:
– Utilizada para sincronizar todas as threads em um determinado ponto
do código
Diretivas de Sincronização
61
● Classificadas em:
● Funções de ambiente de execução
● Funções de bloqueio
● Funções de tempo
Funções de Interface
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
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 nowait
sort();
}
}
void sort(){
….
for(i=0;i<N;i++){
#pragma omp task
sort();
}
}
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
65
Desafios Futuros - Exascale
66
Desafios Futuros – Eficiência Energética
67
● Eficiência Energética
● Aumentar/Manter desempenho
● Diminuir o consumo de energia
● Arquiteturas Heterogêneas
Desafios Futuros
68
● Eficiência Energética
● Aumentar/Manter desempenho
● Diminuir o consumo de energia
● Arquiteturas Heterogêneas
Desafios Futuros
69
Desafios Futuros – Sistemas Embarcados
Multicore
70
Limitações
● Sistemas alimentados por bateria
● Consumo de potência
● Paralelismo implica em compartilhamento
● Acesso a memória compartilhada
● Maior consumo de energia
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,...)
72
Integrantes
● UFRGS:
● Antonio Carlos S. B. Filho
● Arthur F. Lorenzon
●
UNIPAMPA:
● Márcia C. Cera
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!
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...
75
Laboratório de Sistemas Embarcados - UFRGS
• Cooperações Internacionais
Delft University Technology
Holanda
Politecnico Di Torino
Itália
Muito Obrigado!
Perguntas
gresslerbwg@gmail.com
marcia.cera@unipampa.edu.br
Arthur F. Lorenzon
Antonio Carlos S. B. F.
Henrique O. Gressler
Márcia C. Cera
aflorenzon@inf.ufrgs.br
caco@inf.ufrgs.br

Mais conteúdo relacionado

Mais procurados

Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing Jorge Cardoso
 
C curso - notas de aula
C   curso - notas de aulaC   curso - notas de aula
C curso - notas de aulaLoAlves21
 
Lógica de Programação - Unimep/Pronatec - Aula11
Lógica de Programação - Unimep/Pronatec - Aula11Lógica de Programação - Unimep/Pronatec - Aula11
Lógica de Programação - Unimep/Pronatec - Aula11André Phillip Bertoletti
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonRicardo Zalla
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Compus Party - processing e arduino
Compus Party - processing e arduinoCompus Party - processing e arduino
Compus Party - processing e arduinoCampus Party Brasil
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonJanderson Campêlo
 
Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04thomasdacosta
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Luís Gustavo Martins
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Jorge Cardoso
 
02 Introdução à programação.pptx
02 Introdução à programação.pptx02 Introdução à programação.pptx
02 Introdução à programação.pptxwilliam Sarti José
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Javathomasdacosta
 
Trabalho linguagem python
Trabalho linguagem  pythonTrabalho linguagem  python
Trabalho linguagem pythonBruno Maspoli
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completothomasdacosta
 
Linguagem C (UFRPE)
Linguagem C (UFRPE)Linguagem C (UFRPE)
Linguagem C (UFRPE)guest14543db
 
Aula01 ip introducao
Aula01 ip introducaoAula01 ip introducao
Aula01 ip introducaoBerg Oliveira
 

Mais procurados (20)

Introdução à Programacao em Processing
Introdução à Programacao em Processing Introdução à Programacao em Processing
Introdução à Programacao em Processing
 
C curso - notas de aula
C   curso - notas de aulaC   curso - notas de aula
C curso - notas de aula
 
Lógica de Programação - Unimep/Pronatec - Aula11
Lógica de Programação - Unimep/Pronatec - Aula11Lógica de Programação - Unimep/Pronatec - Aula11
Lógica de Programação - Unimep/Pronatec - Aula11
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem Python
 
Laços de Repetição
Laços de RepetiçãoLaços de Repetição
Laços de Repetição
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
TWP38 Revisão Geral 2
TWP38 Revisão Geral 2TWP38 Revisão Geral 2
TWP38 Revisão Geral 2
 
Compus Party - processing e arduino
Compus Party - processing e arduinoCompus Party - processing e arduino
Compus Party - processing e arduino
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - Python
 
TWP40 Revisão Geral 3
TWP40 Revisão Geral 3TWP40 Revisão Geral 3
TWP40 Revisão Geral 3
 
Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao
 
02 Introdução à programação.pptx
02 Introdução à programação.pptx02 Introdução à programação.pptx
02 Introdução à programação.pptx
 
Mini Curso de C
Mini Curso de CMini Curso de C
Mini Curso de C
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Java
 
Trabalho linguagem python
Trabalho linguagem  pythonTrabalho linguagem  python
Trabalho linguagem python
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completo
 
Linguagem C (UFRPE)
Linguagem C (UFRPE)Linguagem C (UFRPE)
Linguagem C (UFRPE)
 
Aula01 ip introducao
Aula01 ip introducaoAula01 ip introducao
Aula01 ip introducao
 

Destaque

Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Bruno Abinader
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefastarcisioti
 
Python-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o CythonPython-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o CythonBruno Abinader
 
Computação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosComputação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosbshecht
 
Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14Leandro Almeida
 
Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronFrederico Madeira
 
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...Dafmet Ufpel
 
(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processosAnderson Lago
 
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDADesenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDAFilipo Mór
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à ShellscriptVinícius Hax
 

Destaque (20)

Prova 1a
Prova 1aProva 1a
Prova 1a
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefas
 
Python-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o CythonPython-purple: Desenvolvendo bindings para Python usando o Cython
Python-purple: Desenvolvendo bindings para Python usando o Cython
 
Aula CRONTAB
Aula CRONTABAula CRONTAB
Aula CRONTAB
 
OpenMP Day 3
OpenMP Day 3OpenMP Day 3
OpenMP Day 3
 
OpenMP Day 2
OpenMP Day 2OpenMP Day 2
OpenMP Day 2
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Curso openmp
Curso openmpCurso openmp
Curso openmp
 
Computação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosComputação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticos
 
Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14
 
OpenMP Day1
OpenMP Day1OpenMP Day1
OpenMP Day1
 
Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o Cron
 
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
 
CUDA/Open CL
CUDA/Open CLCUDA/Open CL
CUDA/Open CL
 
Grupo de Estudos de Softwares Livres
Grupo de Estudos de Softwares LivresGrupo de Estudos de Softwares Livres
Grupo de Estudos de Softwares Livres
 
(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos
 
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDADesenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à Shellscript
 

Semelhante a Mini Curso: Programação Paralela com OpenMP

AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSprofjotamarcosduarte
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaÁlvaro Justen
 
Aula 01 - Introducao a C (3).pptx
Aula 01 - Introducao a C (3).pptxAula 01 - Introducao a C (3).pptx
Aula 01 - Introducao a C (3).pptxAbdulSacur2
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosEmbarcados
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interaçãoHumberto Cepep
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresLuis Ferreira
 
Aula 01 introdução a linguagem pascal
Aula 01   introdução a linguagem pascalAula 01   introdução a linguagem pascal
Aula 01 introdução a linguagem pascalTácito Graça
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...Alex Casañas
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...Alex Casañas
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...Alex Casañas
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...Alex Casañas
 
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015André Curvello
 
Tópicos em Sistemas de Informação e Web I.pptx
Tópicos em Sistemas de Informação e Web I.pptxTópicos em Sistemas de Informação e Web I.pptx
Tópicos em Sistemas de Informação e Web I.pptxJadna Almeida
 
Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8RogerMasters
 

Semelhante a Mini Curso: Programação Paralela com OpenMP (20)

AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtiva
 
Apostila s7
Apostila s7Apostila s7
Apostila s7
 
Aula 01 - Introducao a C (3).pptx
Aula 01 - Introducao a C (3).pptxAula 01 - Introducao a C (3).pptx
Aula 01 - Introducao a C (3).pptx
 
Algoritmos com java script
Algoritmos com java scriptAlgoritmos com java script
Algoritmos com java script
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
MD_Fortran.pdf
MD_Fortran.pdfMD_Fortran.pdf
MD_Fortran.pdf
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 
Resumo x86
Resumo x86Resumo x86
Resumo x86
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interação
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Aula 01 introdução a linguagem pascal
Aula 01   introdução a linguagem pascalAula 01   introdução a linguagem pascal
Aula 01 introdução a linguagem pascal
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
 
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...Unidade 111   estrutura de dados e lógica de programação - com respostas 15-0...
Unidade 111 estrutura de dados e lógica de programação - com respostas 15-0...
 
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
 
Ac16 conjunto de instruções v2
Ac16   conjunto de instruções v2Ac16   conjunto de instruções v2
Ac16 conjunto de instruções v2
 
Tópicos em Sistemas de Informação e Web I.pptx
Tópicos em Sistemas de Informação e Web I.pptxTópicos em Sistemas de Informação e Web I.pptx
Tópicos em Sistemas de Informação e Web I.pptx
 
Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8
 

Mini Curso: Programação Paralela com OpenMP

  • 1. Mini Curso: Programação Paralela utilizando OpenMP Arthur F. Lorenzon Antonio Carlos S. B. F. Henrique O. Gressler Márcia C. Cera
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 10. 10 Evolução dos Microprocessadores Sobreposição na execução de etapas da instrução IF ID EX ME WB IF ID EX ME WB IF ID EX ME WB
  • 11. 11 Evolução dos Microprocessadores Múltiplas Unidades Funcionais Hardware: Superscalar Software: VLIW
  • 12. 12 Evolução dos Microprocessadores Melhora do desempenho utilizando técnicas de computação paralela!
  • 13. 13 Evolução dos Microprocessadores Preocupação com gerenciamento de energia!!!
  • 14. 14 Evolução dos Microprocessadores Paralelismo no Nível de Thread Aumento da Performance
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 18 Programação Paralela “Programação Paralela é a capacidade de dividirmos uma carga de trabalho entre vários processadores dinamicamente e de forma eficiente!”
  • 19. 19 O que paralelizar? ● Previsão do tempo e do clima ● Cálculos matemáticos ● Processamento de imagens ● Simuladores ● Componentes de Jogos*
  • 20. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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?
  • 28. 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?
  • 29. 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
  • 30. 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 150 Pintar 300 Secar a tinta Preparar a tinta Tempo Sequencial: Tempo Paralelo:
  • 31. 31 Modelos de Programação Paralela Memória Distribuída Memória Compartilhada
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. 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
  • 37. 37 Elementos do OpenMP #pragma omp diretiva [cláusula] omp_serviço(...)OMP_NOME
  • 38. 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 Paralelo Construtores de Compartilhamento de Trabalho Diretivas de Sincronização
  • 39. 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 Mundon”); } } if, private, shared, firstprivate, default, copyin, reduction num_threads
  • 40. 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]; } }
  • 41. 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?
  • 42. 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!
  • 43. 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 controle de laço devem ser privadas à cada thread!
  • 44. 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
  • 45. 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
  • 46. 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
  • 47. 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
  • 48. 48 ● Cláusula schedule: Construtores de Trabalho Ex: ex_omp_for_static.c ex_omp_for_dynamic.c ex_omp_for_guided.c
  • 49. 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
  • 50. 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 section instrução #pragma omp section instruçao } } }
  • 51. 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 section instrução #pragma omp section instruçao } } } Região paralela Indica que cada thread irá executar um bloco de instruções diferentes Qual instrução que cada thread irá executar Fim região paralela
  • 52. 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
  • 53. 53 ● #pragma omp sections Construtor de Trabalho #include <omp.h> int main(){ #pragma omp parallel { #pragma omp sections { #pragma omp section soma_vet(a,b,c); #pragma omp section mult_vet(a,b,d); #pragma omp section div_vet(a,b,e); #pragma omp section sub_vet(a,b,f); } } } Ex1: ex_omp_sections.cEx1: ex_omp_sections.c
  • 54. 54 ● #pragma omp sections Construtor de Trabalho #include <omp.h> int main(){ #pragma omp parallel { #pragma omp sections { #pragma omp section soma_vet(a,b,c); #pragma omp section mult_vet(a,b,d); #pragma omp section div_vet(a,b,e); #pragma omp section sub_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)
  • 55. 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 single printf(“Inicio região paralelan”); #pragma omp for … } }
  • 56. 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
  • 57. 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
  • 58. 58 ● Construtores: ● Critical: – Restringe a execução de uma determinada tarefa a apenas uma thread por vez ● Atomic ● Barrier Diretivas de Sincronização
  • 59. 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
  • 60. 60 ● Construtores: ● Critical ● Atomic ● Barrier: – Utilizada para sincronizar todas as threads em um determinado ponto do código Diretivas de Sincronização
  • 61. 61 ● Classificadas em: ● Funções de ambiente de execução ● Funções de bloqueio ● Funções de tempo Funções de Interface
  • 62. 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
  • 63. 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 nowait sort(); } } void sort(){ …. for(i=0;i<N;i++){ #pragma omp task sort(); } }
  • 64. 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
  • 66. 66 Desafios Futuros – Eficiência Energética
  • 67. 67 ● Eficiência Energética ● Aumentar/Manter desempenho ● Diminuir o consumo de energia ● Arquiteturas Heterogêneas Desafios Futuros
  • 68. 68 ● Eficiência Energética ● Aumentar/Manter desempenho ● Diminuir o consumo de energia ● Arquiteturas Heterogêneas Desafios Futuros
  • 69. 69 Desafios Futuros – Sistemas Embarcados Multicore
  • 70. 70 Limitações ● Sistemas alimentados por bateria ● Consumo de potência ● Paralelismo implica em compartilhamento ● Acesso a memória compartilhada ● Maior consumo de energia
  • 71. 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,...)
  • 72. 72 Integrantes ● UFRGS: ● Antonio Carlos S. B. Filho ● Arthur F. Lorenzon ● UNIPAMPA: ● Márcia C. Cera
  • 73. 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!
  • 74. 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...
  • 75. 75 Laboratório de Sistemas Embarcados - UFRGS • Cooperações Internacionais Delft University Technology Holanda Politecnico Di Torino Itália
  • 76. Muito Obrigado! Perguntas gresslerbwg@gmail.com marcia.cera@unipampa.edu.br Arthur F. Lorenzon Antonio Carlos S. B. F. Henrique O. Gressler Márcia C. Cera aflorenzon@inf.ufrgs.br caco@inf.ufrgs.br

Notas do Editor

  1. Out-of-Order
  2. Out-of-Order
  3. Out-of-Order
  4. Out-of-Order