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

1.321 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.321
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
26
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

×