Unidad de procesamiento grafico.
Una
unidad de procesamiento grafico
(del ingles
graphics processing unit
,
GPU
) o
procesador grafico
es un
coprocesador
dedicado al procesamiento de graficos u operaciones de coma flotante, para aligerar la carga de trabajo del
procesador/CPU
central en aplicaciones como los videojuegos o aplicaciones 3D interactivas. De esta forma, mientras gran parte de lo relacionado con los graficos se procesa en la GPU, la
unidad central de procesamiento
(CPU) puede dedicarse a otro tipo de calculos (como la
inteligencia artificial
o los calculos
mecanicos
en el caso de los
videojuegos
).
La GPU implementa ciertas operaciones graficas llamadas primitivas optimizadas para el procesamiento grafico. Una de las primitivas mas comunes para el procesamiento grafico en 3D es el
antialiasing
, que suaviza los bordes de las figuras para darles un aspecto mas realista. Adicionalmente existen primitivas para dibujar rectangulos, triangulos, circulos y arcos. Las GPU actualmente disponen de gran cantidad de primitivas, buscando mayor realismo en los efectos.
Las GPU estan presentes en las
tarjetas graficas
.
Historia
[
editar
]
Las modernas GPU son descendientes de los chips graficos monoliticos de finales de la decada de 1970 y 1980. Estos chips tenian soporte
BitBLT
limitado en la forma de
sprites
(si es que tenian dicho soporte del todo), y usualmente no tenian soporte para dibujo de figuras. Algunos GPU podian ejecutar varias operaciones en una lista de
display
y podian usar
DMA
para reducir la carga en el procesador anfitrion; un ejemplo temprano es el coprocesador ANTIC usado en el
Atari 800
y el
Atari 5200
. Hacia finales de la decada de 1980 y principios de la de 1990, los microprocesadores de proposito general de alta velocidad fueron muy populares para implementar las GPU mas avanzadas. Muchas tarjetas graficas para PC y estaciones de trabajo usaban
procesadores digitales de senales
(DSP por sus siglas en ingles) tales como la serie TMS340 de Texas Instruments, para implementar funciones de dibujo rapidas y muchas
impresoras laser
contenian un procesador de barrido de imagenes "PostScript" (un caso especial de GPU) corriendo en un procesador
RISC
como el AMD 29000.
Diferencias con la CPU
[
editar
]
Si bien en un computador generico no es posible reemplazar la
CPU
por una GPU, hoy en dia las GPU son muy potentes y pueden incluso superar la
frecuencia de reloj
de una
CPU
antigua (mas de 1.5
gigahercios
). 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 especializacion de las GPU, ya que al estar pensadas para desarrollar una sola tarea, es posible dedicar mas
silicio
en su diseno para llevar a cabo esa tarea mas eficientemente. Por ejemplo, las GPU actuales estan optimizadas para calculo con valores en
coma flotante
, predominantes en los
graficos 3D
.
Por otro lado, muchas aplicaciones graficas conllevan un alto grado de
paralelismo
inherente, al ser sus unidades fundamentales de calculo (
vertices
y
pixeles
) completamente independientes. Por tanto, es una buena estrategia usar la
fuerza bruta
en las GPU para completar mas calculos 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 1-1.9 GHz (el estandar hoy en dia en las GPU de mas potencia), es muy baja en comparacion con lo ofrecido por las CPU (3.8-5 GHz en los modelos mas potentes, no necesariamente mas eficientes), se traduce en una potencia de calculo 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 de von Neumann
, la GPU se basa en el Modelo Circulante. Este modelo facilita el procesamiento en paralelo, y la gran segmentacion que posee la GPU para sus tareas.
Arquitectura de la GPU
[
editar
]
Una GPU esta altamente segmentada, lo que indica que posee gran cantidad de unidades funcionales. Estas unidades funcionales se pueden dividir principalmente en dos: aquellas que procesan
vertices
(renderizador), y aquellas que procesan
pixeles
(
rasterizador
). Por tanto, se establecen el vertice y el
pixel
como las principales unidades que maneja la GPU.
Adicionalmente, y no con menos importancia, se encuentra la
memoria
. Esta destaca por su rapidez, y va a desempenar un papel relevante a la hora de almacenar los resultados intermedios de las operaciones y las texturas que se utilicen.
Inicialmente, a la GPU le llega la informacion de la
CPU
en forma de vertices. El primer tratamiento que reciben estos vertices se realiza en el
vertex shader
. Aqui se realizan transformaciones como la rotacion o el movimiento de las figuras. Tras esto, se define la parte de estos vertices que se va a ver (
clipping
), y los vertices se transforman en
pixeles
mediante el proceso de rasterizacion. Estas etapas no poseen una carga relevante para la GPU.
Donde si se encuentra el principal cuello de botella del
chip
grafico es en el siguiente paso: el
pixel shader
. Aqui se realizan las transformaciones referentes a los pixeles, tales como la aplicacion de texturas. Cuando se ha realizado todo esto, y antes de almacenar los pixeles en la
cache
, se aplican algunos efectos como el
antialiasing
,
blending
y el efecto niebla.
Otras unidades funcionales llamadas unidades de salida de renderizado (ROP,
raster operations pipeline
) toman la informacion guardada en la cache y preparan los pixeles para su visualizacion. Tambien pueden encargarse de aplicar algunos efectos. Tras esto, se almacena la salida en el bufer de fotogramas. Ahora hay dos opciones: o tomar directamente estos pixeles para su representacion en un monitor digital, o generar una
senal analogica
a partir de ellos, para monitores analogicos. Si es este ultimo caso, han de pasar por un
DAC
,
digital-analog converter
, para ser finalmente mostrados en pantalla.
Programacion de la GPU
[
editar
]
Al inicio, la programacion de la GPU se realizaba con llamadas a servicios de
interrupcion
de la
BIOS
. Tras esto, la programacion de la GPU se empezo a hacer en el
lenguaje ensamblador
especifico a cada modelo. Posteriormente, se introdujo un nivel mas entre el hardware y el
software
, con la creacion de
interfaces de programacion de aplicaciones
(API) especificas para graficos, que proporcionaron un lenguaje mas homogeneo para los modelos existentes en el mercado. La primera API usada ampliamente fue el estandar abierto
OpenGL
(Open Graphics Language), tras el cual Microsoft desarrollo
DirectX
.
Tras el desarrollo de estas API, se decidio crear un lenguaje mas proximo al natural utilizado por el programador.
Una caracteristica a remarcar de las tarjetas graficas NVIDIA, el lenguaje de programacion maquina debe estar introducido sobre la base de texto unicode 16, dado a la arquitectura de los microchips que utilizan desde la serie GeForce GTX 700.
Calculos de la GPU para proposito general
[
editar
]
Se intenta aprovechar la gran potencia de calculo de las GPU para aplicaciones no relacionadas con los graficos, en lo que recientemente se viene a llamar
GPGPU
, o GPU de proposito general (
general purpose GPU
, por sus siglas en ingles).
Las GPUs y la quimica cuantica
[
editar
]
La
quimica cuantica
es una de las disciplinas donde se necesita una gran potencia de calculo. Por supuesto que han sido reportadas varias aplicaciones donde las GPUs han sido utilizadas. Varias de esas aplicaciones estan relacionadas con la solucion de las
ecuaciones de Kohn-Sham
, dentro de la teoria de funcionales de la densidad, y la solucion de las
ecuaciones de Hartree-Fock
.
[
1
]
Tambien han sido reportadas aplicaciones relacionadas con metodos basados en la
funcion de onda
que estiman la correlacion electronica,
[
2
]
o
energias de ionizacion
.
[
3
]
[
4
]
La potencia de las GPUs se ha evidenciado con aplicaciones relacionadas con el modelo de
atomos
en
moleculas
.
[
5
]
Vease tambien
[
editar
]
Referencias
[
editar
]
- ↑
I. S. Ufimtsev and T. J. Martinez.
Graphical Processing Units for Quantum Chemistry
.
Computing in Science and Engineering
,
10
, 26-34 (2008)
DOI: 10.1109/MCSE.2008.148
- ↑
Javier Carmona-Espindola, Isaias Alcalde-Segundo, Rubicelia Vargas and Jorge Garza.
Many-Body Perturbation Theory to Second Order Applied on Confined Helium Like Atoms
.
In
COMPUTATIONAL AND EXPERIMENTAL CHEMISTRY: Developments and applications
. CRC Press, New Jersey, 2013.
- ↑
Erwin Garcia-Hernandez, Cecilia Diaz-Garcia, Rubicelia Vargas and Jorge Garza.
Implementation of the electron propagator to second order on GPUs to estimate the ionization potentials of confined atoms
.
J. Phys. B: At. Mol. Opt. Phys
.
47
185007 (7pp) (2014).
DOI:10.1088/0953-4075/47/18/185007
,
- ↑
Erwin Garcia-Hernandez, Cecilia Diaz-Garcia, Rubicelia Vargas and Jorge Garza.
Four-index integral transformation in many-body perturbation theory and electron propagator to second order on GPUs for confined atoms
.
AIP Conf. Proc.
1558
1528-1531 (2013).
DOI: 10.1063/1.4825814
- ↑
Raymundo Hernandez-Esparza, Sol-Milena Mejia-Chica, Andy D. Zapata-Escobar, Alfredo Guevara-Garcia, Apolinar Martinez-Melchor, Julio-M. Hernandez-Perez, Rubicelia Vargas, and Jorge Garza.
Grid-Based Algorithm to Search Critical Points, in the Electron Density, Accelerated by Graphics Processing Units
.
Journal of Computational Chemistry
.
35
2272-2278 (2014).
DOI:10.1002/jcc.23752
Enlaces externos
[
editar
]