SlideShare uma empresa Scribd logo
1 de 98
1 Programação com OpenMP:O paralelismo ao alcance de todos Prof. Dr. Gerson Geraldo H. Cavalheiro
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 2 Sumário ,[object Object],Arquiteturas multi-core Programação multithread OpenMP Prática de programação Considerações finais
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 3 Introdução Objetivos da apresentação Arquitetura de von Neumann Lei de Moore Arquiteturas paralelas Programação concorrente Motivação da programação em multi-core
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 4 Objetivos da apresentação Desenvolver as habilidades de programação concorrente em arquiteturas multi-core. Discutir os benefícios da utilização de arquiteturas multi-core no desenvolvimento de programas concorrentes. Apresentar OpenMP, uma ferramenta para programação concorrente. Abrir possibilidades de interação entre os cursos de Computação e de Meteorologia
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 5 Objetivos da apresentação Conceitos da arquitetura multi-core Evolução Arquitetura básica Produtos de mercado Programação concorrente Conceitos e princípios Programação concorrente e paralela Componentes de um programa concorrente Multiprogramação leve
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 6 Arquitetura de von Neumann Memória Processador Entrada Saída Unidade de controle Unidade lógica e aritmética Banco de registradores Modelo de von Neumann(von Neumann, 1945) Execução seqüencial Memória para dados e programas Efeito colateral
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 7 Arquiteturas paralelas Classificação de Flynn (Flynn, 1972) Segundo fluxos de controle e de dados Dados Controle
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 8 Arquiteturas paralelas MIMD Fracamente acoplado Espaço de endereçamento múltiplo Fortemente acoplado Espaço de endereçamento único UMA Uniform Memory Access NORMA NOn-Remote Memory Access NUMA Non Uniform Memory Access Classificação de Flynn (Flynn, 1972) Classificação por compartilhamento de memória Extensão a classificação de Flynn para a classe MIMD considerando a apresentação da memória
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 9 Arquiteturas paralelas UMA: Uniform Memory Access Multiprocessador Memória global a todos os processadores Tempo de acesso idêntico a qualquer endereço de memória P1 P2 Pp . . . Meio de comunicação . . . M1 Mm Configuração de uma máquina UMA com p processadores e m módulos de memória
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 10 Arquiteturas paralelas UMA: Uniform Memory Access SMP: Symmetric MultiProcessor Os processadores são idênticos e operam como definido pela arquitetura von Neumann O acesso a memória é compartilhado P1 P2 Pp . . . Barramento ou crossbar Memória
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 11 Programação concorrente Concorrência Possibilidade de execução simultânea de dois ou mais fluxos de execução, não impedindo disputa por recursos Importante: a definição inclui a idéia de disputa por recursos mas não é restrita à ela! A concorrência incorpora a idéia de que existe uma convergência dos fluxos para um ponto comum Uma eventual sincronização A produção do resultado final E também para idéia de ação colaborativa
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 12 Programação concorrente Concorrência Indica independência temporal O número de atividades concorrentes pode ser maior que a quantidade de recursos de processamento disponíveis Paralelismo Indica execução simultânea A quantidade de recursos de processamento disponível permite que duas ou mais atividades sejam executadas simultaneamente É usual utilizar a expressão programação paralela para o tipo de programação focada em desempenho Na nossa terminologia, programação paralela e programação concorrente são utilizadas com o mesmo significado
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 13 Motivação da programação em multi-core Tendência Limites tecnológicos para aumento de desempenho com foco no aumento da freqüência de clock Arquiteturas com menor consumo de energia Grande problema da sociedade moderna Ainda mais cores no futuro próximo Facilidade de exploração Reflete naturalmente o modelo de programação multithread Suportado pelos SOs atuais Oportunidade Migração das maioria das aplicações desenvolvidas para mono-core Aumento de desempenho Execução paralela de aplicações em HW de baixo custo
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 14 Sumário ,[object Object]
Arquiteturas multi-coreProgramação multithread OpenMP Prática de programação Considerações finais
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 15 Arquiteturas multi-core Arquitetura SMP Multiprocessamento em um chip O multi-core Produtos comerciais
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 16 Estado Estado Estado Interrupção Interrupção Interrupção ULA ULA ULA Memória Arquitetura SMP Symmetric MultiProcessor Arquitetura paralela dotada de um conjunto de processadores idênticos (simétricos) compartilhando acesso a uma área de memória comum CPUs
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 17 Arquitetura SMP Symmetric MultiProcessor Arquitetura paralela dotada de um conjunto de processadores idênticos (simétricos) compartilhando acesso a uma área de memória comum SO único responsável pelo escalonamento de atividades (fluxos de execução) entre os processadores Cada CPU replica todo conjunto de recursos necessários à execução de um fluxo. Fator limitante de desempenho: contenção no acesso à memória
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 18 Estado Estado Estado Interrupção Interrupção Interrupção ULA ULA ULA O multi-core Tecnologia em hardware na qual múltiplos cores são integrados em um único chip Multiplicação total dos recursos de processamento CPUs (cores) Processador (chip) Cache Cache Cache Cache Memória
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 19 O multi-core Tecnologia em hardware na qual múltiplos cores são integrados em um único chip Multiplicação total dos recursos de processamento Grande vantagem: compatível com os códigos existentes!
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 20 O multi-core Estado Estado Interrupção Interrupção Estado Estado Estado Interrupção Interrupção Interrupção ULA ULA ULA ULA Cache Memória Cache Cache Cache Processador HyperThreading Memória Estado Estado Estado Multiprocessador SMP Interrupção Interrupção Interrupção ULA ULA ULA Cache Memória Processador multi-core Comparativo – visão macro
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 21 Ilustração Multi-corearchitecture http://cache-www.intel.com/cd/00/00/24/49/244978_244978.swf Fonte: intel.com Explore a dual core OpteronTM http://www.amd.com/us-en/assets/content_type/Additional/33635BDual-CoreDiagramFIN.swf Fonte: amd.com Imagem ilustrativa
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 22 Sumário ,[object Object]
Arquiteturas multi-core
Programação multithreadFerramentas de programação Prática de programação Considerações finais
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 23 Sumário ,[object Object]
Arquiteturas multi-coreProgramação multithread OpenMP Prática de programação Considerações finais
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 24 Programação multithread Programação concorrente Thread Casos de estudo Paralelismo de tarefas Paralelismo de dados
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 25 Programação concorrente Programação concorrente Voltada às questões da aplicação Programação paralela Voltada às questões do hardware disponível Execução concorrente Competição no acesso a recursos de hardware Execução paralela Replicação de recursos de hw permite simultaneidade
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 26 Programação concorrente Programação concorrente, pois A programação concorrente inclui a programação paralela Permite focar nas questões da aplicação Ou seja, não requer do programador conhecimentos sobre o hardware paralelo disponível Idealmente: alto grau de portabilidade Considerando que a ferramenta de programação possui um modelo de execução eficiente
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 27 Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Contexto de trabalho no curso Execução segundo a arquitetura de von Neumann Programa seqüencial é composto por: Uma seqüência de instruções  Um conjunto de dados Execução seqüencial Instruções modificam estados de memória Efeito colateral A execução de uma instrução implica na alteração de um estado (posição de memória)
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 28 Efeito da execução de uma instrução: Escrita em memória Comunicação Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Execução segundo a arquitetura de von Neumann Execução seqüencial: I1: MOV DX, 0 I2: MOV AX, [313] I3: ADD DX, AX I4: DEC AX I5: CMP AX, 0 I6: JNE I3 I7: MOV AX, [313] I8: CALL RotinaImpressão
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 29 Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Execução segundo a arquitetura de von Neumann Execução seqüencial: I1: MOV DX, 0 I2: MOV AX, [313] I3: ADD DX, AX I4: DEC AX I5: CMP AX, 0 I6: JNE I3 I7: MOV AX, [313] I8: CALL RotinaImpressão I1 I2 I7 I8 I3 I4 I5 I6
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 30 Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Execução segundo a arquitetura de von Neumann Execução seqüencial: Unidade execução: a instrução Comunicação: alteração de um estado de memória Sincronização: implícita, pois uma instrução não é executada antes que a anterior termine Execução concorrente deve, igualmente, definir: A unidade de execução elementar O mecanismo de comunicação utilizado A coordenação da execução para controle do acesso aos dados
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 31 Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Execução segundo a arquitetura de von Neumann Ferramentas de programação multithread oferecem recurso para: Definir unidades de execução em termos de conjuntos de instruções ou procedimentos Identificar regiões de memória (dados) compartilhados entre as unidades de execução Controlar acesso aos dados compartilhados
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 32 Programação concorrente Modelos de Decomposição Paralela Paralelismo de tarefas O paralelismo é definido em termos de atividades independentes, processando sobre conjunto de dados distintos. Sincronização no início e no fim da execução concorrente e, eventualmente, durante a execução. Paralelismo de dados O paralelismo é definido em termos de dados que podem sofrer a execução da mesma operação de forma independente. Sincronização no início e no final da execução concorrente.
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 33 Modelo Arquitetura Ferramenta de programação Programação concorrente Modelos de programação Oferecem “níveis de abstração” dos recursos oferecidos pelas arquiteturas e pelas ferramentas Ferramentas oferecem recursos para programação de arquiteturas reais É possível que uma ferramenta permita a exploração de mais de um tipo de paralelismo ou a utilização de diferentes modelos de concorrência. No entanto, cada ferramenta é mais conveniente para um determinado esquema
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 34 Thread Processo leve Noção de processo Um programa define uma seqüência de instruções e um conjunto de dados Um processo representa uma instância de um programa em execução. A seqüência de instruções do programa define um fluxo de execução a ser seguido e o espaço de endereçamento utilizado. O processo também possui associado o registro de recursos que utiliza e é manipulado pelo sistema operacional.
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 35 Thread Processo leve Noção de processo Memória Pilha programa.exe Reg $> programa.exe PCB
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 36 Thread Processo leve Noção de processo Informações no PCB (Process Control Block) Process ID User and User Grup ID Diretório de trabalho Descritor de arquivos Manipuladores de sinais Bibliotecas de compartilhadas Ferramentas de comunicação (pipes, semáforos etc)
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 37 Thread Processo leve Noção de processo Processo multithread Um programa define várias seqüência de instruções e um conjunto de dados Uma thread representa uma instância de uma seqüência de instruções em execução. Cada seqüência de instruções do programa define um fluxo de execução a ser seguido e os dados o espaço de endereçamento utilizado. As threads compartilham o registro de recursos que utilizados pelo processo.
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 38 A() A() E()  A()  D() Programa fonte  B()  E()  C()  F() Thread Processo leve Noção de processo Processo multithread Memória Processo com múltiplas threads
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 39 Thread Processo leve Noção de processo Processo multithread Os fluxos são independentes Competição pelos recursos da arquitetura Trocas de dados através de leituras e escritas em memória Competição pelos aos dados na memória compartilhada
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 40 Thread Processo leve Noção de processo Processo multithread Memória Pilha Pilha Pilha Reg Reg Reg PCB
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 41 Memória Thread Processo leve Noção de processo Processo multithread Acesso ao dado compartilhado através de operações de leitura e escrita convencionais Escrita: Dado = valor Leitura: variável = Dado
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 42 Thread Processo leve Noção de processo Processo multithread Acesso ao dado compartilhado através de operações de leitura e escrita convencionais O programador é responsável por introduzir instruções para sincronização entre fluxos Memória
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 43 Thread Processo leve Noção de processo Processo multithread Acesso a dado Instruções de sincronização Seção crítica: trecho de código com instruções que manipulam dado compartilhado entre fluxos de execução distintos Memória
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 44 Thread Processo leve Thread: custo de manipulação reduzido em relação ao processo Chaveamento de contexto em tempo menor Comunicação entre threads via memória compartilhada Criação/Destruição de threads mais eficiente que de processos Informações de cada thread Pilha Registradores Propriedades de escalonamento (prioridade, política) Sinais pendentes ou bloqueados Dados específicos do thread (errno)
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 45 SMP Mais leves Compromisso Thread 1 : 1 N : 1 M : N Implementações Thread sistema Thread usuário Misto
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 46 Thread Modelos de Threads - N : M Memória Modelo misto gerenciamento tanto no espaço usuário quanto pelo sistema operacional Escalonamento Escalonamento
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 47 Thread Modelos de Threads - N : M Memória ,[object Object],  descrição da concorrência   existente na aplicação do   paralelismo real existente   na arquitetura Vantagens Escalonamento Escalonamento
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 48 Thread Modelos de Threads - N : M Memória ,[object Object]
 ...Porém... Escalonamento Escalonamento
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 49 Thread Erros comuns na programação Considerar uma ordem de execução dos threads Erro: Introduzir no algoritmo uma premissa que considere a ordem de execução dos threads Conseqüência: Aordem de execução é dada pela heurística de escalonamento, sendo estabelecida em tempo de execução. Normalmente esta heurística também considera fatores que são externos ao programa. Qualquer premissa no algoritmo que considere a ordem de execução fatalmente irá produzir um programa incorreto Solução: Caso seja necessário definir uma ordem de execução para os threads devem ser utilizadas as primitivas específicas de sincronização disponibilizadas pela ferramenta utilizada
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 50 Thread Erros comuns na programação ,[object Object],Acesso simultâneo a um dado por dois (ou mais) threads Data-race Erro: Não controlar o acesso ao espaço de endereçamento compartilhado pelos threads Conseqüência: Incoerência do estado da execução pela manipulação simultânea e não controlada dos dados Solução: Identificar os dados passíveis de acesso simultâneo por dois (ou mais) threads e proteger sua manipulação pelo uso de mecanismos de sincronização
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 51 Thread Erros comuns na programação ,[object Object]
Acesso simultâneo a um dado por dois (ou mais) threadsPostergação indefinida Deadlock Erro: Não sinalizar uma condição de saída de uma sincronização Conseqüência: Um (ou mais) thread(s) permanecem bloqueados aguardando uma sincronização Solução: Garantir que todos as condições de saída de sincronizações sejam efetuadas
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 52 Caso de estudo: OpenMP Paralelismo explícito O programador deve introduzir diretivas para gerar e controlar a execução paralela do programa Diferentes níveis de abstração Paralelismo de dados Paralelismo de tarefa OpenMP Diretivas de compilação / Biblioteca de serviços Paralelismo aninhado
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 53 Sumário ,[object Object]
Arquiteturas multi-core
Programação multithread
OpenMPPrática de programação Considerações finais
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 54 OpenMP Execução Compilação Ligação + + = + = Fonte Objeto Executável Variáveis de ambiente Diretivas OpenMP Biblioteca de serviços Interface de programação aplicativa (API) para desenvolvimento de aplicações multithread em C/C++ e Fortran Define Diretivas de compilação Biblioteca de serviços Variáveis de ambiente
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 55 OpenMP Interface de programação aplicativa (API) para desenvolvimento de aplicações multithread em C/C++ e Fortran Define Diretivas de compilação Biblioteca de serviços Variáveis de ambiente Busca estabelecer um padrão AINSI X3H5 como primeira tentativa Esforço iniciado de um grupo de fabricantes de hardware e desenvolvedores de software (Fujitsu, HP, IBM, Intel, Sun, DoE ASC, Compunity, EPCC, KSL, NASA Ames, NEC, SGI, ST Micro/PG, ST Micro/Portland Group, entre outros)
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 56 OpenMP API para C/C++ Variáveis de ambiente OMP_NOME Diretivas de compilação #pragma omp diretiva [cláusula] Biblioteca de serviços omp_serviço( ... );
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 57 API para C/C++ Variáveis de ambiente OMP_NOME Identifica o número de atividades que serão executadas em paralelo OMP_NUM_THREADS Indica se o número de atividades a serem executadas em paralelo deve ou não ser ajustado dinamicamente OMP_DYNAMIC Indica se deve ser contemplado ativação de paralelismo aninhado OMP_NESTED Define esquema de escalonamento das atividades paralelas  OMP_SCHEDULE ,[object Object]
Variáveis de ambienteOMP_NOME ,[object Object],OMP_NUM_THREADS    (default: número de processadores) ,[object Object],OMP_DYNAMIC        (default: FALSE) ,[object Object],OMP_NESTED (default: FALSE) ,[object Object],OMP_SCHEDULE       (default: estático) OpenMP
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 58 OpenMP Opcionais aceitos pela diretiva OpenMP Determinação da diretiva OpenMP Sentinela de uma diretiva OpenMP (C/C++) API para C/C++ Diretivas Formato: #pragma omp diretiva [cláusula] Exemplo: #pragma omp parallel default(shared) private(x,y)
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 59 OpenMP API para C/C++ Biblioteca de serviços Permitem controlar e interagir com o ambiente de execução. Formato: retorno omp_serviço( [parâmetros] ); Exemplos: void omp_set_num_threads( 10 ); int omp_get_num_threads();  void omp_set_nested( 1 ); int omp_get_num_procs();
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 60 OpenMP Modelo M:N Devem ser indicadas as atividades concorrentes da aplicação Regiões paralelas Deve ser informado o paralelismo da arquitetura Time Deve ser informado o esquema de escalonamento das atividades paralelas nos threads que compõem o time Estratégia de escalonamento
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 61 OpenMP Modelo M:N Devem ser indicadas as atividades concorrentes da aplicação Regiões paralelas Deve ser informado o paralelismo da arquitetura Time Deve ser informado o esquema de escalonamento das atividades paralelas nos threads que compõem o time Estratégia de escalonamento Diretivas na programação OMP_NUM_THREADS: inicial OMP_DYNAMIC: ajuste dinâmico OMP_NESTED: criação de novos times static dynamic guided
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 62 OpenMP fork thread master concorrência da aplicação join Modelo básico de execução Fork / Join O programador descreve a concorrência de sua aplicação .............
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 63 OpenMP Modelo básico de execução Fork / Join O programador descreve a concorrência de sua aplicação A execução se da por um time de threads concorrência da aplicação Escalonamento time de threads de execução
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 64 OpenMP     fork .............. join Primeiro programa #include <omp.h> main ( ) {  // Código seqüencial (master) #pragmaompparallel { // Início do código concorrente // Código paralelo } // Fim do código concorrente  // Código seqüencial (master) } São executadas tantas instâncias do código paralelo quanto forem o número de threads no time.
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 65 OpenMP tcsh $> icpc –openmp primeiro.c $> setenv OMP_NUM_THREADS 4 $> ./a.out $> Primeiro programa Primeira sessão (Linux)
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 66 OpenMP Programa mais elaborado #include <omp.h> main ()  { int nthreads, tid; #pragma omp parallel private(tid)   {    tid = omp_get_thread_num();    printf("Oi mundo, sou o thread %d", tid);    if( tid == 0 ) {      nthreads = omp_get_num_threads();      printf("Total de threads: %d", nthreads);    }   } } Lendo o programa: ,[object Object]
Fork
Join
Cópia de dados privado ao thread
Seção paralela
Identificação do thread master,[object Object]
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 68 OpenMP Dado compartilhado Região paralela Programação Diretiva: sections main ()  { int x; #pragma omp sections   {    #pragma omp section    {     foo(x);    }    #pragma omp section    {     bar(x);    }   } }
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 69 OpenMP Programação Diretiva: sections Cláusulas aceitas private firstprivate lastprivate reduction nowait
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 70 Dado compartilhado Região paralela Número de instâncias == Número de threads no time Cada execução manipula uma instância do dado. As cópias locais não são inicializadas! OpenMP Programação Diretiva: parallel Cláusula private main ()  { int x, y; #pragma omp parallel private(y)   {    y = x + 1;   } }
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 71 OpenMP Pode ser last e first ao mesmo tempo! Programação Diretiva: parallel Cláusula private Cláusulas alternativas: firstprivate Cada cópia local é inicializada com o valor que o dado possui no escopo do thread master lastprivate O dado no escopo do thread master é atualizado com o valor da última avaliação da região paralela Exemplo #pragma omp parallel lastprivate(y) firstprivate(y)
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 72 Novo número de threads no time OpenMP Programação Diretiva: parallel Serviçoomp_set_num_threads main ()  { int x, y; omp_set_num_threads( 5 ); #pragma omp parallel private(y)   {    y = x + 1;   } }
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 73 OpenMP int soma = 100; omp_set_num_threads( 4 ); #pragma omp parallel reduction( + : soma )   {    soma += 1;   } // No retorno ao master: soma = 104 Exemplo: Programação Diretiva: parallel Cláusula reduction Cada execução pode manipular sua cópia, como em private O valor local inicial é definido pela operação de redução No final uma operação de redução atualiza o dado no thread master
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 74 OpenMP Operações de redução: Operador + - * & && | || ^ Operação Soma Subtração Multiplicação E aritmético E lógico OU artitmético OU lógico XOR aritmético Valor inicial 0 0 1 -1 1 0 0 0 Programação Diretiva: parallel Cláusula reduction Cada execução pode manipular sua cópia, como em private O valor local inicial é definido pela operação de redução No final uma operação de redução atualiza o dado no thread master
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 75 OpenMP Programação Diretiva: parallel Cláusulas aceitas reduction private firstprivate shared default copyin if num_threads
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 76 OpenMP Programação Diretiva: for / parallel for Permite que os grupos de instruções definidas em um loop sejam paralelizadas Note: for e paralell for não é exatamente igual for: restringe o número de cláusulas aceitas parallel for: aceita todas as cláusulas do for e do parallel
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 77 OpenMP Programação Diretiva: for / parallel for Permite que os grupos de instruções definidas em um loop sejam paralelizadas Exemplo: intvet[100], i, soma = 0; #pragmaompparallel for private(i)  for( i = 0 ; i < 100 ; i++ ) vet[i] = i; #pragma omp parallel for private(i) reduction(+:soma)  for( i = 0 ; i < 100 ; i++ ) soma = soma + vet[i]; printf( "Somatorio: %d", soma );
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 78 OpenMP Programação Diretiva: for / parallel for Permite que os grupos de instruções definidas em um loop sejam paralelizadas Exemplo: intmat[TAM][TAM], aux[TAM][TAM], i, j; inicializa(mat); copia(mat, aux); while( não estabilizou os resultados ) {   #pragmaompparallel for    for( i = 0 ; i < TAM ; i++ )    #pragmaompparallel for for( j = 0 ; j < TAM ; j++ ) mat[i][j] = func(aux, i, j, ...);   copia(mat,aux); }
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 79 OpenMP Programação Diretiva: for / parallel for Permite que os grupos de instruções definidas em um loop sejam paralelizadas Regras: A variável de iteração é tornada local implicitamente no momento em que um loop é paralelizado A variável de iteração e o valor de teste necessitam ser inteiros e com sinal A variável de iteração deve ser incrementa ou decrementada, não são permitidas outras operações Os testes são: <, >, <=, >= Não é permitido: for( i = 0 ; i < 100 ; vet[i++] = 0 ); #pragma omp parallel for private(i)  for( i = 0 ; i < 100 ; i++ ) vet[i] = i;
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 80 OpenMP Programação Diretiva: critical[(nome)] Permite que trechos de código sejam executados em regime de exclusão mútua É possível associar nomes aos trechos int x, y; intprox_x, prox_y; #pragmaompparallelshared(x, y) private(prox_x, prox_y)  { #pragmaompcritical(eixox) prox_x = dequeue( x ); trataFoo( prox_x, x ); #pragmaompcritical(eixoy) prox_y = dequeue( y ); trataFoo( prox_y, y ); }
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 81 OpenMP Programação Diretiva: single [nowait] Indica, em uma região paralela, um trecho de código que deve ser executado apenas por um único thread Representa uma barreira Com nowait a barreira pode ser relaxada #pragma omp parallel  { #pragma omp single   printf("Serao %d threads", omp_get_num_threads() );   foo();  #pragma omp single nowait    printf("O threads %d terminou", omp_get_thread_num() ); }
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 82 OpenMP Programação Diretiva: master [nowait] Indica, em uma região paralela, um trecho de código que deve ser executado apenas thread master Representa uma barreira Com nowait a barreira pode ser relaxada #pragma omp parallel  { #pragma omp master   printf("Serao %d threads", omp_get_num_threads() );   foo();  #pragma omp master nowait    printf("O thread master terminou" ); }
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 83 OpenMP Programação Diretiva: flush [(dados)] Força a atualização dos dados compartilhados entre os threads em memória Representa uma barreira, garantindo que todas as operações realizadas por todos os threads até o momento do flush foram realizadas
Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 84 OpenMP Programação Cláusula: schedule(static|dynamic|guided) Indica qual estratégia deve ser utilizada para distribuir trabalho entre os threads do time static Implica na divisão do trabalho por igual entre cada thread Indicado quando a quantidade de trabalho em cada grupo de instruções (como em cada iteração em um for) é a a mesma dynamic Cada thread busca uma nova quantidade de trabalho quando terminar uma etapa de processamento Indicado quando a quantidade de trabalho em cada grupo de instruções (como em cada iteração em um for) não for a mesma guided Semelhante ao dynamic, mas com divisão não uniforme na divisão das tarefas Indicado quando existe execução assíncrona (cláusula nowait anterior)

Mais conteúdo relacionado

Destaque

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
 
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
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefastarcisioti
 
Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronFrederico Madeira
 
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
 
Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14Leandro Almeida
 
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
 

Destaque (20)

Aula CRONTAB
Aula CRONTABAula CRONTAB
Aula CRONTAB
 
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
 
Curso openmp
Curso openmpCurso openmp
Curso openmp
 
OpenMP Day 3
OpenMP Day 3OpenMP Day 3
OpenMP Day 3
 
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
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
OpenMP Day 2
OpenMP Day 2OpenMP Day 2
OpenMP Day 2
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefas
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o Cron
 
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!)
 
OpenMP Day1
OpenMP Day1OpenMP Day1
OpenMP Day1
 
Lab so-abertos-unidade14
Lab so-abertos-unidade14Lab so-abertos-unidade14
Lab so-abertos-unidade14
 
CUDA/Open CL
CUDA/Open CLCUDA/Open CL
CUDA/Open CL
 
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
 
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
 

Semelhante a XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª feira]

Apostila php
Apostila phpApostila php
Apostila phpfelgamer
 
Apostila básica de PHP
Apostila básica de PHPApostila básica de PHP
Apostila básica de PHPKratos879
 
.NET Core e ASP.NET Core: Presente e Futuro - .NET SP - Novembro/2018
.NET Core e ASP.NET Core: Presente e Futuro - .NET SP - Novembro/2018.NET Core e ASP.NET Core: Presente e Futuro - .NET SP - Novembro/2018
.NET Core e ASP.NET Core: Presente e Futuro - .NET SP - Novembro/2018Renato Groff
 
Fundamentos da Linguagem Digital - Módulo 01
Fundamentos da Linguagem Digital - Módulo 01Fundamentos da Linguagem Digital - Módulo 01
Fundamentos da Linguagem Digital - Módulo 01midiasdigitais
 
Programacao_Concorrente slide.pdf
Programacao_Concorrente slide.pdfProgramacao_Concorrente slide.pdf
Programacao_Concorrente slide.pdfMuseiwaLopes
 
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Renato Groff
 
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework CoreUm novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework CoreRogério Moraes de Carvalho
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Renato Groff
 
Programação concorrente
Programação concorrenteProgramação concorrente
Programação concorrenteFabio Duarte
 
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não WindowsPalestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não WindowsAlessandro Binhara
 
O Projeto Mono: Aplicações .NET para sistemas não Windows
O Projeto Mono: Aplicações .NET para sistemas não WindowsO Projeto Mono: Aplicações .NET para sistemas não Windows
O Projeto Mono: Aplicações .NET para sistemas não WindowsAlessandro Binhara
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Renato Groff
 

Semelhante a XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª feira] (20)

Apostila php
Apostila phpApostila php
Apostila php
 
Apostila básica de PHP
Apostila básica de PHPApostila básica de PHP
Apostila básica de PHP
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
.NET Open Source
.NET Open Source.NET Open Source
.NET Open Source
 
.NET Core e ASP.NET Core: Presente e Futuro - .NET SP - Novembro/2018
.NET Core e ASP.NET Core: Presente e Futuro - .NET SP - Novembro/2018.NET Core e ASP.NET Core: Presente e Futuro - .NET SP - Novembro/2018
.NET Core e ASP.NET Core: Presente e Futuro - .NET SP - Novembro/2018
 
Fundamentos da Linguagem Digital - Módulo 01
Fundamentos da Linguagem Digital - Módulo 01Fundamentos da Linguagem Digital - Módulo 01
Fundamentos da Linguagem Digital - Módulo 01
 
Apostila de devc++ novo
Apostila de devc++ novoApostila de devc++ novo
Apostila de devc++ novo
 
Programacao_Concorrente slide.pdf
Programacao_Concorrente slide.pdfProgramacao_Concorrente slide.pdf
Programacao_Concorrente slide.pdf
 
Int305 projeto mono-final
Int305 projeto mono-finalInt305 projeto mono-final
Int305 projeto mono-final
 
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
 
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework CoreUm novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
apostila de dev.pdf
apostila de dev.pdfapostila de dev.pdf
apostila de dev.pdf
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Programação concorrente
Programação concorrenteProgramação concorrente
Programação concorrente
 
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não WindowsPalestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
 
O Projeto Mono: Aplicações .NET para sistemas não Windows
O Projeto Mono: Aplicações .NET para sistemas não WindowsO Projeto Mono: Aplicações .NET para sistemas não Windows
O Projeto Mono: Aplicações .NET para sistemas não Windows
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
 

Mais de Dafmet Ufpel

O desafio da modelagem de dispersão e química de poluentes
O desafio da modelagem de dispersão e química de poluentesO desafio da modelagem de dispersão e química de poluentes
O desafio da modelagem de dispersão e química de poluentesDafmet Ufpel
 
Experiências em estudos de clima urbano
Experiências em estudos de clima urbanoExperiências em estudos de clima urbano
Experiências em estudos de clima urbanoDafmet Ufpel
 
O desafio de comunicar a Meteorologia - por Estael Sias
O desafio de comunicar a Meteorologia - por Estael SiasO desafio de comunicar a Meteorologia - por Estael Sias
O desafio de comunicar a Meteorologia - por Estael SiasDafmet Ufpel
 
Química da Estratosfera e o buraco na camada de ozônio
Química da Estratosfera e o buraco na camada de ozônioQuímica da Estratosfera e o buraco na camada de ozônio
Química da Estratosfera e o buraco na camada de ozônioDafmet Ufpel
 
Employing heisenberg’s turbulent spectral transfer theory to
Employing heisenberg’s turbulent spectral transfer theory toEmploying heisenberg’s turbulent spectral transfer theory to
Employing heisenberg’s turbulent spectral transfer theory toDafmet Ufpel
 
Eventos de Chuva Intensa na região sul do Brasil
Eventos de Chuva Intensa na região sul do BrasilEventos de Chuva Intensa na região sul do Brasil
Eventos de Chuva Intensa na região sul do BrasilDafmet Ufpel
 
Meteorologia na EACF
Meteorologia na EACFMeteorologia na EACF
Meteorologia na EACFDafmet Ufpel
 
Mudanças climaticas samet
Mudanças climaticas   sametMudanças climaticas   samet
Mudanças climaticas sametDafmet Ufpel
 
Apresentação redec 4 evento 07-12-2012
Apresentação redec 4   evento 07-12-2012Apresentação redec 4   evento 07-12-2012
Apresentação redec 4 evento 07-12-2012Dafmet Ufpel
 
Seminário samet 2012
Seminário samet 2012Seminário samet 2012
Seminário samet 2012Dafmet Ufpel
 
Estratosfera semana acadêmica
Estratosfera   semana acadêmicaEstratosfera   semana acadêmica
Estratosfera semana acadêmicaDafmet Ufpel
 
Meteorologia aplicada aos ecossistemas santiago vianna cuadra
Meteorologia aplicada aos ecossistemas   santiago vianna cuadraMeteorologia aplicada aos ecossistemas   santiago vianna cuadra
Meteorologia aplicada aos ecossistemas santiago vianna cuadraDafmet Ufpel
 
Semana acadêmica ufpel
Semana acadêmica ufpelSemana acadêmica ufpel
Semana acadêmica ufpelDafmet Ufpel
 
Edital de convocacao para as eleicoes do dafmet 2012
Edital de convocacao para as eleicoes do dafmet 2012Edital de convocacao para as eleicoes do dafmet 2012
Edital de convocacao para as eleicoes do dafmet 2012Dafmet Ufpel
 
vaga de estagio 2011 - Meteorologia
vaga de estagio 2011 - Meteorologiavaga de estagio 2011 - Meteorologia
vaga de estagio 2011 - MeteorologiaDafmet Ufpel
 
A experiência do SIMEPAR no monitoramento de tempestades severas
A experiência do SIMEPAR no monitoramento de tempestades severasA experiência do SIMEPAR no monitoramento de tempestades severas
A experiência do SIMEPAR no monitoramento de tempestades severasDafmet Ufpel
 
Cartaz Semana Academica
Cartaz Semana AcademicaCartaz Semana Academica
Cartaz Semana AcademicaDafmet Ufpel
 

Mais de Dafmet Ufpel (20)

O desafio da modelagem de dispersão e química de poluentes
O desafio da modelagem de dispersão e química de poluentesO desafio da modelagem de dispersão e química de poluentes
O desafio da modelagem de dispersão e química de poluentes
 
Experiências em estudos de clima urbano
Experiências em estudos de clima urbanoExperiências em estudos de clima urbano
Experiências em estudos de clima urbano
 
O desafio de comunicar a Meteorologia - por Estael Sias
O desafio de comunicar a Meteorologia - por Estael SiasO desafio de comunicar a Meteorologia - por Estael Sias
O desafio de comunicar a Meteorologia - por Estael Sias
 
Química da Estratosfera e o buraco na camada de ozônio
Química da Estratosfera e o buraco na camada de ozônioQuímica da Estratosfera e o buraco na camada de ozônio
Química da Estratosfera e o buraco na camada de ozônio
 
Employing heisenberg’s turbulent spectral transfer theory to
Employing heisenberg’s turbulent spectral transfer theory toEmploying heisenberg’s turbulent spectral transfer theory to
Employing heisenberg’s turbulent spectral transfer theory to
 
Eventos de Chuva Intensa na região sul do Brasil
Eventos de Chuva Intensa na região sul do BrasilEventos de Chuva Intensa na região sul do Brasil
Eventos de Chuva Intensa na região sul do Brasil
 
Meteorologia na EACF
Meteorologia na EACFMeteorologia na EACF
Meteorologia na EACF
 
Capincho cumulus
Capincho cumulusCapincho cumulus
Capincho cumulus
 
Mudanças climaticas samet
Mudanças climaticas   sametMudanças climaticas   samet
Mudanças climaticas samet
 
Apresentação redec 4 evento 07-12-2012
Apresentação redec 4   evento 07-12-2012Apresentação redec 4   evento 07-12-2012
Apresentação redec 4 evento 07-12-2012
 
Seminário samet 2012
Seminário samet 2012Seminário samet 2012
Seminário samet 2012
 
Estratosfera semana acadêmica
Estratosfera   semana acadêmicaEstratosfera   semana acadêmica
Estratosfera semana acadêmica
 
Meteorologia aplicada aos ecossistemas santiago vianna cuadra
Meteorologia aplicada aos ecossistemas   santiago vianna cuadraMeteorologia aplicada aos ecossistemas   santiago vianna cuadra
Meteorologia aplicada aos ecossistemas santiago vianna cuadra
 
Semana acadêmica ufpel
Semana acadêmica ufpelSemana acadêmica ufpel
Semana acadêmica ufpel
 
Samet2012
Samet2012Samet2012
Samet2012
 
Empreendedorismo
EmpreendedorismoEmpreendedorismo
Empreendedorismo
 
Edital de convocacao para as eleicoes do dafmet 2012
Edital de convocacao para as eleicoes do dafmet 2012Edital de convocacao para as eleicoes do dafmet 2012
Edital de convocacao para as eleicoes do dafmet 2012
 
vaga de estagio 2011 - Meteorologia
vaga de estagio 2011 - Meteorologiavaga de estagio 2011 - Meteorologia
vaga de estagio 2011 - Meteorologia
 
A experiência do SIMEPAR no monitoramento de tempestades severas
A experiência do SIMEPAR no monitoramento de tempestades severasA experiência do SIMEPAR no monitoramento de tempestades severas
A experiência do SIMEPAR no monitoramento de tempestades severas
 
Cartaz Semana Academica
Cartaz Semana AcademicaCartaz Semana Academica
Cartaz Semana Academica
 

XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª feira]

  • 1. 1 Programação com OpenMP:O paralelismo ao alcance de todos Prof. Dr. Gerson Geraldo H. Cavalheiro
  • 2.
  • 3. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 3 Introdução Objetivos da apresentação Arquitetura de von Neumann Lei de Moore Arquiteturas paralelas Programação concorrente Motivação da programação em multi-core
  • 4. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 4 Objetivos da apresentação Desenvolver as habilidades de programação concorrente em arquiteturas multi-core. Discutir os benefícios da utilização de arquiteturas multi-core no desenvolvimento de programas concorrentes. Apresentar OpenMP, uma ferramenta para programação concorrente. Abrir possibilidades de interação entre os cursos de Computação e de Meteorologia
  • 5. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 5 Objetivos da apresentação Conceitos da arquitetura multi-core Evolução Arquitetura básica Produtos de mercado Programação concorrente Conceitos e princípios Programação concorrente e paralela Componentes de um programa concorrente Multiprogramação leve
  • 6. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 6 Arquitetura de von Neumann Memória Processador Entrada Saída Unidade de controle Unidade lógica e aritmética Banco de registradores Modelo de von Neumann(von Neumann, 1945) Execução seqüencial Memória para dados e programas Efeito colateral
  • 7. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 7 Arquiteturas paralelas Classificação de Flynn (Flynn, 1972) Segundo fluxos de controle e de dados Dados Controle
  • 8. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 8 Arquiteturas paralelas MIMD Fracamente acoplado Espaço de endereçamento múltiplo Fortemente acoplado Espaço de endereçamento único UMA Uniform Memory Access NORMA NOn-Remote Memory Access NUMA Non Uniform Memory Access Classificação de Flynn (Flynn, 1972) Classificação por compartilhamento de memória Extensão a classificação de Flynn para a classe MIMD considerando a apresentação da memória
  • 9. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 9 Arquiteturas paralelas UMA: Uniform Memory Access Multiprocessador Memória global a todos os processadores Tempo de acesso idêntico a qualquer endereço de memória P1 P2 Pp . . . Meio de comunicação . . . M1 Mm Configuração de uma máquina UMA com p processadores e m módulos de memória
  • 10. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 10 Arquiteturas paralelas UMA: Uniform Memory Access SMP: Symmetric MultiProcessor Os processadores são idênticos e operam como definido pela arquitetura von Neumann O acesso a memória é compartilhado P1 P2 Pp . . . Barramento ou crossbar Memória
  • 11. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 11 Programação concorrente Concorrência Possibilidade de execução simultânea de dois ou mais fluxos de execução, não impedindo disputa por recursos Importante: a definição inclui a idéia de disputa por recursos mas não é restrita à ela! A concorrência incorpora a idéia de que existe uma convergência dos fluxos para um ponto comum Uma eventual sincronização A produção do resultado final E também para idéia de ação colaborativa
  • 12. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 12 Programação concorrente Concorrência Indica independência temporal O número de atividades concorrentes pode ser maior que a quantidade de recursos de processamento disponíveis Paralelismo Indica execução simultânea A quantidade de recursos de processamento disponível permite que duas ou mais atividades sejam executadas simultaneamente É usual utilizar a expressão programação paralela para o tipo de programação focada em desempenho Na nossa terminologia, programação paralela e programação concorrente são utilizadas com o mesmo significado
  • 13. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 13 Motivação da programação em multi-core Tendência Limites tecnológicos para aumento de desempenho com foco no aumento da freqüência de clock Arquiteturas com menor consumo de energia Grande problema da sociedade moderna Ainda mais cores no futuro próximo Facilidade de exploração Reflete naturalmente o modelo de programação multithread Suportado pelos SOs atuais Oportunidade Migração das maioria das aplicações desenvolvidas para mono-core Aumento de desempenho Execução paralela de aplicações em HW de baixo custo
  • 14.
  • 15. Arquiteturas multi-coreProgramação multithread OpenMP Prática de programação Considerações finais
  • 16. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 15 Arquiteturas multi-core Arquitetura SMP Multiprocessamento em um chip O multi-core Produtos comerciais
  • 17. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 16 Estado Estado Estado Interrupção Interrupção Interrupção ULA ULA ULA Memória Arquitetura SMP Symmetric MultiProcessor Arquitetura paralela dotada de um conjunto de processadores idênticos (simétricos) compartilhando acesso a uma área de memória comum CPUs
  • 18. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 17 Arquitetura SMP Symmetric MultiProcessor Arquitetura paralela dotada de um conjunto de processadores idênticos (simétricos) compartilhando acesso a uma área de memória comum SO único responsável pelo escalonamento de atividades (fluxos de execução) entre os processadores Cada CPU replica todo conjunto de recursos necessários à execução de um fluxo. Fator limitante de desempenho: contenção no acesso à memória
  • 19. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 18 Estado Estado Estado Interrupção Interrupção Interrupção ULA ULA ULA O multi-core Tecnologia em hardware na qual múltiplos cores são integrados em um único chip Multiplicação total dos recursos de processamento CPUs (cores) Processador (chip) Cache Cache Cache Cache Memória
  • 20. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 19 O multi-core Tecnologia em hardware na qual múltiplos cores são integrados em um único chip Multiplicação total dos recursos de processamento Grande vantagem: compatível com os códigos existentes!
  • 21. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 20 O multi-core Estado Estado Interrupção Interrupção Estado Estado Estado Interrupção Interrupção Interrupção ULA ULA ULA ULA Cache Memória Cache Cache Cache Processador HyperThreading Memória Estado Estado Estado Multiprocessador SMP Interrupção Interrupção Interrupção ULA ULA ULA Cache Memória Processador multi-core Comparativo – visão macro
  • 22. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 21 Ilustração Multi-corearchitecture http://cache-www.intel.com/cd/00/00/24/49/244978_244978.swf Fonte: intel.com Explore a dual core OpteronTM http://www.amd.com/us-en/assets/content_type/Additional/33635BDual-CoreDiagramFIN.swf Fonte: amd.com Imagem ilustrativa
  • 23.
  • 25. Programação multithreadFerramentas de programação Prática de programação Considerações finais
  • 26.
  • 27. Arquiteturas multi-coreProgramação multithread OpenMP Prática de programação Considerações finais
  • 28. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 24 Programação multithread Programação concorrente Thread Casos de estudo Paralelismo de tarefas Paralelismo de dados
  • 29. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 25 Programação concorrente Programação concorrente Voltada às questões da aplicação Programação paralela Voltada às questões do hardware disponível Execução concorrente Competição no acesso a recursos de hardware Execução paralela Replicação de recursos de hw permite simultaneidade
  • 30. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 26 Programação concorrente Programação concorrente, pois A programação concorrente inclui a programação paralela Permite focar nas questões da aplicação Ou seja, não requer do programador conhecimentos sobre o hardware paralelo disponível Idealmente: alto grau de portabilidade Considerando que a ferramenta de programação possui um modelo de execução eficiente
  • 31. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 27 Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Contexto de trabalho no curso Execução segundo a arquitetura de von Neumann Programa seqüencial é composto por: Uma seqüência de instruções Um conjunto de dados Execução seqüencial Instruções modificam estados de memória Efeito colateral A execução de uma instrução implica na alteração de um estado (posição de memória)
  • 32. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 28 Efeito da execução de uma instrução: Escrita em memória Comunicação Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Execução segundo a arquitetura de von Neumann Execução seqüencial: I1: MOV DX, 0 I2: MOV AX, [313] I3: ADD DX, AX I4: DEC AX I5: CMP AX, 0 I6: JNE I3 I7: MOV AX, [313] I8: CALL RotinaImpressão
  • 33. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 29 Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Execução segundo a arquitetura de von Neumann Execução seqüencial: I1: MOV DX, 0 I2: MOV AX, [313] I3: ADD DX, AX I4: DEC AX I5: CMP AX, 0 I6: JNE I3 I7: MOV AX, [313] I8: CALL RotinaImpressão I1 I2 I7 I8 I3 I4 I5 I6
  • 34. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 30 Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Execução segundo a arquitetura de von Neumann Execução seqüencial: Unidade execução: a instrução Comunicação: alteração de um estado de memória Sincronização: implícita, pois uma instrução não é executada antes que a anterior termine Execução concorrente deve, igualmente, definir: A unidade de execução elementar O mecanismo de comunicação utilizado A coordenação da execução para controle do acesso aos dados
  • 35. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 31 Programação concorrente Programação concorrente Extensão ao paradigma Imperativo Execução segundo a arquitetura de von Neumann Ferramentas de programação multithread oferecem recurso para: Definir unidades de execução em termos de conjuntos de instruções ou procedimentos Identificar regiões de memória (dados) compartilhados entre as unidades de execução Controlar acesso aos dados compartilhados
  • 36. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 32 Programação concorrente Modelos de Decomposição Paralela Paralelismo de tarefas O paralelismo é definido em termos de atividades independentes, processando sobre conjunto de dados distintos. Sincronização no início e no fim da execução concorrente e, eventualmente, durante a execução. Paralelismo de dados O paralelismo é definido em termos de dados que podem sofrer a execução da mesma operação de forma independente. Sincronização no início e no final da execução concorrente.
  • 37. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 33 Modelo Arquitetura Ferramenta de programação Programação concorrente Modelos de programação Oferecem “níveis de abstração” dos recursos oferecidos pelas arquiteturas e pelas ferramentas Ferramentas oferecem recursos para programação de arquiteturas reais É possível que uma ferramenta permita a exploração de mais de um tipo de paralelismo ou a utilização de diferentes modelos de concorrência. No entanto, cada ferramenta é mais conveniente para um determinado esquema
  • 38. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 34 Thread Processo leve Noção de processo Um programa define uma seqüência de instruções e um conjunto de dados Um processo representa uma instância de um programa em execução. A seqüência de instruções do programa define um fluxo de execução a ser seguido e o espaço de endereçamento utilizado. O processo também possui associado o registro de recursos que utiliza e é manipulado pelo sistema operacional.
  • 39. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 35 Thread Processo leve Noção de processo Memória Pilha programa.exe Reg $> programa.exe PCB
  • 40. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 36 Thread Processo leve Noção de processo Informações no PCB (Process Control Block) Process ID User and User Grup ID Diretório de trabalho Descritor de arquivos Manipuladores de sinais Bibliotecas de compartilhadas Ferramentas de comunicação (pipes, semáforos etc)
  • 41. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 37 Thread Processo leve Noção de processo Processo multithread Um programa define várias seqüência de instruções e um conjunto de dados Uma thread representa uma instância de uma seqüência de instruções em execução. Cada seqüência de instruções do programa define um fluxo de execução a ser seguido e os dados o espaço de endereçamento utilizado. As threads compartilham o registro de recursos que utilizados pelo processo.
  • 42. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 38 A() A() E() A() D() Programa fonte B() E() C() F() Thread Processo leve Noção de processo Processo multithread Memória Processo com múltiplas threads
  • 43. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 39 Thread Processo leve Noção de processo Processo multithread Os fluxos são independentes Competição pelos recursos da arquitetura Trocas de dados através de leituras e escritas em memória Competição pelos aos dados na memória compartilhada
  • 44. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 40 Thread Processo leve Noção de processo Processo multithread Memória Pilha Pilha Pilha Reg Reg Reg PCB
  • 45. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 41 Memória Thread Processo leve Noção de processo Processo multithread Acesso ao dado compartilhado através de operações de leitura e escrita convencionais Escrita: Dado = valor Leitura: variável = Dado
  • 46. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 42 Thread Processo leve Noção de processo Processo multithread Acesso ao dado compartilhado através de operações de leitura e escrita convencionais O programador é responsável por introduzir instruções para sincronização entre fluxos Memória
  • 47. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 43 Thread Processo leve Noção de processo Processo multithread Acesso a dado Instruções de sincronização Seção crítica: trecho de código com instruções que manipulam dado compartilhado entre fluxos de execução distintos Memória
  • 48. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 44 Thread Processo leve Thread: custo de manipulação reduzido em relação ao processo Chaveamento de contexto em tempo menor Comunicação entre threads via memória compartilhada Criação/Destruição de threads mais eficiente que de processos Informações de cada thread Pilha Registradores Propriedades de escalonamento (prioridade, política) Sinais pendentes ou bloqueados Dados específicos do thread (errno)
  • 49. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 45 SMP Mais leves Compromisso Thread 1 : 1 N : 1 M : N Implementações Thread sistema Thread usuário Misto
  • 50. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 46 Thread Modelos de Threads - N : M Memória Modelo misto gerenciamento tanto no espaço usuário quanto pelo sistema operacional Escalonamento Escalonamento
  • 51.
  • 52.
  • 54. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 49 Thread Erros comuns na programação Considerar uma ordem de execução dos threads Erro: Introduzir no algoritmo uma premissa que considere a ordem de execução dos threads Conseqüência: Aordem de execução é dada pela heurística de escalonamento, sendo estabelecida em tempo de execução. Normalmente esta heurística também considera fatores que são externos ao programa. Qualquer premissa no algoritmo que considere a ordem de execução fatalmente irá produzir um programa incorreto Solução: Caso seja necessário definir uma ordem de execução para os threads devem ser utilizadas as primitivas específicas de sincronização disponibilizadas pela ferramenta utilizada
  • 55.
  • 56.
  • 57. Acesso simultâneo a um dado por dois (ou mais) threadsPostergação indefinida Deadlock Erro: Não sinalizar uma condição de saída de uma sincronização Conseqüência: Um (ou mais) thread(s) permanecem bloqueados aguardando uma sincronização Solução: Garantir que todos as condições de saída de sincronizações sejam efetuadas
  • 58. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 52 Caso de estudo: OpenMP Paralelismo explícito O programador deve introduzir diretivas para gerar e controlar a execução paralela do programa Diferentes níveis de abstração Paralelismo de dados Paralelismo de tarefa OpenMP Diretivas de compilação / Biblioteca de serviços Paralelismo aninhado
  • 59.
  • 62. OpenMPPrática de programação Considerações finais
  • 63. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 54 OpenMP Execução Compilação Ligação + + = + = Fonte Objeto Executável Variáveis de ambiente Diretivas OpenMP Biblioteca de serviços Interface de programação aplicativa (API) para desenvolvimento de aplicações multithread em C/C++ e Fortran Define Diretivas de compilação Biblioteca de serviços Variáveis de ambiente
  • 64. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 55 OpenMP Interface de programação aplicativa (API) para desenvolvimento de aplicações multithread em C/C++ e Fortran Define Diretivas de compilação Biblioteca de serviços Variáveis de ambiente Busca estabelecer um padrão AINSI X3H5 como primeira tentativa Esforço iniciado de um grupo de fabricantes de hardware e desenvolvedores de software (Fujitsu, HP, IBM, Intel, Sun, DoE ASC, Compunity, EPCC, KSL, NASA Ames, NEC, SGI, ST Micro/PG, ST Micro/Portland Group, entre outros)
  • 65. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 56 OpenMP API para C/C++ Variáveis de ambiente OMP_NOME Diretivas de compilação #pragma omp diretiva [cláusula] Biblioteca de serviços omp_serviço( ... );
  • 66.
  • 67.
  • 68. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 58 OpenMP Opcionais aceitos pela diretiva OpenMP Determinação da diretiva OpenMP Sentinela de uma diretiva OpenMP (C/C++) API para C/C++ Diretivas Formato: #pragma omp diretiva [cláusula] Exemplo: #pragma omp parallel default(shared) private(x,y)
  • 69. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 59 OpenMP API para C/C++ Biblioteca de serviços Permitem controlar e interagir com o ambiente de execução. Formato: retorno omp_serviço( [parâmetros] ); Exemplos: void omp_set_num_threads( 10 ); int omp_get_num_threads(); void omp_set_nested( 1 ); int omp_get_num_procs();
  • 70. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 60 OpenMP Modelo M:N Devem ser indicadas as atividades concorrentes da aplicação Regiões paralelas Deve ser informado o paralelismo da arquitetura Time Deve ser informado o esquema de escalonamento das atividades paralelas nos threads que compõem o time Estratégia de escalonamento
  • 71. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 61 OpenMP Modelo M:N Devem ser indicadas as atividades concorrentes da aplicação Regiões paralelas Deve ser informado o paralelismo da arquitetura Time Deve ser informado o esquema de escalonamento das atividades paralelas nos threads que compõem o time Estratégia de escalonamento Diretivas na programação OMP_NUM_THREADS: inicial OMP_DYNAMIC: ajuste dinâmico OMP_NESTED: criação de novos times static dynamic guided
  • 72. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 62 OpenMP fork thread master concorrência da aplicação join Modelo básico de execução Fork / Join O programador descreve a concorrência de sua aplicação .............
  • 73. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 63 OpenMP Modelo básico de execução Fork / Join O programador descreve a concorrência de sua aplicação A execução se da por um time de threads concorrência da aplicação Escalonamento time de threads de execução
  • 74. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 64 OpenMP fork .............. join Primeiro programa #include <omp.h> main ( ) { // Código seqüencial (master) #pragmaompparallel { // Início do código concorrente // Código paralelo } // Fim do código concorrente // Código seqüencial (master) } São executadas tantas instâncias do código paralelo quanto forem o número de threads no time.
  • 75. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 65 OpenMP tcsh $> icpc –openmp primeiro.c $> setenv OMP_NUM_THREADS 4 $> ./a.out $> Primeiro programa Primeira sessão (Linux)
  • 76.
  • 77. Fork
  • 78. Join
  • 79. Cópia de dados privado ao thread
  • 81.
  • 82. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 68 OpenMP Dado compartilhado Região paralela Programação Diretiva: sections main () { int x; #pragma omp sections { #pragma omp section { foo(x); } #pragma omp section { bar(x); } } }
  • 83. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 69 OpenMP Programação Diretiva: sections Cláusulas aceitas private firstprivate lastprivate reduction nowait
  • 84. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 70 Dado compartilhado Região paralela Número de instâncias == Número de threads no time Cada execução manipula uma instância do dado. As cópias locais não são inicializadas! OpenMP Programação Diretiva: parallel Cláusula private main () { int x, y; #pragma omp parallel private(y) { y = x + 1; } }
  • 85. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 71 OpenMP Pode ser last e first ao mesmo tempo! Programação Diretiva: parallel Cláusula private Cláusulas alternativas: firstprivate Cada cópia local é inicializada com o valor que o dado possui no escopo do thread master lastprivate O dado no escopo do thread master é atualizado com o valor da última avaliação da região paralela Exemplo #pragma omp parallel lastprivate(y) firstprivate(y)
  • 86. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 72 Novo número de threads no time OpenMP Programação Diretiva: parallel Serviçoomp_set_num_threads main () { int x, y; omp_set_num_threads( 5 ); #pragma omp parallel private(y) { y = x + 1; } }
  • 87. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 73 OpenMP int soma = 100; omp_set_num_threads( 4 ); #pragma omp parallel reduction( + : soma ) { soma += 1; } // No retorno ao master: soma = 104 Exemplo: Programação Diretiva: parallel Cláusula reduction Cada execução pode manipular sua cópia, como em private O valor local inicial é definido pela operação de redução No final uma operação de redução atualiza o dado no thread master
  • 88. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 74 OpenMP Operações de redução: Operador + - * & && | || ^ Operação Soma Subtração Multiplicação E aritmético E lógico OU artitmético OU lógico XOR aritmético Valor inicial 0 0 1 -1 1 0 0 0 Programação Diretiva: parallel Cláusula reduction Cada execução pode manipular sua cópia, como em private O valor local inicial é definido pela operação de redução No final uma operação de redução atualiza o dado no thread master
  • 89. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 75 OpenMP Programação Diretiva: parallel Cláusulas aceitas reduction private firstprivate shared default copyin if num_threads
  • 90. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 76 OpenMP Programação Diretiva: for / parallel for Permite que os grupos de instruções definidas em um loop sejam paralelizadas Note: for e paralell for não é exatamente igual for: restringe o número de cláusulas aceitas parallel for: aceita todas as cláusulas do for e do parallel
  • 91. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 77 OpenMP Programação Diretiva: for / parallel for Permite que os grupos de instruções definidas em um loop sejam paralelizadas Exemplo: intvet[100], i, soma = 0; #pragmaompparallel for private(i) for( i = 0 ; i < 100 ; i++ ) vet[i] = i; #pragma omp parallel for private(i) reduction(+:soma) for( i = 0 ; i < 100 ; i++ ) soma = soma + vet[i]; printf( "Somatorio: %d", soma );
  • 92. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 78 OpenMP Programação Diretiva: for / parallel for Permite que os grupos de instruções definidas em um loop sejam paralelizadas Exemplo: intmat[TAM][TAM], aux[TAM][TAM], i, j; inicializa(mat); copia(mat, aux); while( não estabilizou os resultados ) { #pragmaompparallel for for( i = 0 ; i < TAM ; i++ ) #pragmaompparallel for for( j = 0 ; j < TAM ; j++ ) mat[i][j] = func(aux, i, j, ...); copia(mat,aux); }
  • 93. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 79 OpenMP Programação Diretiva: for / parallel for Permite que os grupos de instruções definidas em um loop sejam paralelizadas Regras: A variável de iteração é tornada local implicitamente no momento em que um loop é paralelizado A variável de iteração e o valor de teste necessitam ser inteiros e com sinal A variável de iteração deve ser incrementa ou decrementada, não são permitidas outras operações Os testes são: <, >, <=, >= Não é permitido: for( i = 0 ; i < 100 ; vet[i++] = 0 ); #pragma omp parallel for private(i) for( i = 0 ; i < 100 ; i++ ) vet[i] = i;
  • 94. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 80 OpenMP Programação Diretiva: critical[(nome)] Permite que trechos de código sejam executados em regime de exclusão mútua É possível associar nomes aos trechos int x, y; intprox_x, prox_y; #pragmaompparallelshared(x, y) private(prox_x, prox_y) { #pragmaompcritical(eixox) prox_x = dequeue( x ); trataFoo( prox_x, x ); #pragmaompcritical(eixoy) prox_y = dequeue( y ); trataFoo( prox_y, y ); }
  • 95. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 81 OpenMP Programação Diretiva: single [nowait] Indica, em uma região paralela, um trecho de código que deve ser executado apenas por um único thread Representa uma barreira Com nowait a barreira pode ser relaxada #pragma omp parallel { #pragma omp single printf("Serao %d threads", omp_get_num_threads() ); foo(); #pragma omp single nowait printf("O threads %d terminou", omp_get_thread_num() ); }
  • 96. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 82 OpenMP Programação Diretiva: master [nowait] Indica, em uma região paralela, um trecho de código que deve ser executado apenas thread master Representa uma barreira Com nowait a barreira pode ser relaxada #pragma omp parallel { #pragma omp master printf("Serao %d threads", omp_get_num_threads() ); foo(); #pragma omp master nowait printf("O thread master terminou" ); }
  • 97. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 83 OpenMP Programação Diretiva: flush [(dados)] Força a atualização dos dados compartilhados entre os threads em memória Representa uma barreira, garantindo que todas as operações realizadas por todos os threads até o momento do flush foram realizadas
  • 98. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 84 OpenMP Programação Cláusula: schedule(static|dynamic|guided) Indica qual estratégia deve ser utilizada para distribuir trabalho entre os threads do time static Implica na divisão do trabalho por igual entre cada thread Indicado quando a quantidade de trabalho em cada grupo de instruções (como em cada iteração em um for) é a a mesma dynamic Cada thread busca uma nova quantidade de trabalho quando terminar uma etapa de processamento Indicado quando a quantidade de trabalho em cada grupo de instruções (como em cada iteração em um for) não for a mesma guided Semelhante ao dynamic, mas com divisão não uniforme na divisão das tarefas Indicado quando existe execução assíncrona (cláusula nowait anterior)
  • 99.
  • 103. Prática de programaçãoModelagem da concorrência Multithreading e bibliotecas de serviço Hierarquia de memória Afinidade de processador Redução de contenção Considerações finais
  • 104. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 86 Modelagem da concorrência Na implementação Traduzir as atividades concorrentes em termos de unidades de execução previstas pela ferramenta utilizada Preocupar-se com a granularidade de execução Relação entre a quantidade de cálculo efetuada a cada atividade independente e o número de interações entre estas atividades Reflete o overhead de execução da implementação: Quanto mais freqüente forem as interações, mais o ambiente de execução deverá se fazer presente, ocupando tempo de processamento
  • 105.
  • 106. Tratar a questão da portabilidade
  • 108. Envolve a seleção da ferramenta através de critérios que facilitem a reutilização do código em diferentes ambientes
  • 109.
  • 110. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 89 Multithreading e bibliotecas de serviço Uso de bibliotecas de serviço em programas multithread Thread safe Garante a correção da execução dos serviços da biblioteca, pois sua implementação considera a possibilidade de que dois ou mais serviços podem estar ativos ao mesmo tempo Thread aware A biblioteca foi implementada de tal forma que não exista a possibilidade de alguma thread do programa aplicativo ser interrompida por necessidade de sincronização interna à biblioteca – ou, alternativamente, que a contenção seja a menor possível
  • 111. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 90 Hierarquia de memória Exploração da memória cache para minimizar o efeito do Gargalo de von Neumann Alinhamento de dados em memória Diz respeito a alocação de dados na memória Um dado de n bytes é dito alinhado se n = 2X e o endereço e de armazenamento seja n = k xn Um dado char é alinhado em qualquer posição de memória Um dado int é alinhado em um endereço múltiplo de 4 O alinhamento é especificado de forma a obter o melhor desempenho da arquitetura Como utilização do barramento de dados É possível alterar o comportamento padrão de alinhamento O ônus é perder o desempenho ótimo da arquitetura A a aposta é reduzir a quantidade de memória utilizada, aumentando virtualmente a capacidade do cache
  • 112.
  • 115. OpenMP
  • 117.
  • 118. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 93 Inovações tecnológicas A indústria de software sempre contou com o avanço da tecnologia CMOS para melhora de desempenho O software não tem acompanhado o avanço do hardware no que diz respeito a multi-core Os efeitos em termos de desempenho da disponibilidade de vários cores (>4) não serão percebidos pelo usuário sem uma modificação drástica no software desenvolvido O aumento de desempenho somente pode ser obtido com interferência direta dos recursos de programação utilizados
  • 119. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 94 Reação das empresas de hardware http://sev.prnewswire.com/computer-electronics/20070626/NYTU01926062007-1.html NEW DELHI, India, June 26, 2007 /PRNewswire/ -- Intel and NIIT today announced the launch of a Multi-Core training curriculum that has been developed jointly and will be deployed by NIIT globally. As industry transitions from single- core processors to Multi-Core, software developers will need a new set of skills to design and develop software that harnesses the full potential of these processors. According to industry estimates, the global software developer population is expected to grow by 34% to 17.1 million, by 2009. NIIT, in association with its training partners, will offer the Intel Multi-Core training program to this developer community globally. Speaking at the launch event, Mr. Scott Apeland, Director, Developer Network and Web Solutions, Intel Corporation said, "The power of Multi-Core processors to increase software performance is incredible, but not automatic. The full potential of Multi-Core processors is best unleashed when software is designed to take advantage of the power of multiple cores. This evolution of processing technologies has brought the software developer and architect community to a phase where they need to re-look at their existing skill-sets.“
  • 120. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 95 Reação das empresas de hardware http://www.hpcwire.com/hpc/1635195.html DRESDEN, Germany, June 27, 2007 -- HP today introduced a program aimed at helping customers realize the full performance and cost benefits of using multi-core technology in high-performance computing (HPC) applications. The HPC market is where most disruptive technologies are created and evolved into broader commercial products. HP's new Multi-Core Optimization Program focuses on research for next-generation multi-core optimization technologies, as well as near-term developments and enhancements, in collaboration with key customers, technology partners and applications vendors. "We're entering a phase where exploiting the power of multi-core processors is critical for customers to accelerate the innovation and discovery that is directly tied to their business outcomes," said Winston Prather, vice president and general manager, High Performance Computing, HP. "HP, a leader in the HPC market, is working with its partners to help customers capitalize on a new era of high-productivity computing.“ "The emergence of multi-core technology allows for HPC technology to better help solve grand challenges; we've already seen an impact on large-scale numerical simulation in many fields of applications," said Prof. Dr. V. Heuveline, board member, Steinbuch Centre for Computing, KIT .
  • 121. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 96 Futuro Hoje arquiteturas multi-core são essencialmente SMPs e o número de cores relativamente baixo A expectativa é disponibilizar processadores com grande número de cores 80 cores, segundo a Intel, em médio prazo Existência de um número de cores tão grande que requer a utilização de um esquema de manipulação próximo a grades computacionais (G. Fox, CCGrid 2007, palestra) No futuro poderão (deverão) existir arquiteturas multi-core com cores especializados, tornando-se uma arquitetura heterogênea No Brasil, grupos ligados às áreas de processamento paralelo já questionam a necessidade de inserir disciplinas de programação concorrente nos primeiros semestres dos cursos de graduação
  • 122. Gerson Geraldo H. Cavalheiro XVII Semana Acadêmica da Meteorologia 1o de dezembro de 2010 97 E aqui? Diversos artigos técnicos: OpenMP e ... Weather forecast Google: 13.000 Scholar Google: 1.100 Forecast models Google: 12.200 Scholar: 2.600 Modelos Meteorológicos Google: 1.920 Scholar: 71
  • 123. 98 Programação com OpenMP:O paralelismo ao alcance de todos Prof. Dr. Gerson Geraldo H. Cavalheiro gerson.cavalheiro@ufpel.edu.br Programa de Pós-Graduação em Computação Centro de Desenvolvimento Tecnológico Universidade Federal de Pelotas