Você está na página 1de 39

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Introdu c ao ` a CUDA
Programa c ao Paralela para placas de v deo

Autor: Belmino L. Jorge Orientadora: Andr ea C. Linhares


Universidade Federal do Cear a

27 de mar co de 2012

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Introdu c ao

CUDA (Compute Unied Device Architecture) e uma linguagem para programa c ao paralela de prop osito geral desenvolvido pela nVidia para as placas de v deo da nVidia.

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

CPU x GPU
Processadores (CPUs) s ao otimizados para c alculos sequenciais (executando aplicativos diversos); Placas de v deo (GPUs) s ao otimizadas para c alculos massivamente paralelos, processando gr acos 3D.

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

CPU x GPU

As GPUs s ao blocos de v arios pequenos processadores trabalhando em paralelo. S ao otimizadas para processamento de gr acos 3D e shaders, mas podem ser usados para qualquer tarefa computacional.

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

CPU x GPU

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

CPU x GPU

Intel Core i7 980X (US$ 1000): 6 n ucleos, 0.1 TFLOPS NVIDIA GTX590 (US$ 700): 1024 n ucleos, 1.2 TFLOPS FLOPS e o n umero de opera c oes de pontos utuantes por segundo.
6 Belmino CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Programar para GPU?

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Programar para GPU?

Em tese, seria poss vel executar um sistema operacional e aplicativos de uso geral diretamente em uma GPU, mas o desempenho no nal seria muito inferior. Em resumo, n ao existe a possibilidade de as GPUs substitu rem os processadores, pois as duas arquiteturas se complementam.

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Linguagens para GPU


A nVidia criou CUDA (suportada a partir do G80); A ATI criou Brook+ (suportada a partir do R520); O OpenCL, um padr ao aberto que e suportado por ambas. CUDA permite programar em: C (CUDA C) Java (jCUDA) C# (CUDA.NET) Python (PyCUDA) Brook+ e baseada na linguagem Brook, uma varia c ao do C, otimizada para computa c ao paralela.
9 Belmino CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Programando em CUDA
Terminologia Host CPU e a sua mem oria Device GPU e a sua mem oria Kernel fun c ao que roda no device

10

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Kernel
Um kernel CUDA e executado por um array de threads(SIMT). Todas as threads rodam o mesmo c odigo paralelamente Cada thread tem um ID que ela usa para calcular endere cos de mem oria e fazer decis oes de controle.

11

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Threads

Thread Fluxo u nico de controle sequencial dentro de um programa.

12

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Threads no hardware

13

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Soma de Vetores

14

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Vari aveis built-in

gridDim: e do tipo dim3 e cont em as dimens oes do grid blockIdx: e do tipo uint3 e cont em o ndice do bloco do grid blockDim: e do tipo dim3 e cont em as dimens oes do bloco threadIdx: e do tipo uint3 e cont em o ndice do thread do bloco warpSize: e do tipo int e cont em o tamanho do warp em threads

15

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Organiza c ao das threads

16

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Uma pergunta

17

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Sincroniza c ao

syncthreads() Ponto de sincroniza c ao para todas as threads de um bloco; Nem sempre e necess ario.

18

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Fun co es em CUDA

Tipos de fun c ao device oat DeviceFunc() global void KernelFunc() host oat HostFunc() Executa no device device host Chamado no device host host

host poder a ser usado junto com device , nesse caso afun c ao ser a compilada tanto no host quanto no device.

19

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Fun co es em CUDA

Restri c oes Fun c oes device e global n ao suportam recurs ao, n umero vari avel de argumentos ou declara c ao de vari aveis est aticas no seu escopo. Os qualicadores juntos. global e host n ao podem ser usados

As fun c oes global s ao ass ncronas(podem retornar antes do device ter completado a execu c ao).

20

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Fun co es Matem aticas

Algumas fun c oes matem aticas t em uma precis ao menor, mas s ao mais r apidas na vers ao device-only. pow log, exp sin, cos, tan log2, log10

21

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Mem orias
Tempo de Vida Thread Thread Bloco Aplica c ao Aplica c ao Aplica c ao

Mem oria Registrador

Local

Cache Acesso N/A N ao N ao Sim N ao Sim L/E L/E L/E

Escopo Thread Thread

No chip Fora Local do chip No Compartilhada chip Fora Constante do chip Fora Global do chip Fora Textura do chip
22

Threads do Bloco L(GPU) Threads L/E(CPU) e host Threads L/E e host L(GPU) Threads L/E(CPU) e host
CUDA

Belmino

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Mem orias

23

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Localiza c ao

24

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Vari aveis

tipos de vari aveis


localiza ca o int LocalVar; int LocalArray[10]; device constant shared int GlobalVar; int ConstVar; int SharedVar; registrador mem oria local mem oria global mem oria constante mem oria compartilhada acess vel por thread thread threads e host threads e host threads dentro do bloco tempo de vida thread thread aplica ca o aplica ca o bloco

25

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Vari aveis

tipos de vari aveis


penalidade de performance 1x 100x 100x 1x 1x instancias 100000s 100000s 1 1 100s visibilidade 1 1 100000s 100000s 100s

int LocalVar; int LocalArray[10]; device int GlobalVar; constant int ConstVar; shared int SharedVar;

26

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Acesso ` as vari aveis

27

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Outros tipos de vari aveis

char, uchar, short, ushort, int, uint, long, ulong, oat com os suxos 1,2,3 ou 4 para denir a dimensionalidade denido com as componentes x, y, z, w.

28

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

29

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

30

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

31

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

32

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

33

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

34

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

35

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

36

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

37

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Opera c oes com mem oria

38

Belmino

CUDA

Programa c ao para GPU Threads e Fun c oes Mem orias e Vari aveis

Bibliograa

http://en.wikipedia.org/wiki/CUDA

http://developer.download.nvidia.com/compute/DevZone/docs/ht http://www.nvidia.com.br

39

Belmino

CUDA

Você também pode gostar