OpenMP MO801/MC972. Visão geral Biblioteca de mais alto nível para programação paralela Prevê memória compartilhada Requer suporte do compilador Exige.

Slides:



Advertisements
Apresentações semelhantes
Sistemas Distribuídos
Advertisements

Conceitos de Programação Paralela
IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
COMPUTAÇÃO PARALELA: UMA INTRODUÇÃO
Laboratório de Programação
Sistemas Operacionais
Linguagem C Marco Reis.
UML no CICLO de DESENVOLVIMENTO
Algoritmo e Programação
OpenMP.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Programação Concorrente
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Algoritmos e Estrutura de Dados I
Arquiteturas de Sistemas de Processamento Paralelo Gabriel P. Silva Universidade Federal do Rio de Janeiro Curso de Informática DCC/IM - NCE/UFRJ Programação.
Conceitos de Programação Paralela - 2
PThreads MO801/MC972.
Vetorização MO801/MC972.
Padrão MPI – Message Passing Interface
Problemas com Threads MO801/MC972. Muitas threads Se algumas threads ajudam o programa, muitas threads devem ajudar mais –Certo? O overhead de escalonamento.
Aproveitamento do Processador
Chapter 4: Threads.
CISC e RISC.
Modelo de Arquitetura Diagrama de Componentes
Aula 10 06/10/10 (Turma 1 e 2) Profa. Sarita
SSC SISTEMAS OPERACIONAIS I
SSC SISTEMAS OPERACIONAIS I
Walfredo Cirne Threads Walfredo Cirne
Linguagens de programação
Programação Concorrente
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Ferramentas Programação
Complexidade de Algoritmos
e comunicação entre Processos
Threads.
Threads sem Sincronização
O Portal do Estudante de Computação
Prof. André Leon S. Gradvohl, Dr.
Concorrência em Java Threads em Java.
PROGRAMAÇÃO I UNIDADE 1.
Monitores.
Concorrência em Java Threads em Java.
Concorrência em Java Threads em Java.
Sistemas Operacionais
Algoritmos paralelos eficientes para alguns problemas de processamento de Cadeia de Caracteres Alunos: Diego Alencar dos Santos Melo Felipe Formagini Brant.
Alocação Dinâmica de Memória
Desenvolvimento de Jogos e Entretenimento Digital
Programação com OpenMP: O paralelismo ao alcance de todos
Sistemas Concorrentes Capítulo 03 – OMP
Interface C / Assembly Modo Real
IC - UFF Sistemas Operacionais 4. Threads Texto base: capítulo 4 Operating Systems: Internals and Design Principles W. Stallings.
Sistemas Operacionais
Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação SISTEMAS OPERACIONAIS Aula 9 Regiane Kawasaki
Programação Paralela.
Uma Análise das plataformas CUDA e OpenCL usando MetaHeurísticas aplicadas no Problema do Caixeiro Viajante Aluno: Hedley Luna Gois Oriá Disciplina: Introdução.
Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Introdução à Linguagem C
CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer
Processos.
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Prof. Werley T. Reinaldo 26/05/  Sistemas Operacionais:  Visão geral  As diferentes imagens do SO:  Visão Usuários;  Visão Projeto.  Multiprogramação;
S ISTEMAS OPERACIONAIS PROCESSOS Horácio Ribeiro.
PVM – Parallel Virtual Machine. Foco em Computadores.
SISTEMAS OPERACIONAIS MACH EPOS
Gerenciamento de Memória - Capítulo 7 - Sistemas Operacionais Prof. Dr. José Carlos Becceneri Luciana Sêda Cardoso.
PROGRAMAÇÃO II – PARTE 1 Profa. Maria Augusta Constante Puget.
Jorge Zavaleta PVM vs MPI. Introdução Objetivos do MPI Implementações e definições processos dinâmicos Contextos Operações não bloqueantes Portabilidade,heterogeneidade.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 33 (1) Análise de Desempenho em Programas Paralelos Tópicos: Introdução Aquisição de Dados.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 34 (1) Formas de Programação Paralela Tópicos: Compilação de Linguagens de Alto Nível Padrão.
Introdução ao OpenMP Open MultiProcessing.
Transcrição da apresentação:

OpenMP MO801/MC972

Visão geral Biblioteca de mais alto nível para programação paralela Prevê memória compartilhada Requer suporte do compilador Exige biblioteca específica com implementações thread safe

Modelo de Execução O programador possui total controle sobre a execução paralela Usa um modelo de programação Fork- Join Baseado em diretivas de compilação Suporte a paralelismo aninhado Permite controle dinâmico do número de threads

Modelo de Execução

Características Biblioteca para paralelização de código Usa #pragma para definir as regiões paralelas –Os programas ainda podem ser executados serialmente Detecta automaticamente o número de processadores –O programador não precisa saber de antemão o número de processadores disponíveis Exige suporte do compilador

Alguns exemplos

Exemplo #include main() { #pragma omp parallel { puts("Hello World"); } } 1 processador Hello World 4 processadores Hello World

Restrições Os programadores precisam fornecer os #pragmas OpenMP não detecta conflitos –É responsabilidade do programador colocar os #pragmas corretos nos lugares corretos Exige compilador –Não é apenas uma biblioteca

#pragma parallel for main() { int i; #pragma omp parallel for for(i=0;i<1000;i++) DoTask(); } 1 processador 1000 chamadas a DoTask() 4 processadores 250 chamadas a DoTask() para cada processador

#pragma parallel sections main() { #pragma omp parallel sections { #pragma omp section Task1(); #pragma omp section Task2(); #pragma omp section Task3(); #pragma omp section Task4(); } 1 processador sequential execution of the 4 tasks 4 processadores One task executed in each processor

Alguns detalhes

Para paralelizar um for A variável do loop precisar ser um inteiro sinalizado –Não serve unsigned A comparação deve ser da forma variável ou >= valor invariante O incremento deve ser uma soma ou subtração invariante com o loop –Se a comparação for < ou <= deve ser feito um incremento, caso contrário deve ser feito um decremento O loop deve ter apenas uma entrada e uma saída

Escopo das variáveis As variáveis são consideradas compartilhadas por padrão a não ser que sejam declaradas dentro do bloco #pragma As variáveis podem ser consideradas privadas se assim declaradas no #pragma #pragma omp … private(x) –O oposto de private é shared

Como paralelizar? sum = 0; for (k=0; k < 100; k++) { // func sem efeito colateral sum = sum + func(k) }

Como paralelizar? sum = 0; #pragma omp parallel for reduction(+:sum) for (k=0; k < 100; k++) { // func sem efeito colateral sum = sum + func(k) }

Outros itens Agrupar dois blocos parallel evita o overhead de parar e reiniciar as threads Colocar a opção nowait num bloco parallel evita que as threads sejam sincronizadas no final dele Utilize a opção barrier para criar barreiras no código (sincronizar as threads) Utilize a opção single para executar um bloco de código com apenas uma thread Utilize a opção master para executar um bloco de código apenas com a thread mestre A opção critical cria regiões críticas