19
EJEMPLOS DE PROGRAMACIÓN EN CUDA Francisco Javier Hernández López http://www.cimat.mx/~fcoj23 Guanajuato, Gto. Noviembre de 2012

EJEMPLOS DE PROGRAMACIÓN EN CUDAfcoj23/Tutorials/CUDA_Ejemplos.pdf · Noviembre de 2012 . Hello World Ejemplos de Programación en CUDA 2 . Compilando HelloWorld •Windows: •

  • Upload
    others

  • View
    1

  • Download
    1

Embed Size (px)

Citation preview

EJEMPLOS DE

PROGRAMACIÓN EN

CUDA Francisco Javier Hernández López

http://www.cimat.mx/~fcoj23

Guanajuato, Gto. Noviembre de 2012

Hello World

Ejemplos de Programación 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 Programación 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 Programación en CUDA 4

Suma de Vectores

Ejemplos de Programación en CUDA 5

Suma de Vectores

Ejemplos de Programación en CUDA 6

Suma de Vectores

Ejemplos de Programación 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

Multiplicación 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 multiplicación del device al

host.

• Desplegamos la multiplicación de las matrices a y b.

• Hacer esto para matrices cuadradas…

8 Ejemplos de Programación en CUDA

Multiplicación de Matrices

9 Ejemplos de Programación en CUDA

Multiplicación de Matrices

10 Ejemplos de Programación en CUDA

Multiplicación de Matrices

Ejemplos de Programación 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}

Multiplicación de Matrices usando

Memoria Compartida

Ejemplos de Programación en CUDA 12

Multiplicación de Matrices usando

Memoria Compartida

Ejemplos de Programación en CUDA 13

Multiplicación de Matrices usando

Memoria Compartida

Ejemplos de Programación 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 Programación en CUDA

Multiplicación de matrices en Fortran

16 Ejemplos de Programación en CUDA

Multiplicación de matrices en Fortran

17 Ejemplos de Programación en CUDA

Preguntas

Ejemplos de Programación en CUDA 18

Ejemplos de Programación en CUDA 19

http://www.cimat.mx/~fcoj23/Tutorials/CUDA.html

http://www.cimat.mx/~fcoj23/Tutorials/OpenCV+CUDA.html