francisco j. hernández lópez fcoj23@cimat

17
Francisco J. Hernández López [email protected]

Upload: others

Post on 22-Nov-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Francisco J. Hernández López fcoj23@cimat

Francisco J. Hernández López

[email protected]

Page 2: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López2

Page 3: Francisco J. Hernández López fcoj23@cimat

•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.

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López3

Page 4: Francisco J. Hernández López fcoj23@cimat

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

Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López4Enero-Julio 2016

Page 5: Francisco J. Hernández López fcoj23@cimat

Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López5Enero-Julio 2016

Page 6: Francisco J. Hernández López fcoj23@cimat

Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López6Enero-Julio 2016

Page 7: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López7

idx = blockIdx.x * blockDim.x + threadIdx.x

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= 0 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 1718 19 20 21 22 23

N=24 y blockDim.x= 8

Page 8: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López8

Page 9: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López9

Page 10: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López10

idx = blockIdx.x * blockDim.x + threadIdx.x

idy = blockIdx.y * blockDim.y + threadIdx.y

nfil=12, ncol=12, BLOCK_SIZE=4

GridblockIdx.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}

A B C

* =

Page 11: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López11

Page 12: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López12

Page 13: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López13

Memoria

Global

A B C

Memoria Compartida

Memoria Local

(sum_sub)

* =

Page 14: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López14

SDK CUDA 7.0, Histogram calculation in CUDA, Victor Podlozhnyuk. 2013.

En el SDK de CUDA, hay dos implementaciones

del histograma en paralelo:

• histogram64.cu 64 bins

• Histogram256.cu 256 bins

Page 15: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López15

https://devblogs.nvidia.com/parallelforall/gpu-pro-tip-fast-histograms-using-shared-atomics-maxwell/

Los histogramas locales pueden almacenarse en:

Memoria Global

Memoria Compartida

Page 16: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López16

First Experiences with Maxwell GPUs, Andrew V. Adinetz, NVIDIA, 2014

Page 17: Francisco J. Hernández López fcoj23@cimat

Enero-Julio 2016Prog. Avanzada y Técnicas de Comp. Paralelo, CUDA,

Francisco J. Hernández-López17

First Experiences with Maxwell GPUs, Andrew V. Adinetz, NVIDIA, 2014