![Page 1: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/1.jpg)
TAD: Python y CUDA en Computación de Altas Prestaciones
Alejandro SamarínLionel Aster Mena García
Sergio Armas Pérez
![Page 2: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/2.jpg)
IntroducciónUna GPU es un procesador especializado
diseñado para el tratamiento gráfico.Se puede utilizar para manipular datos de
aplicaciones ajenas al procesamiento gráfico (GPGPU).
Podemos encontrar GPU en tarjetas gráficas, placas base e, incluso, integradas en algunas CPU.
![Page 3: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/3.jpg)
IntroducciónCUDA (Compute Unified Device Architecture)
es una estructura de computación paralela.El lenguaje que se emplea una variación de
C.Diversos programadores, ajenos a NVIDIA,
han creado wrappers para CUDA en Java, Perl...
![Page 4: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/4.jpg)
IntroducciónPyCUDA es un wrapper de Python para
CUDA desarrollado por Andreas Klöckner.Python es un lenguaje interpretado de muy
alto nivel cuyo uso está en auge.La librería SciPy provee interesantes
funciones.
![Page 5: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/5.jpg)
Modelo CUDA
Escalabilidad del paralelismo, basado en tres puntos claves:Jerarquía de hilos.Memoria compartida.Sincronización por barrera.
![Page 6: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/6.jpg)
![Page 7: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/7.jpg)
Modelo CUDA: HilosLos hilos están
contenidos en Bloques, y los bloques dentro de Grids.
Identificador de hilo threadIdx.
Identificador de bloque blockIdx.
![Page 8: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/8.jpg)
Modelo CUDA: MemoriaCada hilo posee su memoria local privada.Cada bloque de hilos posee su memoria
compartida.Todos los hilos pueden acceder a la memoria
global.Adicionalmente existen 2 tipos de memorias
de solo lectura y acceso global: memoria de texturas y memoria constante.
![Page 9: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/9.jpg)
![Page 10: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/10.jpg)
Modelo CUDAKernels: ejecutado por hilos en paralelo.Sincronización por Barrera.Estructura Host-Device:
Hilos CUDA se ejecutan en device.Resto del programa en el host.Espacios de memoria propios.Transferencia de datos host-device.
![Page 11: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/11.jpg)
Modelo CUDA: VentajasIncrementar el número de núcleos
computacionales.Provee de granularidad fina en el paralelismo
de los datos y los hilos. Extiende el lenguaje con un conjunto
reducido de instrucciones.
![Page 12: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/12.jpg)
Hardware UtilizadoNVIDIA Tesla C2050 NVIDIA Tesla C1060
Capacidad de cómputo 2.0 1.3
Numero de Multiprocesadores/núcleos 14 (32 núcleos) 30 (8 núcleos)
Total de Núcleos 448 240
Memoria Global 2.62Gb 4Gb
Memoria Compartida/bloque 48Kb 16Kb
Máximo hilos/bloque 1024 512
Dimensión Max. bloque 1024 x 1024 x 64 512 x 512 x 64
Dimensión Max. grid 65535 x 65535 x 1 65535 x 65535 x 1
![Page 13: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/13.jpg)
«Hola mundo» en PyCUDAInclusión de las librerías necesarias.
Carga de los datos en la memoria.
Reserva de espacio en el dispositivo.
![Page 14: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/14.jpg)
«Hola mundo» en PyCUDATransferencia de datos al device.
Ejecución del kernel.
Transferencia al host.
![Page 15: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/15.jpg)
CPU vs GPU
4 8 12 16 20 24 28 320
10
20
30
40
50
60
0.19
6
1.22
7
3.37
5
6.55 9.
875
28.0
44
36.1
48
54.4
65
0.77
3
0.78
2
0.78
6
0.79
6
0.79
9
0.8
0.82
8
0.84
1
CPUGPU
Dimension de la Matriz Cuadrada
Tiem
po (m
s)
![Page 16: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/16.jpg)
Software Framework
![Page 17: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/17.jpg)
Algoritmo de Detección de Movimiento
Dados 2 frames del video, aplicar filtros consecutivamente:Conversión a escala de grisesFiltro de DiferenciaFiltro ThresholdFiltro ErosionFusión en el canal R
![Page 18: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/18.jpg)
Algoritmo de Detección de Movimiento
Conversión a escala de grises
Filtro de Diferencia
![Page 19: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/19.jpg)
Algoritmo de Detección de Movimiento
Filtro Threshold
Filtro de Erosión
![Page 20: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/20.jpg)
Algoritmo de Detección de MovimientoFusión en el canal R de la imagen original
![Page 21: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/21.jpg)
Resultado
Frames consecutivos de un vídeo
![Page 22: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/22.jpg)
Resultado
Difference ErosionThreshold
![Page 23: TAD: Python y CUDA en Computación de Altas Prestaciones](https://reader035.vdocuments.net/reader035/viewer/2022062305/56816380550346895dd461c3/html5/thumbnails/23.jpg)
Resultado
Detección de movimiento