Logo Studenta

Semana13-IntroducciónGPU

¡Este material tiene más páginas!

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

Continuar navegando