Del procesamiento gráfico a la computación paralela: CUDA Juliana Leon Jennifer Dos Reis Respaso de la Taxonomia de Flynn • SISD (Single Instructions Single Data): computadores personales, uniprocesadores • MISD (Multiple Instructions Single Data): no existe arquitectura bajo esta clasificación • SIMD (Single Instructions Multiple Data): arquitecturas paralelas. • MIMD (Multiple Instructions Multiple Data): arquitecturas paralelas, redes y sistemas distribuidos. GPU (Graphic Processor Unit) ● ● Es un coprocesador dedicado a procesamiento de gráficos para aligerar la carga del CPU cuando se ejecutan videojuegos o aplicaciones 3D. Inicialmente se trabajaba en lenguaje ensamblador, para facilitar el trabajo se desarrollaron APIs como OpenGL, DirextX. GPU GPU vs CPU Arquitectura de un GPU ● Más transistores dedicados al procesamiento. ● No se necesita un control de flujo sofisticado. ● Los datos se “mapean” a hilos de ejecución. (Ej. Vertices y pixeles) Historia ● En 1999 NVIDIA culminó su primer GPU Usado por: ● Desarrolladores de videojuegos ● Artistas ● Investigadores > operaciones punto flotante Historia ● Así nació el movimiento de GPUs de propósito general GPGPU. Pero no era nada fácil. Historia ● ● Un grupo de investigadores de la universidad de Standford inició la propuesta de reinventar el GPU como un procesador de flujo de instrucciones. En el año 2003 un equipo de investigadores liderado por Ian Buck dió a conocer el primer modelo de programación que extendía al lenguaje C con construcciones para paralelismo de datos. + fácil Hasta 7 veces + rápido ! Historia ● NVIDIA invita a Ian Buck a unirse a la compañía para desarrollar una solución definitiva en la cual el código en lenguaje C pudiera correr sin problemas en un GPU. CUDA ● CUDA (Compute Unified Device Architecture) ● Plataforma paralela ● Modelo de programación ● Alto-nivel (C/C++, Fortran, Python, Java) CUDA Ventajas ● Heterogéneos (Mac , Linux, Microsoft) ● Soporte de enteros y operaciones a nivel de bit ● Lecturas mas rápidas de y hacia la GPU ● Baja curva de aprendizaje Limitaciones ● No recursividad ● Cuello de botella entre GPU y CPU Programación ● Kernels (granos) ● Hilos (bloque) ● ● Virtuales ● Físicos ● Los bloques no pueden sincronizarse Escala transparente En lenguaje C ● __global__ ● <<<…>>> ● ● threadIdx.x cudaMalloc() Compilación ● Usando NVCC Aplicaciones ● Desde biología computacional a criptografía ● Tiempo Real ● Imagen Ultrasonido ● Dinámica de Moléculas ● Simulaciones ● Astrofísica