COMPUTAÇÃO PARALELA: UMA INTRODUÇÃO Guilherme Galante
COMPUTAÇÃO PARALELA:UMA INTRODUÇÃO
Guilherme Galante
MOTIVAÇÃO E JUSTIFICATIVAS
COMO GANHAR DESEMPENHO EM PROGRAMAS?
3 opções
3
?? ?
COMO GANHAR DESEMPENHO EM PROGRAMAS?
1. Melhorar o ambiente de execução Ex: Comprar um processador melhor
2. Melhorar o algoritmo Ex: substituir um algoritmo de ordenação Bubble
por Quicksort
3. 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)4
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*
5
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
6
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!!!
7
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)
8
Programador é responsável pela exploração do paralelismo
9
http://www.isgtw.org/?pid=1001952
10
ÁREAS DE APLICAÇÃO
Top 500 – junho/09
11
ARQUITETURAS PARALELAS
ARQUITETURAS PARALELAS
Classificação de Flynn (1970)
SISD SIMD
MISD MIMD
13
ARQUITETURA
SISD Computadores com um único processador Instruções executadas em seqüência Placas gráficas
14
ARQUITETURA
SIMD Cada processador executa a mesma instrução
em sincronia, mas usando dados diferentes
15
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íbridos16
17
ClusterPowerXCell 8i 3.2 Ghz / Opteron DC 1.8 GHz129.600 cores98TB de memóriaSO Linux (Fedora and Red Hat enterprise editions)Interconexão: Infiniband
IBM – RoadRunnerLos Alamos National Laboratory
18
MPPAMD x86_64 Opteron Quad Core 2300 MHz181.504 cores362TB de memóriaInterconexão: Cray SeaStar / InfinibandSO CNL (adaptação do Suse)
Cray – JaguarOak Ridge National Laboratory
19
Cluster Krusty – LCAD Unioeste
18 nós – Pentium IV 3.2 HT GHz1 GB RAMRede Gigabit EthernetSO Linux Fedora
Precisa-de de
usuários!!
FERRAMENTAS E MODELOS DE PROGRAMAÇÃO
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)21
PROGRAMAÇÃO DEMULTIPROCESSADORES (MEM. COMPARTILHADA)#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 */22
Exemplo OpenMP
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, ...
23
PROGRAMAÇÃO DEMULTICOMPUTADORES (MEM. DISTRIBUÍDA)
#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;
}
24
Exemplo MPI
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
25
MODELOS DE APLICAÇÃO SPMD (Single Program, Multiple Data)
Workpool
26
dadoprocessador
processo
tarefas/dados
processadores
MODELOS DE APLICAÇÃO Mestre-Escravo
Pipeline
27
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 28
RESUMINDO...
29
Escolha da arquitetura
Problema
Escolha das ferramentas
Detecção do paralelismo
Implementação
Validação e testes de
desempenho
Projeto do software
EXEMPLO DE APLICAÇÃO PARALELA
EXEMPLO DE APLICAÇÃO
31
Área: Computação CientíficaParalela/Aplicações
Dissertação de Mestrado – UFRGS2004-2006
Simulação de HidrodinâmicaRio Guaíba - RS
32
Geração da Malha
Particionamento da malha
Geração dos Sistemas de
Equações
Resolução dos Sistemas de
Equações
Obtenção da solução final
sequencial
paralelo
Arquitetura: ClusterSoftware: C + MPI
RESULTADOS
33
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...
34
Oportunidades