Graphics Processing Unit
GPU es un acrónimo utilizado para abreviar Graphics Processing Unit, que significa "Unidad de Procesado de Gráficos".
Una GPU es una CPU dedicada exclusivamente al procesamiento de gráficos, para aligerar la carga de trabajo del procesador central en aplicaciones como los videojuegos. De esta forma, mientras gran parte de lo relacionado con los gráficos se procesa en la GPU, la CPU puede dedicarse a otro tipo de cálculos (como la inteligencia artificial o los calculos mecánicos en el caso de los videojuegos).
Una GPU implementa ciertas operaciones gráficas llamadas primitivas optimizadas para el procesamiento gráfico. Una de las primitivas más comunes para el procesamiento gráfico en 2D es la operación BitBLT, que se encuentra en una unidad llamada "blitter", adicionalmente existen primitivas para dibujar rectángulos, triángulos, círculos y arcos. Los GPU modernos tienen muchas más primitivas que soportan también gráficos de 3D.
Diferencias con la CPU
Si bien en un computador genérico no es posible reemplazar la CPU por una GPU, hoy en día las GPU son muy potentes y pueden incluso superar la frecuencia de reloj de una CPU antigua (más de 500 Mhz). Pero la potencia de las GPU y su dramático ritmo de desarrollo reciente se deben a dos factores diferentes. El primer factor es la alta especialización de las GPU, ya que al estar pensadas para desarrollar una sola tarea, es posible dedicar más silicio en su diseño para llevar a cabo esa tarea más eficientemente. Por ejemplo, las GPU actuales están optimizadas para cálculo con valores en coma flotante, predominantes en los gráficos 3D. Por otro lado, muchas aplicaciones gráficas conllevan un alto grado de paralelismo inherente, al ser sus unidades fundamentales de cálculo (vértices y píxeles) completamente independientes. Por tanto, es una buena estrategia usar la fuerza bruta en las GPU para completar más calculos en el mismo tiempo. Los modelos actuales de GPU suelen tener una media docena de procesadores de vertices (que ejecutan vertex shaders), y hasta dos o tres veces más procesadores de fragmentos o píxeles (que ejecutan fragment shaders). De este modo, una frecuencia de reloj de unos 500-600MHz (el estándar hoy en día en las GPU de más potencia), muy baja en comparación con lo ofrecido por las CPU (3.8-4 GHz en los modelos más potentes), se traduce en una potencia de cálculo mucho mayor gracias a su arquitectura en paralelo.
Historia
Los modernos GPU son decendientes de los chips gráficos monolíticos de finales de la década de 1970 y 1980. Estos chips tenían soporte BitBLT limitado en la forma de sprites (si es que tenían dicho soporte del todo), y usualmente no tenían soporte para dibujo de figuras. Algunos GPU podían ejecutar varias operaciones en una lista de "display" y podían usar DMA para reducir la carga en el procesador anfitrión; un ejemplo temprano es el coprocesador ANTIC usado en el Atari 800 y el Atari 5200. Hacia finales de los 80 y principios de los 90, microprocesadores de propósito general de alta velocidad fueron muy populares para implementar los GPUs más avanzados. Muchas (muy caras) tarjetas gráficas para PCs y Estaciones de Trabajo usaban Procesadores Digitales de Señales (DSP por sus siglas en inglés) tales como la serie TMS340 de Texas Instruments, para implementar funciones de dibujo rápidas y muchas impresoras laser contenian un procesador de barrido de imágenes "PostScript" (un caso especial de GPU) corriendo en un procesador RISC como el AMD 29000.
Conforme la tecnología de proceso de semiconductores fue mejorando, eventualmente fue posible mover las funciones de dibujo y las BitBLT a la misma placa y posteriormente al mismo chip a manera de un controlador de buffer de "marcos" (frames), tal como VGA. Estos aceleradores gráficos de 2D "reducidos" no eran tan flexibles como los basados en microprocesadores, pero eran mucho más fáciles de hacer y vender. La Commodore Amiga fue la primera computadora de producción en masa que incluía una unidad "blitter" y el sistema gráfico IBM 8514 fue una de las primeras tarjetas de video para PC en implementar primitivas 2D en hardware.
Programación de la GPU
Aunque en sus comienzos la programación de la GPU se hacía en el lenguaje ensamblador específico a cada modelo, tras su implantación masiva en la mayoría de ordenadores personales los fabricantes han desarrollado lenguajes de alto nivel para facilitar su extensión. El lenguage estándar, asociado a la biblioteca OpenGL es el "OpenGL Shading Language", GLSL, implementado en principio por todos los fabricantes. La empresa californiana NVidia creó un lenguage propietario llamado Cg (del inglés, "C for graphics"), con mejores resultados que GLSL en las pruebas de eficiencia. En colaboración con NVidia, Microsoft desarrolló su "High Level Shading Language", HLSL, prácticamente idéntico a Cg, pero con ciertas incompatibilidades menores.
Otros
Se intenta aprovechar la gran potencia de calculo de las GPU para aplicaciones no relacionadas con los gráficos, en lo que desde recientemente se viene a llamar GPGPU, o GPU de propósito general (general purpuse GPU, en sus siglas en inglés).
Ver También
Enlaces externos
- Qué usos se le pueden dar a la GPU y la memoria gráfica aparte de los juegos 3D (en inglés).
- Tutoriales de programación en Cg (en inglés).