Arquitectura de GPUs

Presenter Notes

Resumen

  • Motivación.
  • Pipeline de gráficos.
  • Evolución del pipeline programable.
  • Unified shaders ¿NV60?
  • Arquitectura NVIDIA Fermi.

Nicolás Wolovick, 20140515

Presenter Notes

Motivación

Presenter Notes

SuperTuxKart

  • Usar la versión >=0.8.1.
  • Activar el "Artist Debug Mode".
  • Mirar y probar:
    • Cantidad de frames-per-second, KTris de la escena.
    • Activar wireframe para mostrar los triángulos (Home).
    • Activar el wireframe, normales, cajas de choque (Ctrl+F11).
    • Usar el Fly-mode (I, K) para mirar la escena desde afuera de la esfera celeste.
    • Salir del juego, ir a "Options" y probar los diferentes efectos de los 8 posibles niveles de "Graphical Effects Level".

Probar también Valley Benchmark de Unigine para ver una escena realmente compleja con >=1 MTris y efectos gráficos que solo logran 60 fps en una GPU de alta gama.

Presenter Notes

¿De dónde vienen?

Ok, las GPUs computan muchísimos números de punto flotante, pero ...
¿De donde salen?

GPUs and CPUs do not go back in computer architecture genealogy to a common ancestor; there is no Missing Link that explains both..

(Hennessy, Patterson, CAAQA5, p.288)

Presenter Notes

BITBLT

Rutina de Bit Block Transfer, Xerox Alto, 1973.
Opera en un "rectángulo" de la memoria, operando Destination, boolean function, Source, Texture.
Usualmente la función se conocía como ROP Raster OPeration.

  • D ← f(D,S,T)

Bitblt para sprites

A mediados de los 80s aparecen las Commodode Amiga con BITBLT implementado en hardware. Atari ST rápidamente copia el blitter.
La placa VGA original no incorporaba blitter. Pero por ejemplo en 1993 la CL-GD5426 incorpora un blitter.

(Rob Pike, Leo Guibas and Dan Ingalls, SIGGRAPH'84 Course Notes: Bitmap Graphics , AT&T Bell Laboratories 1984.)

Presenter Notes

BITBLT y HPC

Idea

Usar el BITBLT de las placas para efectuar operaciones booleanas sobre memoria muy rápidamente.

O_O

Este tipo de ideas se mantiene a lo largo de todo el recorrido de hardware-assisted graphics.

Los gráficos de commodity computers pasaron de 2D en los 80s a 3D en los 2000.
Veamos como funciona un graphic pipeline típico para 3D real-time rendering (juegos, fps>=60).

Presenter Notes

Graphics Pipeline

Presenter Notes

Graphics Pipeline

¿Cómo cada uno de los triángulos contribuye a la imagen final?

Teapot rendeing

(CMU 15-869, Graphics and Imaging Architectures)

Queremos 60 fps en 1920x1080 con colores de 24bit. Tenemos 16.6ms para transformar, iluminar, cortar, proyectar, pegar texturas y generar los píxeles de:

  • ~1M polígonos (triángulos).
  • Dibujar 6MB en el framebuffer.

(Rick Stirling, Yes, but how many polygons?, 2007)

Sería bueno poder calcular esto un poco mejor.

Presenter Notes

Tipos de datos que maneja el pipeline

Pipeline entities

(CMU 15-869, Graphics and Imaging Architectures)

Presenter Notes

Real-time graphics pipeline

Real-time graphics pipeline

(CMU 15-869, Graphics and Imaging Architectures)

Presenter Notes

Vértices

Un vertex es una tupla con attributes.
Cada attribute tiene components.

Vertex data structure

1 struct vertex {
2     float3 pos; // screen pixel coordinates (sample point location)
3     float3 normal;
4     float2 texcoord;
5 }

(Penn CIS565)

Presenter Notes

Vértices y su ensamblado

Como un MPI_GatherV, pero de información 3D.

Vertex assembly

Vertex assembly

(Penn CIS565)

Presenter Notes

Vertex shader

Función que procesa cada vértice. Mapeo de todo el arreglo de vértices por una función.
También conocido como T&Ltransform and lightning—.

Aplica una matriz de 4x4 que es composición de cuatro matrices:

Wikipedia camera analogy

  1. Posicionar el modelo — modeling transformation.
  2. Posicionar la cámara — viewing transformation.
  3. Ajustar el zoom — projection transformation.
  4. Recortar la imagen — viewport transformation.

(Wikibooks, GLSL Programming, Vertex Transformations.)

Presenter Notes

Vertex Shader, lightning

A partir de:

  • La posición de la(s) fuente(s) de luz.
  • La normal a cada vértice respecto a las fuentes

Se calcula la intensidad de luz que recibe el vértice.

Per vertex lightning

(CMU 15-869, Graphics and Imaging Architectures)

Presenter Notes

Vertex Shader, processing

Transformaciones que modifican (ligeramente) la posición de los vértices.

Ejemplo: pulsing

Vertex pulsing

(Penn CIS565)

Presenter Notes

Vertex Shader, texturas

Texturas pueden ser mapas de altura para desplazamientos de vértices.

Vertex Texure Demo

(Simon Green GeForce 6 Series OpenGL Extensions, 2004?)

Presenter Notes

¿Qué es una textura?

Presenter Notes

Rasterizing

Rasterization

(Wikibooks, GLSL Programming, Rasterization.)

Presenter Notes

O Rasterizing?

Visual Pipeline

(GLSL Tutorial von Lighthouse3D.)

¿Convierte los vértices o también todos los puntos intermedios?

Presenter Notes

Fragment Shader

Asigna color y textura a cada fragmento o pre-pixel.

Ejemplo: Phong shading

Phong Components

Phong equation

(Wikipedia, Phong reflection model.)

Sumas, productos punto, potencias fraccionarias, multiplicación por constantes.
Un fragment shader puede ser computacionalmente intensivo.

1 float diffuse = max(dot(N, L), 0.0);
2 float specular = max(pow(dot(H, N), u_shininess), 0.0);

Presenter Notes

Fragment Shader: luz y textura

Fragment shader, light and texture

(Penn CIS565)

Presenter Notes

Fragment shader: entrada y salida

1 struct fragment {
2     float x,y; // screen pixel coordinates (sample point location)
3     float z; // depth of triangle at sample point
4     float3 normal;
5     float2 texcoord;
6     // interpolated application-defined attribs
7     // (e.g., texture coordinates, surface normal)
8 }

Después de procesar

1 struct output_fragment {
2     int x,y; // pixel
3     float z;
4     float4 color;
5 }

Presenter Notes

Operaciones en el FrameBuffer

Frame buffer operations

(CMU 15-869, Graphics and Imaging Architectures)

Presenter Notes

Ejemplo de Operaciones en el FB

1 if (fragment.z < zbuffer[fragment.x][fragment.y]) {
2     zbuffer[fragment.x][fragment.y] = fragment.z;
3     colorbuffer[fragment.x][fragment.y] =
4     blend(colorbuffer[fragment.x][fragment.y], fragment.color);
5 }

z-buffer example

Además del depth test hay otros: alpha test, stencil test, etc.
(CMU 15-869, Graphics and Imaging Architectures)

Presenter Notes

Parametrización de las operaciones

The graphics pipeline

Uniforms: funciones aridad 0 (constantes).
Textures: funciones aridad 2.

Presenter Notes

RenderMonkey

  • Prototipado de shaders.
  • Defunct.
  • Windows, up to DX 9.1.

FullScreen-Hebe_lrg.jpg

Presenter Notes

Evolución del pipeline programable

Presenter Notes

Evolución del pipeline programable

  • Pre GPU.
  • GPU de funciones fijas.
  • GPU de funciones programables.
  • Shader Processors unificados.
  • GPU Computing.

Presenter Notes

90's

Pre-GPU: Wolfenstein 3D (1992), Doom (1993).

pregpu

Código de CPU optimizado artesanalmente.

Michael Abrash, Graphics Programming Black Book, 1997.

Presenter Notes

3dfx Voodoo (1996)