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

More Related Content

What's hot

Introdução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IIntrodução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IVinícius Hax
 
Introdução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte IIIntrodução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte IIVinícius Hax
 
Lógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetiçãoLógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetiçãoWesley R. Bezerra
 
IX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com PythonIX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com Pythonitalomaia
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem CLeonardo Lima
 
Laboratório de Programação II: Threads
Laboratório de Programação II: ThreadsLaboratório de Programação II: Threads
Laboratório de Programação II: ThreadsAlex Camargo
 
ICC – Aula 09 – Estrutura de Repetição
ICC – Aula 09 – Estrutura de RepetiçãoICC – Aula 09 – Estrutura de Repetição
ICC – Aula 09 – Estrutura de RepetiçãoFelipe J. R. Vieira
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.jsEdgar Eler
 
Logica Algoritmo 05 Repeticao
Logica Algoritmo 05 RepeticaoLogica Algoritmo 05 Repeticao
Logica Algoritmo 05 RepeticaoRegis Magalhães
 
(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10Norton Trevisan Roman
 
Java Memory Model (2005)
Java Memory Model (2005)Java Memory Model (2005)
Java Memory Model (2005)Helder da Rocha
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)Rogério Moraes de Carvalho
 
Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2Cristiano Pires Martins
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de RepetiçãoProfessor Samuel Ribeiro
 
Quebra de pacoes linux
Quebra de pacoes linux Quebra de pacoes linux
Quebra de pacoes linux alecsvupt
 

What's hot (20)

Introdução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IIntrodução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte I
 
Introdução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte IIIntrodução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte II
 
Aula python
Aula pythonAula python
Aula python
 
Lógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetiçãoLógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetição
 
Python + algoritmo
Python + algoritmoPython + algoritmo
Python + algoritmo
 
IX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com PythonIX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com Python
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Estrutura de repetição
Estrutura de repetiçãoEstrutura de repetição
Estrutura de repetição
 
APM Model in .NET - PT-pt
APM Model in .NET - PT-ptAPM Model in .NET - PT-pt
APM Model in .NET - PT-pt
 
Laboratório de Programação II: Threads
Laboratório de Programação II: ThreadsLaboratório de Programação II: Threads
Laboratório de Programação II: Threads
 
ICC – Aula 09 – Estrutura de Repetição
ICC – Aula 09 – Estrutura de RepetiçãoICC – Aula 09 – Estrutura de Repetição
ICC – Aula 09 – Estrutura de Repetição
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.js
 
Logica Algoritmo 05 Repeticao
Logica Algoritmo 05 RepeticaoLogica Algoritmo 05 Repeticao
Logica Algoritmo 05 Repeticao
 
(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10
 
Apresentacao
ApresentacaoApresentacao
Apresentacao
 
Java Memory Model (2005)
Java Memory Model (2005)Java Memory Model (2005)
Java Memory Model (2005)
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
 
Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
 
Quebra de pacoes linux
Quebra de pacoes linux Quebra de pacoes linux
Quebra de pacoes linux
 

Viewers also liked

Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronFrederico Madeira
 
Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14Leandro Almeida
 
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
 
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
 
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
 
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
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013Arthur Francisco Lorenzon
 
(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
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonRelsi Maron
 
Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)PyData
 

Viewers also liked (20)

Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o Cron
 
Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefas
 
OpenMP Day 2
OpenMP Day 2OpenMP Day 2
OpenMP Day 2
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
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
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
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ª ...
 
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
 
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!)
 
Curso openmp
Curso openmpCurso openmp
Curso openmp
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013
 
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
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em Python
 
Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)
 

Similar to OpenMP Day1

Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresLuis Ferreira
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia J Chaves Silva
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresAnderson Favaro
 
Linguagem de programação
Linguagem de programaçãoLinguagem de programação
Linguagem de programaçãoSandro Lopes
 
Análise de Tráfego TCP/IP
Análise de Tráfego TCP/IPAnálise de Tráfego TCP/IP
Análise de Tráfego TCP/IPThiago Finardi
 
Gabarito da P1 de PROG
Gabarito da P1 de PROGGabarito da P1 de PROG
Gabarito da P1 de PROGMarcos de Vita
 
C e assembly x86 64 v0.33.9
C e assembly x86 64 v0.33.9C e assembly x86 64 v0.33.9
C e assembly x86 64 v0.33.9Luciano Pereira
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilabMarco Antônio
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaLincoln Lamas
 
Aula 7 conjunto de instrucoes
Aula 7   conjunto de instrucoesAula 7   conjunto de instrucoes
Aula 7 conjunto de instrucoesCratuscb
 
Aula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.pptAula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.pptJadna Almeida
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreadingBianca Dantas
 

Similar to OpenMP Day1 (20)

Resumo OpenMP
Resumo OpenMPResumo OpenMP
Resumo OpenMP
 
OpenMP
OpenMPOpenMP
OpenMP
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Processador mips - pipeline
Processador mips - pipelineProcessador mips - pipeline
Processador mips - pipeline
 
Resumo x86
Resumo x86Resumo x86
Resumo x86
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
 
Linguagem assembly
Linguagem assemblyLinguagem assembly
Linguagem assembly
 
Ac16 conjunto de instruções v2
Ac16   conjunto de instruções v2Ac16   conjunto de instruções v2
Ac16 conjunto de instruções v2
 
Linguagem de programação
Linguagem de programaçãoLinguagem de programação
Linguagem de programação
 
Manual robotec
Manual robotecManual robotec
Manual robotec
 
Análise de Tráfego TCP/IP
Análise de Tráfego TCP/IPAnálise de Tráfego TCP/IP
Análise de Tráfego TCP/IP
 
Gabarito da P1 de PROG
Gabarito da P1 de PROGGabarito da P1 de PROG
Gabarito da P1 de PROG
 
C e assembly x86 64 v0.33.9
C e assembly x86 64 v0.33.9C e assembly x86 64 v0.33.9
C e assembly x86 64 v0.33.9
 
Linguagem Java, fundamentos da linguagem Java
Linguagem Java, fundamentos da linguagem JavaLinguagem Java, fundamentos da linguagem Java
Linguagem Java, fundamentos da linguagem Java
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilab
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da Microarquitetura
 
Aula 7 conjunto de instrucoes
Aula 7   conjunto de instrucoesAula 7   conjunto de instrucoes
Aula 7 conjunto de instrucoes
 
Aula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.pptAula 2 - Introducao e Algoritmos.ppt
Aula 2 - Introducao e Algoritmos.ppt
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 

OpenMP Day1

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