2. ◦ Como ganhar desempenho em
programas?
3 opções
Prof. Adriano Teixeira de Souza
3. 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
4. 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
5. 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
6. 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
7. Paralelismo no nível de instruções
◦ Pipeline, superescalar
◦ Implícito para o programador
Várias linhas de execução: threads
Programador é
◦ Suporte do sistema operacional
responsável pela
Vários núcleos exploração do
Vários processadores paralelismo
7
Prof. Adriano Teixeira de Souza
9. Classificação de Flynn (1970)
SISD SIMD
MISD MIMD
Prof. Adriano Teixeira de Souza
10. SISD (Single Instruction Single Data)
◦ Computadores com um único processador
◦ Instruções executadas em seqüência
◦ Placas gráficas
Prof. Adriano Teixeira de Souza
11. SIMD (Single Instruction Multiple Data)
◦ Cada processador executa a mesma instrução
em sincronia, mas usando dados diferentes
Prof. Adriano Teixeira de Souza
12. 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
13. 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
Prof. Adriano Teixeira de Souza
14. MPP Cray – Jaguar
AMD x86_64 Opteron Quad Core 2300 MHz Oak Ridge National Laboratory
181.504 cores
362TB de memória
Interconexão: Cray SeaStar / Infiniband
SO CNL (adaptação do Suse)
Prof. Adriano Teixeira de Souza
15. 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
16.
17. 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
18. #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 = %dn", tid);
/* Only master thread does this */
if (tid == 0)
{
nthreads = omp_get_num_threads();
printf("Number of threads = %dn", nthreads);
}
} /* All threads join master thread and disband */
Prof. Adriano Teixeira de Souza