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
                                                         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
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
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
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
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>                                          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

Sistemas Distribuídos - Computação Paralela

  • 1.
  • 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
  • 8.
  • 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 InstructionsMultiple 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
  • 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