Unidad de procesamiento gráfico

Anuncio
Unidad de procesamiento gráfico
1 Historia
Las modernas GPU son descendientes 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 DireDMA 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 la década de 1980 y principios de
la de 1990, los microprocesadores de propósito general
de alta velocidad fueron muy populares para implementar las GPU más avanzadas. Muchas tarjetas gráficas para
PC 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
Unidad de procesamiento gráfico.
funciones de dibujo rápidas y muchas impresoras láser
contenían un procesador de barrido de imágenes “PostScript” (un caso especial de GPU) corriendo en un proceUnidad de procesamiento gráfico o GPU (Graphics sador RISC como el AMD 29000.
Processing Unit) es un coprocesador dedicado al procesamiento de gráficos u operaciones de coma flotante, pa- Conforme la tecnología de proceso de semiconductores
ra aligerar la carga de trabajo del procesador central en fue mejorando, eventualmente fue posible mover las funaplicaciones como los videojuegos o aplicaciones 3D in- ciones de dibujo y las BitBLT a la misma placa y posteteractivas. De esta forma, mientras gran parte de lo rela- riormente al mismo chip a manera de un controlador de
cionado con los gráficos se procesa en la GPU, la unidad búfer de marcos (frames), tal como VGA. Estos acelecentral de procesamiento (CPU) puede dedicarse a otro radores gráficos de 2D “reducidos” no eran tan flexibles
tipo de cálculos (como la inteligencia artificial o los cálcu- como los basados en microprocesadores, pero eran mucho más fáciles de hacer y vender. La Commodore AMIlos mecánicos en el caso de los videojuegos).
GA fue la primera computadora de producción en masa
La GPU implementa ciertas operaciones gráficas llama- que incluía una unidad blitter y el sistema gráfico IBM
das primitivas optimizadas para el procesamiento gráfi- 8514 fue una de las primeras tarjetas de video para PC
co. Una de las primitivas más comunes para el procesa- en implementar primitivas 2D en hardware.
miento 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 2 Diferencias con la CPU
disponen de gran cantidad de primitivas, buscando mayor
realismo en los efectos.
Si bien en un computador genérico no es posible reemLas GPU están presentes en las tarjetas gráficas.
plazar la CPU por una GPU, hoy en día las GPU son
1
2
muy potentes y pueden incluso superar la frecuencia de
reloj de una CPU antigua (más de 500 megahercios). Pero la potencia de las GPU y su veloz 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
cálculos en el mismo tiempo. Los modelos actuales de
GPU suelen tener cientos de procesadores shader unificados que son capaces de actuar como vertex shaders, y
como pixel shaders, o fragment shaders. De este modo,
una frecuencia de reloj de unos 600 MHz-1 GHz (el estándar hoy en día en las GPU de más potencia), es muy
baja en comparación con lo ofrecido por las CPU (3,84 GHz en los modelos más potentes, no necesariamente
más eficientes), se traduce en una potencia de cálculo mucho mayor gracias a su arquitectura en paralelo.
4 PROGRAMACIÓN DE LA GPU
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 el movimiento
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
píxeles 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 píxeles,
tales como la aplicación de texturas. Cuando se ha realizado todo esto, y antes de almacenar los píxeles 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 píxeles para
su visualización. También pueden encargarse de aplicar
algunos efectos. Tras esto, se almacena la salida en el frame buffer. Ahora hay dos opciones: o tomar directamente
estos píxeles para su representación en un monitor digital,
o generar una señal analógica a partir de ellos, para monitores analógicos. Si es este último caso, han de pasar por
un DAC, Digital-Analog Converter, para ser finalmente
mostrados en pantalla.
Una de las mayores diferencias con la CPU estriba en
su arquitectura. A diferencia del procesador central, que
tiene una arquitectura de von Neumann, la GPU se basa
en el Modelo Circulante. Este modelo facilita el procesamiento en paralelo, y la gran segmentación que posee la
GPU para sus tareas.
4 Programación de la GPU
3 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 píxeles. Por tanto, se establecen el vértice y el píxel
como las principales unidades que maneja 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 introdujo un nivel más entre el hardware y
el software, con la creación de interfaces de programación
de aplicaciones (API) específicas para gráficos, que proporcionaron un lenguaje más homogéneo para los modelos existentes en el mercado. La primera API usada ampliamente fue el estándar abierto OpenGL (Open Graphics
Language), tras el cual Microsoft desarrolló DirectX.
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.
Tras el desarrollo de API, se decidió crear un lenguaje
Inicialmente, a la GPU le llega la información de la CPU más natural y cercano al programador.
3
5
Cálculos de la GPU para propósito general
Se intenta aprovechar la gran potencia de cálculo 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 Purpose GPU, en
sus siglas en inglés).
6
Véase también
• Cg
• Direct3D
• GLSL
• GPGPU
• Gráficos 3D por computadora
• HLSL
• Larrabee
• OpenGL
7
Enlaces externos
•
•
Wikimedia Commons alberga contenido multimedia sobre Unidad de procesamiento gráficoCommons.
• www.amd.com Sitio web oficial de ATI/AMD (en
español)
• http://www.nvidia.es Sitio web oficial de NVIDIA
(en español)
4
8 TEXT AND IMAGE SOURCES, CONTRIBUTORS, AND LICENSES
8 Text and image sources, contributors, and licenses
8.1 Text
• Unidad de procesamiento gráfico Fuente: http://es.wikipedia.org/wiki/Unidad_de_procesamiento_gráfico?oldid=76914380 Colaboradores: Riviera, Dodo, Triku, Dianai, Rondador, Cinabrium, Porao, Rembiapo pohyiete (bot), RobotQuistnix, Mortadelo, Unificacion,
Yrbot, Baifito, FlaBot, Museo8bits, Olea, GermanX, KnightRider, Txo, Eskimbot, Leibnitz, Chlewbot, BOTpolicia, CEM-bot, Thijs!bot,
Alvaro qc, Botones, Isha, Dogor, JAnDbot, Muro de Aguas, Flafus, TXiKiBoT, Biasoli, Cinevoro, VolkovBot, Technopat, MasterNoX,
Matdrodes, Nachocs, Shooke, Barri, AlleborgoBot, Amitie 10g, Muro Bot, SieBot, Ratchet, Marcecoro, Alexaltea, Emmanuel yo, Poco a poco, Alexbot, Roberto Estrada, SilvonenBot, AVBOT, David0811, LucienBOT, Louperibot, Peti610bot, Luckas-bot, Nallimbot,
Ptbotgourou, FariBOT, Jotterbot, Erud, SuperBraulio13, Xqbot, Jkbw, Schekinov Alexey Victorovich, Rubinbot, Igna, RedBot, TorQue
Astur, Txomon, Acratta, LlamaAl, Elvisor, Creosota, Makecat-bot, Legobot, Candon777, Addbot, Balles2601, ALANMORPHLING y
Anónimos: 48
8.2 Images
• Archivo:6600GT_GPU.jpg Fuente: http://upload.wikimedia.org/wikipedia/commons/4/44/6600GT_GPU.jpg Licencia: CC-BY-SA-3.0
Colaboradores: Trabajo propio Artista original: Berkut
• Archivo:Commons-logo.svg Fuente: http://upload.wikimedia.org/wikipedia/commons/4/4a/Commons-logo.svg Licencia: Public domain
Colaboradores: This version created by Pumbaa, using a proper partial circle and SVG geometry features. (Former versions used to be slightly
warped.) Artista original: SVG version was created by User:Grunt and cleaned up by 3247, based on the earlier PNG version, created by
Reidab.
8.3 Content license
• Creative Commons Attribution-Share Alike 3.0
Descargar