Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
UNIDAD II COMPUTACIÓN GRÁFICA II ▪ Programación para GPU Semana 13 Al término de la sesión, el estudiante tiene conocimiento de Programación para GPU y explica ejemplos de aplicación relacionados al tema. Logro de Aprendizaje ¿Qué es la computación gráfica acelerada por GPU? Responder en el foro Introducción La computación acelerada por GPU es el uso de una unidad de procesamiento de gráficos (GPU, por sus siglas en inglés) junto a una CPU para acelerar el funcionamiento de las aplicaciones de aprendizaje profundo, análisis e ingeniería. Evolución GPU ❑ Ordenadores sin tarjeta gráfica. ❑ Aparición de GPU's para la representación en pantalla. ❑ GPU's para procesamiento gráfico: industria del videojuego (3dfx,NVIDIA,ATI). ❑ En 2004 surge la idea de utilizar las GPU para computación de alto rendimiento (HPC). ❑ 2007, NVIDIA ve oportunidad en el mercado del HPC y desarrolla CUDA (Lenguaje específico para aprovechar la capacidad de las GPU). ❑ Actualmente NVIDIA ha tenido éxito en la computación GPGPU (Computación de propósito general en unidades de procesamiento gráfico). Los supercomputadores top utilizan clústeres de GPU's para aumentar su potencia computacional. Evolución GPU ❑ La evolución de las tarjetas gráficas ha venido acompañado de un gran crecimiento en el mundo de los videojuegos y las aplicaciones 3D. ❑ Gran producción de chips gráficos por parte de grandes fabricantes: ❑ NVIDIA ❑ AMD(ATI) ❑ IBM: desarrollo en colaboración con Sony y Toshiba procesadores Cell ❑ Intel: Desarrollo chips GPU Larrabee ¿Cómo funciona? ❑ La computación acelerada por GPU permite asignar a la GPU el trabajo de los aspectos de la aplicación donde la computación es más intensiva mientras que el resto del código se ejecuta en la CPU. ❑ La GPU recibe de la CPU la información en forma de vértices. Estos vértices son tratados para transformaciones de rotación y movimiento (Vertex shader), se define qué parte de los vértices se visualiza (clipping) y se convierten en píxeles por rasterización. Finalmente calcula el color de cada píxel correspondiente a cada ubicación (fragment shader) . https://www.nvidia.com/es-la/drivers/what-is-gpu-computing/ La manera como las GPU aceleran las aplicaciones de software: Rendimiento de la GPU vs. el de la CPU ❑ Una forma de comprender la diferencia entre una GPU y una CPU es comparar la forma en que procesan las tareas. ❑ Una CPU tiene unos cuantos núcleos optimizados para el procesamiento en serie secuencial, mientras que una GPU cuenta con una arquitectura en paralelo enorme que consiste de miles de núcleos más pequeños y eficaces, y que se diseñaron para resolver varias tareas al mismo tiempo. Rendimiento de la GPU vs. el de la CPU Divertida comparación entre la GPU y la CPU https://youtu.be/-P28LKWTzrI Paralelismo ❑ El paralelismo es una forma de computación en la cual varios cálculos pueden realizarse Simultáneamente. ❑ Basado en el principio de dividir los problemas grandes para obtener varios problemas pequeños, que son posteriormente solucionados en paralelo. (Divide y vencerás) ❑ Todos los núcleos ejecutan la misma instrucción al mismo tiempo. ❑ Solo se necesita decodificar la instrucción una única vez para todos los núcleos. ❑ Ejemplo: Unidades vectoriales: suma, producto de vectores, etcétera Paralelismo ❑ Nuestra CPU tiene una arquitectura de flujo de datos único (MISD) de múltiples instrucciones para realizar el control lógico y el procesamiento de datos. Ejemplo: si nuestra instrucción contiene el código: i = 0 ; ...; i ++, entonces esta iteración se ejecutará repetidamente en la CPU muchas veces. ❑ En cambio, la GPU de una tarjeta gráfica tiene una arquitectura donde se procesan múltiples instrucciones en paralelo una sola vez (SIMD), no es buena para el control lógico pero es una máquina de computación vectorial natural, es decir, el código: i = 0; ...; i ++, solo necesita ejecutarse una vez, por lo que muchos vértices y fragmentos en el mundo de los gráficos se pueden renderizar rápidamente en paralelo en la tarjeta gráfica. Estructura del Pipeline Gráfico ❑ Para poder entender la GPU como unidad de procesamiento de propósito general, GPGPU, es necesario comprender su funcionamiento desde el punto de vista de la especialidad del hardware: los gráficos. ❑ Tradicionalmente, el funcionamiento de las GPU es sintetizado como un pipeline de procesamiento formado por etapas con una función especializada cada una. Estas son ejecutadas en paralelo y según un orden preestablecido, cada etapa recibe como entrada la salida de la etapa anterior y su salida es la entrada a la siguiente etapa. ❑ En la figura, se muestra el pipeline gráfico básico utilizado por las primeras GPU. ¿Cómo trabaja el sistema de computación con GPU? La aplicación envía a la GPU una secuencia de vértices, agrupados en lo que se denominan primitivas geométricas: polígonos, líneas y puntos, las cuales son tratadas secuencialmente a través de cuatro etapas bien diferenciadas. ❑ Primera etapa: Transformación de Vértices: se lleva a cabo una secuencia de operaciones matemáticas sobre cada vértice suministrados por la aplicación: transformación de la posición del vértice en una posición en pantalla, generación de las coordenadas para la aplicación de texturas y asignación de color a cada vértice. ❑ Segunda etapa: Ensamblado de Primitivas y Rasterización: Los vértices generados y transformados en la etapa anterior son agrupados en primitivas geométricas basándose en la información recibida junto con la secuencia inicial de vértices. Como resultado, se obtiene una secuencia de triángulos, líneas o puntos. Dichos puntos son sometidos a la rasterización, proceso por el cual se determina el conjunto de píxeles “cubiertos” por una primitiva determinada. Los resultados de la rasterización son conjuntos de localizaciones de píxeles y conjuntos de fragmentos. Un fragmento tiene asociada una localización de píxel e información relativa a su color y uno o más conjuntos de coordenadas de textura. ¿Cómo trabaja el sistema de computación con GPU? ❑ Tercera etapa: Interpolación, Texturas y Colores: una vez hecha la rasterización, el/los fragmentos obtenidos son sometidos a operaciones de interpolación, operaciones matemáticas y de textura y determinación del color final de cada fragmento. ❑ Cuarta etapa: Operaciones Raster: En esta última etapa del pipeline se realizan las operaciones llamadas raster, analizan cada fragmento, sometiéndolo a un conjunto de pruebas relacionadas con aspectos gráficos del mismo. Estas pruebas determinan los valores que tomará el píxel generado en memoria a partir del fragmento original. Si cualquiera de estas pruebas fallan, es en esta etapa cuando se descarta el píxel correspondiente, y por tanto no se realiza la escritura en memoria del mismo. En caso contrario, y como último paso, se realiza la escritura en memoria, denominada frame buffer, como resultado final del proceso. Un pipeline gráfico recibe como entrada la representación de una escena en 3D dando como resultado una imagen 2D a ser proyectada en una pantalla. Como se ve, esto se logra luego de muchas transformaciones a lo largo del pipeline. Éste puede implementarse vía software o hardware. En dispositivos dedicados todas las etapas son resueltas por el hardware lo que lo hace muy rápido. En sistemas más convencionales como PC, todo se realiza vía software y por tanto es más lento. Herramientas que hay para desarrollo sobre GPU. OpenCL • Similar al estándar OpenGL de gráficos 3D. • Desarrollar para cualquier plataforma. • Licenciado por Khronos. CUDA • Arquitectura unificada de dispositivos de cálculo. • Python, fortran y java. • Desarrollado por NVDIA en el 2007. “Parallel Studio” y “Cluster Studio”: • Herramientas que integran el compilador Fortran/C++ de la compañía Intel con librerías y hit de desarrollo. Estas son las herramientas más difíciles de las más fáciles Una de las herramientas más usadas en la actualidad conGPU's es CUDA. La plataforma de computación paralela y de programación CUDA usa la arquitectura de cálculo paralelo y aprovecha la gran potencia de la GPU para incrementar el rendimiento del sistema. OpenCL, a diferencia de CUDA que utiliza la GPU como un coprocesador, OpenCL pasa toda la información a la tarjeta gráfica usándola más como un procesador separado especializado. La programación es un poco más compleja que en el caso de CUDA donde puedes usar lenguajes populares, pero a cambio no estás atado a los GPU's de NVIDIA. ¿Cómo puedo programar en GPU? CUDA Nvidia Con millones de GPU's con CUDA vendidos, desarrolladores software, científicos e investigadores encontrado una gran variedad de usos para computación GPU con CUDA. Algunos ejemplos: ❑ Identificar placas escondidas en las arterias: Ataques al corazón son la principal causa de muertes a nivel mundial. Harvard Engineering, Harvard Medical School y la Brigham & Women's Hospital se unieron para utilizar GPU's para simular el flujo de sangre e identificar placas escondidas en las arterias sin técnicas invasivas de imagen o cirugía exploratoria. ❑ Analizar el flujo de tráfico aéreo: El Nacional Airspace System de los Estados Unidos maneja la coordinación del flujo de tráfico aéreo de la nación. Modelos de computadora ayudan a identificar nuevas formas de aliviar la congestión y mantener el trafico aeroplano en movimiento de forma eficiente. Usando del poder computacional de GPU's, un equipo de la NASA obtuvo una gran ganancia de rendimiento, reduciendo tiempos de análisis de 10 a 3 segundos. ❑ Visualizar moléculas: Una simulación molecular llamada NAMD (por sus siglas en inglés Nano scale Molecular Dynamics, Dinámica Molecular a Nano escala) obtienen una gran ganancia de rendimiento con GPU's. El aumento de velocidad es el resultado de la arquitectura paralela de las GPU's, que permite a los desarrolladores de NAMD portar porciones de computo intensivo de la aplicación a la GPU utilizando CUDA Toolkit. NVIDIA: Algunas soluciones para lenguajes NVIDIA CUDA Toolkit Provee un entorno de desarrollo comprensivo para lenguajes C y C++, para desarrolladores creando aplicaciones aceleradas por GPU. El Toolkit CUDA incluye un compilador para GPU's NVIDIA, librerías de matemática, y herramientas para depuración y optimización de rendimiento. OpenACC Desarrollado por Cray, CAPS, Nvidia y PGI, OpenACC es un estándar de programación acelerada que permite a desarrolladores, científicos y técnicos, de Fortran, C y C++. OpenACC permite a los programadores usar simples directivas de compilador para identificar qué áreas de código acelerar, sin requerir modificación del código en sí. Identificando los segmentos de código paralelo, las directivas OpenACC permiten al compilador hacer el trabajo detallado de mapear el computo al acelerador. #include <stdio.h> #define N 1000000 int main(void){ double pi=0.0f; long i; #pragma acc parallel loop reduction(+:pi) for (i=0;i<N;i++){ double t=(double)((i+0.5)/N); pi +=4.0/(1.0+t*t); } printf(“pi=%16.15f\n”,pi/N); return0; } Ejemplo – Calculo de Pi (en C) Expone 2 ejemplos en otros campos de la ciencia donde se utiliza la programación acelerada por GPU. ❑ ¿Qué aprendí? ❑¿Qué necesito reforzar? ¿Preguntas o dudas? Referencias María Fabiana Piccoli. (2011). Computación de Alto Desempeño En GPU. Editorial de la Universidad Nacional de La Plata http://sedici.unlp.edu.ar/bitstream/handle/10915/18404/Documento_completo__.pdf?sequence=1&isAllowed=y PAPER: Programación GPU https://www.academia.edu/13118797/Programaci%C3%B3n_GPU Benstead, Luke. (2012) Programación de videojuegos con OpenGL. https://upn.vitalsource.com/books/9786074817621. Bosque, Jose. (2007). Introducción a OpenGL. https://elibro-net.eu1.proxy.openathens.net/es/ereader/upnorte/35680?page=2 Donald, Hearn. (2006). Gráficos por computadora con OpenGL: Pearson Educación http://sedici.unlp.edu.ar/bitstream/handle/10915/18404/Documento_completo__.pdf?sequence=1&isAllowed=y https://www.academia.edu/13118797/Programaci%C3%B3n_GPU https://upn.vitalsource.com/books/9786074817621 https://elibro-net.eu1.proxy.openathens.net/es/ereader/upnorte/35680?page=2 Diapositiva 1 Diapositiva 2 Diapositiva 3 Diapositiva 4 Diapositiva 5 Diapositiva 6 Diapositiva 7 Diapositiva 8 Diapositiva 9 Diapositiva 10 Diapositiva 11 Diapositiva 12 Diapositiva 13 Diapositiva 14 Diapositiva 15 Diapositiva 16 Diapositiva 17 Diapositiva 18 Diapositiva 19 Diapositiva 20 Diapositiva 21 Diapositiva 22 Diapositiva 23
Compartir