processori
mercoledì 27 Ottobre 2010 - 16 Commenti
Amiga: Symmetric MultiProcessing (SMP) o ASymmetric MultiProcessing (ASMP)?

Due cose Amiga ha portato alle masse, facendone al contempo i propri cavalli di battaglia: il multitasking e i coprocessori dedicati. Molti ricorderanno ancora la mascella a terra (per non dire altro) guardando le finestre e gli schermi (Copper docet) sul Workbench che facevano girare applicazioni diverse simultaneamente, sfoggiando anche grafica elaborata in tempo reale (e qui… Blitter docet!).
Infatti l’Amiga, non mi stancherò mai di ripeterlo, è stato un eccellente connubio fra sistema operativo (AmigaOS) e hardware dedicato, nato da menti geniali che hanno saputo pensare tanto ai programmatori quanto …

venerdì 17 Settembre 2010 - 6 Commenti
Processori superscalari out-of-order: lo stadio di fetch

In-order o out-of-order, superscalare o meno, il viaggio delle istruzioni all’interno di qualsiasi CPU comincia nello stesso modo: il fetch (cioè il prelevamento) delle istruzioni dalla memoria, e più precisamente dalla I-cache di primo livello.
Il numero di istruzioni che la CPU è in grado di caricare per ogni ciclo di clock è chiamata fetch bandwidth e fissa il limite massimo delle prestazioni del processore: è evidente infatti che la CPU non può eseguire più istruzioni di quelle che carica dalla memoria. Una macchina superscalare capace di eseguire s istruzioni per …

lunedì 16 Agosto 2010 - 30 Commenti
Processori superscalari out-of-order: una vista d’insieme

Finalmente, dopo una lunga peregrinazione tra pipeline semplici e diversificate, oggi comincia una nuova serie di articoli che andranno a spolpare un boccone molto più succulento: i processori superscalari out-of-order, ovvero le CPU che hanno spinto la computazione ad alte prestazioni negli ultimi 15 anni.
Nello scorso articolo abbiamo visto come avere pipeline diversificate sia l’idea vincente per ottenere maggiori prestazioni: ogni pipeline può essere ottimizzata per una particolare classe di istruzioni, può avere un numero di stadi diversi, ed è (in teoria) possibile avere molte più istruzioni in-flight (cioè in …

venerdì 2 Luglio 2010 - 7 Commenti
Oltre la pipeline semplice: le pipeline diversificate

Nello scorso articolo abbiamo visto come pipeline profonde diventino rapidamente inefficienti a causa dell’aumento del numero di stalli necessari al loro corretto funzionamento, e come pipeline più corte ma più larghe (“superscalari”) possano ottenere prestazioni molto migliori ad un costo più basso.
Abbiamo anche visto come nella maggior parte dei programmi esista abbastanza ILP da alimentare queste ipotetiche “pipeline multiple”. Rimane la domanda: che aspetto hanno queste pipeline? Sono semplicemente tante pipeline semplici incollate l’una di fianco all’altra, identiche tra loro, o è qualcosa di più complicato?
Prendere la stessa pipeline semplice …

venerdì 4 Giugno 2010 - 14 Commenti
ILP e pipeline: motivazioni per i processori superscalari

Il pipelining è una tecnica relativamente semplice ed estremamente efficace per aumentare le prestazioni dei processori: qualitativamente, spezzando la logica su più stadi è possibile avere più istruzioni in-flight nello stesso momento, aumentando il throughput. È però possibile analizzare in modo quantitativo questo aumento di performance. Per farlo, si può usare una delle regole base più usate nell’ambito dell’architettura dei calcolatori: la legge di Amdahl.
La legge di Amdahl
Questa “legge” prende il nome da Gene Amdahl, famoso Computer Architect uscito dalle fucine di talenti della IBM degli anni ’50/’60. La legge …

mercoledì 2 Giugno 2010 - 14 Commenti
ThumbEE: da ARM una virtual machine per tutti i linguaggi

Dopo una serie di articoli sull’Amiga faccio un breve salto indietro agli ARM, poiché avevo tralasciato un argomento per chiudere (temporaneamente, in attesa che la casa inglese tiri fuori qualche altro gioiello dal cilindro) il filone dedicato a queste architetture.
Sappiamo che, oltre all’architettura “base”, cioè all’ISA a 32 bit, che rappresenta la più generale e performante incarnazione, col tempo sono arrivate delle nuove ISA a 16 bit (e non solo) per aumentare la densità del codice. Parlo di Thumb e del suo successore, Thumb-2 (quest’ultimo ha aggiunto una vagonata di …

venerdì 14 Maggio 2010 - 11 Commenti

Nei precedenti articoli abbiamo visto come utilizzare una pipeline per aumentare l’efficienza di utilizzo dell’hardware e aumentare di conseguenza le prestazioni della macchina. Tuttavia, la semplice pipeline in-order soffre di una serie di limitazioni che non le permettono di sfruttare buona parte dell’Instruction-Level Parallelism (ILP) presente in un programma. Di conseguenza, le sue prestazioni non riescono a salire oltre un livello generalmente modesto, con un IPC (Instructions Per Clock) sempre minore di 1.
Il problema è che il listato assembly è una sovraspecifica del programma: l’ordine delle istruzioni specificato è condizione …

venerdì 30 Aprile 2010 - 6 Commenti
Architettura delle CPU: la pipeline rivisitata (seconda parte)

Nel precedente articolo abbiamo visto le basi della tecnica di pipelining. Adesso è ora di fare sul serio, e dare uno sguardo alle tecniche architetturali e circuitali usate per costruire una “vera” pipeline.
Dipendenze, pipeline hazards, interlock e stalli
Nella maggior parte dei casi,  una istruzione “dipende” da una o più istruzioni precedenti, nel senso che queste istruzioni precedenti devono aver completato (cioè eseguito e aggiornato i registri e/o la memoria) prima che la nuova istruzione possa eseguire. Di quali dipendenze bisogna preoccuparsi, allora, quando si costruisce una pipeline? Ce ne sono …

venerdì 23 Aprile 2010 - 22 Commenti
Architettura delle CPU: la pipeline rivisitata (prima parte)

Perchè un ennesimo articolo sulle pipeline? In rete si trova già molto materiale, e anche qui su Appunti Digitali Yossarian ha già scritto almeno due articoli al riguardo (qui e qui).
Tuttavia, avendo in programma di scrivere una serie di articoli sull’architettura di processori superscalari out-of-order, è necessario avere ben chiari alcuni concetti sulle pipeline in-order, per capirne funzionamento, prestazioni e limiti, e comprendere quindi cosa ha spinto i computer architect a cimentarsi con qualcosa di così complesso come i processori out-of-order.
In questo articolo  farò un ripasso delle pipeline in-order, partendo …

venerdì 16 Aprile 2010 - 15 Commenti
Architettura delle CPU: l’arte del compromesso (seconda parte)

Nel precedente articolo abbiamo visto quali sono i requisiti dei diversi segmenti di mercato di una CPU (mobile, desktop, server), quali devono a tutti i costi essere soddisfatti e su quali si può scendere a compromessi. Inoltre, abbiamo visto come questi si intreccino con le necessità dei chip maker di bilanciare costi, prestazioni e complessità di ingegnerizzazione.
Facendo sempre riferimento allo sviluppo di Nehalem, oggi vedremo come tutti questi fattori hanno influenzato le principali scelte microarchitetturali.
Scelta della pipeline
Una delle prime scelte fu la pipeline da usare. Tre le opzioni disponibili:

la pipeline …