Canali
![]() Ultime news
![]() Ultimi articoli
![]() Le ultime dal Forum |
![]() Correlati![]() TagIl Critical PathVi siete mai chiesti perché alcuni processori possano raggiungere i 700 MHz, mentre altri raggiungono i 3 GHz? Certo, molto spesso cercando in giro troverete risposte del tipo: costruendo i processori con tecnologie a 130 nanometri, si riduce la dimensione dei transistor, e quindi si può salire in frequenza. Questo è vero, ma a mio avviso non è una risposta completa, dato che ci sono motivi più specifici. Ovviamente potete intuire dal titolo che la risposta a questa domanda è proprio il critical path (cammino critico), ossia il percorso più lungo che un segnale deve attraversare in un singolo ciclo di clock. Se in un qualche punto esiste un percorso che un segnale impiega 1 microsecondo a percorrere, il clock massimo per quel processore sarà di 1 MHz (ossia l'inverso di 1 microsecondo). Non importa poi se in tutti gli altri percorsi, i segnali impieghino un decimo di questo tempo, basta un solo percorso dove il segnale è lento, da costringere tutto il resto ad andare alla "sua" velocita. Oltre questo, per problemi legati alla deriva termica (al variare della temperatura, variano alcune caratteristiche elettriche), all'invecchiamento dei componenti, e al fatto che i transistor non sono mai precisi come sono stati progettati sulla carta (per inevitabili difetti di costruzione), occorre tenersi ben al di sotto di quel margine di 1 MHz di cui abbiamo parlato prima. Come nascono i processori RISC?Cosa c'entra tutto questo con questo articolo? Semplice, per ovviare al problema del critical path, si ricorre alle pipeline, che nascono con l'approccio RISC. Il fatto che un processore CISC possa eseguire una sola istruzione per volta, fa si che i circuiti adibiti allo svolgimento dell'esecuzione più complessa, siano quelli più lenti, e che quindi questi finiscano con il rallentare tutto il processore. Considerazioni che portano alla nascita dei RISCCon il passare degli anni, quando i compilatori erano divenuti molto più efficienti, e le memorie erano molto meno costose, i progettisti cominciarono a fare le seguenti considerazioni: 1) Dato che, test effettuati, risultò che per il 90% del tempo, il processore utilizza sempre un piccolo sottoinsieme di istruzioni, perché non ottimizzare il processore nell'esecuzione di queste poche istruzioni, lasciando al compilatore il lavoro di decodifica delle istruzioni più complesse in istruzioni più semplici? 2) Se il processore è ottimizzato per eseguire direttamente queste poche istruzioni, perché non fare in modo che ogni istruzione venga completata in un singolo ciclo di clock? 3) Dato che le istruzioni con indirizzamento complesso rallentano molto l'esecuzione dei programmi (richiedono parecchi accessi in memoria centrale), è meglio eliminare queste istruzioni, e lasciare solo due comandi di load e store, rispettivamente per caricare, e memorizzare i dati dai registri del processore alla memoria centrale. 4) Considerando che dobbiamo limitare gli accessi in memoria centrale, è necessario avere un numero sufficiente di registri per consentire l'elaborazione dei dati. Un esempio per capire meglioFacciamo un piccolo esempio di codice per capire meglio le ultime due considerazioni:
Questo breve codice, non fa altro che inizializzare i valori di i e j a 0 al primo ciclo, poi in ogni ciclo, il valore corrente di i viene aggiunto a j, e il risultato viene memorizzato in j, finito questo i viene incrementato di 1 (tramite l'istruzione i++, che sarebbe come dire i = i+1), e quando i raggiunge il valore 100 si esce dal ciclo. Se il compilatore fa un buon lavoro, per salvare i valori di i e j utilizzerà due registri locali del processore, e solo alla fine del ciclo memorizzerà i rispettivi valori in memoria centrale. Questo è però vero per un processore RISC, un processore CISC invece, potrebbe benissimo effettuare tutti gli accessi in memoria centrale per aggiornare i valori di i e j. Sfruttando la semplicità delle istruzioni di un processore RISC, è possibile fare in modo che esse vengano eseguite in cascata su più istruzioni, come in una catena di montaggio. Il risultato è che è possibile eseguire le istruzioni in un singolo ciclo di clock, caratteristica che è stata a lungo una peculiarità dei processori RISC. Ma come è possibile tutto questo, se sappiamo benissimo che un Athlon ha una pipeline da 10 stadi, e un Pentium 4 ne ha addirittura 20? Semplice, essi non sono processori CISC, ma sono processori ibridi CISC-RISC. Processori Ibridi CISC-RISCL'architettura interna dei processori odierni, ha poco o nulla a che fare con l'approccio CISC che abbiamo visto prima. Essi sono ancorati al passato, solo perché devono essere retrocompatibili con i vecchi programmi. I nuovi processori (K7 o P4 che siano), decodificano si il codice x86, ma una volta decodificato, esso viene mandato in esecuzione su una serie di stadi di elaborazione di tipo RISC. Facciamo quindi queste considerazioni: 1) Il codice x86, che è complesso (tante istruzioni di natura diversa), e disomogeneo (le istruzioni possono essere lunghe 8, 16 e 32 bit), viene decodificato attraverso ROM che contiene la corrispondenza tra le istruzioni complesse e quelle più semplici, e che asserve alla decodifica delle stesse. 2) Alle istruzioni dell'ISA x86, vengono sostituite le istruzioni in formato omogeneo (a 32 bit) che possono essere quindi immesse in una memoria tampone (buffer) in attesa di essere processate dalle unità di elaborazione. Le istruzioni decodificate sono RISC-like, nel senso che appartengono ad un "alfabeto" meno ricco del codice nativo ISA x86 ma altamente ottimizzate. È evidente che l'architettura RISC ha avuto la meglio, e che i progettisti Intel e AMD hanno fatto un ottimo lavoro, che ha consentito ai processori x86 di sopravvivere fino a oggi, oltre ogni aspettativa (Ma credo che se Intel ha deciso di cominciare con L'IA-64, per l'ISA x86 è giunto il momento del pensionamento). Appuntamento ai prossimi articoli..Si conclude qui questo primo articolo, ne prossimi articoli introdurrò i processori PowerPC e G4 (per intenderci, quelli che erano montati nelle macchine Apple Macintosh, e quelli che sono montati ancora oggi nelle macchine entry level e nei portatili), poi seguiranno a ruota articoli di approfondimento su Pentium 4, Athlon, Processori PPC 970 (quelli montati sugli ultimi Apple Macintosh G5), Power4 e Power 5 di IBM (quelli da cui è stato derivato il PPC 970), e se resterà tempo approfondirò anche i processori SPARC (quelli montati sulle macchine di Sun Microsystems). Segnala ad un amico |
© Copyright 2025 BlazeMedia srl - P. IVA 14742231005