Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

OpenMP Day1

1,236 views

Published on

Training/Presentation (in Portuguese) about OpenMP an API to support shared memory multiprocessing. Day 1

Published in: Technology
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

OpenMP Day1

  1. 1. OpenMP<br />André Leon S. Gradvohl, Dr.<br />andre.gradvohl@gmail.com<br />
  2. 2. Plano de Apresentação<br />Arquiteturas Paralelas e Modelos de Programação.<br />Threads<br />Introdução ao OpenMP<br />Hands-On: Primeiros exemplos<br />
  3. 3. Arquiteturas Paralelas e Modelos de Programação<br />Arquiteturas paralelas:<br />Single Instruction Multiple Data<br />Máquinas Vetoriais<br />Multiple Instruction Multiple Data<br />Memória distribuída<br />Memória compartilhada<br />Onde o OpenMP se encaixa<br />
  4. 4. Arquiteturas Paralelas e Modelos de Programação<br />Memória compartilhada<br />P1<br />P2<br />Pn<br />Memória<br />
  5. 5. Arquiteturas Paralelas e Modelos de Programação<br />Modelos de Programação Paralela<br />Multiprocessamento<br />Fork/Join<br />Passagem de Mensagens<br />Exemplo: PVM, MPI<br />Multithread<br />Exemplo: OpenMP, POSIX-Threads<br />
  6. 6. Threads<br />Definição:<br />Threads são linhas de execução diferentes em um mesmo processo.<br />Exemplo:<br />
  7. 7. Threads<br />Conceitos Importantes:<br />Contexto de Hardware<br />UC<br />ALU<br />Barramento<br />SP<br />PC<br />RI<br />R1<br />R2<br />Rn<br />
  8. 8. Threads<br />Conceitos Importantes:<br />Contexto de Software: informações relativas ao processo.<br />Espaço de Endereçamento: área de memória reservada a um processo.<br />
  9. 9. Introdução ao OpenMP<br />OpenMP (Open MultiProcessing):<br />Interface de programação que suporta multiprocessamento em ambientes de memória compartilhada.<br />
  10. 10. Introdução ao OpenMP<br />Estrutura de um programa OpenMP:<br />Em Fortran<br />PROGRAM HELLO<br />INTEGER VAR1, VAR2, VAR3<br />*** Código serial<br />*** Início da seção paralela. “Fork” um grupo de “threads”.<br />!$OMP PARALLEL PRIVATE(VAR1, VAR2) SHARED(VAR3)<br />*** Seção paralela executada por todas as “threads”<br />*** Todas as “threads” efetuam um “join” a thread mestre e finalizam<br />!$OMP END PARALLEL<br />*** Código serial<br />END<br />
  11. 11. Introdução ao OpenMP<br />Estrutura de um programa OpenMP:<br />Em C<br />#include <omp.h><br />intmain () <br />{<br />int var1, var2, var3;<br />*** Código serial<br />*** Início da seção paralela. “Fork” um grupo de “threads”.<br />#pragma omp parallel private(var1, var2) shared(var3)<br />{<br />*** Seção paralela executada por todas as “threads”<br />*** Todas as “threads” efetuam um “join” a thread mestre e finalizam<br />}<br />*** Código serial<br />}<br />
  12. 12. Introdução ao OpenMP<br />Observações<br />Fork/Join:<br />Quando uma thread chega a uma definição de região paralela, ela cria um conjunto de threads e passa a ser a thread mestre. A thread mestre faz parte do conjunto de threads e possui o número de identificação “0”.<br />A partir do início da região paralela, o código é duplicado e todas as threads executarão esse código.<br />Existe um ponto de sincronização (“barreira”) no final da região paralela, sincronizando o fim de execução de cada thread. Somente a thread mestre continua desse ponto.<br />B<br />A<br />RR<br />
  13. 13. Introdução ao OpenMP<br />Observações<br />O número de threads<br />Em uma execução com o OpenMP, o número de “threads” é determinado pelos seguintes fatores, em ordem de precedência:<br />Utilização da função omp_set_num_threads() no código Fortran ou C/C++;<br />Definindo a variável de ambiente OMP_NUM_THREADS, antes da execução;<br />Implementação padrão do ambiente: número de processadores em um nó.<br />
  14. 14. Introdução ao OpenMP<br />Observações<br />Threads dinâmicos<br />Um programa com várias regiões paralelas, utilizará o mesmo número de threads para executar cada região. Isso pode ser alterado permitindo que durante a execução do programa, o número de threads seja ajustado dinamicamente para uma determinada região paralela. Dois métodos disponíveis:<br />Utilização da função omp_set_dynamic() no código Fortran ou C/C++;<br />Definindo a variável de ambiente OMP_DYNAMIC, antes da execução.<br />
  15. 15. Introdução ao OpenMP<br />Observações<br />Regiões paralelas recursivas<br />Uma região paralela dentro de outra região paralela resulta na criação de um novo grupo de threads de apenas uma thread, por default. É possível definir um número maior de threads, utilizando um dos dois métodos disponíveis:<br />Utilização da função omp_set_nested()no código Fortran ou C/C++;<br />Definindo a variável de ambiente OMP_NESTED, antes da execução.<br />
  16. 16. Introdução ao OpenMP<br />Observações<br />Restrições<br />Não é permitido caminhar para dentro ou fora (”branch”) de uma estrutura de blocos definida por uma diretiva OpenMP e somente um IF é permitido.<br />
  17. 17. Introdução ao OpenMP<br />Como os threads interagem, i. e., como se comunicam?<br />Através de compartilhamento de variáveis.<br />O que essa forma de comunicação acarreta?<br />Condições de Corrida!<br />Ler valor<br />Ler valor<br />Soma + 10 = <br />20<br />Subtrai -10 = <br />00<br />10<br />10<br />
  18. 18. Introdução ao OpenMP<br />Como resolver o problema das condições de corrida ?<br />Com sincronização, ou seja, protegendo as posições de memória que são compartilhadas entre threads. <br />Ler valor<br />Ler valor<br />Soma + 10 = <br />20<br />Subtrai-10 = <br />10<br />10<br />20<br />
  19. 19. HandsOn<br />Faz o fork dos threads e mantém suas próprias cópias de variáveis.<br />Obtém o número do Thread.<br />Região Paralela<br />#include <stdio.h><br />#include <omp.h><br />intmain () <br />{ intnthreads, tid;<br /> #pragma omp parallel private(nthreads, tid)<br /> {<br />tid = omp_get_thread_num();<br />printf(“Hello World from thread = %d ”, tid);<br />if (tid == 0)<br /> {<br />nthreads = omp_get_num_threads();<br />printf(“Number of threads = %d ”, nthreads);<br /> }<br /> }<br />}<br />Se tid == 0, então é o thread mestre.<br />Obtém a quantidade de threads.<br />

×