# Performance Optimization With Enhanced RISC

Performance Optimization With Enhanced RISC (in acronimo POWER) è un set di istruzioni RISC sviluppata da IBM. Questa architettura è stata utilizzata come base per la creazione dell'architettura PowerPC (destinata ai PC Macintosh, ad alcune workstation IBM e ad applicazioni embedded), a cui rimane molto simile.
POWER è il nome anche della serie di microprocessori che sono stati sviluppati a partire dal set di istruzioni. I processori sono usati come CPU principale in molti server, minicomputer, workstation e supercomputer IBM. Dal processore POWER3 e successivi l'architettura è interamente a 64 bit e basata sulle specifiche PowerPC. Il POWER3 inoltre non implementa alcune vecchie istruzioni POWER che furono rimosse dal set di istruzioni del PowerPC e non implementa le estensioni del POWER2 come l'ifq o il stfq.

## Storia
### Il progetto 801

Nel 1974 IBM avviò un progetto volto a sviluppare uno switcher telefonico ad alte prestazioni in grado di gestire fino a 300 chiamate per secondo. La gestione di ogni chiamata richiedeva circa 20.000 istruzioni e la loro gestione in tempo reale si stimò che richiedesse un processore da almeno 12 MIPS. Per l'epoca erano delle richieste molto ambiziose ma gli ingegneri compresero che il processore non doveva avere la classica complessità e flessibilità dato che in sostanza doveva solamente gestire l'ingresso e l'uscita dei dati, gestire somme, salti, copia tra registri e altre istruzioni elementari. In sostanza il processore non doveva essere dotato di istruzioni matematiche complesse dato che non erano necessarie.
La filosofia di progetto era basata sulla semplicità, le istruzioni erano specificate direttamente, senza uso di microcodice, venivano eseguite in tempo costante e richiedevano solo un ciclo di clock. Molte caratteristiche in comune con le moderne architetture RISC.
Nel 1975 il progetto telefonico fu cancellato prima della realizzazione di un prototipo. Dalle stime a dalle simulazioni svolte durante il progetto, tuttavia, si notava che il processore poteva essere utilizzato anche per compiti generici e che il suo disegno era molto promettente. Il progetto continuò al Thomas J. Watson Research Center edificio 801, e divenne il progetto 801.

### Progetto di ricerca "Cheetah"

Per due anni, dal 1982, al centro di ricerca Watson Research Center i limiti superscalari del progetto 801 furono analizzati ed esplorati. L'implementazione dell'801 fu analizzata e fu esplorata la possibilità di implementare più unità funzionali per migliorare le prestazioni, similmente a quanto era stato fatto nel computer System/360 Model 91 e nel CDC 6600 (sebbene il Model 91 fosse basato su un'architettura CISC). Per determinare se il progetto RISC potesse gestire più istruzioni per ciclo o se il progetto dovesse essere modificato per gestire più istruzioni per ciclo.
Per migliorare le prestazioni Cheetah separò le unità di salto, di gestione degli interi e dei numeri in virgola mobile. Molti cambiamenti al progetto 801 furono apportati per gestire più unità di elaborazione. Cheetah inizialmente venne progettato per la produzione con la tecnologia bipolare ECL, ma nel 1984 la tecnologia CMOS migliorò il livello di integrazione e le prestazioni dei transistor.

### Il progetto America

Nel 1985 la ricerca sulla seconda generazione di architetture RISC venne avviata nei laboratori IBM Thomas J. Watson Research Center, e produsse "AMERICA architecture". Nel 1986 l'IBM Austin avviò lo sviluppo della serie RS/6000 basandola su questa architettura.
Nel 1990 IBM presentò il primo sistema basato sull'architettura POWER, il sistema venne chiamato RISC System/6000 o RS/6000. L'RS/6000 era diviso in due classi, workstation e server che vennero chiamati POWERstation e POWERserver. I processori dei sistemi RS/6000 vennero chiamati RIOS (in seguito RIOS I o POWER1) ed era composto da 11 integrati. Cache istruzioni, unità per i numeri interi, unità per i numeri in virgola mobile, quattro integrati per la cache dati, l'unità di memorizzazione, due unità di input/output e il clock.
Una versione su singolo chip del RIOS, RSC (da RISC Single Chip) venne sviluppato per le versioni di fascia bassa RS/6000 e la prima macchina basata su questo chip fu presentata nel 1992.

### PowerPC

IBM si rese conto che l'architettura POWER poteva venir utilizzata con alcuni aggiustamenti per il mercato di massa e che poteva venir venduta in concessione ad altri fornitori. La società contattò Apple proponendo la collaborazione per la realizzazione di una serie di microprocessori basati su architettura POWER. Apple contattò Motorola, fornitore di lunga data di processori per Apple e chiese alla società di entrare nell'alleanza per via della sua lunga esperienza nella produzione in alti volumi e per avere un secondo fornitore di processori. Questa collaborazione tra le società venne chiamata alleanza AIM, dall'acronimo di Apple, IBM e Motorola.
Il risultato dell'alleanza fu la nuova architettura PowerPC, una versione modificata dell'architettura POWER. L'architettura PowerPC aggiunse delle istruzioni a singola precisione in virgola mobile e delle istruzioni di moltiplicazione e divisione tra registri. L'architettura rimosse delle istruzioni specializzate come l'istruzione di moltiplicazione e divisione utilizzante il registro MQ. Inoltre aggiunse il supporto per l'architettura a 64 bit.
Il primo PowerPC fu il processore PowerPC 601 basato su RSC.

### POWER2

Nel 1993 IBM visto il successo dell'originale RIOS/POWER1 sviluppò il processore POWER2. Vi aggiunse una seconda unità in virgola mobile e una seconda unità per i numeri interi. Nuove istruzioni vennero inserite nel set di istruzioni:
* Istruzioni di memorizzazione di Quad-word. Le istruzioni quad-word copiano due dati in doppia precisione adiacenti in due registri in virgola mobile.
* Istruzioni di radice quadrata in hardware
* Istruzioni di conversioni da virgola mobile a intero
Nel 1996 venne presentato una versione a singolo chip del POWER2 il P2SC (POWER2 Super Chip).

### Amazon

Nel 1990 il team di sviluppo IBM dell'AS/400 ora System i progettò un set di istruzioni RISC per rimpiazzare le istruzioni CISC degli esistenti AS/400. Il progetto originale era una variante del set di istruzioni IMPI esteso a 64 bit con l'aggiunta di istruzioni RISC per accelerare le applicazioni commerciali che avrebbero fatto uso dei computer AS/400. IBM spinse per l'utilizzo dei processori PowerPC, ma il team di sviluppo argomentò che il processore non disponeva di un adeguato set di istruzioni per le applicazioni commerciali. Un'estensione per il PowerPC chiamata Amazon venne sviluppata per il progetto.
In quel periodo il team di sviluppo dell'RS/6000 era contrario all'utilizzo dei PowerPC per le macchine ad alte prestazioni dato che il team riteneva importanti le istruzioni presenti nel POWER2 che il progetto PowerPC aveva rimosso. Amazon venne esteso per includere anche le istruzioni richieste dal team dell'RS/6000.
Il progetto del primo processore basato sul set Amazon fu chiamato Belatrix (il nome di una delle stelle della costellazione di Orione chiamata anche la stella dell'amazzone). Belatrix era molto ambizioso come progetto e infine venne completato. IBM Austin (la sede dove fu sviluppato l'RS/6000) sviluppò un processore PowerPC a 64 bit con le estensioni del POWER2 che chiamò POWER3. IBM Rochester (la sede dove fu sviluppato l'AS/400) avviò lo sviluppo del primo processore PowerPC a 64 bit ad alte prestazioni con estensioni AS/400 mentre IBM Endicott avviò lo sviluppo della versione di fascia bassa a singolo chip del processore PowerPC con estensioni AS/400.
Muskie la versione di fascia alta multi-chip del processore PowerPC con estensioni AS/400 e Cobra, la versione singolo chip PowerPC con estensioni AS/400 vennero presentati nel 1995.
Nel 1997 IBM Rochester lanciò Muskie la versione PowerPC per RS/6000. Venne utilizzato dall'RS/6000 con il nome di RS64 e anche negli AS/400 con lo stesso nome.

### POWER3

Nel 1997 il POWER3 venne presentato. Inizialmente chiamato PowerPC 630 venne rinominato per indicarne la continuazione della linea POWER. Il processore implementava il set di istruzioni PowerPC a 64 bit, incluse tutte le istruzioni opzionali (per l'epoca). Il processore aveva due unità in virgola mobile, tre unità per i numeri interi e due load/store. I successivi processori POWER implementarono il set di istruzioni PowerPC a 32 e 64 bit. Non vennero più prodotti processori compatibili con il solo set di istruzioni POWER o POWER2.

### POWER4

Nel 2001 il POWER4 venne presentato. Era ovviamente un processore PowerPC a 64 bit ma includeva le estensioni AS/400 e venne utilizzato sia negli AS/400 che negli RS/6000 sostituendo il POWER3 e l'RS64. Il set di istruzioni implementato venne chiamato PowerPC 2.00 ed il nuovo set aggiunse altre istruzioni.
Nel 2002 fu lanciato il PowerPC 970, un derivato del POWER4 con l'aggiunta di un'unità VMX (AltiVec) che venne utilizzato da Apple nei Power Mac G5, il primo Macintosh e primo desktop sul mercato di massa ad operare a 64 bit.

### POWER5

Nel 2005 venne presentato il POWER5. Un processore multicore con supporto del multithreading simultaneo di due thread e quindi la capacità di gestire quattro processori logici. POWER5 aggiunse molte istruzioni al set di istruzioni che venne chiamato PowerPC2.01. Il POWER5+ aggiunse altre istruzioni e il set prese il nome di PowerPC 2.02.

### POWER6

Il POWER6, diretto successore del POWER5 è stato presentato nel maggio 2007. Il POWER6 aggiunge delle unità VMX al processore e il supporto hardware per l'aritmetica decimale in aggiunta all'aritmetica binaria normalmente usata nei processori. Questo è il più grosso cambiamento dal tempo del POWER3 che passò al PowerPC64. Il processore ha un progetto dual core e viene distribuito con una frequenza massima di 4.7 GHz a 65 nm.

### POWER7

Il POWER7 è il successore del POWER6, presentato l'8 febbraio 2010. È collegato a un finanziamento del DARPA riguardante lo sviluppo di supercomputer. Ha una potenza elaborativa più che doppia rispetto a quella offerta dal predecessore POWER6, ottenuta tra l'altro con una frequenza operativa inferiore ai quasi 5 GHz del POWER6, ovvero dai 3,0 ai 4,14 GHz e questo, unito al nuovo processo produttivo a 45 nm, diminuisce i consumi del processore.

### POWER8

Il POWER8 è il successore del POWER7, presentato in agosto 2013 e introdotto nel mercato nel giugno 2014.

### POWER9

POWER9, che è stato lanciato nel 2017, è prodotto usando un processo FinFET a 14 nm ed è disponibile in 4 versioni: due con 24 core SMT4 e due con 12 core SMT8. Probabilmente ci saranno ulteriori versioni in futuro visto che l'architettura POWER9 è disponibile per licensing e modifiche per i membri della fondazione OpenPOWER.

### POWER10

POWER10 è stato presentato in agosto 2020 e introdotto nel mercato nel settembre 2021. Caratterizzato da una architettura a 15 core è realizzato con una tecnologia a 7nm.

## Architettura

Il design POWER discende direttamente dall'IBM 801, considerato da molti il primo vero microprocessore RISC. L'801 fu molto usato nell'hardware IBM, ma non divenne noto al grande pubblico fino al lancio dell'IBM PC/RT, dalle prestazioni mediocri, alla metà degli anni ottanta.
Mentre il PC/RT veniva lanciato sul mercato, IBM diede inizio all'America Project, con l'intenzione di creare la CPU più potente sul mercato. Si concentrarono su due problemi principali dell'801:
* richiedeva che tutte le istruzioni venissero eseguite all'interno di un singolo ciclo di clock, impedendo lo svolgimento di calcolo in virgola mobile;
* nonostante il decoder delle istruzioni fosse strutturato con una pipeline per quanto descritto sopra, l'801 non era superscalare.
Il calcolo in virgola mobile divenne il pallino dell'America Project, e IBM poté usare nuovi algoritmi sviluppati nei primi anni '80 che potevano eseguire moltiplicazioni e divisioni a precisione doppia in un singolo ciclo di clock. La FPU era separata dal decoder delle istruzioni e dall'ALU, permettendo al primo di poter inviare le rispettive istruzioni alle unità funzionali nello stesso tempo. IBM inoltre inserì un complesso instruction decoder che poteva compiere contemporaneamente il fetch di una istruzione, la decodifica di un'altra e l'invio di un'altra ancora all'ALU o alla FPU, risultando così una delle prime macchine superscalari.
Il sistema usava trentadue registri interi a 32 bit e altrettanti a 64 bit per la virgola mobile, nelle rispettive unità. Anche la BPU (branch prediction unit) aveva i suoi propri registri, incluso quello contatore (PC).
L'801 aveva un design semplice, e l'ipercorrezione contenuta nel POWER ne fece un processore più complesso della maggior parte delle CPU RISC del tempo. L'instruction set del POWER e del PowerPC contiene più di cento istruzioni di lunghezza variabile, molte delle quali sono variazioni di altre, a differenza ad esempio dell'ARM che ne possiede solo trentaquattro.
Un'altra interessante caratteristica di questa architettura un sistema di indirizzamento virtuale che inserisce tutti gli indirizzi in un ambiente a 52 bit. In questo modo le applicazioni possono condividere memoria in un ambiente "piatto" a 32 bit e ogni programma può avere blocchi differenti di 32 bit ciascuno.

## Applicazioni

La prima CPU POWER1 consisteva di tre chip: l'unità di predizione delle istruzioni (BPU), l'unità intera (ALU) e l'unità in virgola mobile (FPU). Questi erano collegati su una grossa scheda per costituire un sistema unico. Il POWER1 fu usato soprattutto nelle workstation RS/6000.
Il POWER2 era in sostanza un POWER1 migliorato e fu il processore di questa serie più longevo: fu lanciato nel 1993 ed era ancora usato cinque anni dopo. Conteneva una FPU addizionale, 256 KB di memoria cache in più e la capacità di calcolo in virgola mobile a 128 bit.
Il POWER3 seguì nel 1998, includendo un pieno supporto del 64 bit, rimanendo tuttavia completamente compatibile con l'instruction set POWER precedente. Questo era uno degli obiettivi del progetto PowerPC e il POWER3 fu il primo processore IBM a trarne vantaggio. Aggiungeva inoltre una terza ALU ed un ulteriore instruction decoder, per un totale di otto unità funzionali.
La serie POWER4 include due CPU complete (simili ad un POWER3 con velocità superiore) su un unico chip, e offre la possibilità di collegamento ad alta velocità con fino ad altre tre paia di POWER4. Questi possono essere posti insieme su una scheda madre per comporre un multiprocessore simmetrico con otto CPU. Quando un processo richiede un'alta velocità piuttosto che un calcolo complesso, una coppia di CPU può essere disabilitata in modo che le tre rimanenti abbiano il bus per la cache L3 libero. Il POWER4, anche singolo, è considerato da molti la CPU più potente disponibile.
Nel 2003 IBM ha sviluppato una versione single-core del POWER4 per i personal computer di Apple, chiamata PowerPC 970, ovvero PowerPC G5.
IBM ha lanciato il POWER5 nel 2004. La versione a 1,9 GHz ha fatto segnare il più alto punteggio mai segnato da una CPU a processore singolo nel benchmark SPECfp. Il POWER5 è alla base dei eServer i5 e p5. I miglioramenti rispetto al POWER4 includono una cache L2 più grande, un memory controller integrato nel chip, il multithreading simultaneo, che appare al sistema operativo come più CPU, un più avanzato sistema di gestione della potenza, una modalità single-tasking dedicata, l''Hypervisor (un sistema per la virtualizzazione) e l'eFuse (un hardware per la correzione degli errori). Ravi Arimilli, capo designer della IBM ha affermato: "Il POWER5 è un design intermedio, che può essere impiegato per impieghi ad alto livello o anche di basso livello come i blade.". I server basati su POWER5 offrono possibilità di virtualizzazione (cioè di presentazione delle risorse di sistema in un modo più legato al pensiero e alla logica umana che alla realtà del software o dell'hardware): logical partitioning e micro partitioning. Possono essere create fino a dieci LPAR (partizioni logiche) per ogni CPU, e il sistema più grande a 64 vie può gestire fino a 256 sistemi operativi indipendenti. La memoria, l'assorbimento della CPU e l'I/O possono essere trasferiti tra le partizioni.
Il POWER6 è stato presentato a maggio 2007.
Nel 2010 è stato commercializzato il POWER7, capace di ridottissimi consumi energetici, utilizzati per la realizzazione di una nuova generazione di supercalcolatori.

## CPU derivate

Il PowerPC era essenzialmente un POWER1 le cui istruzioni di base erano in parte emulate via microcodice, usando una interfaccia bus basata sul design del Motorola 88000. Questo permise ad IBM di usare la CPU in molte workstation, cambiando solo la scheda madre. Da allora le architetture si sono differenziate, ma rimangono compatibili a livello di istruzioni.
La serie RS64 si basa sul PowerPC, e quindi sul POWER, ed è stata usata nelle linee RS/6000 ed AS/400. Essendo ottimizzata per applicazioni commerciali, non possiede la potenza nel calcolo in virgola mobile della serie POWER. Attualmente gli è subentrata la linea POWER4, e si ricercheranno di maggiore potenza.
Il processore PowerPC Gekko prodotto da IBM è una versione modificata del PowerPC 750CXe e venne utilizzato dal Nintendo GameCube. IBM ha sviluppato anche il processore per Wii (la console successore del GameCube), l'IBM Broadway.
Il processore Cell è un altro derivato dell'architettura POWER, e include un core simile ad un processore POWER3 limitato nel calcolo in virgola mobile, accostato a otto processori vettoriali indipendenti. È il cuore della console Sony PlayStation 3, il processore sembra in grado di superare qualsiasi altra attuale architettura del mercato desktop nel calcolo parallelo e SIMD; caratteristiche che hanno catturato l'attenzione dell'intero settore.
Il processore Xenon, che compone l'Xbox 360 di Microsoft, deriva invece dall'architettura PowerPC. Ha una struttura triple-core ed una velocità di 3,2 GHz.