Computação Paralela: uma introdução
Download
Report
Transcript Computação Paralela: uma introdução
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
2.
Melhorar o algoritmo
3.
Ex: Comprar um processador melhor
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)
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)
Programador é
responsável pela
exploração do
paralelismo
8
9
10
http://www.isgtw.org/?pid=1001952
ÁREAS DE APLICAÇÃO
11
Top 500 – junho/09
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:
Memória Compartilhada
SMP, Multicore
Memória Distribuída
Várias coisas ocorrendo ao mesmo tempo
Cluster, MPP
Híbridos
16
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
17
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
18
Cluster Krusty – LCAD Unioeste
18 nós – Pentium IV 3.2 HT GHz
1 GB RAM
Rede Gigabit Ethernet
SO Linux Fedora
Precisa-de
de
usuários!!
19
FERRAMENTAS E
MODELOS DE
PROGRAMAÇÃO
PROGRAMAÇÃO DE
MULTIPROCESSADORES (MEM.
COMPARTILHADA)
Modelo de programação:
Aspecto crítico:
Múltiplas threads compartilhando dados
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 DE
MULTIPROCESSADORES (MEM.
COMPARTILHADA)
#include <omp.h>
#include <stdio.h>
Exemplo OpenMP
#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
PROGRAMAÇÃO DE
MULTICOMPUTADORES (MEM.
Modelo de programação:
troca de mensagens entre tarefas cooperantes
Aspectos críticos:
DISTRIBUÍDA)
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 DE
MULTICOMPUTADORES (MEM.
DISTRIBUÍDA)
#include <stdio.h>
#include <mpi.h>
Exemplo MPI
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
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)
processador
dado
processo
Workpool
tarefas/dados
26
processadores
MODELOS DE APLICAÇÃO
Mestre-Escravo
mestre
escravos
Pipeline
F
1
F
2
F
3
F
1
F
2
F
3
27
EXEMPLO DE USO: PCAM + MESTREESCRAVO
Partição
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
Na fase de partição são identificadas as tarefas que são
geridas pelo mestre
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...
Escolha da
arquitetura
Validação e
testes de
desempenho
Escolha das
ferramentas
Implementação
Projeto do
software
Problema
Detecção do
paralelismo
29
EXEMPLO DE
APLICAÇÃO PARALELA
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
31
Geração da
Malha
sequencial
paralelo
Particionamento
da malha
Geração dos
Sistemas de
Equações
Resolução dos
Sistemas de
Equações
Obtenção da
solução final
Arquitetura: Cluster
Software: C + MPI
32
RESULTADOS
Testes efetuados no
Cluster Krusty: 18 nodos
33
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...
Oportunidade
s
34
OBRIGADO!
[email protected]
www.inf.unioeste.br/~guilherme
35