Buscar en este blog

Tema 5.b: Coprocesadores para gráficos


Los coprocesadores son microprocesadores que realizan tareas específicas para liberar de carga los procesadores de propósito general. Una CPU “normal” (Central Processing Unit) puede realizar multitud de operaciones distintas y se intenta optimizar para que las haga en el menor tiempo posible, pero en general habrá determinadas tareas para las que si diseñamos un pequeño procesador específico para ellas le saque más rendimiento con menos recursos. En los procesadores antiguos había ejemplos de este tipo de componentes auxiliares en los coprocesadores matemáticos, para gestión de memoria (DMA), para gestión de gráficos, etc.

Coprocesador matemático
Actualmente se descarga a la CPU de las tareas más recurrentes e intensivas del procesado de gráficos a través de una tarjeta que lleva un procesador específico para ello: las tarjetas gráficas con su Graphics Processing Unit (GPU). Las GPUs están diseñadas para tratar grandes cantidades de datos, del mismo tipo, con una cantidad muy pequeña de instrucciones. Lo que se conoce como el pipeline gráfico es una serie de primitivas que manda el procesador central a la tarjeta gráfica donde se hacen todas las operaciones necesarias sobre dichos datos hasta llegar a la rasterización (proyección de los datos 3D en 2D para su salida por un dispositivo como la pantalla).

La demanda actual de gráficos más realistas e impresionantes ha multiplicado el interés en el desarrollo de nuevas GPUs y la demanda de potencia de cálculo es cada vez mayor. Para liberar a su vez a estos procesadores específicos de determinadas tareas recurrentes se recurre a los coprocesadores para gráficos, que son como el ayudante del ayudante. Con dos niveles de especialización se intenta conseguir resultados muy optimizados.

GPU de nVidia de la serie 6600 GT
Las GPUs actuales tratan de forma muy eficiente los cálculos necesarios para:

  1. Sombreado
  2. Texturización
  3. Renderizado
  4. Muestro múltiple (multisampling)
  5. Antialiasing

Actualmente las GPUs vienen en una tarjeta gráfica separada de la placa madre, conectada a la CPU y memoria RAM a través de bus AGP o PCI Express. Tiene acceso a una memoria RAM en la tarjeta que es normalmente más rápida pero de menor capacidad que la memoria RAM principal. Por otro lado, muchas placas madres tienen una GPU integrada en el chipset Northbridge (encargado de controlar la memoria RAM y la ranura AGP) que usa la memoria principal como frame buffer.

Al ver las características de las tarjetas gráficas actuales, algunos científicos vieron que se podían utilizar de forma muy eficiente para realizar determinados cálculos muy intensivos que eran de aplicación en el ámbito científico. Esto se ha llamado GPGPU: General Processing on a GPU. Es una idea muy similar al proyecto Folding@home que hay en PS3 para ayuda a la investigación contra el cáncer, sólo que en vez de correr sobre la GPU utiliza todos las unidades del Cell de todas las PS3 que estén conectadas en ese momento para desarrollo de modelos de proteínas.

Dentro de los microprocesadores que se han diseñado para las GPUs he podido encontrar información de dos tipos: los PPUS y los RTPU.

-        PPU: significa literalmente Physics Processing Unit y se encarga de gestionar los cálculos de físicas relacionados con efectos adicionales en la escena. Por ejemplo se pueden usar para mover pequeños objetos por el escenario a causa del viento de forma realista y físicamente correcta (aunque en el cálculo se suelen usar métodos de aproximación para resolver las ecuaciones, los modelos en que se basan sí son coherentes). Esto se podría hacer con una animación tradicional pero no sería igual de realista ni sería modificable ni reusable. Otro ejemplo es el tratamiento de partículas y fluidos  como humo, fuego, metralla, etc. 
Ejemplo de físicas aplicado en el juego Brothers in Arms
     La física general de la escena la sigue llevando el procesador principal, es en los “efectos especiales” donde se emplea la PPU.El primer coprocesador que salió al mercado fue el PhysX de Ageia y se le dio mucha publicidad gracias a juegos que lo usaban de forma espectacular como el Mirror’s Edge. Antes de este existieron proyectos como SPARTA y HELLAS que eran el resultado de proyectos de investigación.
     Posteriormente nVidia adquirió Ageia e incorporó su API en sus tarjetas, así pues no usó su tecnología como un coprocesador dedicado sino usando los recursos ya existentes en la tarjeta. Hoy en día no sería difícil tener dos tarjetas iguales conectadas en SLI o Xfire y asignar los cálculos de físicas a una de ellas, haciendo innecesario implementar otro hardware específico que tendría un coste muy similar y no sería muy atractivo para el usuario medio.

-        RTPU: Ray Tracing Processing Unit en inglés, hace referencia a la técnica de generación de imágenes 3D híper realista conocida como Traza de Rayos que intenta emular en un entorno digital el comportamiento real de la luz, dando como resultado imágenes espectaculares. El problema de esta técnica es que consume muchos recursos y de ahí el desarrollo de coprocesadores específicos que ayuden en esta tarea. Actualmente hay prototipos funcionales de esta tecnología como el CausticOne de Caustic Graphics que permiten representar estas escenas a una velocidad de 5 frames por segundo, lo que las deja prácticamente fuera del campo de imágenes interactivas. Sin embargo se espera que en el futuro cercano se desarrolle esta tecnología hasta alcanzar tasas de frames que permitan mostrar juegos comerciales que hagan uso de esta técnica.

Imagen renderizada con tecnología propia de Caustic Graphics

No hay comentarios: