Sei sulla pagina 1di 19

EJEMPLOS DE

PROGRAMACIN EN
CUDA
Francisco Javier Hernndez Lpez
http://www.cimat.mx/~fcoj23
Guanajuato, Gto. Noviembre de 2012
Hello World

Ejemplos de Programacin en CUDA 2
Compilando HelloWorld
Windows:
Agregamos al path del sistema:
c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64
nvcc CUDA_HelloWorld.cu -o CUDA_HelloWorld.exe

Linux:
nvcc -I /usr/local/cuda/include/ -I
~/NVIDIA_GPU_Computing_SDK/C/common/inc/ -L
/usr/local/cuda/lib64/ -lcuda -lcudart CUDA_HelloWorld.cu -o
CUDA_HelloWorld

Ejemplos de Programacin en CUDA 3
printf()dentro de un kernel solo es soportado por GPUs con capacidad >= 2.0.
Entonces no hay que olvidar ponerle arch=compute_20 al compilador nvcc.

Suma de Vectores
Suma de vectores (c = a + b)
Creamos los vectores a_h, b_h y c_h en el host.
Inicializamos con cualquier valor los vectores a_h y b_h
Creamos los vectores a_d, b_d y c_d en el device
Copiamos el contenido de los vectores a y b del host al
device
Sumamos a y b; el resultado lo guardamos en c; en el device
Copiamos el resultado del device al host
Desplegamos la suma de los vectores a y b
Ejemplos de Programacin en CUDA 4
Suma de Vectores

Ejemplos de Programacin en CUDA 5
Suma de Vectores

Ejemplos de Programacin en CUDA 6
Suma de Vectores
Ejemplos de Programacin en CUDA 7
Grid
blockIdx.x= 0 1 2
threadIdx.x= 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
idx = blockIdx.x * blockDim.x + threadIdx.x
idx=
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
N=24 y blockDim.x= 8
Multiplicacin de Matrices
Creamos las matrices a_h, b_h y c_h en el host.
Inicializamos con cualquier valor a las matrices a_h y
b_h.
Creamos las matrices a_d, b_d y c_d en el device.
Copiamos las matrices a y b del host al device.
Multiplicamos las matrices a y b en el device.
Copiamos el resultado de la multiplicacin del device al
host.
Desplegamos la multiplicacin de las matrices a y b.
Hacer esto para matrices cuadradas
8 Ejemplos de Programacin en CUDA
Multiplicacin de Matrices
9 Ejemplos de Programacin en CUDA
Multiplicacin de Matrices
10 Ejemplos de Programacin en CUDA
Multiplicacin de Matrices
Ejemplos de Programacin en CUDA 11
A B C
* =
idx = blockIdx.x * blockDim.x + threadIdx.x
idy = blockIdx.y * blockDim.y + threadIdx.y
nfil=12, ncol=12, BLOCK_SIZE=4
Grid
blockIdx.x={0,1,2}
blockIdx.y={0,1,2}
threadIdx.x={0,1,2,3}
threadIdx.y={0,1,2,3}
idx={0,1,2,,11}
idy={0,1,2,,11}
Multiplicacin de Matrices usando
Memoria Compartida

Ejemplos de Programacin en CUDA 12
Multiplicacin de Matrices usando
Memoria Compartida

Ejemplos de Programacin en CUDA 13
Multiplicacin de Matrices usando
Memoria Compartida
Ejemplos de Programacin en CUDA 14
Memoria
Global
A B C
Memoria Compartida
* =
Memoria Local
(sum_sub)
PGI Fortran y CUDA
PGI Accelerator Visual Fortran 64&32 bits
http://www.pgroup.com/support/downloads.php
15 Ejemplos de Programacin en CUDA
Multiplicacin de matrices en Fortran

16 Ejemplos de Programacin en CUDA
Multiplicacin de matrices en Fortran

17 Ejemplos de Programacin en CUDA
Preguntas

Ejemplos de Programacin en CUDA 18

Ejemplos de Programacin en CUDA 19
http://www.cimat.mx/~fcoj23/Tutorials/CUDA.html
http://www.cimat.mx/~fcoj23/Tutorials/OpenCV+CUDA.html