Introdução OpenMP. Nielsen Castelo Damasceno

Documentos relacionados
OpenMP: Variáveis de Ambiente

OpenMP. Slides baseados em tutorial de Tim Mattson da Intel

Sistemas Distribuídos e Paralelos

Construtores de Sicronização em OpenMP

Introdução ao OpenMP

Paralelismo em Computadores com Tecnologia Multicore

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS

Programação de Alto Desempenho - 2. Prof: Carla Osthoff

Introdução à OpenMP (Dia 1) Prof. Guido Araujo

Programação em Paralelo OpenMP

Bibliografia. OpenMP. Disponibilidade de OpenMP. Abordagem SPMD. Nicolas Maillard

for(int x=0; x < width; x++) { for(int y=0; y < height; y++) { finalimage[x][y]=renderpixel(x,y, &scenedata); } }

UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1

Introdução aos Conceitos de Computação Paralela através da estimativa de Pi

OpenMP: Variáveis de Ambiente

Agenda. O que é OpenMP? Regiões Paralelas Construtores para Compartilhamento de

Fundamentos de Sistemas Operacionais

Introdução à programação paralela em Fortran usando OpenMP e MPI

SSC PROGRAMAÇÃO CONCORRENTE. Aula 06 Modelos de Programação Prof. Jó Ueyama e Julio Cezar Estrella

OpenMP. Aleardo Manacero Jr.

INE5645 PROGRAMAÇAO PARALELA E DISTRIBUÍDA PROVA 1 18/09/2017 ALUNO: Prof. Bosco

Variáveis em OpenMP. Esbel Tomás Valero Orellana

OpenMP. Adaptado do Material do Calebe de Paula Bianchini

ANÁLISE DE DESEMPENHO COM A PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PERFEITOS 1

COMPARAÇÃO DE DESEMPENHO ENTRE IMPLEMENTAÇÕES DO ALGORITMO JOGO DA VIDA COM PTHREAD E OPEMMP 1

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO

Computação Paralela (CUDA)

Programação Concorrente e Paralela

Introdução a Sistemas Operacionais. Adão de Melo Neto

Matheus S. Serpa, Vinícius G. Pinto, Philippe O. A. Navaux Contato: INTEL MODERN CODE PARTNER

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot

Aluno de Pós-Graduação em Engenharia de Software para Dispositivos Móveis pela UNINTER

Paralela e Distribuída. com o MPI e o OpenMP

Programação Concorrente e Paralela

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco

Introdução à Computação: Sistemas de Computação

DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES

Ferramentas para Programação em Processadores Multi-Core

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

OpenMP: Uma Introdução

Paradigmas de Computação Paralela (UCE Computação Paralela Distribuída)

Linguagem Chapel. Walter Perez Urcia. Universidade de São Paulo Instituto de Matemática e Estadística Departamento de Ciências da Computação

Introdução à Programação Aula 16. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 07: PROGRAMANDO COM THREADS EM LINGUAGEM C

Parte I Multiprocessamento

Puca Huachi Vaz Penna

What is? Eduardo Viola Nicola Disciplina de IPPD

CAP-387(2016) Tópicos Especiais em

speedup aprimorado aprimorado Fração aprimorada speedup aprimorado Fração aprimorada speedup aprimorado Tempo original Fração aprimorada aprimorado

Processos Concorrentes

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

3. Linguagem de Programação C

Programação Concorrente e Paralela. Noemi Rodriguez

SSC PROGRAMAÇÃO CONCORRENTE. Aula 03 Terminologia Geral de Computação Paralela Prof. Jó Ueyama

Sistema Distribuído. Sistema Distribuído. Aplicações Distribuídas. Conceitos Básicos

Introdução à Computação: Sistemas de Computação

OpenMP. Slides baseados em tutorial de Tim Mattson da Intel

Paralelização de Algoritmos de CFD em Clusters Multi-Core MC7. Escola de Verão Arquiteturas Multi-Core

Intel Thread Building Blocks (TBB)

Memórias Cache em Arquiteturas Multiprocessador e Multicore

ÍNDICE PARTE I INTRODUÇÃO... 6

Linguagem de Programação II

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

UNIVERSIDADE FEDERAL DO PARÁ PRÓ-REITORIA DE PESQUISA E PÓS-GRADUAÇÃO DIRETORIA DE PESQUISA PROGRAMA INSTITUCIONAL DE BOLSAS DE INICIAÇÃO CIENTÍFICA

Programação Concorrente

PROGRAMAÇÃO. Programação paralela com o OpenMP Em paralelo

Universidade Federal do Rio de Janeiro Informática DCC/IM. Arquitetura de Computadores II. Arquiteturas MIMD. Arquiteturas MIMD

INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome

Introdução ao OpenMP

Introdução à Computação: Máquinas Multiníveis

Computadores e Programação (DCC/UFRJ)

Programação Concorrente e Paralela. Noemi Rodriguez

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO

USP - ICMC - SSC SSC o. Semestre 2010 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Capítulo 6: Linguagens de Programação

Laboratório de Programação Paralela. Introdução. Prof. Carlos Bazilio

Paralela e Distribuída. Memórias Cache e Arquitecturas Multi-Processador

iversidade Federal do Rio Grande do Sul PARALELISMO NA LINGUAGEM HASKELL Vagner Franco Pereira Rodrigo Machado Lucas Mello Schnorr

Aula 01 Algoritmos e lógica de programação e introdução ao C++

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

Relatório Trabalho 1 Programação Paralela

PARALELIZAÇÃO DE ALGORITMO DE INSPEÇÃO DE ROTAS UTILIZANDO PERMUTAÇÃO LEXICOGRÁFICA 1

ENTENDENDO O FRAMEWORK FORK/JOIN DE JAVA

Aula 01 Algoritmos e lógica de programação e introdução ao C++

Arquitetura de Computadores. Prof. João Bosco Jr.

Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Filipo Mór

The future is parallel but it may not be easy

PROGRAMAÇÃO I. Introdução

Sistemas Distribuídos

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 12 - Threads e Concorrência em Java

Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos

Aplicações em CUDA. Medialab Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center

Introdução ao Python. Programa Computacional

Carlos Eduardo Batista Centro de Informática - UFPB

COMPILAÇÃO. Ricardo José Cabeça de Souza

IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias

Bibliografia em processamento paralelo

Transcrição:

Introdução OpenMP Nielsen Castelo Damasceno

Computação de auto desempenho Processamento Paralelo Memória Distribuída e Compartilhada Modelo de programação OpenMP Métricas de Desempenho

Computação de auto desempenho O desenvolvimento científico tem exigido das simulações numéricas resultados cada vez mais confiáveis e próximos da realidade. A computação científica se depara com o desafio de superar as diversas barreiras que surgem em virtude da limitação física dos computadores.

Objetivo Tem como objetivo aumentar a velocidade de processamento de simulações numéricas e viabilizar a simulação de modelos muito grandes e/ou com elevado grau de detalhes.

Arquitetura distribuída

Arquitetura distribuída

Arquitetura distribuída

Arquitetura distribuída

Arquitetura distribuída

O que é OpenMP OpenMP é uma interface de programação (API), portável, baseada no modelo de programação paralela de memória compartilhada para arquiteturas de múltiplos processadores.

Modelo de programação Paralelismo baseado em Threads : Processo de memória compartilhada que consiste de múltiplos threads ; Paralelismo explícito: O OpenMP é um recurso de programação paralela que permite ao programador total controle sobre a paralelização do código;

Histórico No início da década de 90, fabricantes de máquinas de memória compartilhada e similar, desenvolveram extensões do compilador Fortran com um conjunto especial de instruções denominadas de diretivas de execução.

Histórico O primeiro padrão, ANSI X3H5, para testes foi lançado em 1994, mas nunca foi adotado devido ao grande uso e interesse, na época, por máquinas de memória distribuída (clusters). Um novo padrão foi desenvolvido em 1997 a partir do padrão anterior, quando as arquiteturas de memória compartilhada se tornaram mais comum.

Histórico Em 28 de Outubro de 1997 foi divulgado e disponibilizado o OpenMP Fortran API e no final de 1998 foi disponibilizado o OpenMP C/C++ API. Informações do OpenMP em http://www.openmp.org/

Modelo de execução

Modelo de execução Todos os programas OpenMP começam como um processo simples: Thread Mestre. O thread mestre executa sequencialmente até a primeira definição de uma região paralela ser encontrada. FORK (bifurcar): O thread mestre cria um conjunto ( team ) de threads paralelos.

Modelo de execução Os comandos de um programa que estão inseridos na região paralela serão executados em paralelo pelos diversos threads criados. JOIN (unir): Quando o conjunto de threads completar a execução dos comandos na região paralela, os threads são sincronizados e finalizados, permanecendo apenas o thread mestre.

Modelo de execução Baseado em diretivas de compilação: Todo paralelismo do OpenMP é especificado através de diretivas de compilação. Suporta paralelismo recursivo: Permite que em uma região paralela existam outras regiões que podem ser executadas em paralelo, e assim sucessivamente. Depende da implementação OpenMP. Threads dinâmico: É possível durante a execução do programa alterar o número de threads que serão criados. Depende da implementação OpenMP

Por que usar?

Estrutura

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 a priori o número de processadores disponíveis Exige suporte do compilador

Exercício O objetivo desse exercício é entender como se compila e executa um programa utilizando OpenMP. O programa HELLO, é o mais simples possível; em paralelo várias threads irão imprimir um hello.

Hello World

Hello World

Configurando Ambiente

Configurando Ambiente

Configurando Ambiente

Configurando Ambiente Procure onde está instalado o MinGW no diretorio do codeblock e apaga. Em seguida, copie a pasta MinGW para dentro do codeblck.

Configurando Ambiente

Configurando Ambiente

Configurando Ambiente

Configurando Ambiente

Configurando Ambiente

Região paralela

Região paralela

Região paralela

Região paralela

Elementos de programação

Paralelizar soma de vetores A inserção do construtor paralelo indica que será criado um grupo de threads e que todas as threads desse grupo irão executar as mesmas instruções, ou seja, não há nenhuma divisão de trabalho.

Soma de vetores

Soma de vetores

Soma com 2 threads

Soma com 4 threads

Soma com 4 threads

Soma vetor paralelo

Soma vetor 2 threads

Soma de matrizes

Soma de matrizes

Soma de matrizes

#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 Distribui automaticamente o trabalho entre as threads.

#pragma parallel for

#Soma matriz com omp for

Condição de corrida

Condição de corrida

Condição de corrida Região crítica: Trecho de código que acessa variáveis compartilhadas entre processos ou threads. Condição de corrida: Quando mais de um processo ou thread acessa suas RCs ao mesmo tempo. Exclusão Mútua: Impedir que dois ou mais processo ou threads acessem sua RCs ao mesmo tempo.

Shared

Private

Private

Soma de matrizes

Soma de matrizes