Programaчуo em Paralelo

Transcrição

Programaчуo em Paralelo
Programação em Paralelo
CUDA
N. Cardoso & P. Bicudo
Física Computacional - MEFT
2012/2013
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
1 / 19
CUDA
"Compute Unified Device Architecture"
Parte 1
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
2 / 19
Outline
1
Poder Computacional dos GPUs
2
CPUs multicores X GPUs manycores
3
Arquitectura de um GPU com capacidades para CUDA
4
O que é o CUDA?
5
Instalação e Documentação do CUDA
6
Estrutura de um programa CUDA
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
3 / 19
Poder Computacional dos GPUs
17X
45X
100X
13–457x
Motivation
110-240X
35X
© 2008 NVIDIA Corporation
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
4 / 19
GPU’s Peak Computational Power
Poder Computacional dos GPUs (GPU, Graphics Processing Unit)
s ! "
tu lmlv
supercomputador mais rápido do mundo: Tianhe-1A, 2.507 petaflops (China)
combina o poder de 7.168 GPUs NVIDIA Tesla M2050 e 14.336 CPUs multi-cores
o mesmo desempenho apenas com CPUs: era necessário mais de 50 mil CPUs e
consumiria mais de 12 megawatts de energia
o Tianhe-1A consome apenas 4.04 megawatts.
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
5 / 19
CPUs multicores X GPUs manycores
†‡ˆ ‰Š‹Œ Ž Œ ‘Œ’“ ‰Š‹Œ ” Œ• –Š‹Œ
CPU
GPU
ALU
ALU
ALU
ALU
Control
Cache
¬ jfi\§­ —˜™š›œ
™žŸš ž™ ¬di\§­ DRAM
DRAM
tp¡! ¢ a! " h£j¤
a' -! sq¥! " n£j¤¦§
ap%o!¨ a&( o ©&q(
m`v¦ sq¥! " b !& ¢ \§
tp¡! ¢ a! " ª&,!,
a' -! sq¥! " « j¦§
sqp%o! a&( o ©&q(
m`v¦ sq¥! " « n\§
Diferentes objectivos produzem designs diferentes
GPU assume que a carga de trabalho é altamente paralelizável
CPU deve ser bom em tudo, paralelo ou não
CPU: minimizar a latência experimentada por 1 thread
grandes caches no processador
lógica de controle
GPU sofisticados
Architecture
(NVIDIA)
GPU: maximizar a produção de todos os threads
®¯°±²³
# threads em uso é limitado
pelos recursos → muitos
recursos
(registos, largura de
´°µ¶±··µ °·¸
Host
banda, etc.)
¹º ¯µ »¼¼
Input Assembler
multithreading pode
esconder a latência → permite ignorar grandes caches
Thread Execution Manager
partilha da lógica de controlo através de muitos threads
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
6 / 19
CPUs multicores X GPUs manycores
CPU multicore
Optimizado para melhorar o desempenho de código sequencial
Lógica de controle sofisticada para que instruções de um único thread executem
em paralelo (ou fora da sua ordem sequencial) enquanto mantém a aparência de
execução sequencial
Memória cache grande para reduzir a latência de acesso aos dados e instruções
das aplicações mais complexas (largura de banda de acesso à memória <20GB/s)
Dificuldade de alterar o modelo de acesso à memória (para atender requisitos de
sistemas operacionais e sistemas legados)
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
7 / 19
CPUs multicores X GPUs manycores
GPU manycore
Optimizado para execução de um número muito grande de threads
Lógica de controle simplificada na execução de cada thread
Memória cache pequena (apenas para ajudar nos requisitos de largura de banda
i.e., threads acedendo os mesmos dados não precisam ir todos à DRAM)
Largura de banda de acesso a DRAM 80GB/s, e para comunicação com o CPU
4GB/s (em cada direcção)
O hardware aproveita o grande número de threads para encontrar trabalho para
fazer quando parte dos threads estão esperando pela latência de acesso à
memória
Conceitos do CUDA:
GPU - Device de computação com capacidade de executar threads em paralelo.
CPU - Host que trabalha em conjunto com o GPU
Kernel - instância do programa
Thread - instância de um kernel
Memória de vídeo / device
Memória principal / host
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
8 / 19
GPU chip design
Arquitectura de um GPU com capacidades para CUDA
‣ A glance at the GeForce 8800
�����
����������
��������������
����������������
����������
���������
�������������������������
��������������
������
��������������
������
��������������
������
��������������
������
��������������
������
��������������
������
��������������
������
��������������
������
��������
��������
��������
��������
��������
��������
��������
��������
��������
�����������
�����������
�����������
�����������
�����������
�����������
��������������
16
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
9 / 19
Arquitecturas de GPUs
GPU
G80
GT200
Fermi
Transistors
681 million
1.4 billion
3.0 billion
Cores CUDA
128
248
512
Precisão dupla
None
30 FMA ops/clock
256 FMA ops/clock
Precisão simples
128 MAD ops/clock
240 MAD ops/clock
512 MAD ops/clock
Warp schedulers (por SM)
1
1
2
Shared memory (por SM)
16KB
16KB
Configurável 48KB or 16KB
Cache L1 (por SM)
None
None
Configurável 16KB or 48KB
Cache L2 (por SM)
None
None
768KB
ECC memory support
No
No
Yes
Concurrent kernels
No
No
Up to 16
Load/Store address width
32-bit
32-bit
64-bit
SM: streaming multiprocessor
E ainda a arquitectura Kepler
4 arquitecturas de GPUs com suporte para CUDA
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
10 / 19
O que é o CUDA?
CUDA, Compute Unified Device Architecture
É uma arquitetura paralela de propósito geral destinada a utilizar o poder
computacional de GPUs NVIDIA
Extensão da linguagem C, que permite o uso de GPUs:
Suporte a uma hierarquia de grupos de threads
Definição de kernels que são executados na GPU
API com funções,CUDA
que permite
a memória
Software gerir
Development
Kit da GPU e outros tipos de controle
Optimized libraries:
math.h, BLAS, FFT
Integrated CPU and
GPU source code
CUDA C Compiler (nvcc)
Machine independent
assembly (PTX)
CUDA
Driver
Debugger
Profiler
GPU
N. Cardoso & P. Bicudo
CPU Host Code
Standard C compiler
CPU
Programação em Paralelo: CUDA
11 / 19
Instalação e Documentação do CUDA
CUDA v4.2:
Download: https://developer.nvidia.com/cuda-toolkit-42-archive
CUDA/GPU driver
Permite o acesso ao hardware
Lista de GPUs suportados: https://developer.nvidia.com/cuda-gpus
CUDA Toolkit
Ferramentas e bibliotecas para programação em CUDA
CUDA SDK
Em Linux é necessário fazer make após a instalação
Inclui vários exemplos de código
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
12 / 19
Instalação e Documentação do CUDA
Instalação Driver, LINUX:
C t r l + A l t +F2
K i l l the X server
chmod +x d e v d r i v e r _ 4 . 2 _ l i n u x _ ∗ . run
. / d e v d r i v e r _ 4 . 2 _ l i n u x _ ∗ . run
reboot
Exemplo, Fedora (root):
init 3
chmod +x d e v d r i v e r _ 4 . 2 _ l i n u x _ ∗ . run
. / d e v d r i v e r _ 4 . 2 _ l i n u x _ ∗ . run
reboot
editar o conteúdo do ficheiro /boot/grub2/grub.cfg. Procure a entrada do kernel mais recente e
altera a linha semelhante à seguinte:
l i n u x / boot / vmlinuz −3.6.2 −4. f c 1 7 . x86_64 r o o t = . . . r d .md=0 r d . lvm=0 r d .dm=0
SYSFONT=True KEYTABLE=pt−l a t i n 1 r d . l u k s =0 LANG=en_US . UTF−8 rhgb q u i e t
adicione no final da linha:
nouveau . modeset=0 r d . d r i v e r . b l a c k l i s t =nouveau
Reinicie o PC.
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
13 / 19
Instalação e Documentação do CUDA
Instalação do Toolkit, LINUX:
Instale com permissões de root:
chmod +x c u d a t o o l k i t _ 4 . 2 . 9 _ l i n u x _ ∗ . run
. / c u d a t o o l k i t _ 4 . 2 . 9 _ l i n u x _ ∗ . run
Por defeito a instalação será em: /usr/ local /cuda/
Adicione os seguintes PATH’s, por exemplo, a "/home/user/.bashrc" ou a " /.bash_profile":
sistemas 32bits:
PATH=$PATH : / u s r / l o c a l / cuda / b i n
e x p o r t PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH : / u s r / l o c a l / cuda / l i b
e x p o r t LD_LIBRARY_PATH
sistemas 64bits:
PATH=$PATH : / u s r / l o c a l / cuda / b i n
e x p o r t PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH : / u s r / l o c a l / cuda / l i b 6 4
LD_LIBRARY_PATH=$LD_LIBRARY_PATH : / u s r / l o c a l / cuda / l i b
e x p o r t LD_LIBRARY_PATH
Documentação extra: /usr/ local /cuda/doc/
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
14 / 19
Instalação e Documentação do CUDA
Instalação do SDK, LINUX:
Instale com permissões de user:
chmod +x gpucomputingsdk_4 . 2 . 9 _ l i n u x . run
. / gpucomputingsdk_4 . 2 . 9 _ l i n u x . run
Por defeito a instalação será em: /home/user/NVIDIA_GPU_Computing_SDK/
Depois da instalação do SDK:
cd / home / user / NVIDIA_GPU_Computing_SDK / C /
make
O CUDA SDK também necessita para alguns códigos: Xi Xmu and glut.
No caso do fedora, certifiquem-se que têm instalados os seguintes pacotes:
f r e e g l u t −d e v e l l i b X i −d e v e l libXmu−d e v e l mesa−libGLU−d e v e l
caso contrário executem
cd / home / user / NVIDIA_GPU_Computing_SDK / C /
make − i
Caso obtenha erro por incompatibilidade da versão do gcc, é necessário instalar uma versão
inferior do mesmo, por exemplo gcc 4.5.
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
15 / 19
Instalação e Documentação do CUDA
CUDA SDK:
Lista de códigos disponibilizados com o SDK em:
/ home / user / NVIDIA_GPU_Computing_SDK /C/ s r c /
Coloquem os vossos projectos em:
/ home / user / NVIDIA_GPU_Computing_SDK /C/ s r c /
Os binários dos projectos ficam em:
/ home / user / NVIDIA_GPU_Computing_SDK /C/ b i n / l i n u x / r e l e a s e /
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
16 / 19
Instalação e Documentação do CUDA
Bibliografia:
David B. Kirk, Wen-mei W. Hwu, Programming Massively Parallel Processors:
A Hands-on Approach, Elsevier;
Rob Farber, CUDA Application Design and Development, Elsevier;
Jason Sanders, Edward Kandrot, CUDA by Example: An Introduction to
General-Purpose GPU Programming;
Documentação com CUDA Toolkit, incluido na instalação do Toolkit,
/usr/local/cuda/doc/;
Fórum da NVIDIA: https://devtalk.nvidia.com/
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
17 / 19
Estrutura de um programa CUDA
Um programa CUDA consiste de uma ou mais fases que são executadas no
host (CPU) ou em um device (GPU):
as fases com pouco ou nenhum paralelismo de dados são executadas no host
as fases com grande qtde de paralelismo de dados são executadas no device
CUDA Software Development Kit
Um programa CUDA é um código
unificado que engloba o código do
host e do device
O compilador nvcc (NVIDIA C)
separa as duas partes do código
durante o processo de
compilação
nvcc -o name name.cu
Optimized libraries:
math.h, BLAS, FFT
CUDA C Compiler (nvcc)
Machine independent
assembly (PTX)
CUDA
Driver
Mais prático: Makefile
N. Cardoso & P. Bicudo
Integrated CPU and
GPU source code
Debugger
Profiler
GPU
Programação em Paralelo: CUDA
CPU Host Code
Standard C compiler
CPU
Applied Mathematics
18 / 19
Avaliação de Desempenho
ção Estrutura
Concorrentede
Assı́ncrona
um programa
Conclusão
Referências
CUDA e Interacção CPU-GPU
How does it work?
GPU:
Corre o código paralelo (Kernel).
gêneoCPU:
de
Computação
d $a'oo ap%('(q&
CPU
Controla o GPU e disponibiliza
dados para o mesmo
r $`!( &
GPU
j$a%k l&%( m'('
PC
Memory
n $a%k `!o(
GPU
Memory
ÄÅÆÇÈ
Ë ÌÅÆ
ÉÊ
j$a%k l&%( m'('
d $a'oo Í!&!o
bqp!
r $`!( &
n $a%k `!o(
N. Cardoso & P. Bicudo
Programação em Paralelo: CUDA
α °Ï±Ð
ÑÒ϶¯Óµ Ï
19 / 19

Documentos relacionados

MINI-CURSO: Introdução à Programação em CUDA

MINI-CURSO: Introdução à Programação em CUDA É uma arquitetura paralela de propósito geral destinada a utilizar o poder computacional de GPUs nVIDIA Extensão da linguagem C, que permite o uso de GPUs: - Suporte a uma hierarquia de grupos de t...

Leia mais

GPU

GPU – Difícil de programar, muito pouco produtivo

Leia mais

O Padrão de Projeto Barracuda

O Padrão de Projeto Barracuda emergentes, que demandam quantidades de recursos computacionais elevadas, tornam a Computação de Alto Desempenho indispensável. Exemplos de aplicações que demandam alto custo computacional estão pr...

Leia mais