Podríamos decir que una tarjeta de video es muy parecida al conjunto placa madre, procesador y memoria. Veremos que esta analogía es evidente al analizar cada parte que componen este complicado rompecabezas.
Una tarjeta gráfica, está formada principalmente por:
GPU.
Memoria RAM.
RAMDAC.
Salidas.
Interfaz.
Siendo la GPU (Unidad de procesamiento gráfico), el componente que está a la cabeza del conjunto. A continuación describiremos estos elementos.
GPU
GPU es un acrónimo utilizado para abreviar Graphics Processing Unit, que significa "Unidad de Procesamiento Gráfico".
Una GPU es un procesador dedicado exclusivamente al procesamiento de gráficos, para aligerar la carga de trabajo del procesador central en aplicaciones como los video juegos. 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 cálculos mecánicos en el caso de los video juegos).
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 3D es el antialiasing, que suaviza los bordes de las figuras para darles un aspecto más realista. Adicionalmente existen primitivas para dibujar rectángulos, triángulos, círculos y arcos. Las GPU actualmente disponen de gran cantidad de primitivas, buscando mayor realismo en los efectos.
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 600MHz). 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 (punto 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 pixeles) completamente independientes. Por tanto, es una buena estrategia usar la fuerza bruta en las GPU para completar más cálculos en el mismo tiempo. Las GPU suelen tener una media docena de procesadores de vértices (que ejecutan vertex shaders), y hasta dos o tres veces más procesadores de fragmentos o pixeles (que ejecutan fragment shaders), los modelos actuales estan cambiando al modelo unificado, que se nombra mas adelante. 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.
Una de las mayores diferencias con la CPU estriba en su arquitectura. A diferencia del procesador central, que tiene una arquitectura Von Neumann, la GPU se basa en el Modelo Circulante. Éste modelo facilita el procesamiento en paralelo, y la gran segmentación que posee la GPU para sus tareas.
Arquitectura de la GPU
Una GPU está altamente segmentada, lo que indica que posee gran cantidad de unidades funcionales. Estas unidades funcionales se pueden dividir principalmente en dos: aquéllas que procesan vértices, y aquéllas que procesan pixeles. Por tanto, se establecen el vértice y el pixel como las principales unidades que maneja la GPU.
Adicionalmente, y no con menos importancia, se encuentra la memoria. Ésta destaca por su rapidez, y va a jugar un papel relevante a la hora de almacenar los resultados intermedios de las operaciones y las texturas que se utilicen. Este componente será analizado en profundidad mas adelante.
Inicialmente, a la GPU le llega la información de la CPU en forma de vértices. El primer tratamiento que reciben estos vértices se realiza en el vertex shader. Aquí se realizan transformaciones como la rotación o la rotación de las figuras. Tras esto, se define la parte de estos vértices que se va a ver (clipping), y los vértices se transforman en pixeles mediante el proceso de rasterización. Estas etapas no poseen una carga relevante para la GPU.
Donde sí se encuentra el principal cuello de botella del chip gráfico es en el siguiente paso: el pixel shader. Aquí se realizan las transformaciones referentes a los pixeles, tales como la aplicación de texturas. Cuando se ha realizado todo esto, y antes de almacenar los pixeles en la caché, se aplican algunos efectos como el antialiasing, blending y el efecto niebla.
Otras unidades funcionales llamadas ROP toman la información guardada en la caché y preparan los pixeles para su visualización. También pueden encargarse de aplicar algunos efectos. Tras esto, se almacena la salida en el frame buffer, un tipo de memoria temporal.
Hoy en dia las GPU utilizan un modelo unificado, esto es, procesamiento en paralelo, los procesadores encargados de los vertices y los procesadores encargados de los pixeles, se fundieron bajo el nombre de Stream Processor, que aumenta la eficiencia al balancear las cargas de cada proceso (vertices y pixeles). En definitiva los procesadores que realizan el trabajo son los Shader Processor, Stream Procesor se refiere a todas las unidades dentro del procesador principal.
Programación de la GPU
Al inicio, la programación de la GPU se realizaba con llamadas a servicios de interrupción de la BIOS. Tras esto, la programación de la GPU se empezó a hacer en el lenguaje ensamblador específico a cada modelo. Posteriormente, se situó un nivel más entre el hardware y el software, diseñando las API (Application Program Interface), que proporcionaban un lenguaje más homogéneo para los modelos existentes en el mercado. El primer API fue OpenGL (Open Graphics Language), tras el cuál Microsoft desarrolló DirectX.
Tras el desarrollo de APIs, se decidió crear un lenguaje más natural y cercano al programador, es decir, desarrollar un lenguajes de alto nivel para gráficos. Por ello, de OpenGL y DirectX surgieron estas propuestas. El lenguaje estándar de alto nivel, 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 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.
OpenGL
OpenGL es una especificación estándar que define una API multilenguaje y multiplataforma para escribir aplicaciones que produzcan gráficos 2D y 3D. Fue desarrollada por Silicon Graphics Inc. (SGI) en 1992. Su nombre viene del inglés Open Graphics Library, cuya traducción es biblioteca de gráficos abierta (o mejor, libre, teniendo en cuenta su política de licencias. Es una interfaz muy parecida estructuralmente al lenguaje C, de echo su programación y compilación se realiza en dicho ambiente. Es claro que existen funciones y declaraciones exclusivas de OpenGL, pero a un programador en C, se le hace muy familiar este lenguaje.
A continuación mostramos un código fuente OpenGL:
#include
void reshape(int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,1);
glLoadIdentity();
glBegin(GL_TRIANGLES);
glVertex3f(-1,-1,0);
glVertex3f(1,-1,0);
glVertex3f(0,1,0);
glEnd();
glFlush();
}
void init()
{
glClearColor(0,0,0,0);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50, 50);
glutInitWindowSize(500, 500);
glutCreateWindow("Ejemplo de OpenGL - Tarjetas de video");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
El cual genera:

Podemos apreciar en la Imagen 1, que el proceso de compilación y ejecución es muy similar al empleado en C, como lo habíamos mencionado.
No debemos olvidar que estamos programando directamente en la GPU. Este ejemplo es muy simple, y no alcanzamos a dimensionar todavía el poder de procesamiento. Mas adelante analizaremos las propiedades de procesamiento en tres dimensiones, que es realmente el trabajo pesado de estos dispositivos.
A grandes rasgos, OpenGL es una especificación, es decir, un documento que describe un conjunto de funciones y su comportamiento exacto. A partir de ella, los fabricantes de hardware crean implementaciones (bibliotecas de funciones creadas para enlazar con las funciones de la especificación OpenGL, utilizando aceleración hardware cuando sea posible). Dichos fabricantes tienen que superar pruebas específicas que les permitan calificar su implementación como una implementación de OpenGL.
Existen implementaciones eficientes de OpenGL suministradas por fabricantes para Mac OS, Microsoft Windows, Linux, varias plataformas Unix, y PlayStation 3. Existen también varias implementaciones software que permiten que OpenGL esté disponible para diversas plataformas sin soporte de fabricante. Es de señalar la biblioteca de software libre / código abierto Mesa 3D, una API de gráficos basada totalmente en software y completamente compatible con OpenGL. Sin embargo, para evitar los costes de la licencia para ser denominada formalmente como una implementación de OpenGL, afirma ser simplemente una API muy similar.
La especificación OpenGL era revisada por el OpenGL Architecture Review Board (ARB), fundado en 1992. El ARB estaba formado por un conjunto de empresas interesadas en la creación de una API consistente y ampliamente disponible. Microsoft, uno de los miembros fundadores, abandonó el proyecto en 2003.
El 31 de julio de 2006 se anunció que el control de OpenGL pasaría del ARB al Grupo Khronos. Con ello se intentaba mejorar el marketing de OpenGL y eliminar las barreras de desarrollo. El gran número de empresas con variados intereses que han pasado tanto por el antiguo ARB como por el grupo actual han hecho de OpenGL una API de propósito general con un amplio rango de posibilidades.
Memoria RAM
Según la tarjeta gráfica esté integrada en la placa base (bajas prestaciones) o no, utilizará la memoria RAM propia del ordenador o dispondrá de una propia. Dicha memoria es la memoria de vídeo o VRAM. Su tamaño oscila entre 128 MB y 768 MB. La memoria empleada en 2006 y comienzos de 2007 estaban basadas en tecnología DDR, destacando DDR2, GDDR3 y GDDR4. La frecuencia de reloj de la memoria se encontraba entre 400 MHz y 1.6 GHz.
Una parte importante de la memoria de un adaptador de video es el Z-Buffer, encargado de gestionar las coordenadas de profundidad de las imágenes en los gráficos 3D.
A continuación una tabla con las características de cada tipo de memoria:
Tecnologia |
Frecuencia (MHz) |
Ancho de Banda (GB/s) |
DDR |
166 - 950 |
1.2 - 30.4 |
DDR2 |
533 - 1000 |
8.5 - 16 |
GDDR3 |
700 - 1700 |
5.6 - 54.4 |
GDDR4 |
1600 - 1800 |
64 - 86.4 |
RAMDAC
Un Random Access Memory Digital-to-Analog Converter (RAMDAC o convertidor digital-analógico de RAM) es el encargado de transformar las señales digitales con las que trabaja el computador en una salida analógica que pueda ser interpretada por el monitor. Esta compuesto de tres DACs rápidos con una pequeña SRAM usada en adaptadores gráficos para almacenar la paleta de colores y generar una señal analógica (generalmente una amplitud de voltaje) para posteriormente mostrarla en un monitor a color. El número de color lógico de la memoria de pantalla es puesto es las direcciones de entrada de la SRAM para seleccionar un valor de la paleta que aparece en la salida de la SRAM. Este valor se descompone en tres valores separados que corresponden a los tres componentes (rojo, verde, y azul) del color físico deseado. Cada componente del valor alimenta a un DAC separado, cuya salida analógica va al monitor, y en última instancia a uno de sus tres cañones de electrones (o sus equivalente en las pantallas sin tubo de rayos catódicos).
La longitud de una palabra en el DAC oscila generalmente en un rango de 6 a 10 bits. La longitud de la palabra de la SRAM es tres veces el de la palabra del DAC. La SRAM actúa como una tabla de búsqueda de color (Color LookUp Table o CLUT en inglés). Tiene generalmente 256 entradas (lo que nos da una dirección de 8 bits). Si la palabra del DAC es también de 8 bits, tenemos 256 x 24 bits de la SRAM lo que nos permite seleccionar entre 256 a 16777216 colores posibles para la pantalla. El contenido de la SRAM puede cambiar mientras que la pantalla no está activa (durante los tiempos de blanqueo de la pantalla).
La SRAM puede usualmente ser puenteada y cargar los DACs directamente con los datos de pantalla, para mos modos Truecolor. De hecho éste es el modo habitual de operar del RAMDAC desde mediados de los 90, por lo que la paleta programable se conserva como una prestación heredada para asegurar la compatibilidad con el viejo software. En la mayoría de tarjetas gráficas modernas, puede programarse el RAMDAC con altas frecuencias de reloj en modos de color verdadero, durante los cuales no se usa la SRAM.
Salidas
Los sistemas de conexión más habituales entre la tarjeta gráfica y el dispositivo visualizador (como un monitor o un televisor) son:
SVGA: estándar analógico de los años 1990; diseñado para dispositivos CRT, sufre de ruido eléctrico y distorsión por la conversión de digital a analógico y el error de muestreo al evaluar los pixeles a enviar al monitor.
DVI: sustituto del anterior, fue diseñado para obtener la máxima calidad de visualización en las pantallas digitales como los LCD o proyectores. Evita la distorsión y el ruido al corresponder directamente un pixel a representar con uno del monitor en la resolución nativa del mismo.
S-Video: incluido para dar soporte a televisores, reproductores de DVD, vídeos, y videoconsolas.
En la imagen se observan, SVGA, S-Video y DVI respectivamente.

Otras no tan extendidas en 2007 son:
Vídeo Compuesto: analógico de muy baja resolución mediante conector RCA.
Vídeo por componentes: utilizado también para proyectores; de calidad comparable a la de SVGA, dispone de tres clavijas (Y, Cb y Cr).
HDMI: tecnología digital emergente en 2007 que pretende sustituir a todas las demás.
Interfaces con la placa madre
En orden cronológico, los sistemas de conexión entre la tarjeta gráfica y la placa base han sido, principalmente:
ISA: arquitectura de bus de 16 bits a 8 MHz, dominante durante los años 1980; fue creada en 1981 para los IBM PC.
MCA: intento de sustitución en 1987 de ISA por IBM. Disponía de 32 bits y una velocidad de 10 MHz, pero era incompatible con los anteriores.
EISA: respuesta en 1988 de la competencia de IBM; de 32 bits, 8.33 MHz y compatible con las placas anteriores.
VESA: extensión de ISA que solucionaba la restricción de los 16 bits, duplicando el tamaño de bus y con una velocidad de 33 MHz.
PCI: bus que desplazó a los anteriores a partir de 1993; con un tamaño de 32 bits y una velocidad de 33 MHz, permitía una configuración dinámica de los dispositivos conectados sin necesidad de ajustar manualmente los jumpers. PCI-X fue una versión que aumentó el tamaño del bus hasta 64 bits y aumentó su velocidad hasta los 133 MHz.
AGP: bus dedicado, de 32 bits como PCI; en 1997 la versión inicial incrementaba la velocidad hasta los 66 MHz.
PCIe: interfaz serie que desde 2004 empezó a competir contra AGP, llegando a doblar en 2006 el ancho de banda de aquel. No debe confundirse con PCI-X, versión de PCI.