# GPU

L'unità di elaborazione grafica (in acronimo GPU, dall'inglese Graphics Processing Unit), è un processore progettato per accelerare la creazione di immagini in un frame buffer, destinato all'output su un dispositivo di visualizzazione. Le GPU vengono utilizzate in sistemi embedded come telefoni cellulari, personal computer e console di gioco. In un personal computer una GPU può essere presente su scheda video o incorporata sulla scheda madre, mentre in alcune CPU sono incorporate nel die della CPU stessa.
Negli anni settanta il termine GPU descriveva un'unità di elaborazione programmabile, che lavorava indipendentemente dalla CPU ed era responsabile della manipolazione e dell'output della grafica. Successivamente, nel 1994, Sony ha utilizzato il termine in riferimento alla GPU progettata da Toshiba per la console PlayStation. Il termine GPU è stato reso popolare da NVIDIA nel 1999, che ha commercializzato la GeForce 256 come "la prima GPU al mondo".

## Descrizione

Le GPU moderne, sebbene operino a frequenze più basse delle CPU, sono molto più veloci di esse nell'eseguire i compiti in cui sono specializzate.
La GPU attualmente entra pesantemente in funzione solo nell'accelerazione 3D; nell'accelerazione 2D i dati vengono elaborati dalla CPU e allocati dalla GPU in una parte della memoria chiamata framebuffer; da lì, il RAMDAC (random access memory digital-to-analog converter) legge i valori di colore da assegnare ai singoli pixel e genera il segnale per lo schermo.
Diversamente, quando viene elaborata un'immagine 3D, la CPU del computer si occupa solo del calcolo delle coordinate geometriche dei vertici dei poligoni che compongono gli oggetti della scena, e lascia alla GPU il compito di riempire le facce formate da questi vertici (mesh) e del calcolo delle ombre e degli effetti grafici da applicare ai poligoni, sgravandosi da pesanti operazioni di calcolo. Dopo di ciò i dati risultanti verranno normalmente posizionati nel frame buffer, per poi passare per il RAMDAC e arrivare alla resa grafica.
Dal punto di vista terminologico abbiamo tre soluzioni con architetture diverse:
* GPU dedicata: è presente una scheda video specifica;
* GPU integrata: la sezione grafica è condivisa con la CPU, ossia è sul chipset;
* GPU doppia: GPU integrata (per applicazioni video ordinarie) e GPU dedicata (per flussi video pesanti: resa grafica, giochi, ecc.); questa soluzione può essere configurata con commutazione automatica oppure manuale (ovvero l'utente decide quale scheda utilizzare), agendo sul BIOS o meglio sullo strumento relativo alla sezione grafica.

## Storia

Le moderne GPU discendono dai chip grafici monolitici di fine anni settanta e degli anni ottanta.
Questi chip non avevano la funzione BitBLT, o l'avevano solo sotto forma di sprite, e solitamente non avevano funzioni per il disegno di forme.
Alcune GPU potevano eseguire più operazioni in una display list e usare il DMA per ridurre il carico sulla CPU; uno dei primi esempi è stato il co-processore ANTIC, usato sul computer Atari 800 e Atari 5200. Alla fine degli anni ottanta e all'inizio degli anni novanta, le GPU di fascia alta venivano spesso implementate con microprocessori non specializzati ad alta velocità; alcune schede grafiche (molto costose) per PC e workstation usavano chip DSP (digital signal processor) (come la serie TMS340 della TI) per implementare funzioni veloci di disegno, e molte stampanti laser venivano fornite con un elaboratore di immagini raster PostScript (un caso speciale di una GPU) funzionante su una CPU RISC come l'AMD 29000.
Man mano che la tecnologia di costruzione di chip migliorava, è diventato possibile spostare sia le funzioni di disegno sia la funzione BitBLT sulla stessa scheda (e, in seguito, nello stesso chip) insieme a un normale controllore di frame buffer come il VGA; questi "acceleratori 2D" semplificati non erano così flessibili come le GPU basate su microprocessore, ma erano molto più facili da costruire e da vendere. L'Amiga è stato il primo computer per il mercato di massa a includere un blitter nel suo hardware video e il sistema grafico IBM 8514 è stato una delle prime schede video per PC a implementare nell'hardware le primitive 2D.
All'inizio degli anni '90, la diffusione di Microsoft Windows ha generato un grande interesse verso la grafica raster 2D ad alta velocità e alta risoluzione (che in passato era stato il dominio delle workstation Unix e dei Macintosh Apple). Per il mercato dei PC, la dominanza di Windows ha significato che i produttori di dispositivi grafici per PC adesso potevano focalizzare gli sforzi di sviluppo su una sola interfaccia di programmazione, la GDI.
Nel 1991, S3 Graphics ha introdotto il primo acceleratore 2D su singolo chip, l'S3 86C911 (il cui nome è stato ispirato dall'autovettura Porsche 911 come indicazione dell'aumento di velocità che prometteva). L'86C911 ha generato molti imitatori; nel 1995, tutti i principali produttori di chip grafici per PC avevano aggiunto il supporto per l'accelerazione 2D ai loro chip. Entro questo tempo, gli acceleratori per Windows non programmabili avevano sorpassato, in termini di prestazioni di Windows, i costosi coprocessori grafici a uso generico, per cui i co-processori scomparvero dal mercato dei PC.
Nel 1999 fu introdotta la prima generazione di schede grafiche GeForce prodotte dalla NVIDIA Corporation, pensate appositamente per la grafica 3D. Un anno dopo ATI Technologies introdusse il primo chip della famiglia Radeon. Questi due brand acquistarono sempre più quote di mercato e oggi si spartiscono il mercato delle schede grafiche per i videogiochi.
Con l'avvento dell'API DirectX versione 8 e di simili funzionalità in OpenGL, le GPU hanno aggiunto l'ombreggiatura (shading) programmabile alle loro funzioni. Ogni pixel poteva adesso essere elaborato da un breve programma che poteva ricevere in input delle texture e ogni vertice geometrico poteva analogamente essere elaborato da un breve programma prima di essere proiettato sullo schermo. Nel 2003, con l'introduzione della NVIDIA GeForce FX (detta anche NV30), gli ombreggiatori (shader) di pixel e di vertici potevano realizzare dei cicli, delle lunghe operazioni a virgola mobile, e in generale stavano diventando rapidamente flessibili quanto una CPU dedicata all'elaborazione d'immagini raster.
L'avvento dell'interfaccia AGP (accelerated graphics port), con standard di interfaccia 2x - 4x e 8x, fece in modo di consentire una maggiore banda passante di informazioni per permettere un accesso diretto alla memoria fisica del computer da parte della scheda grafica, in modo da poter gestire texture e oggetti 3D di grandi dimensioni, garantendo una maggiore velocità nelle operazioni di calcolo grafico. Le velocità sono di, rispettivamente, 533 MB/s per AGP 1x/2x, 1066 MB/s per AGP 4x e 2133 MB/s per AGP 8x.
L'avvento del PCI Express portò all'inesorabile declino dell'interfaccia AGP, garantendo velocità di trasferimento di molto superiori e permettendo l'utilizzo di schede grafiche con maggiori richieste di consumi energetici. Questo portò alla costruzione di chip grafici molto più evoluti dei precedenti, aprendo la strada a una sempre più realistica grafica in continuo sviluppo sia per usi professionali sia per usi domestici.
L'ultima versione oggi disponibile di DirectX è la 12, integrata in Windows 10, con un aggiornamento in Vista, che rappresenta un ulteriore passo avanti nella programmabilità delle GPU, grazie all'introduzione di shader unificati. Con l'upgrade a DirectX 10 e 11 è inoltre possibile godere degli effetti video di Tessellation (generazione automatica scalare di poligoni su superfici piane e no) che permette di generare minuziosi particolari delle Texture senza sconvolgere lo scenario in modo massivo. Inoltre, con l'avvento dei Blu-ray Disc la GPU dovrà essere progettata per gestire il segnale e le chiavi AACS che servono per verificare l'autenticità del film. I nuovi chip grafici godono di upscaling su video di scarsa qualità, di maggiore velocità di riproduzione dei filmati e dei contenuti DVD oltre i 25 fps e di un complessivo miglioramento dei colori, delle luci e dei rapidi cambi di scena.
Oggi le GPU, ad alto parallelismo, hanno cominciato a contendere alla CPU funzioni computazionali, e un sottosettore della ricerca, chiamato GPGPU (sigla di General Purpose Computing on GPU), ha trovato impiego in vari campi come l'esplorazione petrolifera, l'elaborazione di immagini scientifiche e perfino la determinazione del prezzo delle opzioni sulle azioni di borsa. Le tecnologie più note per l'elaborazione GPGPU sono NVIDIA CUDA, ATI CTM (precedentemente noto come ATI Stream) e OpenCL.

### Crisi da carenza

Nel 2020 si è assistito a una carenza di reperibilità di schede video, causata da un duplice motivo: crisi dei materiali e della logistica causata dal COVID-19 e la crescente richiesta dei miner di criptovalute