SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
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
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
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
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
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
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
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
Plataformas de Concorrência




8                                 © 2010 IBM Corporation
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
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
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
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 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
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
Pthreads



 ■   Uso:
            – #include <pthread.h>
            – pthread_create(....)
 ■   Compilação:
           – gcc -g -o <binario> <codigo_fonte>.c -pthread




15                                                           © 2010 IBM Corporation
Pthreads



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




16                              © 2010 IBM Corporation
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
OpenMP



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




18                                                           © 2010 IBM Corporation
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
 ■   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
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
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
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
X10



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




25                           © 2010 IBM Corporation
Outras linguagens



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




26                              © 2010 IBM Corporation
Aplicações para programação multicore




27                                      © 2010 IBM Corporation
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
Anjuta DevStudio




29                 © 2010 IBM Corporation
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
Eclipse IDE




31            © 2010 IBM Corporation
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
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
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
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

Más contenido relacionado

Destacado (20)

Fotos graciosas 33657
Fotos graciosas 33657Fotos graciosas 33657
Fotos graciosas 33657
 
Ensino
Ensino Ensino
Ensino
 
Cultivo quinua es
Cultivo quinua esCultivo quinua es
Cultivo quinua es
 
nkl
nklnkl
nkl
 
fhfh
fhfhfhfh
fhfh
 
Meus Deus
Meus DeusMeus Deus
Meus Deus
 
Bab i
Bab iBab i
Bab i
 
Dissertation: Genetic Algorithms as a pre processing strategy for imbalanced ...
Dissertation: Genetic Algorithms as a pre processing strategy for imbalanced ...Dissertation: Genetic Algorithms as a pre processing strategy for imbalanced ...
Dissertation: Genetic Algorithms as a pre processing strategy for imbalanced ...
 
Pcn 1997 livro052
Pcn 1997 livro052Pcn 1997 livro052
Pcn 1997 livro052
 
Agência Digital In Dev - Programação Web
Agência Digital In Dev - Programação WebAgência Digital In Dev - Programação Web
Agência Digital In Dev - Programação Web
 
Juk th3
Juk th3Juk th3
Juk th3
 
Aniversário da valdirene
Aniversário da valdireneAniversário da valdirene
Aniversário da valdirene
 
Ambiente de Trabalho - Segurança e Internet
Ambiente de Trabalho - Segurança e InternetAmbiente de Trabalho - Segurança e Internet
Ambiente de Trabalho - Segurança e Internet
 
Fotos control electrico
Fotos control electricoFotos control electrico
Fotos control electrico
 
Slid
SlidSlid
Slid
 
мат. ответственноть
мат. ответственнотьмат. ответственноть
мат. ответственноть
 
miri
mirimiri
miri
 
Governo eletrônico congresso ibde 2010 curitiba-pr
Governo eletrônico   congresso ibde 2010 curitiba-prGoverno eletrônico   congresso ibde 2010 curitiba-pr
Governo eletrônico congresso ibde 2010 curitiba-pr
 
miri
mirimiri
miri
 
Ptk (Kelompok 5)
Ptk (Kelompok 5)Ptk (Kelompok 5)
Ptk (Kelompok 5)
 

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

Conceitos Iniciais LP I
Conceitos Iniciais LP IConceitos Iniciais LP I
Conceitos Iniciais LP IPatrícia Melo
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoSidney Roberto
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Luís Gustavo Martins
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Jorge Cardoso
 
Computação Paralela - Uma Abordagem Geral
Computação Paralela - Uma Abordagem GeralComputação Paralela - Uma Abordagem Geral
Computação Paralela - Uma Abordagem GeralIgor José F. Freitas
 
Tunando sua aplicação LNMP
Tunando sua aplicação LNMPTunando sua aplicação LNMP
Tunando sua aplicação LNMPLeandro Mendes
 
Aula de introducao ao ZOS
Aula de introducao ao ZOSAula de introducao ao ZOS
Aula de introducao ao ZOSIvan Sanches
 
Introdução aos sistemas operacionais cap 01 (i unidade)
Introdução aos sistemas operacionais cap 01 (i unidade)Introdução aos sistemas operacionais cap 01 (i unidade)
Introdução aos sistemas operacionais cap 01 (i unidade)Faculdade Mater Christi
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionaisRobson Ferreira
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladoresAlyson Cavalcante
 
Aula 1 aed - introdução à computação
Aula 1   aed - introdução à computaçãoAula 1   aed - introdução à computação
Aula 1 aed - introdução à computaçãoElaine Cecília Gatto
 
Apostila tre.rs2014 direito_eleitoral_pedrokuhnApostila tre.rs2014 informatic...
Apostila tre.rs2014 direito_eleitoral_pedrokuhnApostila tre.rs2014 informatic...Apostila tre.rs2014 direito_eleitoral_pedrokuhnApostila tre.rs2014 informatic...
Apostila tre.rs2014 direito_eleitoral_pedrokuhnApostila tre.rs2014 informatic...Fernando Macedo
 

Similar a Programação Multicore: Como sobreviver a esta revolução usando o Pinguim? (20)

Conceitos Iniciais LP I
Conceitos Iniciais LP IConceitos Iniciais LP I
Conceitos Iniciais LP I
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
 
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...Introdução à programação em Android e iOS - Conceitos fundamentais de program...
Introdução à programação em Android e iOS - Conceitos fundamentais de program...
 
Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao Conceitos fundamentais de_programacao
Conceitos fundamentais de_programacao
 
Computação Paralela - Uma Abordagem Geral
Computação Paralela - Uma Abordagem GeralComputação Paralela - Uma Abordagem Geral
Computação Paralela - Uma Abordagem Geral
 
Lab so-abertos-unidade2
Lab so-abertos-unidade2Lab so-abertos-unidade2
Lab so-abertos-unidade2
 
Tunando sua aplicação LNMP
Tunando sua aplicação LNMPTunando sua aplicação LNMP
Tunando sua aplicação LNMP
 
Apresentacao sfd-poa
Apresentacao sfd-poaApresentacao sfd-poa
Apresentacao sfd-poa
 
Aula de introducao ao ZOS
Aula de introducao ao ZOSAula de introducao ao ZOS
Aula de introducao ao ZOS
 
Introdução aos sistemas operacionais cap 01 (i unidade)
Introdução aos sistemas operacionais cap 01 (i unidade)Introdução aos sistemas operacionais cap 01 (i unidade)
Introdução aos sistemas operacionais cap 01 (i unidade)
 
Mini-curso CUDA
Mini-curso CUDAMini-curso CUDA
Mini-curso CUDA
 
Aula 02 informática aplicada - sistemas operacionais
Aula 02  informática aplicada - sistemas operacionaisAula 02  informática aplicada - sistemas operacionais
Aula 02 informática aplicada - sistemas operacionais
 
Mono Codebits
Mono CodebitsMono Codebits
Mono Codebits
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladores
 
Aula 1 aed - introdução à computação
Aula 1   aed - introdução à computaçãoAula 1   aed - introdução à computação
Aula 1 aed - introdução à computação
 
Apostila tre.rs2014 direito_eleitoral_pedrokuhnApostila tre.rs2014 informatic...
Apostila tre.rs2014 direito_eleitoral_pedrokuhnApostila tre.rs2014 informatic...Apostila tre.rs2014 direito_eleitoral_pedrokuhnApostila tre.rs2014 informatic...
Apostila tre.rs2014 direito_eleitoral_pedrokuhnApostila tre.rs2014 informatic...
 
Introdução à Computação
Introdução à ComputaçãoIntrodução à Computação
Introdução à Computação
 
Linguagem assembly
Linguagem assemblyLinguagem assembly
Linguagem assembly
 
Intro linux
Intro linuxIntro linux
Intro linux
 
Minicurso GNU/Linux
Minicurso GNU/LinuxMinicurso GNU/Linux
Minicurso GNU/Linux
 

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

  • 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. 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. 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. 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. 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. 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. 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. Plataformas de Concorrência 8 © 2010 IBM Corporation
  • 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. 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. 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. MPI ■ Olá MPI ■ Olá MPI v2 12 © 2010 IBM Corporation
  • 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. 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. Pthreads ■ Uso: – #include <pthread.h> – pthread_create(....) ■ Compilação: – gcc -g -o <binario> <codigo_fonte>.c -pthread 15 © 2010 IBM Corporation
  • 16. Pthreads ■ Olá Mundo ■ Olá Mundo com argumentos ■ Join – exemplo ■ Mutex - exemplo 16 © 2010 IBM Corporation
  • 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. OpenMP ■ Uso: – #pragma omp parallel ... ■ Compilação: – gcc -g -o <binario> <codigo_fonte>.c -fopenmp 18 © 2010 IBM Corporation
  • 19. OpenMP ■ Olá FISL ■ Produto de pontos ■ ImageMagick 19 © 2010 IBM Corporation
  • 20. Linguagens específicas 20 © 2010 IBM Corporation
  • 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. 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. 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. 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. X10 ■ Olá FISL ■ Bom Lugar ■ Olá Mundo Concorrente ■ Olá Mundo Atômico ■ Somatória Paralela 25 © 2010 IBM Corporation
  • 26. Outras linguagens ■ Unified Parallel C (UPC) ■ OpenCL ■ CUDA ■ Charm++ ■ Haskell 26 © 2010 IBM Corporation
  • 27. Aplicações para programação multicore 27 © 2010 IBM Corporation
  • 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. Anjuta DevStudio 29 © 2010 IBM Corporation
  • 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. Eclipse IDE 31 © 2010 IBM Corporation
  • 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. 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. 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. 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