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.
No hay comentarios:
Publicar un comentario