350 likes | 528 Views
Computação Paralela: uma introdução. Guilherme Galante. Motivação e Justificativas. Como ganhar desempenho em programas?. 3 opções. ?. ?. ?. Como ganhar desempenho em programas?. Melhorar o ambiente de execução Ex: Comprar um processador melhor Melhorar o algoritmo
E N D
Computação Paralela:uma introdução Guilherme Galante
Como ganhar desempenho em programas? • 3 opções ? ? ?
Como ganhar desempenho em programas? • Melhorar o ambiente de execução • Ex: Comprar um processador melhor • Melhorar o algoritmo • Ex: substituir um algoritmo de ordenação Bubble por Quicksort • Paralelização • Não é a solução para todos os problemas do mundo • Alguns problemas não são paralelizáveis (ou muito difíceis de se ganhar desempenho)
Computação Sequencial • Programa executa em uma única CPU • Dividido em uma série de instruções • Executadas uma após a outra* • Apenas uma instrução é executada por vez*
computação paralela • Utilização de múltiplos recursos computacionais para resolver um determinado problema • Múltiplas CPUs • Problemas são divididos para serem executados simultaneamente
Por que usar paralelismo? • Tempo/Dinheiro • Limite da computação sequencial • Solução de grandes problemas • Alocação de recursos • Cluster • Grids • Arquiteturas estão mudando!!!
Onde está o paralelismo • Paralelismo no nível de instruções • Pipeline, superescalar • Implícito para o programador • Várias linhas de execução: threads • Suporte do sistema operacional • Vários núcleos • Vários processadores • Placas Gráficas (GPUs) Programador é responsável pela exploração do paralelismo
Áreas de aplicação Top 500 – junho/09
Arquiteturas Paralelas • Classificação de Flynn (1970) SISD SIMD MISD MIMD
Arquitetura • SISD • Computadores com um único processador • Instruções executadas em seqüência • Placas gráficas
Arquitetura • SIMD • Cada processador executa a mesma instrução em sincronia, mas usando dados diferentes
Arquitetura • MIMD • Classe dos computadores paralelos • Não determinismo: • Várias coisas ocorrendo ao mesmo tempo • Memória Compartilhada • SMP, Multicore • Memória Distribuída • Cluster, MPP • Híbridos
IBM – RoadRunner Los Alamos National Laboratory Cluster PowerXCell 8i 3.2 Ghz / Opteron DC 1.8 GHz 129.600 cores 98TB de memória SO Linux (Fedora and Red Hat enterprise editions) Interconexão: Infiniband
MPP AMD x86_64 Opteron Quad Core 2300 MHz 181.504 cores 362TB de memória Interconexão: Cray SeaStar / Infiniband SO CNL (adaptação do Suse) Cray – Jaguar Oak Ridge National Laboratory
Cluster Krusty – LCAD Unioeste Precisa-de de usuários!! 18 nós – Pentium IV 3.2 HT GHz 1 GB RAM Rede Gigabit Ethernet SO Linux Fedora
Programação demultiprocessadores (mem. Compartilhada) • Modelo de programação: • Múltiplas threads compartilhando dados • Aspecto crítico: • sincronização quando diferentes tarefas acessam os mesmos dados • Ferramentas para programação: • linguagens concorrentes (Ada, SR, Java ...) • linguagens seqüenciais + extensões/biliotecas (OpenMP, Pthreads, Cilk, HPF)
Programação demultiprocessadores (mem. Compartilhada) Exemplo OpenMP #include <omp.h> #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { int nthreads, tid; #pragma omp parallel private(nthreads, tid) { /* Obtain thread number */ tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid); /* Only master thread does this */ if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } } /* All threads join master thread and disband */
Programação demulticomputadores (mem. Distribuída) • Modelo de programação: • troca de mensagens entre tarefas cooperantes • Aspectos críticos: • Comunicação e distribuição dos dados (balanceamento de carga) • Ferramentas para programação: • Linguagens sequenciais + extensões/bibliotecas • MPI (C,C++,Fortran,Java), PVM, Java+RMI • Memória compartilhada distribuída: • Linda, Threadmarks, ...
Programação demulticomputadores (mem. Distribuída) Exemplo MPI #include <stdio.h> #include <mpi.h> int main (int argc, char *argv[]) {int rank, size, MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &size); printf( "Hello world from process %d of %d\n", rank, size ); MPI_Finalize(); return 0; }
Construção de programas paralelos • Não existe um padrão para construção de aplicações paralelas • Metodologia PCAM – Foster • Particionamento • Comunicação • Agrupamento • Mapeamento
Modelos de Aplicação • SPMD (Single Program, Multiple Data) • Workpool processador dado processo tarefas/dados processadores
Modelos de Aplicação • Mestre-Escravo • Pipeline mestre escravos F1 F2 F3 F1 F2 F3
Exemplo de uso: PCAM + Mestre-Escravo • Partição • Na fase de partição são identificadas as tarefas que são geridas pelo mestre • Comunicação • Neste tipo de algoritmo a comunicação é essencialmente entre o mestre e os escravos para a envio de tarefas e para o retorno de resultados • Aglomeração • Visando a redução dos custos de comunicação; podem ser enviadas várias tarefas em cada mensagem • Mapeamento • O mapeamento é efetuado através da distribuição dos escravos pelos processadores • Podem ser colocados vários escravos por nodo
Resumindo... Validação e testes de desempenho Escolha da arquitetura Escolha das ferramentas Implementação Projeto do software Problema Detecção do paralelismo
Exemplo de Aplicação Simulação de Hidrodinâmica Rio Guaíba - RS Área: Computação Científica Paralela/Aplicações Dissertação de Mestrado – UFRGS 2004-2006
Geração da Malha Particionamento da malha Geração dos Sistemas de Equações Resolução dos Sistemas de Equações sequencial paralelo Obtenção da solução final Arquitetura: Cluster Software: C + MPI
Resultados Testes efetuados no Cluster Krusty: 18 nodos
Concluindo... • Aplicações • Científicas • Comerciais (desenvolvimento e conversão/paralelização) • Gerenciamento de infra-estrutura • Pesquisa • Clusters • Grids • P2P • Cloud Computing • Aplicações em outras áreas: • Matemática • Física • Inteligência Artificial • Banco de Dados • etc... Oportunidades
Obrigado! gui.galante@gmail.com www.inf.unioeste.br/~guilherme