Il Dizionario Informatico, © www.dizionarioinformatico.com

PowerPC

Di Alvise Spano

L'architettura PowerPC e' definita in modo generico e implementation-independent, ovvero non si basa sulle caratteristiche tecniche di una singola implementazione, ma sulle funzionalita' generali della CPU e sulla definizione del linguaggio macchina (assembler vedi assembly language). Essendo una CPU di concezione recente, non si porta dietro i difetti di vecchie scelte progetturali e di conseguenza l'impossibilita' di sconvolgere l'architettura senza compromettere la compatibilita' verso il basso. Fin dal primo esemplare commerciale (il 601) la famiglia PowerPC ha sempre sfoggiato un design del linguaggio macchina molto moderno e facilmente "upgradabile": una CPU RISC altamente general purpose adatta ad ogni tipo di applicazione.

Giusto per fare qualche confronto (ed i confronti vanno fatti quando si parla di microprocessori), alla IBM - Motorola non hanno avuto la malsana ed incompetente idea di mettere una unita' MMX nella CPU, una unita' che rasenta l'assurdo ed e' l'apoteosi della filosofia CISC, ma hanno progettato una CPU che metta a disposizione al meglio le caratteristiche di una moderna architettura general-purpose (come dovrebbe essere sempre). Sebbene i PowerPC siano un progetto Motorola e IBM, derivano piu' dall'architettura POWER della IBM (non molto conosciuta alla massa) che dai 680x0 Motorola. Lo scopo era quello di costruire una macchina del tutto nuova, e visto che il POWER era stata un'ottima idea, purtroppo sfortunata, e' stato puntato tutto sul perfezionamento in tale direzione.

I 680x0, da parte loro, sono ottime CPU (un 68060 a 66 MHz e' piu' veloce di un Pentium al doppio del clock), ma il loro sviluppo e' stato abbandonato dalla Motorola per dedicarsi anima e corpo al progetto PowerPC. D'altronde si e' arrivati a spingere lo 060 ai limiti tecnologici per una CPU ormai alla fine della sua gloriosa carriera: superpipeline, superscalare (3 istruzioni max per ciclo), ed un assembler versatile e tra i piu' potenti della storia; un ottimo compromesso tra filosofia RISC (molto general-purpose, 16 registri sin dal primo membro, il 68000 (1979) ed implementato interamente in hardware) e CISC (modi di indirizzamento sofisticati e versatili in molte istruzioni).

Il PowerPC e' considerabile l'erede del 680x0, non tanto come somiglianze architetturali, quanto come innovazione in rapporto all'epoca. Inutile dire che un confronto tra PowerPC e Pentium sia assolutamente sproporzionato.

I modelli PowerPC esistenti sono il 601, il 603, il 603e, il 604, il 604e, il 620, il 740 ed il 750, in ordine di rilascio. Il 620 e' l'unica implementazione PowerPC completamente a 64 bit, ed i 750 e 740 sono versioni ridotte della famiglia, direzionate ad un utenza a basso costo e consumo (portatili, ecc). Ciononostante, il fiore all'occhiello e' il 604e: una CPU con 32 registri general-purpose a 32 bit (veramente general-purpose: non come i MIPS e gli Alpha che ne usano qualcuno per operazioni interne), 32 registri FP (vedi floating point register) a 64 bit, circa 50 registri $special-purpose$ (tra cui un Link Register, un $counter register$, 2 $timebase register$, alcuni registri che monitorizzano le performance, alcuni registri che contengono informazioni sull'implementazione, registri per l'MMU e molto altro), un Bus esterno a 64 bit, ed un bus interno proveniente dall'$instruction cache$ a 128 bit.

La vera potenza del 604e e', da una parte, la versatilita' del linguaggio assembler, con istruzioni "non eccessivamente RISC" come quelle dell'Alpha e del MIPS, dall'altra il design dell'implementazione che prevede vari livelli di Reservation Station per ognuna della 7 Unita' di execute indipendenti. Questa e' la sua potenza, ma causa delle capacita' superscalari (4 istruzioni per ciclo) i conflitti sono frequenti e diminuire il throughput delle istruzioni fino a farlo apparire non-superscalare non sarebbe una cosa difficile. Le reservation station fanno si che il fetch continui e che il maggior numero di istruzioni venga portato a termine.

Le 7 unita' sono indipendenti, il che significa che, se possono terminare 4 istruzioni per ciclo, 7 possono coesisterne nella fase di execute del pipeline. Le 7 unita' sono: BPU (branch processing unit), $SCIU1$ (single cycle integer unit 1 - tutte le operazioni logiche e quelle intere, a parte quelle della della MCIU), SCIU2, $MCIU$ (multiple cycle integer unit - divisioni intere, moltiplicazioni ed altro), $FPU$ (3 stadi di execute fully-pipelined), $LSU$ (load-store unit - accessi in memoria, gestione delle cache), CRU (condition unit - tutte le istruzioni intere di confronto). Le unita' sono tutte a ciclo singolo (a parte le specificate) e comunque sono tutte pipelinate, quindi hanno un throughput di 1 (a parte l'MCIU quando opera divisioni o moltiplicazioni 32x32 bit). Queste molteplici unita' sono state introdotte a vantaggio delle qualita' superscalari della CPU: l'obiettivo e' quello di spezzare il piu' possibile il genere delle istruzioni, classificandole come istruzioni aritmetico/logiche, floating point, di salto, di confronto, di accesso alla memoria. Addirittura, nel 604e sono state distinte istruzioni aritmetiche veloci e lente (addizioni, ecc, e moltiplicationi, divisioni), e, vista la frequenza in un codice medio di istruzioni aritmetico/logiche veloci, sono state implementate due complete $SCIU$.

Al di la' dei dettagli implementativi del 604e in particolare, e' interessante far notare il ruolo di pioniere del PowerPC, con scelte architetturali innovative. Al contrario di tutte le altre CPU, che utilizzano un registro come puntatore allo stack di sistema (i 680x0 ne hanno addirittura 2, uno per il $supervisor mode$ ed uno per lo $user mode$; gli Intel hanno un registro apposta; gli altri utilizzano uno dei registri), i PowerPC non prevedono che ci sia uno stack, essenzialmente per motivi di prestazioni: in caso di salti con ritorno, $exception$, interrupt o stati operativi particolari, non salvano le informazioni e gli stati macchina precedenti sullo stack corrente, ma su registri $special-purpose$ appositi, evitanto accessi a memoria. Se e' necessario uno stack, e' possibile implementarne facilmente uno con una zona di memoria allocata come ogni altra ed un GPR some puntatore. Altra innovazione e' la miriade di SPR, che, sebbene possa apparire artificiosa, e' studiata per venire incontro alle esigenze di un moderno ed efficiente sistema operativo: registri che specificano il modello e la versione della CPU, affinche' l'OS non debba ricorrere a tecniche non standard per conoscere l'implementazione; registri che indicano la frequenza di clock ed il rapporto tra il clock del bus esterno ed il clock interno, per ottimizzare eventualmente il codice in situazioni di configurazione particolari; registri che monitorizzano le performance del sistema, per agevolare la stima del carico della CPU per i vari processi evitando errori dovuti al principio di indeterminazione; registri che fungono da timer per implementare uno scheduling senza ricorrere a chip esterni.

Alta tecnologia e versatilita' che non va per forza contro i prerequisiti general-purpose preffissati: un intelligente occhio di riguardo per l' informatica moderna e le sue implementazioni senza perdere di stile. Questi sono solo pochi esempi degli sforzi degli ideatori dei PowerPC per staccarsi dagli stereotipi architetturali dettati dalle altre CPU, assai piu' banali, per la verita', tipo gli Alpha ed i MIPS. Questa filosofia portera' a compiere un ulteriore passo verso una concezione piu' moderna ed avanzata dei microprocessori, che sicuramente sapra' guadagnarsi un meritato posto di riguardo nella storia dell'informatica e fara' del PowerPC l'erede di questa era tecnologica, ed il capostipite della prossima.




© C o p y r i g h t     1 9 9 4 - 2 0 0 4
w w w . d i z i o n a r i o i n f o r m a t i c o . c o m