SlideShare uma empresa Scribd logo
1 de 16
OpenACC: um promissor standard
  para aceleração de códigos
           Pedro Pais Lopes
NVIDIA GPU Computing Developer Forum
         Curitiba, 17/07/2012
O que é OpenACC?
• Diretivas de compilação, na forma de pragmas
  (C/C++) ou comentários (Fortran) de alto nível,
  que orientam o compilador a executar trechos
  de código em um acelerador

• Esforço conjunto PGI + Cray + NVIDIA + CAPS,
  visando integrar padrão OpenMP

• Vide padrão em www.openacc.org
Sintaxe
• C:
   #pragma acc nome_diretiva [cláusula [,cláusula]…]
      bloco estruturado de código

• Fortran:
   !$acc nome_diretiva [cláusula [,cláusula]…]
      bloco estruturado de código
   !$acc end nome_diretiva
Exemplo #1: Jacobi
    • Converge iterativamente para um valor a
      partir da média dos pontos vizinhos
                                           0°C


           A(i+1,j)



                                    0°C           0°C
A(i-1,j)        A(i,j)   A(i+1,j)



           A(i,j-1)

                                          100°C
Código Fortran
do while ( err > tol .and. iter < iter_max )
  err=0.0
 do j=1,m
   do i=1,n
     Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + &
                        A(i , j-1) + A(i , j+1))
     err = max(err, Anew(i,j) - A(i,j))
   end do
 end do

 do j=1,m-2
   do i=1,n-2
     A(i,j) = Anew(i,j)
   end do
 end do
  iter = iter +1
end do
Inserindo OpenMP
do while ( err > tol .and. iter < iter_max )
  err=0.0
!$omp parallel do private(i,j) reduction(max:err)
  do j=1,m
    do i=1,n
      Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + &
                         A(i , j-1) + A(i , j+1))
      err = max(err, Anew(i,j) - A(i,j))
    end do
  end do
!$omp end parallel do
!$omp parallel do private(i,j)
  do j=1,m-2
    do i=1,n-2
      A(i,j) = Anew(i,j)
    end do
  end do
!$omp end parallel do
  iter = iter +1
end do
Código em Fortran e OpenACC
                Um kernel por ninho de laços
do while ( err > tol .and. iter < iter_max )
  err=0.0
!$acc kernels reduction(max:err)        Trafego GPU-CPU gerado
  do j=1,m                          automaticamente pelo compilador
    do i=1,n
      Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + &
                         A(i , j-1) + A(i , j+1))
      err = max(err, Anew(i,j) - A(i,j))
    end do
  end do
!$acc end kernels         barreira
!$acc kernels
  do j=1,m-2                                   Outro kernel
    do i=1,n-2
      A(i,j) = Anew(i,j)
    end do
  end do
!$acc end kernels
  iter = iter +1
end do
Vantagens
• Código CUDA gerado automaticamente

• Mantém portabilidade entre o código sequencial e o
  código paralelo
   – Chave de compilação define se compilador gera código
     para GPU ou não


• Trafego de dados entre a CPU e a GPU determinado
  “automaticamente” pelo compilador
CPU: Intel Xeon X5680    Desempenho        GPU: NVIDIA Tesla M2070
6 Cores @ 3.33GHz
                        (fonte: NVIDIA)
    Execução                   Tempo (s)   Speedup
    CPU 1 OpenMP thread        69.80       --
    CPU 2 OpenMP threads       44.76       1.56x
    CPU 4 OpenMP threads       39.59       1.76x

    CPU 6 OpenMP threads       39.71       1.76x

    OpenACC GPU 1 thread       162.16      0.43x OPA!
Compilador fez o melhor que pode
• Mas ele NÃO pode desrespeitar o código
1.   Enquanto condicional do while for satisfeita…
2.   copia A para a placa
3.   Computa primeiro laço
4.   Copia Anew para CPU
5.   Copia Anew para placa
6.   Computa segundo laço
7.   Copia A para a CPU
8.   Volta para 1.
Código em Fortran e OpenACC
do while ( err > tol .and. iter < iter_max )
  err=0.0
!$acc kernels reduction(max:err)
  do j=1,m
    do i=1,n
     Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + &
                        A(i , j-1) + A(i , j+1))
      err = max(err, Anew(i,j) - A(i,j))
    end do
  end do
!$acc end kernels
!$acc kernels
  do j=1,m-2
    do i=1,n-2
      A(i,j) = Anew(i,j)
    end do
  end do
!$acc end kernels
  iter = iter +1
end do
Melhoria #1
do while ( err > tol .and. iter < iter_max )
  err=0.0
!$acc kernels reduction(max:err)
  do j=1,m
    do i=1,n
      Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + &
                         A(i , j-1) + A(i , j+1))
      err = max(err, Anew(i,j) - A(i,j))
    end do
  end do
               Juntar os dois kernels em um elimina tráfego
             CPU/GPU de A e Anew entre os dois aninamentos
  do j=1,m-2
    do i=1,n-2
      A(i,j) = Anew(i,j)
    end do
  end do
!$acc end kernels
  iter = iter +1
end do
Podemos ir além (melhoria #2)
                     Envie A da CPU para a GPU no início do
                      laço e envie de volta ao final do laço
!$acc data copy(A), create(Anew)              Crie e mantenha Anew na GPU
do while ( err > tol .and. iter < iter_max )
  err=0.0
!$acc kernels reduction(max:err)
  do j=1,m
    do i=1,n
      Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + &
                           A(i , j-1) + A(i , j+1))
      err = max(err, Anew(i,j) - A(i,j))
    end do
  end do

  do j=1,m-2
    do i=1,n-2
      A(i,j) = Anew(i,j)
    end do
  end do
!$acc end kernels
  iter = iter +1
end do
!$acc end data
CPU: Intel Xeon X5680    Desempenho        GPU: NVIDIA Tesla M2070
6 Cores @ 3.33GHz
                        (fonte: NVIDIA)
    Execução                   Tempo (s)   Speedup

    CPU 1 OpenMP thread        69,80       --

    CPU 2 OpenMP threads       44,76       1,56x

    CPU 4 OpenMP threads       39,59       1,76x

    CPU 6 OpenMP threads       39,71       1,76x
                                           5,11x
    OpenACC GPU                13,65
                                           BOM!
Resumo
• Foram 3 linhas a mais para 5,11x de speedup
  – Inclusão de comentários: outros compiladores
    ignorarão esta linha e código segue inalterado
• Uso de diretivas deve ter “precisão cirúrgica”
• Corretude da computação: não somente se
  preocupar com “race conditions” mas
  também com gerenciamento de dados
  – Lembrar-se SEMPRE que temos cópia LOCAL e
    cópia REMOTA: memória não estará inicializada
Sumário
• OpenACC é forma promissora de programar
  aceleradores inserindo diretivas no programa original

• Como em OpenMP, é:
   – Incremental
   – Portátil

• Muito mais simples e fácil que CUDA, preservando o
  investimento na codificação original

Mais conteúdo relacionado

Destaque

Um sexagenário no_ginásio
Um sexagenário no_ginásioUm sexagenário no_ginásio
Um sexagenário no_ginásio
Nuno Costa
 
Helena Farrall - Sustainable Construction Living Lab
Helena Farrall - Sustainable Construction Living LabHelena Farrall - Sustainable Construction Living Lab
Helena Farrall - Sustainable Construction Living Lab
Construção Sustentável
 
Úlceras Diabéticas 2012 salvador - 21/09/2012
Úlceras Diabéticas 2012 salvador - 21/09/2012Úlceras Diabéticas 2012 salvador - 21/09/2012
Úlceras Diabéticas 2012 salvador - 21/09/2012
Anais IV CBED
 
Helena Farrall
Helena FarrallHelena Farrall

Destaque (15)

HIGHLIGHT PHARMA BRAZIL BRA
HIGHLIGHT PHARMA BRAZIL BRAHIGHLIGHT PHARMA BRAZIL BRA
HIGHLIGHT PHARMA BRAZIL BRA
 
Evitando el despilfarro en la gestión de las bodegas
Evitando el despilfarro en la gestión de las bodegasEvitando el despilfarro en la gestión de las bodegas
Evitando el despilfarro en la gestión de las bodegas
 
Paula Aczel
Paula  AczelPaula  Aczel
Paula Aczel
 
Um sexagenário no_ginásio
Um sexagenário no_ginásioUm sexagenário no_ginásio
Um sexagenário no_ginásio
 
Helena Farrall - Sustainable Construction Living Lab
Helena Farrall - Sustainable Construction Living LabHelena Farrall - Sustainable Construction Living Lab
Helena Farrall - Sustainable Construction Living Lab
 
La sostenibilidad como estrategia competitiva
La sostenibilidad como estrategia competitivaLa sostenibilidad como estrategia competitiva
La sostenibilidad como estrategia competitiva
 
Úlceras Diabéticas 2012 salvador - 21/09/2012
Úlceras Diabéticas 2012 salvador - 21/09/2012Úlceras Diabéticas 2012 salvador - 21/09/2012
Úlceras Diabéticas 2012 salvador - 21/09/2012
 
Helena Farrall
Helena FarrallHelena Farrall
Helena Farrall
 
14
1414
14
 
ERA México - Find Extra Profit
ERA México - Find Extra ProfitERA México - Find Extra Profit
ERA México - Find Extra Profit
 
20140711 g salisbury_en_so
20140711 g salisbury_en_so20140711 g salisbury_en_so
20140711 g salisbury_en_so
 
El ERPA - James A. Holtkamp 11.19.14
El ERPA - James A. Holtkamp 11.19.14El ERPA - James A. Holtkamp 11.19.14
El ERPA - James A. Holtkamp 11.19.14
 
Ahorro del 15% en la gestión de residuos en el Hospital de Barcelona
Ahorro del 15% en la gestión de residuos en el Hospital de BarcelonaAhorro del 15% en la gestión de residuos en el Hospital de Barcelona
Ahorro del 15% en la gestión de residuos en el Hospital de Barcelona
 
Transporte sostenible en ciudades de México: Transición hacia una economía ba...
Transporte sostenible en ciudades de México: Transición hacia una economía ba...Transporte sostenible en ciudades de México: Transición hacia una economía ba...
Transporte sostenible en ciudades de México: Transición hacia una economía ba...
 
Helena Farrall - SCLL
Helena Farrall  - SCLLHelena Farrall  - SCLL
Helena Farrall - SCLL
 

Semelhante a Introdução ao Processamento Paralelo (4.2)

A arquitetura básica de um computador
A arquitetura básica de um computadorA arquitetura básica de um computador
A arquitetura básica de um computador
redesinforma
 
Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maple
jeandson correa
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
elliando dias
 

Semelhante a Introdução ao Processamento Paralelo (4.2) (20)

[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais) [Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
[Curso Java Básico] Aula 13: Operadores (Aritiméticos, Lógicos e Relacionais)
 
Arduino sist u_controlados_intro_eletrica_2019_keynote_novo
Arduino sist u_controlados_intro_eletrica_2019_keynote_novoArduino sist u_controlados_intro_eletrica_2019_keynote_novo
Arduino sist u_controlados_intro_eletrica_2019_keynote_novo
 
Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduino
 
Inpe
InpeInpe
Inpe
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadas
 
A arquitetura básica de um computador
A arquitetura básica de um computadorA arquitetura básica de um computador
A arquitetura básica de um computador
 
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
 
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
 
Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maple
 
Cool 3 assembly para linux
Cool 3   assembly para linuxCool 3   assembly para linux
Cool 3 assembly para linux
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
Microprocessadores/Microcontroladores para OBC.
Microprocessadores/Microcontroladores para OBC. Microprocessadores/Microcontroladores para OBC.
Microprocessadores/Microcontroladores para OBC.
 
Estudo dirigido arquitetura didática unidade de controle
Estudo dirigido arquitetura didática unidade de controleEstudo dirigido arquitetura didática unidade de controle
Estudo dirigido arquitetura didática unidade de controle
 
Workshop de Arduino
Workshop de ArduinoWorkshop de Arduino
Workshop de Arduino
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduino
 
Arduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius SengerArduino Hack Day por Vinicius Senger
Arduino Hack Day por Vinicius Senger
 

Mais de Grupo de Geofísica Computacional, UNICAMP

Mais de Grupo de Geofísica Computacional, UNICAMP (20)

Aplicações Potenciais de Deep Learning à Indústria do Petróleo
Aplicações Potenciais de Deep Learning à Indústria do PetróleoAplicações Potenciais de Deep Learning à Indústria do Petróleo
Aplicações Potenciais de Deep Learning à Indústria do Petróleo
 
Full Waveform Inversion: Introdução e Aplicações [5/5]
Full Waveform Inversion: Introdução e Aplicações [5/5]Full Waveform Inversion: Introdução e Aplicações [5/5]
Full Waveform Inversion: Introdução e Aplicações [5/5]
 
Full Waveform Inversion: Introdução e Aplicações [4/5]
Full Waveform Inversion: Introdução e Aplicações [4/5]Full Waveform Inversion: Introdução e Aplicações [4/5]
Full Waveform Inversion: Introdução e Aplicações [4/5]
 
Full Waveform Inversion: Introdução e Aplicações [3/5]
Full Waveform Inversion: Introdução e Aplicações [3/5]Full Waveform Inversion: Introdução e Aplicações [3/5]
Full Waveform Inversion: Introdução e Aplicações [3/5]
 
Full Waveform Inversion: Introdução e Aplicações [2/5]
Full Waveform Inversion: Introdução e Aplicações [2/5]Full Waveform Inversion: Introdução e Aplicações [2/5]
Full Waveform Inversion: Introdução e Aplicações [2/5]
 
Full Waveform Inversion: Introdução e Aplicações [1/5]
Full Waveform Inversion: Introdução e Aplicações [1/5]Full Waveform Inversion: Introdução e Aplicações [1/5]
Full Waveform Inversion: Introdução e Aplicações [1/5]
 
Fenômenos eletromagnéticos: conceitos e aplicações em Geofísica e Física
Fenômenos eletromagnéticos: conceitos e aplicações em Geofísica e FísicaFenômenos eletromagnéticos: conceitos e aplicações em Geofísica e Física
Fenômenos eletromagnéticos: conceitos e aplicações em Geofísica e Física
 
Introduction to velocity model building
Introduction to velocity model buildingIntroduction to velocity model building
Introduction to velocity model building
 
Petrofísica de carbonatos do nordeste brasileiro
Petrofísica de carbonatos do nordeste brasileiroPetrofísica de carbonatos do nordeste brasileiro
Petrofísica de carbonatos do nordeste brasileiro
 
O Campo Geomagnético no Brasil
O Campo Geomagnético no BrasilO Campo Geomagnético no Brasil
O Campo Geomagnético no Brasil
 
Problemas Inversos
Problemas InversosProblemas Inversos
Problemas Inversos
 
Sismologia — Ciência dos Terremotos, onde, como e por quê? (4)
Sismologia — Ciência dos Terremotos, onde, como e por quê? (4)Sismologia — Ciência dos Terremotos, onde, como e por quê? (4)
Sismologia — Ciência dos Terremotos, onde, como e por quê? (4)
 
Sismologia — Ciência dos Terremotos, onde, como e por quê? (3)
Sismologia — Ciência dos Terremotos, onde, como e por quê? (3)Sismologia — Ciência dos Terremotos, onde, como e por quê? (3)
Sismologia — Ciência dos Terremotos, onde, como e por quê? (3)
 
Sismologia — Ciência dos Terremotos, onde, como e por quê? (2)
Sismologia — Ciência dos Terremotos, onde, como e por quê? (2)Sismologia — Ciência dos Terremotos, onde, como e por quê? (2)
Sismologia — Ciência dos Terremotos, onde, como e por quê? (2)
 
Sismologia — Ciência dos Terremotos, onde, como e por quê? (1)
Sismologia — Ciência dos Terremotos, onde, como e por quê? (1)Sismologia — Ciência dos Terremotos, onde, como e por quê? (1)
Sismologia — Ciência dos Terremotos, onde, como e por quê? (1)
 
Aspectos de modelagem e imageamento usando equação da onda
Aspectos de modelagem e imageamento usando equação da ondaAspectos de modelagem e imageamento usando equação da onda
Aspectos de modelagem e imageamento usando equação da onda
 
Introdução ao Processamento Paralelo (4.1)
Introdução ao Processamento Paralelo (4.1)Introdução ao Processamento Paralelo (4.1)
Introdução ao Processamento Paralelo (4.1)
 
Introdução ao Processamento Paralelo (3)
Introdução ao Processamento Paralelo (3)Introdução ao Processamento Paralelo (3)
Introdução ao Processamento Paralelo (3)
 
Introdução ao Processamento Paralelo (2)
Introdução ao Processamento Paralelo (2)Introdução ao Processamento Paralelo (2)
Introdução ao Processamento Paralelo (2)
 
Introdução ao Processamento Paralelo (1)
Introdução ao Processamento Paralelo (1)Introdução ao Processamento Paralelo (1)
Introdução ao Processamento Paralelo (1)
 

Último

Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
FabianeMartins35
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
TailsonSantos1
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
LeloIurk1
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
LeloIurk1
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
RavenaSales1
 

Último (20)

Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Projeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptx
Projeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptxProjeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptx
Projeto Nós propomos! Sertã, 2024 - Chupetas Eletrónicas.pptx
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
praticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médiopraticas experimentais 1 ano ensino médio
praticas experimentais 1 ano ensino médio
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 

Introdução ao Processamento Paralelo (4.2)

  • 1. OpenACC: um promissor standard para aceleração de códigos Pedro Pais Lopes NVIDIA GPU Computing Developer Forum Curitiba, 17/07/2012
  • 2. O que é OpenACC? • Diretivas de compilação, na forma de pragmas (C/C++) ou comentários (Fortran) de alto nível, que orientam o compilador a executar trechos de código em um acelerador • Esforço conjunto PGI + Cray + NVIDIA + CAPS, visando integrar padrão OpenMP • Vide padrão em www.openacc.org
  • 3. Sintaxe • C: #pragma acc nome_diretiva [cláusula [,cláusula]…] bloco estruturado de código • Fortran: !$acc nome_diretiva [cláusula [,cláusula]…] bloco estruturado de código !$acc end nome_diretiva
  • 4. Exemplo #1: Jacobi • Converge iterativamente para um valor a partir da média dos pontos vizinhos 0°C A(i+1,j) 0°C 0°C A(i-1,j) A(i,j) A(i+1,j) A(i,j-1) 100°C
  • 5. Código Fortran do while ( err > tol .and. iter < iter_max ) err=0.0 do j=1,m do i=1,n Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + & A(i , j-1) + A(i , j+1)) err = max(err, Anew(i,j) - A(i,j)) end do end do do j=1,m-2 do i=1,n-2 A(i,j) = Anew(i,j) end do end do iter = iter +1 end do
  • 6. Inserindo OpenMP do while ( err > tol .and. iter < iter_max ) err=0.0 !$omp parallel do private(i,j) reduction(max:err) do j=1,m do i=1,n Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + & A(i , j-1) + A(i , j+1)) err = max(err, Anew(i,j) - A(i,j)) end do end do !$omp end parallel do !$omp parallel do private(i,j) do j=1,m-2 do i=1,n-2 A(i,j) = Anew(i,j) end do end do !$omp end parallel do iter = iter +1 end do
  • 7. Código em Fortran e OpenACC Um kernel por ninho de laços do while ( err > tol .and. iter < iter_max ) err=0.0 !$acc kernels reduction(max:err) Trafego GPU-CPU gerado do j=1,m automaticamente pelo compilador do i=1,n Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + & A(i , j-1) + A(i , j+1)) err = max(err, Anew(i,j) - A(i,j)) end do end do !$acc end kernels barreira !$acc kernels do j=1,m-2 Outro kernel do i=1,n-2 A(i,j) = Anew(i,j) end do end do !$acc end kernels iter = iter +1 end do
  • 8. Vantagens • Código CUDA gerado automaticamente • Mantém portabilidade entre o código sequencial e o código paralelo – Chave de compilação define se compilador gera código para GPU ou não • Trafego de dados entre a CPU e a GPU determinado “automaticamente” pelo compilador
  • 9. CPU: Intel Xeon X5680 Desempenho GPU: NVIDIA Tesla M2070 6 Cores @ 3.33GHz (fonte: NVIDIA) Execução Tempo (s) Speedup CPU 1 OpenMP thread 69.80 -- CPU 2 OpenMP threads 44.76 1.56x CPU 4 OpenMP threads 39.59 1.76x CPU 6 OpenMP threads 39.71 1.76x OpenACC GPU 1 thread 162.16 0.43x OPA!
  • 10. Compilador fez o melhor que pode • Mas ele NÃO pode desrespeitar o código 1. Enquanto condicional do while for satisfeita… 2. copia A para a placa 3. Computa primeiro laço 4. Copia Anew para CPU 5. Copia Anew para placa 6. Computa segundo laço 7. Copia A para a CPU 8. Volta para 1.
  • 11. Código em Fortran e OpenACC do while ( err > tol .and. iter < iter_max ) err=0.0 !$acc kernels reduction(max:err) do j=1,m do i=1,n Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + & A(i , j-1) + A(i , j+1)) err = max(err, Anew(i,j) - A(i,j)) end do end do !$acc end kernels !$acc kernels do j=1,m-2 do i=1,n-2 A(i,j) = Anew(i,j) end do end do !$acc end kernels iter = iter +1 end do
  • 12. Melhoria #1 do while ( err > tol .and. iter < iter_max ) err=0.0 !$acc kernels reduction(max:err) do j=1,m do i=1,n Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + & A(i , j-1) + A(i , j+1)) err = max(err, Anew(i,j) - A(i,j)) end do end do Juntar os dois kernels em um elimina tráfego CPU/GPU de A e Anew entre os dois aninamentos do j=1,m-2 do i=1,n-2 A(i,j) = Anew(i,j) end do end do !$acc end kernels iter = iter +1 end do
  • 13. Podemos ir além (melhoria #2) Envie A da CPU para a GPU no início do laço e envie de volta ao final do laço !$acc data copy(A), create(Anew) Crie e mantenha Anew na GPU do while ( err > tol .and. iter < iter_max ) err=0.0 !$acc kernels reduction(max:err) do j=1,m do i=1,n Anew(i,j) = .25 * (A(i+1, j ) + A(i-1, j ) + & A(i , j-1) + A(i , j+1)) err = max(err, Anew(i,j) - A(i,j)) end do end do do j=1,m-2 do i=1,n-2 A(i,j) = Anew(i,j) end do end do !$acc end kernels iter = iter +1 end do !$acc end data
  • 14. CPU: Intel Xeon X5680 Desempenho GPU: NVIDIA Tesla M2070 6 Cores @ 3.33GHz (fonte: NVIDIA) Execução Tempo (s) Speedup CPU 1 OpenMP thread 69,80 -- CPU 2 OpenMP threads 44,76 1,56x CPU 4 OpenMP threads 39,59 1,76x CPU 6 OpenMP threads 39,71 1,76x 5,11x OpenACC GPU 13,65 BOM!
  • 15. Resumo • Foram 3 linhas a mais para 5,11x de speedup – Inclusão de comentários: outros compiladores ignorarão esta linha e código segue inalterado • Uso de diretivas deve ter “precisão cirúrgica” • Corretude da computação: não somente se preocupar com “race conditions” mas também com gerenciamento de dados – Lembrar-se SEMPRE que temos cópia LOCAL e cópia REMOTA: memória não estará inicializada
  • 16. Sumário • OpenACC é forma promissora de programar aceleradores inserindo diretivas no programa original • Como em OpenMP, é: – Incremental – Portátil • Muito mais simples e fácil que CUDA, preservando o investimento na codificação original