69
SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento de Aplicações Concorrentes ‐ OpenMP Prof. Jó Ueyama

SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Embed Size (px)

Citation preview

Page 1: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

SSC‐0742  PROGRAMAÇÃO CONCORRENTE 

Aula 08 – Ferramentas de Apoio ao Desenvolvimento de Aplicações Concorrentes ‐ 

OpenMP Prof. Jó Ueyama 

Page 2: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Créditos 

2 1º Semestre de 2013 

Os  slides  integrantes  deste  material 

foram  construídos  a  par4r  dos 

conteúdos  relacionados  às  referências 

bibliográficas descritas neste documento 

Page 3: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Visão Geral da Aula de Hoje  

3 1º Semestre de 2013 

• O que é OpenMP 1 

• Modelo de Programação 2 

• Modelo de Execução 3  

• direMvas de Compilação 4 

• Exercício e Leitura Recomendada 7 

Page 4: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

O QUE É OPENMP? 

4 1º Semestre de 2013 

Page 5: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

5 1º Semestre de 2013 

•  Significado –  Open specificaMons for MulM Processing via collaboraMve work between interested parMes from the hardware and soZware industry, government and academia 

–  É um modelo de programação de memória comparMlhada que nasceu da cooperação entre um grupo de grandes fabricantes de soZware e hardware 

–  API para programação paralela de arquiteturas mulMprocessor. Foi definida inicialmente para ser usada em programas C / C++ (1998) e Fortran (1997) tanto Linux quanto Windows 

–  Não é uma implementação e sim uma especificação 

•  Os principais compiladores suportam direPvas do OpenMP para  a maioria das plataformas  

Page 6: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

6 1º Semestre de 2013 

•  ObjePvos – Ser o padrão de programação para arquiteturas de memória comparMlhada 

– Estabelecer um conjunto simples e limitado de direMvas de programação 

– Possibilitar a paralelização incremental de programas sequenciais 

– PermiMr implementações  eficientes em problemas de granularidade fina, média e grossa 

Page 7: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

7 1º Semestre de 2013 

•  Componentes 

– Bibliotecas de Funções 

– DireMvas de Compilação 

– Variáveis de Ambiente 

Page 8: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

8 1º Semestre de 2013 

•  Memória ComparPlhada X Passagem de Mensagens –  Programação em memória comparMlhada é mais intuiMvo para desenvolvedores que desejam paralelizar seus programas •  Infelizmente como opera sobre a premissa de espaço de endereçamento comparMlhado, é suscemvel às limitações de escala inerente dos mecanismos que geram essa visão comparMlhada da memória 

–  Passagem de mensagem por sua vez assume que não há memória comparMlhada e que todas as comunicações devem ser realizadas por meio do envio de mensagens explícitas •  Não é intuiMvo, pois exige que o programador gerencia o envio, recebimento e coordenação entre os processos paralelos   

Page 9: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

9 1º Semestre de 2013 

•  AlternaPvas ao OpenMP 

– Unified Parallel C 

– Co‐Array Fortran 

– Posix Threads 

– Gnu Portable Threads 

Page 10: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

10 1º Semestre de 2013 

•  Limitações do OpenMP –  Quanto mais variáveis comparMlhadas entre as threads, mais dircil deve ser o trabalho para garanMr que a visão das variáveis são atuais – coerência de cache 

–  Em algum ponto, a sobrecarga associada com a garanMa de coerência de cache fará com que a paralelização não seja escalável para mais processadores 

–  Outras limitações são baseadas em hardware e está associada com a forma como muitos SMPs são fisicamente capazes de comparMlhar o mesmo espaço de memória 

Page 11: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

11 1º Semestre de 2013 

•  Limitações do OpenMP 

– A largura de banda da memória não é escalável a medida que mais processadores são introduzidos, ou seja a escalabilidade é limitada pela arquitetura de memória 

– A sincronização de um subconjunto de threads não é permiMda 

Page 12: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

12 1º Semestre de 2013 

•  O aspecto mais dircil de criar um programa de memória comparMlhada é traduzir o que se deseja para uma versão mulM‐thread 

•  Outro ponto é fazer a versão muilM‐thread do programa operar corretamente – Sem problemas com variáveis comparPlhadas 

– Situações de condições de corrida/disputa 

– Detecção e Depuração dessas condições 

– Questões relaPvas ao tempo de execução  

Page 13: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

13 1º Semestre de 2013 

•  Exemplo – Hello World! 

Page 14: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OpenMP 

1º Semestre de 2013  14 

Page 15: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

MODELO DE PROGRAMAÇÃO 

15 1º Semestre de 2013 

Page 16: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Modelos de Programação 

16 1º Semestre de 2013 

•  Paralelismo Explícito 

– Cabe ao programador anotar as tarefas para execução em paralelo e definir os pontos de sincronização. A anotação é feita por uMlização de direMvas de compilação embarcadas no código do programa 

Page 17: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Modelos de Programação 

17 1º Semestre de 2013 

•  MulPthread Implícito – Neste caso um processo é visto em conjunto de threads que se comunicam por meio da uMlização de variáveis comparMlhadas •  Criação 

•  Início 

•  Término 

– Feito de forma implícita pelo ambiente de execução sem que o programador tenha que se preocupar com tais detalhes 

Page 18: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Modelos de Programação 

18 1º Semestre de 2013 

•  MulPthread Implícito 

– Espaço de endereçamento global comparMlhado entre as threads 

– Variáveis podem ser comparMlhadas ou privadas para cada thread 

– Controle, manuseio e sincronização das variáveis envolvidas nas tarefas paralela é transparente ao programador 

Page 19: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

MODELO DE EXECUÇÃO 

19 1º Semestre de 2013 

Page 20: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Modelos de Execução 

20 1º Semestre de 2013 

•  Fork‐Join –  Todos os programas iniciam sua execução com um processo mestre –  O master thread executa sequencialmente até encontrar um 

construtor paralelo, momento em que cria um team de threads –  O código delimitado pelo construtor paralelo é executado em 

paralelo pelo master thread e pelo team de threads –  Quando completa a execução paralela, o team de threads sincroniza 

em uma barreira implícita com o master thread –  O team de threads termina a sua execução e o master thread 

conMnua a execução sequencialmente até encontrar um novo construtor paralelo 

–  A sincronização é uMlizada para evitar a compeMção entre as threads 

Page 21: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Modelos de Execução 

21 1º Semestre de 2013 

•  Estrutura Básica de um Programa OpenMP 

Page 22: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Modelos de Execução 

22 1º Semestre de 2013 

•  Definições da biblioteca em omp.h 

•  Implementação em libgomp.so 

•  Compilação de um programa OpemMP 

–  É preciso uMlizar a opção •  ‐fopenmp 

Page 23: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

VARIÁVEIS 

23 1º Semestre de 2013 

Page 24: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Variáveis 

24 1º Semestre de 2013 

•  Declarar acesso entre as threads –  Private 

•  Pertencem e são conhecidas apenas a cada segmento específico    int id, nthreads;    pragma omp parallel private(id) 

   {id = omp_get_thread_num();  

–  Shared •  Variáveis comparMlhadas são conhecidas por todas as threads. Cuidados 

devem ser tomados quando uMlizar essas variáveis, já que a manipulação incorreta poderá dificultar a detecção de erros como condições de disputa e deadlocks 

 int id, nthreads, A, B; A = getA();   B = getB();  

 #pragma omp parallel private(id,nthreads) shared(A,B)  

 { id = omp_get_thread_num(); 

Page 25: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Variáveis 

25 1º Semestre de 2013 

•  Inicialização de Variáveis 

–  Firstprivate •  Permite inicializar uma variável privada na thread 

master antes de entrar em uma região paralela do código. Caso contráMo, todas as variáveis privadas serão consideradas não inicializadas no início da thread 

   int id, myPi; myPi = 3.1459  

   #pragma omp parallel private(id) firstprivate(myPi)  

   { id = omp_get_thread_num(); 

Page 26: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

OPERAÇÕES DE REDUÇÃO 

26 1º Semestre de 2013 

Page 27: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Redução 

27 1º Semestre de 2013 

•  Permitem a uma variável uMlizada privaMvamente para cada thread, ser agregada em um único valor  reduce(*:i) # for N threads, get product of i1*i2*i3*...*iN  

 reduce(+:i) # for N threads, get the sum of i1+i2+i3+...+iN 

•  Operações de Redução – C/C++  Arithme4c: + ‐ * / # add, subtract, mul4ply, divide  

 Bitwise: & | ^ # and, or, xor  

 Logical: && || # and, or 

 

Page 28: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Redução 

•  O exemplo abaixo atribui um valor para a variável privada i. No final do bloco paralelo mulMplica (*) i de todas as threads juntas e torna o produto final disponível para a thread master     #include <omp.h>  

 #include <stdio.h>  

 int main (int argc, char *argv[])  

 { 

   int i;  

   #pragma omp parallel reduc4on(*:i)  

   {  

     i=omp_get_num_threads();  

   }  

   prina("ans=%d\n",c);  

  return 0;  

 } 

1º Semestre de 2013  28 

Page 29: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

ROTINAS E VARIÁVEIS DE AMBIENTE 

29 1º Semestre de 2013 

Page 30: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

RoMnas 

30 1º Semestre de 2013 

•  omp_get_num_threads 

•  omp_get_num_procs 

•  omp_set_num_threads 

•  omp_get_max_threads 

•  omp_in_parallel 

Page 31: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Variáveis de Ambiente 

31 1º Semestre de 2013 

•  OMP_NUM_THREADS –  Informa a execução do número de threads para ser 

uMlizada •  OMP_SCHEDULE –  Esta variável de ambiente aplica‐se ao PARALLEL DO e 

direMvas de trabalho comparMlhado que tem o Mpo de escalonamento RUNTIME 

•  OMP_DYNAMIC –  Habilita/Desabilita ajustes dinâmicos do número de 

threads disponíveis para a execução de regiões paralelas 

•  OMP_NESTED –  Habilita/Desabilita o paralelismo aninhado (nested) 

Page 32: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

DIRETIVAS DE COMPILAÇÃO 

32 1º Semestre de 2013 

Page 33: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

direMvas de Compilação 

33 1º Semestre de 2013 

•  Um programa simples em OpenMP 

Page 34: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

direMvas de Compilação 

34 1º Semestre de 2013 

•  Ênfase na paralelização de ciclos 

•  As direMvas de compilação ou pragmas idenMficam os pontos e formas de paralelização 

Page 35: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

direMvas de Compilação 

35 1º Semestre de 2013 

•  #pragma omp direcMve‐name [clause, …] newline –  direcMve‐name 

–  Uma direMva OpenMP válida.  –  Tem que aparecer depois do pragma e antes das cláusulas 

–  [clause, …] –  Opcional. Pode aparecer em qualquer ordem e se 

necessário repeMda 

–  newline –  Obrigatório. Seguido do bloco estruturado que vai ser 

executado em paralelo 

•  Exemplo: –  #pragma omp parallel default(shared) private(beta,pi) 

Page 36: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Cláusulas 

1º Semestre de 2013  36 

Page 37: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

direMvas de Compilação 

37 1º Semestre de 2013 

•  Compilação Condicional (_OPENMP) #ifdef _OPENMP 

bloco_código; 

#endif 

•  Exemplo de código: • prina(“%d processadores livres\n”, omp_get_num_procs

()); 

•  Possibilita instrumentalizar o código 

Page 38: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

direMvas de Compilação 

38 1º Semestre de 2013 

Sintaxe parallel • #pragma omp parallel `clause’ bloco_codigo; –  Indica que o bloco_codigo é para ser executado em paralelo 

• Clause pode ser: –  if(exp) –  private(list) –  firstprivate(list) –  num_threads(int_exp) –  shared(list) –  default(shared|none)   –  copyin(list) –  reducPon(operator: list) 

Page 39: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

direMvas de Compilação 

39 1º Semestre de 2013 

•  Cláusulas private, shared, default e firstprivate permite ao programador controlar as variáveis na região paralela 

•  private(list) –  Variávies da lista ficam privadas a cada thread do team de 

threads –  Não são inicializadas 

•  firstprivate(list) –  Permite que as variáveis privadas sejam inicializadas 

•  shared(list) –  As variáveis da lista são comparMlhadas por todas a threads –  Por padrão as variáveis são “shared” 

Page 40: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

direMvas de Compilação 

40 1º Semestre de 2013 

•  QuanPdade de threads? –  Número de threads determinado pelos fatores 

(ordem de precedência): •  Cláusula num_threads •  Função omp_set_num_threads() •  Variável de ambiente OMP_NUM_THREADS •  default – depende da implementação 

–  Os threas são numerados de 0 a N‐1 –  Por padrão, um programa com várias regiões em 

paralelo vai uMlizar o mesmo número de threads para cada região, ao menos que isso seja redefinido 

Page 41: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

direMvas de Compilação 

41 1º Semestre de 2013 

•  Outras cláusulas –  reducPon •  Permite  operar sobre as variáveis da lista 

–  copyin(list) •  Permite a atribuição do mesmo valor a variáveis 

THREADPRIVATE 

–  if(exp) •  Necessita avaliar como verdadeiro para que o team 

de threads seja criado, senão a execução será sequencial 

Page 42: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

DireMvas de Compilação 

1º Semestre de 2013  42 

Page 43: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

CONSTRUTORES DE WORK‐SHARING 

43 1º Semestre de 2013 

Page 44: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Work‐Sharing 

44 1º Semestre de 2013 

•  Determinam regras de divisão de trabalho entre as threads (não cria os threads) 

•  Tipos –  for •  Divide as iterações de um ciclo pelo threads da team 

(paralelismo de dados) 

–  secPons •  Responsável por dividir o trabalho em seções discretas, 

disMntas e que são executadas pelas threads. Pode ser uMlizado para paralelismo funcional 

–  single •  Responsável por serializar o código 

Page 45: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Work‐Sharing 

45 1º Semestre de 2013 

Sintaxe for • #pragma omp for `clause’ {ciclo_for();  }; • Clause pode ser: –  private(list) –  firstprivate(list) –  lastprivate(list) –  reducPon(operator: list) –  ordered –  schedule(type) –  Nowait 

• O compilador distribui as iterações pelas threads 

Page 46: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Work‐Sharing 

46 1º Semestre de 2013 

•  Exemplo – For 

Page 47: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Work‐Sharing 

47 1º Semestre de 2013 

•  Claúsula Schedule –  Dividir as iterações do ciclo pela threads: 

•  EstáPco –  As iterações são agrupadas em conjuntos (chunks) e atribuídas às 

threads de forma estáMca •  Dinâmico 

–  As iterações são agrupadas em conjuntos e são dinamicamente distribuídas pelas threads. Quando uma termina recebe dinamincamente outro conjunto e prossegue o trabalho 

•  Guiado –  Indica o número mínimo de iterações a agrupar em uma tarefa 

•  Em tempo de execução –  Decisão realizada em tempo de execução a parMr da variável 

OMP_SCHEDULE 

Page 48: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Work‐Sharing 

48 1º Semestre de 2013 

•  Exemplo de uso da direMva for 

  

Page 49: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Work‐Sharing 

49 1º Semestre de 2013 

•  SecPons 

Page 50: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Work‐Sharing 

50 1º Semestre de 2013 

Sintaxe secPons  #pragma omp secPon `clause’   {  #pragma omp secPon newline    codigo();    #pragma omp secPon newline    codigo();  }; 

• Clause pode ser: –  private(list) –  firstprivate(list) –  lastprivate(list) –  reducPon(operator: list)  –  Nowait 

Page 51: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Work‐Sharing 

51 1º Semestre de 2013 

•  Exemplo – SecPons 

Page 52: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

CONSTRUTORES DE SINCRONIZAÇÃO 

52 1º Semestre de 2013 

Page 53: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Sincronização 

53 1º Semestre de 2013 

•  É necessário sincronizar ações em variáveis comparMlhadas 

•  E também a ordenação correta de leituras e escritas 

•  Também é importante proteger a atualização de variáveis comparMlhadas (não atômicas por padrão) 

Page 54: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Sincronização 

54 1º Semestre de 2013 

•  O OpenMP possui alguns construtores de sincronização: –  omp master 

•  Especifica uma região que será executada apenas pelo master 

–  omp criPcal •  Especifica uma região críMca de código que deve ser executada 

apenas por um thread de cada vez 

–  omp barrier •  Quando esta direMva é alcançada por uma thread, esta espera 

até que as restantes cheguem ao mesmo ponto. Nenhuma thread pode prosseguir além da barreira. 

•  Nenhuma ou todas as threads devem encontar a barreira. Caso contráMo  Deadlock 

Page 55: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Sincronização 

55 1º Semestre de 2013 

•  ConPnuação… 

–  omp atomic •  Especifica um endereço de memória para atualização 

atômica. Aplica‐se apenas a uma única sentença 

–  omp flush •  IdenMfica um ponto de sincronização em que é necessário 

providenciar uma visão consistente da memória 

–  omp ordered •  As iterações deve ser executadas na mesma ordem, como 

se fossem executadas sequencialmente 

Page 56: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Sincronização 

56 1º Semestre de 2013 

•  Seções CríPcas –  Uma seção críMca é um bloco de código que 

somente pode ser executado uma thread por vez –  Pode ser uMlizado para  proteger a atualização de 

variáveis comparMlhadas –  A direMva CRITICAL permite que as seções críMcas 

recebam nomes –  Caso uma thread esteja numa seção críMca com um 

determinado nome, nenhuma outra thread pode estar na seção críMca com o mesmo nome (elas podem estara em seções criíMcas com outros nomes) 

Page 57: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Sincronização 

57 1º Semestre de 2013 

•  Sintaxe 

#pragma omp criPcal [(name)] bloco 

•  Se o nome é omiMdo, um nome nulo é assumido (todas as seções críMcas sem nome tem efeMvamente o mesmo nome) 

Page 58: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Sincronização 

58 1º Semestre de 2013 

•  Sintaxe 

#pragma omp atomic statement 

•  Onde statement pode ter uma das seguintes formas: 

– X = binop = expr, x++, ++x, x– ou –x 

– Binop é : +, *, ‐, /, &, ^, <<, ou >> 

Page 59: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Sincronização 

59 1º Semestre de 2013 

•  ConPnuação… 

•  A avaliação de expr não é atômica 

•  Pode ser mais eficiente que uMlizar direMvas CRITICAL, se 

–  Diferentes elementos do arranjo de dados podem ser protegidos separadamente 

Page 60: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Construtores de Sincronização 

60 1º Semestre de 2013 

•  DireMva ATOMIC 

Page 61: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Visão Geral do OpenMP 

1º Semestre de 2013  61 

Page 62: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Funções de Sincronização 

1º Semestre de 2013  62 

Page 63: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Funções de Controle 

1º Semestre de 2013  63 

Page 64: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

EXERCÍCIO E LEITURA RECOMENDADA 

64 1º Semestre de 2013 

Page 65: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Exercício 

•  Acessar o Moodle 

65 1º Semestre de 2013 

Page 66: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Bibliografia •  IntroducMon  to  Parallel  CompuMng,  Ananth  Grama, Anshul Gupta, George Karypis, Vipin Kumar ‐ 2ª ed., Addison Wesley 

•  OpenMP 

–  h�ps://compuMng.llnl.gov/tutorials/openMP/ 

•  Programação Paralela e Distribuída 

–  h�p://www.dcc.fc.up.pt/~ricroc/aulas/1011/ppd/apontamentos/openmp.pdf 

•  Programação Paralela e Distribuída –  h�p://www.dcc.fc.up.pt/~fds/aulas/PPD/0708/ 

•  NetLab – Computação Paralela –  h�p://netlab.ulusofona.pt/cp/ 

66 1º Semestre de 2013 

Page 67: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Bibliografia •  Programação Paralela 

–  h�p://www.dcc.ufrj.br/~gabriel/progpar/OpenMP.pdf 

67 1º Semestre de 2013 

Page 68: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Dúvidas 

68 1º Semestre de 2013 

Page 69: SSC‐0742 PROGRAMAÇÃO CONCORRENTEwiki.icmc.usp.br/images/3/37/Aula-07-Ferramentas-Apoio-OpenMP... · SSC‐0742 PROGRAMAÇÃO CONCORRENTE Aula 08 – Ferramentas de Apoio ao Desenvolvimento

Próxima Aula... 

•  OpenMP Passo‐a‐Passo – Conceitos Básicos 

69 1º Semestre de 2013