Unidade de Procesamento Gráfico

Na Galipedia, a wikipedia en galego.

A Unidade de Procesamento Gráfico (Graphics Processing Unit) ou GPU (tamén coñecida como Unidade de Procesamento Visual (Visual Processing Unit) ) é un microprocesador (ou acelerador gráfico) para computadores persoais, videoconsolas e outros dispositivos que requiran de gran cantidade de imaxes xeradas polo computador. As GPUs modernas son moi eficientes manipulando e mostrando gráficos por computador, e a súa estrutura de alto paralelismo fainas moito máis efectivas que as típicas CPUs, para un amplo rango de algoritmos complexos.

Unha GPU implementa un número de operacións gráficas primitivas nun modo que as fai correr moito máis rapidas que debuxar directamente na pantalla co CPU da máquina. As operacións máis comúns para os primeiros gráficos 2D inclúen o copiado rectangular de zonas de memoria (como as xanelas ou os videoxogos), coñecido polo termino ingles de "blitter", e tamén operacións de recheo de rectangulos, triangulos, circulos, e demáis. As GPUs modernas levan soporte para gráficos 3D, como ordeacións dos obxectos, iluminación, transformacións xeométricas, etc, e tamén capacidades de vídeo dixital.

Índice

[editar] Historia

As modernas GPU son descendentes dos chips gráficos monolíticos de finais da década de 1970 e 1980. Estes chips tiñan soporte BitBLT limitado na forma de sprites (se é que tiñan dito soporte do todo), e usualmente non tiñan soporte para debuxo de figuras. Algúns GPU podían executar varias operacións nunha lista de "display" e podían usar DMA para reducir a carga no procesador anfitrión; un exemplo temperán é o coprocesador ANTIC usado no ATARI 800 e o ATARI 5200. Cara a finais dos 80 e principios dos 90, microprocesadores de propósito xeral de alta velocidade foron moi populares para implementar os GPUs máis avanzados. Moitas (moi caras) cartóns gráficos para PCs e Estacións de Traballo usaban Procesadores Dixitais de Sinais (DSP polas súas siglas en inglés) tales como a serie TMS340 de Texas Instruments, para implementar funcións de debuxo rápidas e moitas impresoras laser contiñan un procesador de varrido de imaxes "PostScript" (un caso especial de GPU) correndo nun procesador RISC como o AMD 29000.

Conforme a tecnoloxía de proceso de semicondutores foi mellorando, eventualmente foi posible mover as funcións de debuxo e as BitBLT á mesma placa e posteriormente ao mesmo chip a xeito dun controlador de buffer de "marcos"(frames), tal como VGA. Estes aceleradores gráficos de 2D "reducidos" non eran tan flexibles como os baseados en microprocesadores, pero eran moito máis fáciles de facer e vender. A Commodore AMIGA foi a primeira computadora de produción en masa que incluía unha unidade blitter e o sistema gráfico IBM 8514 foi unha dos primeiros cartóns de vídeo para PC en implementar primitivas 2D en hardware.

[editar] Diferenzas coa CPU

Aínda que nun computador xenérico non é posible substituír a CPU por unha GPU, hoxe en día as GPU son moi potentes e poden ata superar a frecuencia de reloxo dunha CPU antiga (máis de 500MHz). Pero a potencia das GPU e o seu dramático ritmo de desenvolvemento recente débense a dous factores diferentes. O primeiro factor é a alta especialización das GPU, xa que ao estar pensadas para desenvolver unha soa tarefa, é posible dedicar máis silicio no seu deseño para levar a cabo esa tarefa máis eficientemente. Por exemplo, as GPU actuais están optimizadas para cálculo con valores en coma flotante, predominantes nos gráficos 3D.

Doutra banda, moitas aplicacións gráficas levan un alto grao de paralelismo inherente, ao ser as súas unidades fundamentais de cálculo (vértices e píxeles) completamente independentes. Xa que logo, é unha boa estratexia usar a forza bruta nas GPU para completar máis calculos no mesmo tempo. Os modelos actuais de GPU adoitan ter unha media ducia de procesadores de vértices (que executan vertex shaders), e ata dous ou tres veces máis procesadores de fragmentos ou píxeles (que executan fragment shaders). Deste xeito, unha frecuencia de reloxo duns 500-600MHz (o estándar hoxe en día nas GPU de máis potencia), moi baixa en comparación co ofrecido polas CPU (3.8-4 GHz nos modelos máis potentes[pero non o máis eficientes]), tradúcese nunha potencia de cálculo moito maior grazas á súa arquitectura en paralelo.

Unha das maiores diferenzas coa CPU estriba na súa arquitectura. A diferenza do procesador central, que ten unha arquitectura Von Neumann, a GPU baséase no Modelo Circulante. Este modelo facilita o procesamiento en paralelo, e a gran segmentación que posúe a GPU para as súas tarefas.

[editar] Arquitectura da GPU

Unha GPU está altamente segmentada, o que indica que posúe gran cantidade de unidades funcionais. Estas unidades funcionais pódense dividir principalmente en dúas: aquelas que procesan vértices, e aquelas que procesan píxeles. Xa que logo, establécense o vértice e o píxel como as principais unidades que manexa a GPU.

Adicionalmente, e non con menos importancia, atópase a memoria. Esta destaca pola súa rapidez, e vai xogar un papel relevante á hora de almacenar os resultados intermedios das operacións e as texturas que se utilicen.

Inicialmente, á GPU chégalle a información da CPU en forma de vértices. O primeiro tratamento que reciben estes vértices realízase no vertex shader. Aquí realízanse transformacións como a rotación ou a rotación das figuras. Tras isto, defínese a parte destes vértices que se vai a ver (clipping), e os vértices transfórmanse en píxeles mediante o proceso de rasterización. Estas etapas non posúen unha carga relevante para a GPU.

Onde si se atopa o principal pescozo de botella do chip gráfico é no seguinte paso: o pixel shader. Aquí realízanse as transformacións referentes aos píxeles, talles como a aplicación de texturas. Cando se realizou todo isto, e antes de almacenar os píxeles na caché, aplícanse algúns efectos como o antialiasing, blending e o efecto néboa.

Outras unidades funcionais chamadas ROP toman a información gardada na caché e preparan os píxeles para o seu visualización. Tamén poden encargarse de aplicar algúns efectos. Tras isto, almacénase a saída no frame buffer. Agora hai dúas opcións: ou tomar directamente estes píxeles para a súa representación nun monitor dixital, ou xerar unha sinal analóxico a partir deles, para monitores analóxicos. Se é este último caso, han de pasar por un DAC, Dixital-Analog Converter, para ser finalmente mostrados en pantalla.

[editar] Programación da GPU

Ao comezo, a programación da GPU realizábase con chamadas a servizos de interrupción da BIOS. Tras isto, a programación da GPU empezouse a facer no linguaxe ensamblador específico a cada modelo. Posteriormente, situouse un nivel máis entre o hardware e o software, deseñando as API (Application Program Interface), que proporcionaban unha linguaxe máis homogéneo para os modelos existentes no mercado. O primeiro API usado amplamente foi estándar aberto OpenGL (Open Graphics Language), tras o cal Microsoft desenvolveu DirectX.

Tras o desenvolvemento de APIs, decidiuse crear unha linguaxe máis natural e próximo ao programador, é dicir, desenvolver un linguaxes de alto nivel para gráficos. Por iso, de OpenGL e DirectX xurdiron estas propostas. A linguaxe estándar de alto nivel, asociado á biblioteca OpenGL é o "OpenGL Shading Language", GLSL, implementado en principio por todos os fabricantes. A empresa californiana NVidia creou un lenguage propietario chamado Cg (do inglés, "C for graphics"), con mellores resultados que que GLSL nas probas de eficiencia. En colaboración con NVidia, Microsoft desenvolveu a súa "High Level Shading Language", HLSL, practicamente idéntico a Cg, pero con certas incompatibilidades menores.

[editar] Fabricantes de GPUs

[editar] Ligazóns Externas

[editar] Véase tamén

Ferramentas persoais