sistemas distribuídos - computação paralela - introdução
TRANSCRIPT
Computação Paralela
Prof. Adriano Teixeira de Souza
◦ Como ganhar desempenho em programas?
3 opções
Prof. Adriano Teixeira de Souza
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)
Prof. Adriano Teixeira de Souza
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*
Prof. Adriano Teixeira de Souza
Utilização de múltiplos recursos computacionais para resolver um determinado problema ◦ Múltiplas CPUs
◦ Problemas são divididos para serem executados simultaneamente
Prof. Adriano Teixeira de Souza
Tempo/Dinheiro
Limite da computação sequencial
Solução de grandes problemas
Alocação de recursos
◦ Cluster
◦ Grids
Arquiteturas estão mudando!!!
Prof. Adriano Teixeira de Souza
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
7
Programador é responsável pela exploração do paralelismo
Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
Classificação de Flynn (1970)
SISD SIMD
MISD MIMD
Prof. Adriano Teixeira de Souza
SISD (Single Instruction Single Data)
◦ Computadores com um único processador
◦ Instruções executadas em seqüência
◦ Placas gráficas
Prof. Adriano Teixeira de Souza
SIMD (Single Instruction Multiple Data) ◦ Cada processador executa a mesma instrução
em sincronia, mas usando dados diferentes
Prof. Adriano Teixeira de Souza
MIMD (Multiple Instructions Multiple Data) Classe dos computadores paralelos Não determinismo:
Várias coisas ocorrendo ao mesmo tempo
Memória Compartilhada
Multicore
SMP (Symmetric Multi-Processing) Memória Distribuída
Cluster
MPP (Massively Parallel Processors)
Híbridos
Prof. Adriano Teixeira de Souza
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
IBM – RoadRunner
Los Alamos National Laboratory
Prof. Adriano Teixeira de Souza
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
Prof. Adriano Teixeira de Souza
Cluster Krusty – LCAD Unioeste
18 nós – Pentium IV 3.2 HT GHz
1 GB RAM
Rede Gigabit Ethernet
SO Linux Fedora
Prof. Adriano Teixeira de Souza
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 (C#, Java ...)
◦ linguagens seqüenciais + extensões/biliotecas (OpenMP, Pthreads)
Prof. Adriano Teixeira de Souza
#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 */
Exemplo OpenMP
Prof. Adriano Teixeira de Souza