Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Herisson Chaves Ribeiro

Herisson Chaves Ribeiro

Atualmente através do avanço tecnológico, a indústria de eletrônicos tem disponibilizado uma série de novos dispositivos com características computacionais, como é o caso da GPU. Essa evolução, aliada a novas APIs de programação paralela tem aberto novas alternativas na computação de alto desempenho. Além disso, unir mais de um dispositivo com poder computacional, como por exemplo, CPU e GPU em um ambiente híbrido tende a ter ganhos de desempenho.
CUDA é uma arquitetura paralela de propósito geral destinada a utilizar o poder computacional de GPUs nVidia.
Extensão da linguagem C, e permite controlar a execução de threads na GPU e gerenciar sua memória.

Hérisson Chaves

November 24, 2016
Tweet

Other Decks in Technology

Transcript

  1. Computação Paralela em GPU
    Utilizando Arquitetura CUDA:
    Uma Alternativa na Busca por Desempenho

    View Slide

  2. Herisson Chaves Ribeiro
    • Graduando em Física
    • Bolsista do PIBIC
    • Nanoestruturas de carbono
    interagindo com poluente
    endócrinos: análise via
    simulação computacional.

    View Slide

  3. View Slide

  4. A CRISE DO SINGLE CORE
    0
    500
    1000
    1500
    2000
    2500
    3000
    3500
    4000
    0
    20
    40
    60
    80
    100
    120
    80286 (1982) 80386 (1985) 80486 (1989) Pentium (1993) Pentium (1997) Pentium 4
    Willamette (2001)
    Pentium 4 Prescott
    (2004)
    Core 2 Kentsfield
    (2007)
    Taxa de clock e potência para microprocesssadores Intel x86 durante oito
    gerações e 25 anos
    Potência Taxa de Clock
    Taxa de Clock (Mhz)
    Potência (Watts)
    Fonte: Patterson, David A. Organização e projeto de computadores – interface hardware/software. Elsevier,2014

    View Slide

  5. A CRISE DO SINGLE CORE
    • Passando de processador para multiprocessadores
    • A dificuldade de criar programas com processamento paralelo

    View Slide

  6. EVOLUÇÃO DAS PLACAS DE VIDEO
    AS PALCAS DE VIDEOS AGORA NÃO SÃO APENAS SIMPLES VGA,
    AGORA ELAS SE TORNARAM COPROCESSADORES.

    View Slide

  7. LARGURA DE BANDA DE MEMÓRIA PARA CPU E GPU

    View Slide

  8. OPERAÇÕES DE PONTO FLUTUANTE POR SEGUNDO

    View Slide

  9. SUPERCOMPUTADORES
    0
    1
    2
    3
    4
    5
    6
    7
    8
    0
    500
    1000
    1500
    2000
    2500
    3000
    Tianhe-1A Jaguar Nebulae Tsubame Hopper II Tera 100
    Megawatts
    Gigaflops
    Tianhe-1ª é equipada com 7168 GPUs
    Nvidia Tesla e 14 336 processadores
    Intel Xeon.

    View Slide

  10. SUPERCOMPUTADORES
    0
    1
    2
    3
    4
    5
    6
    7
    8
    0
    500
    1000
    1500
    2000
    2500
    3000
    Tianhe-1A Jaguar Nebulae Tsubame Hopper II Tera 100
    Megawatts
    Gigaflops

    View Slide

  11. O QUE É CUDA
    • Em 2007 a NVIDIA publicou a primeira especificação da extensão da
    linguagem C para a arquitetura CUDA que permite utilizar os
    processadores da placa de vídeo para outros fins, como
    processamento numérico e computação científica.
    Algumas Wrappers para CUDA:
    CUDA Fortran CUDA Python (PyCUDA)
    CUDA Java (jCUDA) CUDA C# (CUDA.NET)

    View Slide

  12. void serial_function(… ) {
    ...
    }
    void other_function(int ... ) {
    ...
    }
    void saxpy_serial(float ... ) {
    for (int i = 0; i < n; ++i)
    y[i] = a*x[i] + y[i];
    }
    void main( ) {
    float x;
    saxpy_serial(..);
    ...
    }
    NVCC
    (Open64) CPU Compiler
    C CUDA
    Key Kernels
    CUDA object
    files
    Rest of C
    Application
    CPU object
    files
    vinculador
    CPU-GPU
    Executable
    Modificar em
    código
    paralelo
    CUDA
    COMPILANDO C PARA APLICATIVOS CUDA

    View Slide

  13. EXEMPLO
    void saxpy_serial(int n, float a, float *x, float *y)
    {
    for (int i = 0; i < n; ++i)
    y[i] = a*x[i] + y[i];
    }
    // Invoke serial SAXPY kernel
    saxpy_serial(n, 2.0, x, y);
    __global__ void saxpy_parallel(int n, float a, float *x, float *y)
    {
    int i = blockIdx.x*blockDim.x + threadIdx.x;
    if (i < n) y[i] = a*x[i] + y[i];
    }
    // Invoke parallel SAXPY kernel with 256 threads/block
    int nblocks = (n + 255) / 256;
    saxpy_parallel<<>>(n, 2.0, x, y);
    Standard C Code
    Parallel C Code

    View Slide

  14. ARQUITETURA DE UMA GPU

    View Slide

  15. TECNOLOGIAS SIMILARES

    View Slide

  16. TECNOLOGIAS SIMILARES

    View Slide

  17. TECNOLOGIAS SIMILARES

    View Slide

  18. TECNOLOGIAS SIMILARES
    Intel® Xeon Phi™

    View Slide

  19. TECNOLOGIAS SIMILARES
    Intel® Xeon Phi™

    View Slide

  20. TECNOLOGIAS SIMILARES
    Intel® Xeon Phi™

    View Slide

  21. TECNOLOGIAS SIMILARES
    Intel® XeonPhi™

    View Slide

  22. TESTES DE DESEMPENHO
    SISTEMAS LINEARES PELO METODO DE ELEMINAÇÃO GAUSSIANA
    11
    1
    + 12
    2
    + ⋯ + 1

    = 1
    22
    2
    + ⋯ + 2

    = 2
    .
    .
    … … … … … … … … … … … … … … .


    =

    View Slide

  23. TESTES DE DESEMPENHO
    SISTEMAS LINEARES PELO METODO DE ELEMINAÇÃO GAUSSIANA
    Extraído do artigo: Comparação e Análise de Desempenho de Aceleradores Gráficos no Processamento de Matrizes.
    4 Processadores Intel R Xeon E5-2665 (8 cores cada)
    • 24 GB de memória RAM
    • 4 Placas Gráficas NVIDIA R Tesla K10
    • Sistema Operacional SUSE Linux Enterprise Server 11 SP2 (x86_64)

    View Slide

  24. TESTES DE DESEMPENHO
    SISTEMAS LINEARES PELO METODO DE ELEMINAÇÃO GAUSSIANA
    Extraído do artigo: Comparação e Análise de Desempenho de Aceleradores Gráficos no Processamento de Matrizes.

    View Slide

  25. TESTES DE DESEMPENHO
    SISTEMAS LINEARES PELO METODO DE ELEMINAÇÃO GAUSSIANA
    Extraído do artigo: Comparação e Análise de Desempenho de Aceleradores Gráficos no Processamento de Matrizes.
    Código 2. versão CUDA

    View Slide

  26. TESTES DE DESEMPENHO
    SISTEMAS LINEARES PELO METODO DE ELEMINAÇÃO GAUSSIANA
    Extraído do artigo: Comparação e Análise de Desempenho de Aceleradores Gráficos no Processamento de Matrizes.
    Tempo médio em segundos (M) e desvio padrão (DP) dos experimentos
    2000 4000 6000 8000 10000
    M DP M DP M DP M DP M DP
    13,65 0,02 110,34 0,28 376,28 5,24 889,69 11,84 1737,37 22,70
    1,12 0,03 3,65 0,03 9,79 0,04 20,93 0,04 39,04 0,08
    SERIAL
    CUDA

    View Slide

  27. TESTES DE DESEMPENHO
    SIMULAÇÃO GRAVITACIONAL N-BODY
    Extraído do livro : Patterson, David A. Organização e projeto de computadores – interface hardware/software. Elsevier,2014

    = G



    2



    View Slide

  28. TESTES DE DESEMPENHO SIMULAÇÃO GRAVITACIONAL N-BODY
    Extraído do livro : Patterson, David A. Organização e projeto de computadores – interface hardware/software. Elsevier,2014
    NVIDIA Titan X (Pascal)
    simulando 61440 estrelas !

    View Slide

  29. View Slide

  30. Tools
    Oil & Gas
    Bio-Chemistry
    Bio-
    Informatics
    TotalView
    Debugger
    NVIDIA
    Video Libraries
    MATLAB
    EMPhotonics
    CULAPACK
    Bright Cluster
    Manager
    CAPS HMPP
    MATLAB
    Thrust C++
    Template Lib
    CUDA C/C++
    PGI CUDA
    Fortran
    Parallel Nsight
    Vis Studio IDE
    Allinea DDT
    Debugger
    OpenEye ROCS
    Disponivel Em breve…
    TauCUDA
    Perf Tools
    NVIDIA NPP
    Perf Primitives
    ParaTools
    VampirTrace
    VSG
    Open Inventor
    StoneRidge
    RTM
    Headwave
    Suite
    Acceleware
    RTM Solver
    GeoStar
    Seismic Suite
    ffA SVI Pro
    OpenGeoSolut
    ions OpenSEIS
    Paradigm
    RTM
    Seismic City
    RTM
    Tsunami
    RTM
    CAE ACUSIM
    AcuSolve 1.8
    Autodesk
    Moldflow
    Prometch
    Particleworks
    Remcom
    XFdtd 7.0
    MSC.Software
    Marc 2010.2
    PGI
    Accelerators
    Platform LSF
    Cluster Mgr
    MAGMA
    (LAPACK)
    FluiDyna
    OpenFOAM
    Metacomp
    CFD++
    Disponível Futuramente
    Libraries
    Wolfram
    Mathematica
    CUDA FFT
    CUDA BLAS
    TeraChem
    BigDFT
    ABINT
    VMD
    Acellera
    ACEMD
    AMBER DL-POLY
    GROMACS
    HOOMD
    LAMMPS
    NAMD
    GAMESS CP2K
    CUDA-BLASTP
    CUDA-EC
    CUDA-MEME
    CUDA SW++
    SmithWaterm GPU-HMMR
    HEX Protein
    Docking
    MUMmerGPU
    PIPER
    Docking
    LSTC
    LS-DYNA 971
    RNG & SPARSE
    CUDA Libraries
    Paradigm
    SKUA
    Panorama
    Tech
    PGI CUDA
    x86
    NÚMERO CRESCENTE DE APLICATIVOS PROFISSIONAIS EM CUDA
    ANSYS
    Mechanical

    View Slide

  31. Siemens 4D
    Ultrasound
    Rendering
    Finance
    EDA
    Digisens
    Medical
    Schrodinger
    Core Hopping
    MotionDSP
    Ikena Video
    Manifold
    GIS
    Dalsa Machine
    Vision
    Synopsys
    TCAD
    SPEAG
    SEMCAD X
    Agilent
    EMPro 2010
    CST
    Microwave
    Agilent ADS
    SPICE
    Acceleware
    FDTD Solver
    Acceleware
    EM Solution
    Aquimin
    AlphaVision
    Other
    NAG
    RNG
    SciComp
    SciFinance
    Hanweck
    Options Analy
    Disponível
    Gauda OPC
    Useful
    Progress Med
    Lightworks
    Artisan
    Autodesk
    3ds Max
    NVIDIA
    OptiX (SDK)
    mental images
    iray (OEM)
    Bunkspeed
    Shot (iray)
    Refractive SW
    Octane
    Works Zebra
    Zeany
    Chaos Group
    V-Ray GPU
    Cebas
    finalRender
    Random
    Control Arion
    Caustic
    Graphics
    Weta Digital
    PantaRay
    ILM
    Plume
    Futuramente
    Disponível Em breve…
    Digital
    Anarchy Photo
    Video
    Elemental
    Video
    Fraunhofer
    JPEG2000
    Cinnafilm
    Pixel Strings
    Assimilate
    SCRATCH
    The Foundry
    Kronos
    TDVision
    TDVCodec
    ARRI
    Various Apps
    Black Magic
    Da Vinci
    MainConcept
    CUDA Encoder
    GenArts
    Sapphire
    Adobe Premier
    Pro CS5
    Murex
    MACS
    Numerix Risk
    RMS Risk
    Mgt Solutions
    Rocketick
    Veritlog Sim
    MVTec
    Machine Vis
    NÚMERO CRESCENTE DE APLICATIVOS PROFISSIONAIS EM CUDA

    View Slide

  32. modelos computacionais com o objetivo de
    compreender a proliferação de doenças do ponto de
    vista dinâmico.
    investiga a paralelização do modelo de cinética química do
    CPTEC/INPE.

    View Slide

  33. O equipamento foi incluído na lista
    dos 500 computadores mais rápidos
    de 2012 deixou o veterano do
    Instituto Nacional de Pesquisas
    Espaciais, Tupã (o 79º), para trás.
    Além de superpoderoso, o Grifo04
    dispõe de 17.408 núcleos e é
    econômico, consumindo 90% menos
    energia que o normal
    o Grifo04 é o computador mais rápido
    da América Latina. Ele possui nada
    menos que 1088 GPUs NVIDIA Tesla
    M2050 e consegue realizar mais de
    250 trilhões de operações aritméticas
    por segundo.
    O seu poder de processamento é de
    250 teraflops.Este equipamento
    auxiliará simulações geofísicas cujo
    objetivo é aprimorar a visualização
    das camadas geológicas do subsolo
    para suportar a exploração e
    produção de petróleo e ajudar a
    melhorar o desempenho das análises
    sísmicas.

    View Slide

  34. CONCLUSÕES
    • A plataforma CUDA permite o uso de GPUs para executar aplicações paralelas tornando-as um coprocessador.
    • Extensão da linguagem C e algumas warppers disponíveis, tornando-o de fácil aprendizado.
    • Mas para rodar de modo eficiente, é essencial que o código seja otimizado!
    • A linguagem OpenCL permite criar programas que rodam em múltiplas arquiteturas
    • Mas é difícil fazer um programa genérico que seja eficiente em arquiteturas diferentes
    • Embora os potenciais benefícios sejam grandes, as dificuldades também são, já que o
    desenvolvimento de aplicativos massivamente paralelos exige não apenas um bom domínio da
    linguagem escolhida, mas toda uma nova metodologia de desenvolvimento, especialmente em
    situações onde o paralelismo não é óbvio.

    View Slide

  35. ONDE APRENDER MAIS
    • Existem uma grande quantidade de material na Internet sobre CUDA.
    No site da nVidia existe links para diversos tutoriais e cursos online
    sobre a arquitetura CUDA
    http://www.nvidia.com/object/cuda_education.html
    • Para quem domina o inglês falado, neste site tem um curso em vídeo
    sobre CUDA dado por um engenheiro da nVidia na Universidade de
    Illinois
    https://developer.nvidia.com/educators/existing-courses
    • Outra opção é um curso online (texto) publicado no site Dr. Dobbs.
    A distribuição do CUDA vem com 2 guias:
    CUDA Programming Guide e CUDA Best Practices

    View Slide

  36. BIBLIOGRAFIA
    Stefanello, A.L., Machado, C. C., Rosa, D da., Sulzbach, M., Moerschbacher , R. W., e Sarturi,T. R. (2013)
    “Programação Paralela Híbrida em CPU e GPU: Uma Alternativa na Busca por Desempenho”.
    Zanotto, L., Ferreira, A. e Matsumoto, M. “Arquitetura e Programação de GPU Nvidia”.
    Paula, L. C. M. (2014) “CUDA VS. OPENCL: UMA COMPARAÇÃO TEÓRICA E TECNOLÓGICA”.
    Fernandes, A. A., Stephany, S. e Panetta, J.(2012) “Paralelização do Modelo de Cinética Química Atmosférica do
    CPTEC/INPE Para Utilizar Placas Gráficas”.
    Paula, L. C. M. (2012) “PROGRAMAÇÃO PARALELA CUDA PARA SIMULAÇÃO DE MODELOS EPIDEMIOLÓGICOS
    BASEADOS EM INDIVÍDUOS”.
    Buriol, T. M. e Argenta, M. A. “ACELERANDO O DESENVOLVIMENTO E O PROCESSAMENTO DE ANÁLISES NUMÉRICAS
    COMPUTACIONAIS UTILIZANDO PYTHON E CUDA”.
    Vargas, F. C. e Schepke, C. “Avaliação de Desempenho de uma Implementação com CUDA do Ocean-Land-
    Atmosphere Model”.
    Patterson, David A. Organização e projeto de computadores – interface hardware/software. Elsevier,2014

    View Slide

  37. MUITO OBRIGADO !!!
    [email protected]
    (98)9 8160-9856
    @herissonchaves
    www.linkedin.com/in/herisson-chaves

    View Slide