# Tensor Processing Unit

Una tensor processing unit (TPU) è un acceleratore IA costituito da un circuito ASIC sviluppato da Google per applicazioni specifiche nel campo delle reti neurali. La prima tensor processing unit è stata presentata nel maggio del 2016 in occasione della Google I/O; la società specificò che le TPU erano già impiegate all'interno dei propri data center da oltre un anno. Il circuito è stato appositamente progettato per la libreria open source TensorFlow. La stessa Google continua ad impiegare le classiche CPU e GPU per altre tipologie di applicazioni orientate all'apprendimento automatico.

## Descrizione

Google ha pensato per questo tipo di processore a una architettura a specifico dominio progettata come un processore-matrice esclusivamente pensato per il lavoro per reti neurali a velocità incredibilmente elevate consumando molta meno energia e all'interno di uno spazio fisico ridotto. In questa maniera viene ridotto grandemente il collo di bottiglia dell'architettura di von Neumann perché Il compito principale del processore è di calcolare matrici, approcciando con una architettura ad array sistolico può usare migliaia di moltiplicatori e addendi e connetterli direttamente per formare una matrice fisica per questi operatori. Per la seconda generazione di TPU ci sono due array sistolici da 128 × 128 che aggregano 32768 ALU per valori a 16 bit in virgola mobile per singolo processore.

## Prodotti
### Prima generazione

La TPU di prima generazione è un motore di moltiplicazione a matrice a 8 bit che opera con le istruzioni CISC dalla CPU host tramite il bus PCIe 3.0. Il TPU è prodotto con un processo a 28 nm e la dimensione esatta della matrice non è nota, ma è meno della metà di Haswell. La velocità di clock è di 700 MHz e la potenza di progettazione termica (consumo energetico) è di 28-40 W. Il TPU ha una memoria chip da 28 MiB e un accumulatore da 4 MiB a 32 bit che ottiene i risultati di 65536 accumulatori a 8 bit. Le istruzioni eseguono la trasmissione / ricezione dei dati con l'host, la moltiplicazione / convoluzione della matrice e l'applicazione della funzione di attivazione.

### Seconda generazione

Il TPU di seconda generazione è stato annunciato a maggio 2017. Google ha dichiarato che il design di TPU di prima generazione era limitato dalla larghezza di banda di memoria e l'utilizzo di 16 GB di memoria ad alta larghezza di banda nel design di seconda generazione ha aumentato la larghezza di banda a 600 GB / se le prestazioni a 45 teraFLOPS I TPU sono quindi disposti in moduli a quattro chip con prestazioni di 180 teraFLOPS, quindi 64 di questi moduli sono assemblati in pod da 256 chip con prestazioni di 11,5 petaFLOPS. In particolare, mentre i TPU di prima generazione erano limitati a numeri interi, I TPU di seconda generazione possono anche essere calcolati in virgola mobile, il che rende utili i TPU di seconda generazione sia per l'addestramento che per l'inferenza dei modelli di apprendimento automatico. Google ha dichiarato che questi TPU di seconda generazione saranno disponibili su Google Compute Engine per l'uso in applicazioni TensorFlow.

### Terza generazione

Il TPU di terza generazione è stato annunciato l'8 maggio 2018. Google ha annunciato che i processori stessi sono due volte più potenti dei TPU di seconda generazione e sarebbero stati distribuiti in pod con un numero di chip quattro volte superiore rispetto alla generazione precedente. 8 volte di aumento delle prestazioni per pod (con un massimo di 1.024 chip per pod) rispetto alla distribuzione TPU di seconda generazione.