Parcial Flashcards
Paralelismo
Dos tareas que se ejecutan independientes una de la otra. No hay comunicación ni conocimiento una de la otra.
GPU
Poco poder por core, son muchos
Generan mucho calor
Memoria en muchos bloques que se conecta a segmentos del core, sin RAM (en código)
Nacen para visualización 3d
Eran fijos y sin poder actualizarse
Codificar datos en imágenes que se traducían a números
Lo que surge como forma de programar la GPU
Shaders
CUDA
Lenguaje unificado para programar en la GPU creado por Nvidia
Gráficos
Parte de la ciencia de computación utilizada para generar y manipular imágenes. No sólo para generación en tiempo real.
Modelado
Abstracción y representación de opbjetos en coordenadas 3D. Da sentido a los puntos en el espacio
Diferencia entre engine y sistema de renderizado
El engine es tiempo real, el sistema de renderizado no
Lóbulo occipital
Se encarga del procesamiento de las imágenes que se reciben en el sistema visual
Donde se proyecta la imagen que vemos finalmente
Retina
LLeva la imagen de la retina al lóbulo occipital
Nervio óptico
Cristalino
Se deforma para enfocar en objetos más cercanos o más lejanos al observador
Espectro visible
de 400 a 700 nM (violeta a rojo)
Conos
No ven en baja intensidad de luz, HD y colores
Hay menos conos que bastones, pero son más grandes y se concentran cerca del centro
Bastones
Baja luz, sin colores y si hay demasiado brillo, no funcionan
Función
Mapeo de datos recibiendo un valor de entrada y uno de salida
Norma de un vector
Magnitud de un vector, si es 1, es un vector unitario
Producto punto
Qué tan perpendiculares son dos vectores entre sí. Si es perpendicular, da 0
Bases ortogonales
Tres vectores que sirven como sistema de referencia (ejes)
Línea
Vector que va desde un punto y en una dirección, haciéndolo crecer o decrecer y hacer negativo
Plano
Dos puntos y una normal que indica hacia qué lado apunta
Sistema coordenado euclidiano
El sistema de ejes (x, y, z)
Producto cruz
multiplicación entre dos vectores que da un resultado diferente dependiendo del orden (índice por medio da pulgar)
Rotaciones de Euler
Naturales para el humano, se gira en cada eje. La computadora prefiere quaterniones
Candado de Gimbal
Cuando se pierde un grado de libertad al rotar un eje y se pierde uno dentro de otro
Matriz ortogonal
Matriz cuaya inversa es igual a su transpuesta
Marco de referencia
El origen con respecto al cual se ve o mide algo en el espacio
Coordenadas homogéneas
Cuarta dimensión en las operaciones, se aumenta una dimensión para hacer operaciones en conjunto y posteriormente regresar al espacio original, que es una proyección de lo que se realiza.
Transformaciones ortogonales
Todos los ejes son perpendiculares entre sí, se preservan ángulos.
Operaciones ortonormales
Preservan ángulos y distancias. Ejemplo: rotaciones
Perspectiva
Los objetos se hacen pequeños al añejarse del observador
Pipeline base
Coordenadas del mundo-> coordenadas de la cámara-> coordenadas del plano de proyección-> coordenadas del dispositivo
Pipeline extra
Aplicación (preprocesamiento)-> geometría-> rasterizado
Versión alternativa del pipeline
Model y view Transform-> vertex shading-> Projection-> clipping-> Screen Mapping
Clipping space
Espacio siempre visible por la cámara. Frustrum. Todas las operaciones de visualización son sólo dentro de este espacio, las físicas se realizan sean visibles o no
Plano de proyección
Espacio no real frente a la cámara sobre el cual trazamos lo visto por la cámara dentro del frustrum.
Formas de modelar
Polígonos
Parches bi-cúbicos
Splines
Cuerpos sólidos
Técnicas de subdivisión
Representaciones implícitas
Polígono
Se genera al hacer relaciones entre vértices y aristas
Scan conversion
Va línea a línea escanenando y decidiendo qué pixeles hay que rellenar como superficie dentro del triángulo
Representaciones implícitas
Representar un objeto sin definir triángulos, sino que por medio de una ecuación, la primitiva es la misma figura
Z-buffer
Guarda qué pixeles se dibujan por encima de otros para no sobreescribir pixeles que no son visibles
Iluminación
Altamente complejo de modelar, ayuda a comprender el volumen de un objeto. Se tienen que aproximar y simplificar.
Scattering
Cuando la luz entra, se dispersa, modifica y refleja dependiendo del material
Aproximaciones de la luz
Eliminar dispersión
Eliminar reflexiones complejas
Modelar luces como puntos
Sólo usar el espacio RGB
Aproximado de sombras
Usar la distancia con respecto al origen de la luz
Tomar en cuenta que decrece la luz
Aproximar linealmente
Modelo de iluminación
Especular, difuso y ambiente
Luz especular
La luz que es reflejada directamente al observador
Luz difusa
Luz que de una fuente se dispersa por la superficie del objeto
Luz ambiental
Lus producida por el entorno (dispersión de otos objetos)
Phong
Mode lde iluminación con ambiente, difusa y especular. Ambiente da color (valor de luz por color del objeto), difusa da volumen (producto punto entre normal y rayo de luz) y especular da reflejo y brillo. No es realista, pero es fácil de implementar
Lambert
Modelo de iluminación sólo con luz difusa, no depende de la perspectiva y todo se ve suavizado
Half-lambert:
Modelo de iluminación con diffuse wrap, quitando valores de oscuridad para que no haya negro absoluto y nunca tener objetos no visibles y se puedan ver desde cualquier lugar
Banded-lightning
Modelo de iluminación en escalones
Mineart-lightning
Moon shader, bueno para objetos muy reflejantes
Primera generación de GPU
<1987
Wireframe, fragmentos sobreescritos y sin iluminación, sombreado ni z-buffer
Segunda generación de GPU
1987-1992
Imágenes de sólidos sombreados
Imluminación y sombras, Rastering con profundidad y mezcla de colores
Tercera generación de GPU
1992-2000
Imágenes con texturas
Mapeo de texturas y fragmentos con antialiasing
Cuarta generación de GPU
2000>
Posibilidad de programar la GPU en región de vértices o fragmentos
Implementa la línea de ensamblado gráfico
Quinta generación de GPU
Procesamieinto en paralelo con CUDA como herramienta para programar la GPU sin necesitar de shaders
Antialiasing
Evitar que los bordes sean salteados. Renderiza varias veces los bordes y luego promedia los resultados
Texturas procedurales:
Generadas por algoritmos y no por una imagen
Framebuffer simple
Hardware gráfico que calcula vértices y color de los pixeles
NVIDIA
Empresa especializada en GPUs que nace en 1993, lanzando en 1999 los primeros productos (GeForce 256 (NV19))
Texel
definición de las texturas que se usan para rellenar un triángulo con respecto a la textura
GPU al procesar
Acceso restringido a la memoria, sólo accede y liberta antes y después de cálculos, nunca durante
No tiene acceso al disco
GPU programable
Las GPUs mejoran x2 con cada generación, las CPU sólo x1.5
Acelerar aplicaciones de CUDA
Librerías
Directivas OpenACC
Lenguajes de programación
Visual profiler
Encojntrar cuellos de botella
GPU Direct
Conectar dos GPUs y trabajan como una
Thrust
Librería de CUDA para manejo de datos con ordenamiento, sumas y multiplicaciones de matrices
Kernel
Encapsulamiento de código que se ejecuta dentro de cada núclo de GPU en cada ciclo asignado. Cada thread toma un copia del kernel para ejecutarlo de manera paralela
se declaran con __global__
Cores
Organizados en exponentes de 2
Generan un thread con un copia del kernel cada vez que se le llame al core
Thread
Ejecución del kernel en la GPU, cada uno con su ciclo de vida, instrucciones, etc. Hasta que se ejecuten todos, mueren los threads, aunque ya hayan terminado de ejecutarse ellos.
Host vs Device
Host son las variables que se crean y existen en la CPU, Device son las variables que existen y se ejecutan en la GPU
«<x, y»>
bloques, threads
Se pueden usar dim3(x,y) que dan dimensiones de los bloques y los threads, cuántos bloques por dimensón de cuántos threads en cada dirección
Varibles que utilizar en CUDA
Sólo primitivos, que son valores básicos y evitar arreglos (int, float, char, uint, uchar, long)
Mínimo de threads en cada bloque para poder optimizar en CUDA
Mínimo 128 threads en cada bloque (siempre mantener valores exponentes de 2)
CudaSetDevice
establece la GPU en que se va a ejecutar (índice 0 si sólo hay una)
cudaMalloc:
reserva memoria en device para recibir los datos con los que se van a ejecutar las operaciones
cudaMemcpy:
copia la memoria de un origen a un destino y la direccipon en que se realiza (host a device, device a host, etc)
addKernel:
crea un kernel con la cantidad de bloques y de thrads por bloque
threadIdx.x:
Da el índice del thread que se está ejecutando en una dimensión
cudaGetLastError
Obtener el último error en GPU (porque no tiene depurador) Para saber si hubo errores al ajecutar, nos enteramos al final
cudaDeviceSynchronize:
espera al final de la ejecución del kernel y regresa errores de resulññtados, no de ejecucion
cudaFree:
Libera la memoria del device después de terminar las operacioens