Introdução. Programação Paralela. Motivação. Conhecimento do Hardware. Análise de Desempenho. Modelagem do Problema

Documentos relacionados
Parte da Tarefa. Parte da Tarefa. Parte da Tarefa SEND RECEIVE SEND RECEIVE

Programação Paralela com Troca de Mensagens. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Arquitecturas Paralelas I Computação Paralela em Larga Escala. Passagem de Mensagens

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

Prof a Andréa Schwertner Charão DELC/CT/UFSM

COMPUTAÇÃO PARALELA. uma visão geral. Guilherme Galante. v.2.0

Programação Paralela. Simone de Lima Martins Agosto/2002

Arquitetura de Computadores Sistemas Operacionais II

slide 0 Algoritmos Paralelos

Uma Visão Geral dos Sistemas distribuídos de Cluster e Grid e suas Ferramentas para o processamento paralelo de dados

apt-get install openssh-client (Debian) yum install openssh-clents (Fedora) slapt-get install openssh (Slackware)

Hardware: Componentes Básicos. Sistema de Computador Pessoal. Anatomia de um Teclado. Estrutura do Computador. Arquitetura e Organização

SISTEMAS DISTRIBUÍDOS

Redes de Computadores

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar

Sistemas Paralelos e Distribuídos. Prof. Jorge Dantas de Melo Depto. Eng. Comp. e Automação CT - UFRN

ALGORÍTMOS PARALELOS (Aula 2) LCAD. Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES

Introdução às arquiteturas paralelas e taxonomia de Flynn

Ambientes de troca de mensagens - MPI. Aleardo Manacero Jr.

Sistemas Distribuídos

Professores: Aula 10. Lúcia M. A. Drummond Simone de Lima Martins. Conteúdo: Arquiteturas Avançadas. - Arquiteturas RISC - Processamento Paralelo

INSTITUTO NACIONAL DE PESQUISAS ESPACIAIS (INPE) Concurso Público - NÍVEL SUPERIOR CARGO: Tecnologista da Carreira de Desenvolvimento Tecnológico

Programação de Sistemas

Programação de Sistemas

} Monolíticas Aplicações em um computador centralizado. } Em Rede Aplicações com comunicação em rede. } Distribuídas Comunicação e cooperação em rede

Capítulo 8 Arquitetura de Computadores Paralelos

Organização de Computadores 2005/2006 Processamento Paralelo

RODRIGO FOGAÇA MIGUEL

Sistemas MIMD. CES-25 Arquiteturas para Alto Desmpenho. Paulo André Castro

Comparação de algoritmos paralelos em uma rede heterogênea de workstations

Conteúdo programático

Técnico em Radiologia. Prof.: Edson Wanderley

MÓDULO 2 Topologias de Redes

M3D4 - Certificados Digitais Aula 2 Certificado Digital e suas aplicações

Curso de Formação de Oficiais Conhecimentos Específicos ENGENHARIA DE COMPUTAÇÃO CADERNO DE QUESTÕES

MDX-cc: Ambiente de Programação Paralela Aplicado a Cluster de Clusters

Aula 03. Processadores. Prof. Ricardo Palma

7-1. Parte 6 Otimizações da Arquitetura

Processamento de Dados aplicado à Geociências. AULA 1: Introdução à Arquitetura de Computadores

O que é um banco de dados? Banco de Dados. Banco de dados

Padrões e Frameworks de Programação Paralela em Arquiteturas Multi-Core

Aspectos de Programação Paralela em Máquinas NUMA

FORMULÁRIO PARA CRIAÇÃO DE DISCIPLINA

Organização e Arquitetura de Computadores I. de Computadores

ALGORÍTMOS PARALELOS (Aula 5)

Comunicação entre Processos por Troca de Mensagens. Prof. Celso maciel da Costa

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

Programação Paralela Aplicada a Banco de Dados. Luciano Trevisan Alberti

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

ORDENAÇÃO DE DADOS EM MEMÓRIA EXTERNA UTILIZANDO PROGRAMAÇÃO PARALELA

UNIVERSIDADE CATÓLICA DO SALVADOR CURSO DE BACHARELADO EM INFORMÁTICA DEPARTAMENTO DE INFORMÁTICA

TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PROGRAMAÇÃO DE COMPUTADORES I

Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES. Prof. Dr. Daniel Caetano

Definindo melhor alguns conceitos

Fundamentos de Teste de Software

2 Arquitetura Paralela

Paralelismo. Computadores de alto-desempenho são utilizados em diversas áreas:

COMPUTAÇÃO DE ALTO DESEMPENHO ENVOLVENDO CLUSTERS E MÉTODOS NUMÉRICOS

Princípios e Conceitos de Desenho de Software. Projeto de Sistemas de Software Prof. Rodrigo Ribeiro

Emparelhamentos Bilineares Sobre Curvas

Experiência 04: Comandos para testes e identificação do computador na rede.

Sobre o Visual C

Máquinas Multiníveis

Lógica de Programação. Profas. Simone Campos Camargo e Janete Ferreira Biazotto

Sistemas Operacionais

CONSIDERAÇÕES COMPLEMENTARES

Banco de Dados I. Prof. Edson Thizon

RESOLUÇÃO Nº 018/2005-COU/UNICENTRO

Desenvolvimento de Programas Paralelos para Máquinas NUMA: Conceitos e Ferramentas

Método de ordenação - objetivos:

Arquitetura de referência de Streaming sob demanda para desktop (ODDS) DELL

REGULAMENTO DA POLÍTICA DE MANUTENÇÃO E GUARDA DO ACERVO ACADÊMICO DA ESCOLA DE DIREITO DE BRASÍLIA EDB

Sistema Operacional. Implementação de Processo e Threads. Prof. Dr. Márcio Andrey Teixeira Sistemas Operacionais

Organização e Arquitetura de Computadores. Ivan Saraiva Silva

SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar

Curso C: Ponteiros e Arrays

Dynamic Voltage Scaling in Multitier Web Servers with End-to-End Delay Control

SISTEMAS OPERACIONAIS. 3ª. Lista de Exercícios

Eleição de Líder. Alysson Neves Bessani Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

Sistemas Operacionais

Introdução. Aula 02. Estrutura de Dados II. UFS - DComp Adaptados a partir do material da Profa. Kenia Kodel Cox

Programação Paralela e Distribuída 2009/10. Fundamentos

Comparação SDs X Scs

Instruções para uso do MPI - Relatório Técnico -


Processamento Paralelo

Controle de granularidade de tarefas em OpenMP

Infra-Estrutura de Software. Introdução. (cont.)

Concorrência e Paralelismo

Barramentos de campo. Modelo OSI para sistemas comunicantes

10. CPU (Central Processor Unit) Conjunto das instruções Estrutura interna Formato das instruções...

Universidade Federal do ABC. Dissertação de Mestrado. Aderbal de Morais Junior

Curso de C: uma breve introdução

Transcrição:

Introdução Programação Paralela Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes Programação paralela é a divisão de um problema em partes, de maneira que essas partes possam ser executadas paralelamente por diferentes processadores. Os processadores devem cooperar entre si, utilizando primitivas de comunicação e sincronização. Objetivos Principal: Ganho de desempenho Secundário: Tolerância a falhas Motivação Necessidade de poder computacional Solução de aplicações complexas Metereologia Prospecção de petróleo Análise de local para perfuração de poços Simulações físicas Aerodinâmica, energia nuclear Matemática computacional Análise de algoritmos para criptografia Bioinformática Simulação computacional da dinâmica molecular de proteínas Conhecimento do Hardware Ideal seria não precisar conhecer detalhes da máquina Portabilidade Em PP o conhecimento da máquina influencia diretamente o desempenho Paradigma de comunicação Memória compartilhada x distribuída Preciso comunicar Ferramenta de programação Threads, openmp MPI Modelagem do problema Modelagem do Problema Quantas processadores utilizar? Quanto mais processadores mais rápido? Como distribuir o trabalho a ser feito (carga) entre os envolvidos? Quando comunicar/sincronizar? afetam Desempenho final da aplicação paralela Análise de Desempenho Speedup Fator de aceleração Melhor tempo seqüencial Normalmente sp<np 22 21 Overhead de comunicação 20 19 18 Ideal linear sp=np 17 16 15 Superlinear sp>np 14 13 12 efeito de cache Speed up 11 10 9 8 7 6 5 4 3 2 1 500 x 500 1000 x 1000 2500 x 2500 ideal 2 4 6 8 10 12 14 16 18 20 22 24 26 28 Number of Processors

Análise de Desempenho Análise de Desempenho Eficiência Medida de utilização do processador Lei de amdahl Usado para encontrar o maior Speedup para uma aplicação onde apenas uma parte do sistema foi paralelizada. O Speedup é limitado pelo tempo necessário para execução da parte seqüencial. P = Parte paralelizável (1-P) = Parte seqüencial Exercício: O tempo para execução em paralelo de um programa para multiplicação de duas matrizes de dimensão 5000 esta representado na tabela abaixo. Complete a tabela com o Speedup e a eficiência para cada número de processadores Tempos de execução feitos no cluster IC1 da universidade de Karlsruhe, Alemanha: 200 nodos Intel Xeon com 8 cores e16 GB de memória por nodo InfiniBand 4X DDR Interconnect com ConnectX Dual Port DDR HCAs Posição top500: 104 novembro 2007 265 junho 2008 Nr proc 1 2 4 6 8 10 12 14 T. Exec speedup Efic. 25,64 1 1 15,28 8,37 6,3483 5,4437 5,01 4,69 4,85 Análise de Desempenho 16 14 12 Speedup número de processadores Tempo de execução Speedup Eficiência Speedup 10 8 6 4 2 Speedup Ideal 1 25,64 1 1 0 1 2 4 6 8 10 12 14 2 15,28 1,67801 0,839005 Número de Processadores 4 8,37 3,063321 0,76583 Eficiência 6 6,3483 4,038877 0,673146 1,2 8 5,4437 4,710032 0,588754 10 5,01 5,117764 0,511776 12 4,69 5,466951 0,455579 Eficiência 1 0,8 0,6 0,4 Eficiência Ideal 14 4,85 5,286598 0,377614 0,2 0 1 2 4 6 8 10 12 14 Número de processadores Desafios na Modelagem do Problema Modelagem Conversão da aplicação seqüencial em paralela Algumas aplicações não são paralelizáveis Particionamento de código e dados Modelos de distribuição de dados Dependência das operações Custo de sincronização Necessidade de troca de informação entre processos Balanceamento de carga Divisão adequada da computação entre os recursos Deadlocks (comunicação) Faz send e não receive Dificuldade de depuração Modelos de máquina: descrevem as características das máquinas Modelos de programação: aspectos ligados a implementação e desempenho Modelos de aplicação: paralelismo de um algoritmo Vantagens: Compreender diferentes aspectos da aplicação na implementação de um programa paralelo Quantidade de cálculo envolvido total e por atividade Volume de dados manipulado Dependência de informações entre atividades em execução

Modelos de Máquina Modelos de Programação Classificação de Flynn SISD (pc), SIMD (maq vetorial), MISD, MIMD (maq par e dist) Arquiteturas com memória compartilhada Multiprocessador SMP, NUMA Comunicação realizada através de escritas e leituras na memória compartilhada Arquiteturas com memória distribuída Multicomputador MPP,NOW,Cluster Comunicação realizada por troca de mensagens em uma rede de interconexão Distribuição do trabalho granulosidade Relação entre o tamanho de cada tarefa e o tamanho total do programa, ou seja, é a razão entre computação e comunicação. Pode ser alta (grossa), media ou baixa (fina) O tamanho de cada tarefa depende do poder de processamento de cada nó A comunicação depende da latência e da vazão da rede de interconexão Modelos de Programação Modelos de Programação Granulosidade grossa Maior custo processamento Dificulta balanceamento de carga Muito processamento, pouca comunicação Menor custo de sincronização Granulosidade fina Maior freqüência de comunicação Facilita balanceamento de carga Pouco processamento, muita comunicação Alto custo de sincronização Indica o tipo de arquitetura mais adequado: procs vetoriais (fina), SMP (média), cluster (grossa) Como o paralelismo da aplicação é caracterizado SPMD (Single Program Multiple Data) - Paralelismo de dados - execução de uma mesma atividade sobre diferentes partes do conjunto de dados. Dados determinam o paralelismo e a forma como os cálculos devem ser distribuídos Réplica, mas precisa atenção com comunicação entre processos Mais fácil balanceamento por ser a mesma atividade MPMD (Multiple Program Multiple Data) - Paralelismo de tarefa - execução paralela de diferentes atividades sobre conjuntos distintos de dados. Identificação das atividades paralelas e como são distribuídas pelos recursos disponíveis Balanceamento de carga é mais difícil do que em SPMD Processos comunicam menos durante as operações As aplicações são modeladas usando um grafo que relaciona as tarefas e trocas de dados Nós: tarefas Arestas: trocas de dados (comunicação e/ou sincronização) Modelos básicos Mestre/escravo Pipeline Divisão e conquista Fases paralelas Mestre/escravo Mestre executa as tarefas essenciais do programa e divide o resto entre processos escravos Escalonamento centralizado gargalo 1-N Maior tolerância a falhas: um escravo para, não todo processamento escravo Mestre escravo escravo

Pipeline Encadeamento de processos Pipeline virtual (rede não muda) Fluxo contínuo de dados Sobreposição de comunicação e computação Não tolerante a falhas 1 para, todos param Divisão e conquista Processos organizados em uma hierarquia (pai e filhos) Processo pai divide trabalho e repassa uma fração deste ao seus filhos Integração dos resultados de forma recursiva Dificuldade de balanceamento de carga na divisão das tarefas Divisão do problema Integração dos resultados Problema Fases paralelas Etapas de computação e sincronização Problema de balanceamento devido ao sincronismo Processos que acabam antes Overhead de comunicação Toda comunicação é realizada ao mesmo tempo I N T E R A Ç Ã O I N T E R A Ç Ã O Como paralelizar a ordenação de um grande vetor? Mestre/escravo Pipeline Fases paralelas Divisão e conquista Mestre/Escravo O mestre envia partes do vetor para cada escravo, que retorna este ordenado e espera por um novo pedaço do vetor Muita comunicação Não é um bom modelo para o caso Pipeline Cada processador faz uma troca simples, sendo necessário para um vetor de tamanho n, n-1 processadores. Só 1 vetor, só uma operação Não é o modelo ideal

Fases Paralelas Cada processo inicia com uma parte do vetor, ordenam e interagem com os outros processos a fim de realizar trocas entre os limites de cada pedaço do vetor Faz ordenação local, e mando o meu maior e recebo o menor do vizinho (% para vetores grandes) Condição parada: meu maior é menor do que o menor do meu vizinho para todos processadores? Divisão e Conquista Subdivisão do vetor em partes menores a serem ordenadas por outros processos Vai subindo na árvore intercalando o vetor preordenado dos filhos MPI Message Passing Interface Surgiu em 1992 para padronizar as bibliotecas de troca de mensagens Estável Eficiente Portável Biblioteca de funções para C, Fortran e C++ executando em máquinas MIMD com organização de memória NORMA 129 funções com vários parâmetros e variantes Conjunto fixo de processos é criado na inicialização do programa (mpi 2 dinâmico) Modelo de programação usual é SPMD Funções básicas - Inicialização MPI_Init(&argc, &argv) Inicializa uma execução MPI, é responsável por copiar o código em todos processadores MPI_Finalize() Termina uma execução MPI Exemplo #include <stdio.h> #include mpi.h Main(int argc, char** argv) MPI_Init(&argc, &argv);... MPI_Finalize(); Funções Básicas - Inicialização Funções básicas - Inicialização Paralelismo se da de forma implícita Não existem funções para criação e terminação de processos Identificação dos processos é fundamental para comunicação Communicators viabilizam a comunicação de grupo de processos e a programação modular MPI_Comm_rank(comm, pid); Determina o identificador do processo corrente IN: comm communicator(handle) Out: pid: identificador do processo no grupo comm (int) MPI_Comm_size(comm, size); Determina o número de processos em uma execução IN: comm communicator(handle) OUT: size: número de processos no grupo comm (int)

Funções básicas - Inicialização #include <stdio.h> #include mpi.h Main(int argc, char** argv) int mypid; int np; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &mypid); MPI_Comm_size(MPI_COMM_WORLD, &np); MPI_Finalize(); Comunicação ponto-a-ponto Funções MPI_Send e MPI_Rcv Bloqueante ou não bloqueante Comunicação coletiva Outras funções de broadcast e concentração de informações MPI_Send(buf, count, datatype, dest, tag, comm) MPI_Recv(buf, count, datatype, source, tag, comm,status) IN buf: endereço do buffer de envio IN count: número de elementos a enviar IN datatype: tipo dos elementos a enviar IN dest: identificador do processo de destino IN tag: (etiqueta) da mensagem IN comm: communicator (handle) OUT buf: endereço do buffer de recebimento IN count: número de elementos a receber IN datatype: tipo dos elementos a receber IN dest: identificador do processo de origem IN tag: (etiqueta) da mensagem IN comm: communicator (handle) #include <stdio.h> #include mpi.h main(int argc, char** argv) int mypid; int np; int source; int dest; int tag=50; char message[100]; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &mypid); MPI_Comm_size(MPI_COMM_WORLD, &np); Funcoes básicas - Comunicacao If (mypid!=0) sprintf(message, greetings from process %d!, mypid); dest=0; MPI_Send(message, strlen(message)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); else for (source=1; source< np; source++) MPI_Recv(message, 100, MPI_CHAR, source, tag, MPI_COMM_WORLD, &status); printf( %s\n, message); MPI_Finalize();

Funções básicas sincronização Sincronização implícita Através de comunicação bloqueante Sincronização explícita e global Uso do isend e irecv Através de barreiras MPI_Barrier(comm) IN comm: communicator (handle) MPI - Conclusões Existem diversas implementações (MPICH, LAM) Geralmente com compilador próprio Ferramenta de execução própria Ferramenta de depuração e editores Debuggers Profilers Sistema hospedeiro É atualmente o mais utilizado em programação paralela (existem outros como o PVM) e vem diminuindo com o aumento do uso de OpenMP (memória compartilhada) Aumento de maquinas multicore