Variable Symmetric Multiprocessing
Il vSMP (Variable Symmetric Multiprocessing) è un brevetto di NVIDIA implementato per la prima volta sul progetto Kal-El che permette la gestione di Tegra 3 in maniera tale da poter fornire bassi consumi e prestazioni elevate. Il vSMP è in grado di distribuire il carico di lavoro sui core attraverso due software di gestione:
- il Dynamic Voltage anf Frequency Scaling (DVFS) che di occupa di gestire le frequenze delle varie CPU a seconda dei carichi
- il CPU Hot-Plug che si occupa dell’accensione e dello spegnimento dei vari core
L’utilizzo di questi due moduli software di basso livello contenuti all’interno del SoC fa sì che non ci sia bisogno di effettuare modifiche o implementazioni di codice sul sistema operativo, che da Android 2.2 sui telefonini e da HoneyComb 3.x sui tablet permette l’utilizzo di più CPU, con l'unica pecca di “intenderle” tutte con la stessa capacità di calcolo (questo è uno dei motivo per cui è stato necessario inserire un Companion Core identico ai core a prestazioni elevate).
I moduli sopra riportati effettuano un monitoraggio del carico di lavoro e il Governor della CPU garantisce l’accensione e lo spegnimento dei vari core. Tegra 3 è in grado di fare lo switch dinamico (automatico e quindi non percepibile dall’utente) dalla CPU a risparmio energetico a quelle a prestazioni elevate, ma è anche in grado di accendere o spegnere un numero variabile di core principali a seconda delle richieste del sistema operativo (e quindi delle applicazioni). A seconda dell’operazione che stiamo svolgendo la nostra richiesta in termini di potenza sarà differente, e sarà differente anche il consumo del dispositivo.
La CPU a bassa frequenza del Tegra 3 è, come abbiamo detto all’inizio, identica alle altre quattro, e nello specifico un ARM Cortex A9, ma essendo costruito per avere bassi consumi, ha una richiesta in termini di Energia di Base molto contenuta e nettamente più bassa rispetto agli altri core; inoltre il rapporto potenza/prestazioni del Companion Core sviluppa più performance per ogni singolo watt consumato rispetto ad una sola delle CPU ad alte prestazioni.
Questo, nonostante funzioni a soli 500 MHz, è dotato di potenza sufficiente per gestire non solo le varie operazioni di sincronizzazione dei contatti, social network, aggiornamento widget ma anche flussi audio e riproduzione video offline ed online in quanto all’interno del SoC sono integrate delle componenti hardware specializzate che si occupano della codifica e decodifica video, e permettono di diminuire il sovraccarico sulla CPU stessa (sia essa il Companion Core o i quattro core principali).
Le CPU a frequenza elevata invece sono costruite per funzionare a voltaggi più elevati rispetto al Companion Core, ma il processo produttivo e la tecnologia utilizzate permettono di dover variare di poco le tensioni, e quindi avere poca variazione in termini di Energia Dinamica sui quattro core.
L’architettura vSMP ha degli ulteriori vantaggi rispetto alle altre architetture multiprocessore:
Coerenza della Cache: Siccome il vSMP non permette mai al Companion Core di essere attivo assieme al core princiapale, non ci sono penalizzazioni dovute alla Sincronizzazione della Cache. Il Companion Core ed i cores principali condividono tra loro la stessa cache L2, che è programmata con tempi di risposta analoghi.
Efficienza del Sistema Operativo: Android è stato progettato in maniera tale da avere a disposizione, in ambito multiprocessore, cores identici e con capacità elaborative praticamente analoghe tra loro, e quindi la suddivisione dei carichi di lavoro è programmata in base a queste caratteristiche. Il pregio del vSMP è quello di mantenere tutti i cores attivi alla stessa frequenza, ed anche quando si passa dal Companion Core ai cores principali, lo si fa mantenendo (nella fase di transizione) una capacità di calcolo invariata (i core principali partono alla stessa frequenza di quella del Companion Core).
Ottimizzazione dei Consumi: Ogni singolo core in un’architettura multiprocessore asincrona, trovandosi a frequenze differenti dagli altri ha bisogno di una quantità di energia elettrica diversa, e quindi di un voltaggio differente. La soluzione può essere o quella di dotare ogni singola CPU di un proprio sistema di regolazione di voltaggi, e quindi di far aumentare i costi di produzione. Inoltre in questa maniera si perde il vantaggio rispetto al tipo di programmazione di Android (cores identici con uguale capacità di calcolo). La soluzione ottimale studiata da Nvidia è risultata essere quella di dotare il Companion Core ed i cores principali di un unico sistema di regolazione delle tensioni visto che non deve lavorare contemporaneamente su entrambi i fronti, abbinato ad un efficiente sistema di suddivisione dei carichi di lavoro, in maniera tale da poter utilizzare un unico valore di tensione su tutte e quattro le CPU, mantenendo voltaggi contenuti e conseguentemente consumi bassi.
Grazie a tutte queste caratteristiche Kal-El risulta essere un’architettura altamente ottimizzata sotto l’aspetto delle prestazioni e dei consumi, ma anche sotto l’aspetto dei costi di realizzazione che non sono diventato spropositatamente elevati rispetto alla concorrenza dual-core nonostante il maggior numero di core e la necessaria selezione sugli stessi in base alle temperature di funzionamento tali da ottimizzarne il comfort di utilizzo.
L’architettura vSMP, nella fase di progettazione, ha introdotto anche alcuni problemi che gli ingegneri di NVIDIA sono stati costretti a risolvere:
- Tempi di Switch tra le CPU: il problema principale da affrontare è l'evitare che il tempo necessario al passaggio tra il Companion Core e quelli principali si ripercuotesse sulle prestazioni e, cosa ancor peggiore, sulla fluidità dell'interfaccia utente (scatti nel cambio di schermata, nel cliccare le icone, nell’aprire il drawer, e via discorrendo). NVIDIA ha implementato una circuiteria ed un pacchetto di software di basso livello tali da poter offrire la massima velocità in termini di cambio della CPU. In termini di tempo, per completare l’operazione di spegnimento del Companion Core, accensione di quelli principali e regolazione delle tensioni in favore della nuova richiesta energetica sono necessari solamente 2 millisecondi, un tempo impercettibile durante l’utilizzo.
- Core Thrashing: l'architettura vSMP progettata da NVIDIA permette di evitare il continuo switch fra Companion core e core principali, che porterebbero a prestazioni ridotte e consumi elevati, quando il carico di lavoro è tale per cui si è attorno al valore di soglia. Questo comportamento è stato gestito aggiungendo una certa intelligenza ed un sistema di isteresi programmabile all'interno dell'algoritmo di gestione della CPU che controlla continuamento il carico di lavoro e lo adatta per prevenire l'effetto di Core Thrashing.