Buscar

apresentação OpenMP

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO
OpenMP
(Open Multi Processing) 
O que é OpenMP?
 É uma interface de programação (API), portável e escalável, baseada no modelo de programação paralela de memória compartilhada, que possibilita o desenvolvimento de programas em C/C++ e Fortran para ambientes multiprocessados. Diferentes arquiteturas são suportadas, variando do desktop a supercomputadores, incluindo plataformas Unix e Windows (Sistemas Multithreads). 
OpenMP ARB (Architecture Review Board):
 É uma corporação sem fins lucrativos, formada pelos principais fabricantes de hardware e software, que detém a marca OpenMP e supervisiona sua especificação, produzindo e aprovando novas versões.
O OpenMP não é a implementação. É apenas a especificação!
O OpenMP permite: 
Criar times de threads para execução paralela de trechos de código; 
Especificar como dividir (share) as atividades entre os membros de um grupo;
Declarar variáveis compartilhadas e privadas; 
Sincronizar threads e permitir que executem operações de maneira exclusiva. 
 
Principais componentes: 
Diretivas de Compilação; 
Biblioteca de Execução; 
Variáveis de Ambiente. 
 OpenMP suporta ambos os modelos de paralelismo: 
de código (funcional) e de dados (de domínio). 
OpenMP
(Open Multi Processing) 
 Modelo de Programação do OpenMP 
Paralelismo baseado em “Threads”: processo visto com um conjunto de threads que se comunicam através da utilização de variáveis partilhadas. A criação, iniciação e terminação dos threads é feita de forma implícita pelo ambiente de execução, sem que o programador tenha que se preocupar com isso.
O espaço de endereçamento global é partilhado por todos os threads.
As variáveis podem ser partilhadas ou provadas (duplicadas) para cada thread.
O controle, manuseamento e sincronização das variáveis envolvidas nas tarefas paralelas é transparente para o programador.
Paralelismo explícito: é um recurso de programação paralela que permite ao programador total controle sobre a paralelização do código; através de diretivas de compilação embebidas no código do programa.
OpenMP
(Open Multi Processing) 
Modelo de Execução Fork-Join do OpenMP
1. Todos os programas OpenMP começam como um processo simples: o master thread. O “thread” mestre executa sequencialmente até a primeira definição de uma região paralela ser encontrada. 
2. “FORK” (bifurcar): O master thread cria um conjunto de threads paralelos. 
3. Os comandos de um programa que estão inseridos na região paralela serão executados em paralelo pelos diversos threads criados. 
4. “JOIN” (unir): Quando o conjunto de threads completa a execução dos comandos na região paralela, eles são sincronizados e finalizados, permanecendo apenas o master thread. 
OpenMP
(Open Multi Processing) 
Modelo de Execução Fork-Join do OpenMP
OpenMP
(Open Multi Processing) 
Cada thread tem um identificador (id), do tipo inteiro, que pode ser consultado; o master thread tem identificador 0. 
O número de threads para uma aplicação ou para cada trecho de código paralelo pode ser determinado de maneira automatizada ou selecionado pelo programador.
Diretivas de compilação: são utilizadas palavras-chave (representadas por #pragmas) que são interpretadas pelo compilador no momento da compilação. Essas palavras são instruções ao compilador e, caso este não tenha suporte a esse nível de paralelização, essas palavras serão ignoradas, fazendo com que o código seja serial.
OpenMP
(Open Multi Processing) 
Exemplo de Estrutura OpenMP
OpenMP
(Open Multi Processing) 
Figura 2. Estrutura OpenMP- FORTRAN
Exemplo de Estrutura OpenMP
OpenMP
(Open Multi Processing) 
Figura 3. Estrutura OpenMP- C/CC++
OpenMP
(Open Multi Processing) 
Diretivas de Compilação
Formato FORTRAN
Exemplo: 
Formato FORTRAN
Formato fixo (Fortran77): 
!$OMP C$OMP *$OMP são aceitos e devem começar na coluna 1; 
Formato livre (Fortran90,95): 
!$OMP é o único identificador aceito. Pode aparecer em qualquer coluna, mas deve ser precedido por um espaço em branco; 
Os compiladores Fortran, normalmente necessitam de uma opção de compilação que indica ao compilador para ativar e interpretar todas as diretivas OpenMP; 
Diversas diretivas do Fortran OpenMP identificam seções do código que serão executadas em paralelo. Essas diretivas trabalham em pares, iniciando e finalizando a seção. 
!$OMP diretiva 
[ código Fortran ] 
!$OMP end diretiva 
OpenMP
(Open Multi Processing) 
Diretivas de Compilação
OpenMP
(Open Multi Processing) 
Diretivas de Compilação
Formato C/C++
Exemplo: 
OpenMP
(Open Multi Processing) 
Diretivas de Compilação
Formato C/C++
Segue as regras de sintaxe do C/C++; 
“Case sensitive”; 
Linhas de diretivas muito longas podem continuar em diversas linhas, acrescentando o caractere de nova linha (“\”) no final da diretiva. 
OpenMP
(Open Multi Processing) 
Construção PARALLEL
Formato: 
Diretivas de Compilação
Figura 4. Formatos FORTRAN - C/CC++
OpenMP
(Open Multi Processing) 
Diretivas de Compilação
Construção PARALLEL
Identifica um bloco de código que será executa por múltiplos “threads”. É a construção fundamental do OpenMP. 
Atributos: IF 
Especifica uma condição para que o grupo de “threads” seja criado, se o resultado for verdadeiro. Se falso, a região definida como paralela, será executada somente pela “thread” mestre. 
As regras se aplicam a todas implementações de OpenMP, para os compiladores Fortran e C/C++; 
As diretivas DO/for, SECTIONS, SINGLE, MASTER e BARRIER só serão utilizadas se estiverem em uma região paralela definida pela diretiva PARALLEL. Se a região paralela não tiver sido definida, essas diretivas não terão nenhuma ação; 
A diretiva ORDERED só será utilizada junto com a diretiva DO/for; 
A diretiva ATOMIC tem ação em todas as “threads” utilizadas durante o processamento do programa; 
OpenMP
(Open Multi Processing) 
Regras de Operação das Diretivas
Uma diretiva PARALLEL dentro de outra diretiva PARALLEL, logicamente, estabelece um novo grupo, que será composto apenas pela “thread” que alcançar a nova região paralela, primeiro; 
A diretiva BARRIER não é permitida dentro das regiões definidas pelas diretivas DO/for, ORDERED, SECTIONS, SINGLE, MASTER e CRITICAL; 
Qualquer diretiva pode ser executada fora de uma região definida pela diretiva PARALLEL, no entanto será executado apenas pela “thread” MASTER. 	
OpenMP
(Open Multi Processing) 
Regras de Operação das Diretivas
OpenMP
(Open Multi Processing) 
São parâmetros definidos no ambiente operacional antes da execução do programa. O OpenMP possui quatro definições de variáveis, que controlam a execução do código paralelo. O nome dessas variáveis deve vir sempre em letras maiúsculas:
OMP_SCHEDULE 
OMP_NUM_THREADS 
OMP_DYNAMIC 
OMP_NESTED 	
Variáveis de Ambiente
OpenMP
(Open Multi Processing) 
OMP_SCHEDULE :
O valor dessa variável determina como as iterações de um “loop” são agendadas por entre os “threads”. Essa variável de ambiente é utilizada somente para as diretivas DO, PARALLEL DO (Fortran) e for, parallel for (C/C++). 
Exemplos: 
Variáveis de Ambiente 
Ambientecsh(IBM/AIX)
Ambientebsh/bash/ksh(Linux)
setenvOMP_SCHEDULE "guided, 4"
exportOMP_SCHEDULE="guided, 4"
setenvOMP_SCHEDULE "dynamic"
exportOMP_SCHEDULE="dynamic"
Tabela 1. Variáveis de Ambiente OMP_SCHEDULE
OpenMP
(Open Multi Processing) 
Variáveis de Ambiente 
OMP_NUM_THREADS :
Define o número máximo de “threads” durante a execução. 
Exemplos: 
Ambientecsh(IBM/AIX)
Ambientebsh/bash/ksh(Linux)
setenvOMP_NUM_THREADS 8
exportOMP_NUM_THREADS=8
Tabela 2. Variáveis de Ambiente OMP_NUM_THREADS
OpenMP
(Open Multi Processing) 
Variáveis de Ambiente 
OMP_DYNAMIC:
Habilita ou não, o ajuste dinâmico no
número de “threads” para a execução de regiões paralelas. Valores possíveis TRUE ou FALSE. 
Exemplos: 
Ambientecsh(IBM/AIX)
Ambientebsh/bash/ksh(Linux)
setenvOMP_DYNAMIC TRUE
exportOMP_DYNAMIC=TRUE
Tabela 3. Variáveis de Ambiente OMP_DYNAMIC
OpenMP
(Open Multi Processing) 
Variáveis de Ambiente 
OMP_NESTED:
Habilita ou não, o paralelismo recursivo. 
Exemplos: 
Ambientecsh(IBM/AIX)
Ambientebsh/bash/ksh(Linux)
setenvOMP_NESTED TRUE
exportOMP_NESTED=TRUE
Tabela 4. Variáveis de Ambiente OMP_NESTED
OpenMP
(Open Multi Processing) 
EXEMPLO PRÁTICO
REFERÊNCIAS:
Apostila de Treinamento – Introdução ao OpenMP https://www.cenapad.unicamp.br/servicos/treinamentos/apostilas/apostila_openmp.pdf
Programação Paralela e Distribuída: Programação em Memória Paralela com o OpenMP
 https://www.dcc.fc.up.pt/~ricroc/aulas/0910/ppd/apontamentos/openmp-pb.pdf
Introdução ao OpenMP – Threads em CPU multicore
 http://grenoble.ime.usp.br/~gold/cursos/2014/labprogII/aulas/aulaOpenMP.pdf
OpenMP
(Open Multi Processing)

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando