# Pixel Visual Core

Il Pixel Visual Core (PVC) è una serie di image processors System in Package (SiP) basato su ARM progettato da Google . Il PVC è un'architettura multi-core a dominio specifico per Image, Vision e AI per i dispositivi mobili e in futuro per IoT. È apparso per la prima volta nel Google Pixel 2 e 2 XL introdotto nel 19 Ottobre 2017. È usato anche nel Google Pixel 3 e 3 XL.

## Storia

Google precedentemente usava le CPU Qualcomm Snapdragon, GPU, IPU, e DSP per gestire l'image processing dei loro dispositivi Google Nexus e Google Pixel. Con la crescente importanza delle tecniche di computational photography, Google ha sviluppato il Pixel Visual Core (PVC). Google afferma che il PVC usa meno potenza di quella usata da CPU e GPU mantenendo la completa programmabilità, diversamente dall'altro application-specific integrated circuit (ASIC), la Tensor Processing Unit (TPU). Infatti i dispositivi mobili classici hanno un image signal processor (ISP) che ha una funzione prefissata di image processing. Invece il PVC ha una funzionalità flessibile e programmabili, non limitata solo all'image processing.
Il PVC nel Google Pixel 2 e 2 XL è marcato come SR3HX X726C502.
Il PVC nel Google Pixel 3 and 3 XL è marcato come SR3HX X739F030.
Grazie al PVC, il Pixel 2 e il Pixel 3 hanno ottenuto un DxOMark mobile di 98 e 101. L'ultimo ha ottenuto, a pari merito dell'iPhone XR, lo score DxoMark più alto per un telefono a singola fotocamera.

## Il software del Pixel Visual Core

Un tipico programma di image-processing del PVC è scritto in Halide. Halide è un linguaggio a specifico dominio che permette all'utente di disaccoppiare l'algoritmo dallo scheduling. In questo modo lo sviluppatore può scrivere codice ottimizzato per l'architettura su cui andrà ad eseguire il programma. Attualmente il PVC supporta solo un sottoinsieme del linguaggio, senza operazioni a virgola mobile (floating point) e con pattern di accessi alla memoria limitati.

## Pixel Visual Core ISA

Il PVC due tipi Instruction Set Architecture (ISA): uno virtuale e uno fisico. Prima di tutto, il programma ad alto livello è compilato nel virtual ISA (vISA), ispirato da RISC-V ISA, che astrae completamente dalla generazione dell'architettura. Poi, il programma in vISA è compilato nel physical ISA (pISA), che è un ISA VLIW. Quest'ultimo passo considera i parametri dell'architettura specifica, come dimensione dell'array di PEs, dimensione dell STP etc., e esplica i trasferimenti di memoria. Il disaccoppiamento del vISA dal pISA rende il primo cross-architetturale e indipendente dalla generazione, mentre il pISA può essere compilato offline o tramite compilazione JIT

## L'architettura del Pixel Visual Core

Il Pixel Visual Core è progettato per essere un'architettura multi-core scalabile e efficiente dal punto di vista energetico. Il core di un PVC è la Image Processing Unit (IPU), un'unità programmabile specifica per l'image processing.

### Image Processing Unit (IPU)

Il core IPU è composto da uno Stencil Processor (STP), un Line Buffer Pool (LBP) e una NoC. L'STP è principalmente dotato di un array 2-D SIMD di PEs che possono eseguire computazioni stencil, ovvero su una piccola regione di pixels. Sebbene sia simile agli array sistolici e computazioni di tipo wavefront, l'STP ha un trasferimento dati controllato via software.

#### Line Buffer Pool (LBP)

Dal momento che una delle operazioni più costose dal punto di vista energetico è l'accesso a DRAM, ogni STP ha dei buffer temporanei per aumentare la località dei dati, ovvero i LBP. Il LBP è una coda FIFO 2-D che permette dimensioni diverse in scrittura e lettura. Il LBP ha un modello single-producer multi-consumer. Ciascun LBP può avere otto LB logici e uno per operazioni di input-output DMA. A causa dell'alta complessità del sistema di memoria, i progettatori del PVC affermano che il controllore del LBP è stato uno dei componenti più difficili da progettare. La NoC ha una topologia ad anello e viene usata solo per comunicare con i core vicini per preservare la natura computazionale per costi energetici.

#### Stencil Processor (STP)

L'STP ha un array di PEs 2-D, ad esempio 16x16 di full PEs e quattro lane di PEs semplificate dette "halo". L'STP ha un normale processore scalare, detto scalar lane (SCL), che aggiunge le istruzioni di controllo e una piccola memoria istruzioni. L'ultimo componente dell'STP è un'unità di load-store chiamata Sheet Generator (SHG), dove lo "sheet" è un'unità di accesso a memoria del PVC.

## Sommario di progettazione dello SR3HX

Il SR3HX PVC ha una CPU ARMv8a ARM Cortex-A53 a 64-bit, 8 core Image Processing Unit (IPU), 512 MB LPDDR4, MIPI, PCIe. I core IPU hanno ciascuno 512 Arithmetic Logic Units (ALUs) di 256 processing elements (PEs) organizzate come un array 16 x 16 2-D con un ISA VLIW personalizzato. Ci sono 2 ALUs a 16-bit per PE che possono operare in tre modalità distinte: indipendenti, combinate, fuse. Il SR3HX PVC è fabbricato come SiP da TSMC usando la loro tecnologia a 28HPM HKMG. È stato progettato per 4 anni in collaborazione con Intel (nome in codice: Monette Hill). Google sostiene che il SR3HX PVC è da 7 a 16x più efficiente dal punto di vista energetico di uno Snapdragon 835 e che può eseguire tre miliardi di operazioni al secondo, l'HDR+ può andare 5x più veloce richiedendo meno di un ventesimo di energia dello Snapdragon 835.Supporta Halide per l'image processing e TensorFlow per il machine learning.. Il chip attuale va a 426 MHz e la singola IPU può eseguire più di 1 TeraOPS.