0
Paulo Ricardo Paz Vital – Software Engineer
21 de Julho de 2010 – Fórum Internacional de Software Livre 2010




Programaç...
Agenda



■   Introdução
            – A emergência do Software Multicore
            – O que é Paralelismo?
■   Plataform...
Esta palestra NÃO é



    ■   Aula sobre arquitetura de computadores
    ■   Solucionadora de seus problemas de concorrên...
Introdução



    ■   Lei de Moore (Gordon E. Moore, Eletronics Magazine, 16 de Abril de 1965):
    “O número de transisto...
Introdução



    ■   Problemas:
              – Minituarização chegando ao limite
              – Dissipação do calor
   ...
Introdução



    ■   Programação sequencial:
              – Software executa em apenas uma CPU
              – Problema ...
Introdução



    ■   Programação paralela:
              – Software pode executar em múltiplos CPUs
              – Probl...
Plataformas de Concorrência




8                                 © 2010 IBM Corporation
MPI



    ■   MPI (Message Passing Interface) é uma biblioteca de subrotinas de comunicação
          utilizadas em ambie...
MPI


 ■   Estrutura básica de um código MPI


 /* 1st: launch the MPI processes on each node */
 MPI_Init(&argc,&argv);

...
MPI



 ■   Uso:
            – #include <mpi.h>
            – Inicializar MPI utilizando estrutura anterior
 ■   Compilaçã...
MPI



 ■   Olá MPI
 ■   Olá MPI v2




12                © 2010 IBM Corporation
Pthreads



 ■   POSIX Threads é um padrão POSIX que define uma API para criar e manipular threads
 ■   Conjunto de tipos ...
Pthreads



 ■   Race Condition



                Thread 01                   Thread 02            Saldo

             Lê...
Pthreads



 ■   Uso:
            – #include <pthread.h>
            – pthread_create(....)
 ■   Compilação:
           – ...
Pthreads



 ■   Olá Mundo
 ■   Olá Mundo com argumentos
 ■   Join – exemplo
 ■   Mutex - exemplo




16                  ...
OpenMP



 ■   Biblioteca de mais alto nível para programação paralela
 ■   Suporta memória compartilhada
 ■   C/C++ e For...
OpenMP



 ■   Uso:
            – #pragma omp parallel ...
 ■   Compilação:
           – gcc -g -o <binario> <codigo_fonte...
OpenMP



 ■   Olá FISL
 ■   Produto de pontos
 ■   ImageMagick




19                       © 2010 IBM Corporation
Linguagens específicas




20                            © 2010 IBM Corporation
X10



 ■   Linguagem desenvolvida pela IBM Research em cooperação com a academia
 ■   Parte do projeto IBM PERCS
 ■   Pro...
X10



 ■   Instalação:
            – Download do x10-2.0.4_linux_{x86, x86_64, ppc}.tgz
            – Desempacotamento
  ...
X10



 ■   Tipos e Inferência de Tipos
            – val sum = 1 + 1;
            – val sum <: Int = 1 + 1;
 ■   Lugares ...
X10



 ■   Concorrencia:
           – Activities: similar a threads ou processos
           – Podem existir várias ativid...
X10



 ■   Olá FISL
 ■   Bom Lugar
 ■   Olá Mundo Concorrente
 ■   Olá Mundo Atômico
 ■   Somatória Paralela




25      ...
Outras linguagens



 ■   Unified Parallel C (UPC)
 ■   OpenCL
 ■   CUDA
 ■   Charm++
 ■   Haskell




26                 ...
Aplicações para programação multicore




27                                      © 2010 IBM Corporation
Anjuta DevStudio



 ■   IDE 'oficial' do GNOME
 ■   Desenvolvimento em C, C++, Python
 ■   Extensivel a plugins:
        ...
Anjuta DevStudio




29                 © 2010 IBM Corporation
Eclipse IDE



     ■   Framework de desenvolvimento baseado em Java
              – Inicialmente desenvolvido pela IBM
  ...
Eclipse IDE




31            © 2010 IBM Corporation
GDB – The GNU Debugger



 ■   Depurador do projeto GNU para sistemas Unix
 ■   Suporta múltiplas linguagens: C, C++, Fort...
Repositório – Onde encontrar mais informações?



 ■   IBM Linux Technology Center
            – http://www-03.ibm.com/lin...
Repositório – Onde encontrar mais informações?



 ■   MPI
            – OpenMPI - http://www.open-mpi.org/
            – ...
Perguntas ???

     Paulo Ricardo Paz Vital,
     Software Engineer

     IBM Linux Technology Center

     pvital@br.ibm....
Upcoming SlideShare
Loading in...5
×

Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?

1,132

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,132
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?"

  1. 1. Paulo Ricardo Paz Vital – Software Engineer 21 de Julho de 2010 – Fórum Internacional de Software Livre 2010 Programação Multicore: Como sobreviver a esta revolução usando o Pinguim? © 2010 IBM Corporation
  2. 2. Agenda ■ Introdução – A emergência do Software Multicore – O que é Paralelismo? ■ Plataformas de concorrência – MPI – Pthreads – OpenMP ■ Linguagens específicas – X10 – Outras linguagens ■ Aplicações para programação multicore – Anjuta – Eclipse – GDB 2 © 2010 IBM Corporation
  3. 3. Esta palestra NÃO é ■ Aula sobre arquitetura de computadores ■ Solucionadora de seus problemas de concorrência ■ Sessão avançada de programação concorrente 3 © 2010 IBM Corporation
  4. 4. Introdução ■ Lei de Moore (Gordon E. Moore, Eletronics Magazine, 16 de Abril de 1965): “O número de transistores numa mesma área de semicondutor dobra a cada (18) 24 meses” 4 © 2010 IBM Corporation
  5. 5. Introdução ■ Problemas: – Minituarização chegando ao limite – Dissipação do calor ■ Soluções: – Novas tecnologias de gravação em chip – Mais de um núcleo, ou seja, multicore ■ Fim da Lei de Moore: – Carl Anderson, IBM Fellow – Desenvolvimento de sistemas que exigem menos recursos do processador – Alto custo de pesquisa de novas tecnologias ■ Mas o que a adição de mais cores trouxe para a computação? 5 © 2010 IBM Corporation
  6. 6. Introdução ■ Programação sequencial: – Software executa em apenas uma CPU – Problema é quebrado em uma série de instruções – Instruções são executadas uma após a outra – Somente uma instruções pode estar executando em certo momento 6 © 2010 IBM Corporation
  7. 7. Introdução ■ Programação paralela: – Software pode executar em múltiplos CPUs – Problema é quebado em partes que podem ser resolvidas concorrentemente – Cada parte é quebrada em uma série de instruções – Instruções de cada parte executam simultaneamente em diferentes CPUs 7 © 2010 IBM Corporation
  8. 8. Plataformas de Concorrência 8 © 2010 IBM Corporation
  9. 9. MPI ■ MPI (Message Passing Interface) é uma biblioteca de subrotinas de comunicação utilizadas em ambientes de memória distribuída, máquinas paralelas massivas, NOWs (network of workstations) e redes heterogêneas. ■ Informações passadas da memória local do processo para a memória principal do processo remoto ■ Paralelismo explícito, ou seja, o desenvolvedor é responsável pela distribuição ■ API predominante no desenvolvimento de aplicações para clusters científicos ■ Diversas Implementações: – OpenMPI - http://www.open-mpi.org/ – LAM/MPI - http://www.lam-mpi.org/ – Los Alamos MPI - http://public.lanl.gov/lampi/ – MPICH - http://www-unix.mcs.anl.gov/mpi/mpich/ – MPICH2 - http://www-unix.mcs.anl.gov/mpi/mpich2/ 9 © 2010 IBM Corporation
  10. 10. MPI ■ Estrutura básica de um código MPI /* 1st: launch the MPI processes on each node */ MPI_Init(&argc,&argv); /* 2nd: request a thread id (rank) from the MPI master process, which has tid == 0 */ MPI_Comm_rank(MPI_COMM_WORLD, &tid); /* 3rd: this is often useful, get the number of threads or processes launched by MPI */ MPI_Comm_size(MPI_COMM_WORLD, &nthreads); /* 4th: finalize the MPI processes */ MPI_Finalize(); 10 © 2010 IBM Corporation
  11. 11. MPI ■ Uso: – #include <mpi.h> – Inicializar MPI utilizando estrutura anterior ■ Compilação: – mpicc -g -o <binario> <codigo_fonte>.c – mpic++ -g -o <binario> <codigo_fonte>.cpp ■ Execução: – mpirun -np <num_proc> <binario> 11 © 2010 IBM Corporation
  12. 12. MPI ■ Olá MPI ■ Olá MPI v2 12 © 2010 IBM Corporation
  13. 13. Pthreads ■ POSIX Threads é um padrão POSIX que define uma API para criar e manipular threads ■ Conjunto de tipos e chamadas para linguagem de programação C ■ Características: – Threads co-existem em um mesmo processo, compartilhando recursos, mas escalonadas separadamente pelo sistema operacional – Somente o mínimo necessário de recursos são replicados entre as threads. ■ Criando threads: – pthread_create (thread, attr, start_routine, args) – pthread_exit (status) ■ Unindo e desunindo threads: – pthread_join (thread_id, status) – pthread_detach (thread_id, status) ■ Mutex – pthread_mutex_init (mutex, attr) pthread_mutex_destroy (mutex) – pthread_mutex_lock (mutex) pthread_mutex_unlock (mutex) 13 © 2010 IBM Corporation
  14. 14. Pthreads ■ Race Condition Thread 01 Thread 02 Saldo Lê Saldo: $1000 $1000 Lê Saldo: $1000 $1000 Deposito: $200 $1000 Deposito: $200 $1000 Atualiza Saldo: $1000+$200 $1200 Atualiza Saldo: $1000+$200 $1200 14 © 2010 IBM Corporation
  15. 15. Pthreads ■ Uso: – #include <pthread.h> – pthread_create(....) ■ Compilação: – gcc -g -o <binario> <codigo_fonte>.c -pthread 15 © 2010 IBM Corporation
  16. 16. Pthreads ■ Olá Mundo ■ Olá Mundo com argumentos ■ Join – exemplo ■ Mutex - exemplo 16 © 2010 IBM Corporation
  17. 17. OpenMP ■ Biblioteca de mais alto nível para programação paralela ■ Suporta memória compartilhada ■ C/C++ e Fortran ■ Programador possui controle total sobre a execução paralela ■ Características – Utiliza #pragmas para definir as regiões paralelas – Detecta automaticamente o número de processadores ■ Restrições – Programador necessita fornecer os #pragmas – Não existe detecção de conflitos – Exige compilador – não é apenas uma biblioteca 17 © 2010 IBM Corporation
  18. 18. OpenMP ■ Uso: – #pragma omp parallel ... ■ Compilação: – gcc -g -o <binario> <codigo_fonte>.c -fopenmp 18 © 2010 IBM Corporation
  19. 19. OpenMP ■ Olá FISL ■ Produto de pontos ■ ImageMagick 19 © 2010 IBM Corporation
  20. 20. Linguagens específicas 20 © 2010 IBM Corporation
  21. 21. X10 ■ Linguagem desenvolvida pela IBM Research em cooperação com a academia ■ Parte do projeto IBM PERCS ■ Projeto Open Source ■ Objetivo: – Simples – Seguro – Escalável – Universal ■ Alvos: – Computação científica – Análise de negócios ■ Compiladores: – Java – C++ 21 © 2010 IBM Corporation
  22. 22. X10 ■ Instalação: – Download do x10-2.0.4_linux_{x86, x86_64, ppc}.tgz – Desempacotamento – Editar a variável JAVA_HOME para onde estiver bin/java ■ Uso: – Criação de arquivo *.x10 – Definição de classe, como em Java e/ou C++, no mesmo nome do arquivo – Utilização das bibliotecas X10 como pacotes ■ Compilação: – <path_instalação>/bin/x10c <arquivo>.x10 ■ Execução: – <path_instalação>/bin/x10 <classe> 22 © 2010 IBM Corporation
  23. 23. X10 ■ Tipos e Inferência de Tipos – val sum = 1 + 1; – val sum <: Int = 1 + 1; ■ Lugares (places) – Lugar corresponde a um processo ou processador – Alguns dados são globais, podem ser lidos por qualquer lugar – Alguns dados são não-globais: existe somente em um lugar – Todo dado não-global existe precisamente em um lugar: home – Variável here é sempre vinculada ao lugar atual (linha de código executando) – ! - forma de dizer que um objeto home está em here – val p : Person! = new Person() – Somente pode usar dados não-globais no lugar onde foi definido 23 © 2010 IBM Corporation
  24. 24. X10 ■ Concorrencia: – Activities: similar a threads ou processos – Podem existir várias atividades em um simples lugar (processador único) – Se existem diversos lugares, cada um terá diferentes atividades executando – Comando async S gera uma nova atividade que executa e pára S – A nova atividade está localizada no mesmo lugar que o gerador e valor de here ■ Atomicidade: – atomic S – Nenhuma outra atividade pode ser executada enquanto S não terminar ■ Funções: – (args) => resultado ■ Loops: – for ((i) in a .. b) 24 © 2010 IBM Corporation
  25. 25. X10 ■ Olá FISL ■ Bom Lugar ■ Olá Mundo Concorrente ■ Olá Mundo Atômico ■ Somatória Paralela 25 © 2010 IBM Corporation
  26. 26. Outras linguagens ■ Unified Parallel C (UPC) ■ OpenCL ■ CUDA ■ Charm++ ■ Haskell 26 © 2010 IBM Corporation
  27. 27. Aplicações para programação multicore 27 © 2010 IBM Corporation
  28. 28. Anjuta DevStudio ■ IDE 'oficial' do GNOME ■ Desenvolvimento em C, C++, Python ■ Extensivel a plugins: – Gvim – gerenciamento de projetos – Valgrind – Gprof ■ Gerenciador de arquivos integrado ■ Wizard de projetos: autogen ■ Editor de código fonte: Scintilla e GtkSourceView ■ Glade e depuradores integrados ■ Gerador de classes ■ Controle de versão: git e subversion 28 © 2010 IBM Corporation
  29. 29. Anjuta DevStudio 29 © 2010 IBM Corporation
  30. 30. Eclipse IDE ■ Framework de desenvolvimento baseado em Java – Inicialmente desenvolvido pela IBM – Open Source (Eclipse Public License - EPL) ■ Extensível a plugins: – C/C++ – PHP – Python – Controle de versão: subversion, git, CVS – Depuração ■ Eclipse Classic 3.6.0 (Helios) – http://www.eclipse.org/downloads/ ■ C/C++ Development Tooling (CDT) 7.0 for Eclipse Helios – http://www.eclipse.org/cdt/downloads.php ■ Parallel Tools Platform (PTP) 4.0.1 for Eclipse Helios – http://www.eclipse.org/ptp/downloads.php 30 © 2010 IBM Corporation
  31. 31. Eclipse IDE 31 © 2010 IBM Corporation
  32. 32. GDB – The GNU Debugger ■ Depurador do projeto GNU para sistemas Unix ■ Suporta múltiplas linguagens: C, C++, Fortran, Pascal, etc ■ Suporte a depuração remota ■ DDD – DataDisplay Debugger: front-end para o gdb 32 © 2010 IBM Corporation
  33. 33. Repositório – Onde encontrar mais informações? ■ IBM Linux Technology Center – http://www-03.ibm.com/linux/ltc/index.html ■ IBM developerWorks – http://www.ibm.com/developerworks ■ X10 – http://x10-lang.org ■ Anjuta DevStudio – http://www.anjuta.org ■ Eclipse IDE – http://www.eclipse.org ■ GDB / DDD – http://www.gnu.org/software/gdb – http://www.gnu.org/software/ddd 33 © 2010 IBM Corporation
  34. 34. Repositório – Onde encontrar mais informações? ■ MPI – OpenMPI - http://www.open-mpi.org/ – LAM/MPI - http://www.lam-mpi.org/ – Los Alamos MPI - http://public.lanl.gov/lampi/ – MPICH - http://www-unix.mcs.anl.gov/mpi/mpich/ – MPICH2 - http://www-unix.mcs.anl.gov/mpi/mpich2/ ■ Pthreads – https://computing.llnl.gov/tutorials/pthreads/ ■ OpenMP – http://openmp.org – https://computing.llnl.gov/tutorials/openMP/ 34 © 2010 IBM Corporation
  35. 35. Perguntas ??? Paulo Ricardo Paz Vital, Software Engineer IBM Linux Technology Center pvital@br.ibm.com paulo@vital.eng.br http://www.vital.eng.br 35 © 2010 IBM Corporation
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×