Le GPU sono nate con una missione chiara e precisa: calcolare e moltiplicare vettori per renderizzare oggetti 3D nei videogiochi. Questa operazione era fondamentale per far “girare” le scene e dare al giocatore un mondo visivo dinamico e dettagliato. Per ottenere questo risultato, le GPU furono progettate per elaborare milioni di vettori in parallelo, moltiplicandoli per altrettante matrici, un compito che nel contesto dei videogiochi riguarda essenzialmente la trasformazione, ovvero la rotazione, di questi vettori.

Poi sono arrivati i modelli di reti neurali, che però non avevano bisogno di ruotare i vettori. Invece, necessitavano della capacità di moltiplicare molte matrici: ogni matrice rappresentava i parametri del modello e gli input del dataset. Le reti neurali profonde si basano proprio su una serie di trasformazioni successive che passano attraverso strati di nodi, richiedendo in modo intenso la capacità delle GPU di moltiplicare vettori e matrici.

Infine, l’avvento dei modelli di linguaggio di grandi dimensioni (LLM) ha portato a un ritorno alle origini delle GPU, almeno sotto certi aspetti. Gli LLM, come GPT e BERT, richiedono non solo moltiplicazioni intensive di matrici, ma applicano anche trasformazioni basate su rotazioni, attraverso tecniche come il “Relative Position Encoding” (RoPE). In questo schema, ogni token o parola di input viene rappresentato come un vettore e “ruotato” rispetto ai suoi vicini nella sequenza di input, simulando la loro posizione relativa nel testo.

Quindi, le GPU si trovano oggi a svolgere un compito non troppo diverso da quello per cui erano state originariamente progettate: eseguire calcoli su vettori e matrici per creare esperienze interattive, solo che oggi queste esperienze interattive sono costruite con il linguaggio e non con grafica 3D.