Arquitectura GPU
y Programación
CUDA
PROF: ALEXANDER PINARES BOLIVAR
Por hacer:
Historia: Los procesadores gráficos originalmente
fueron diseñados para acelerar juegos en 3D como
Quake, envolviéndose dentro motores de
computación altamente paralela para una amplia
clase de aplicaciones.
Por hacer:
o Programando GPUs usando el lenguaje CUDA.
oUna vista detallada de la arquitectura.
Recordando la arquitectura
básica GPU
GPU (Unidad de procesamiento gráfico)
Recordando la arquitectura
básica GPU
Chip de múltiples núcleos
basado en la arquitectura
SIMD:
SIMD (Single intruction,
Multiple data) o una
instrucción, múltiples datos
según la Taxonomía de Flynn
La taxonomía de Flynn es una clasificación de arquitecturas de computadores
propuesta por Michael J. Flynn en 1972
Recordando la arquitectura
básica GPU
La ejecución de múltiples
hilos en un núcleo es
concurrente.
Historia del GPU
Entrada: Salida :
La descripción de una La imagen de la escena
escena
Historia del GPU
La descripción de una escena:
La geometría 3D de una superficie, material de la
superficie, luces, cámara, etc.
¿Qué es lo que las GPUs están
diseñadas todavía por hacer?.
¿Qué es lo que las GPUs están
diseñadas todavía por hacer?.
Primitivas de gráficos en tiempo real
(entidades)
Representación de la superficie como una malla
de triángulos en 3D
Primitivas de gráficos en tiempo real
(entidades)
Primitivas:
( Por ejemplo triángulos, Vértices:
puntos, líneas ) (puntos en el espacio)
Primitivas de gráficos en tiempo real
(entidades)
Fragmentos Pixeles (en una imagen)
Renderizando una imagen ( operaciones
con las entidades )
Entrada:
Una lista de vértices en un espacio
3D ( y sus conectividades dentro
de primitivas ).
Ejemplo: Cada 3 vértices definen
un triangulo.
Renderizando una imagen ( operaciones
con las entidades )
Paso 1: Dado una escena, la
posición de la cámara, calcular
donde los vértices se ubicaran en
la pantalla.
Renderizando una imagen ( operaciones
con las entidades )
Paso 2: Agrupar los vértices dentro
de primitivas.
Renderizando una imagen ( operaciones
con las entidades )
Paso 3: Generar un fragmento para
cada pixel, una superposición de
primitivas.
Renderizando una imagen ( operaciones
con las entidades )
paso 4: Calcular el color de primitiva
para cada fragmento ( basado en la
iluminación de las escena y las
propiedades del material de la
primitiva)
Renderizando una imagen ( operaciones
con las entidades )
paso 5: Poner el color del
fragmento mas cercano a la
cámara en la imagen de salida.
Los cálculos del proceso de fragmentado
simulan la reflexión de materiales del
mundo real
Ejemplo de
materiales:
La programación de gráficos hace más
10 años ( Api de Opengl )
El API ( interface de programación de aplicaciones )
para programar gráficos proporciona mecanismos
para setear parámetros de materiales y luces de
una escena.
Ejemplo de parámetros para luces : Color, posición, dirección.
Ejemplo de parámetros de materiales: Color, brillo.
Gran variedad de materiales de luces en
el mundo.
Observaciones de las GPUs durante los
años
Los GPUs son procesadores muy rápidos para el
desempeño de la misma computación ( cálculos ),
en grandes colecciones de data ( datos de vértices,
fragmentos , y pixeles )
GPGPU 2002-2003
( GPU de propósito general )
GPGPU 2002-2003
( GPU de propósito general )
GPGPU 2002-2003
( GPU de propósito general )
Lenguaje de programación
Brook(2004)
Es proyecto de investigación del laboratorio de
computación gráfica de Stanford.
Hardware GPU como procesador de datos
paralelizable.
Lenguaje de programación
Brook(2004)
El compilador de Brook convierte un flujo genérico de
datos en comandos Opengl tal como drawtraingules y
un conjunto de programas shader.
“La tecnología shaders o sombreadores es cualquier unidad escrita en un
lenguaje de sombreado que se puede compilar independientemente”.
Wikipedia
GPU modo de
calcular
Revisión : Como correr un
código en un CPU
(Unidad central de
procesamiento) Se
dice que un usuario
quiere correr un
programa en un CPU
multi nucleo cuando:
Revisión : Como correr un
código en un CPU
• El OS carga el texto
del programa en
memoria.
• El OS selecciona el
contexto de
ejecución de CPU.
Revisión : Como correr un
código en un CPU
• El OS interrumpe
procesos, prepara
contexto de ejecución
(setea contenidos de
registros, contador
programas, etc. para
preparar la ejecución
del contexto )
• Se ejecuta!!
Revisión : Como correr un
código en un CPU
• El procesador empieza
a ejecutar las
instrucciones dentro del
ambiente mantenido
por el contexto de
ejecución.
¿Cómo se ejecutaba el código
en una GPU? (previo 2007)
• Cuando un usuario
quiere dibujar una
imagen usando una
GPU:
¿Cómo se ejecutaba el código
en una GPU? (previo 2007)
• La aplicación proporciona GPU
Vertex ( vía driver de gráficos ).
• La aplicación setea los parámetros
del esquema de desarrollo de
gráficos.
• la aplicación proporciona al
hardware un buffer de vértices.
• Se ejecuta!!!
¿Cómo se ejecutaba el código
en una GPU? (previo 2007)
El hardware GPU podría solo ejecutar
esquemas de desarrollo de gráficos.
Arquitectura NVIDIA Tesla
(2007)
(Geforce 8xxx series GPUs)
Primera alternativa, non-
graphics-specific interface
para hardware GPU.
Programas no dedicados a
gráficos se pueden ejecutar
en núcleos GPU
programables.
Arquitectura NVIDIA Tesla
(2007)
• La aplicación puede
permitir alocar buffers
en la memoria GPU y
copiar datos de de/hasta
los buffers.
• La aplicación provee un
simple kernel (binario).
• Lenguaje de
programación CUDA.
Lenguaje de programación
CUDA
• Introducido en el 2007
con la arquitectura
NVIDIA Tesla.
• Es parecido a C.
• Relativamente de bajo
nivel.
• CUDA solo corre en GPUs
NVIDIA.