Sartomiki.net

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri
Home Appunti Sistemi a microprocessori Aumento delle prestazioni nel Pentium

Aumento delle prestazioni nel Pentium

E-mail Stampa PDF
Valutazione attuale: / 0
ScarsoOttimo 

Generalità
Esistono diverse tecniche per migliorare le tecniche dei processori:
-pipeline, eseguendo più operazioni in parallelo.
-superscalararità, eseguendo più istruzioni singole in parallelo.
-threads, eseguendo parti di codice in parallelo.

Pipeline
La pipeline consiste nel cercare di far eseguire al processore più operazioni riferite ad una stessa istruzione, in momenti successivi. In questo modo più operazioni possono essere eseguite in parallelo, aumentando le prestazioni complessive del processore. Infatti una volta a regime il MIPS di un sistema a pipeline viene calcolato come numero di stadi della pipeline diviso il tempo di esecuzione di un'istruzione. Una pipeline ideale a due stadi ha MIPS doppio rispetto allo stesso sistema senza pipeline. La pipeline ideale si ottiene se tutti gli stadi del processo hanno tutti lo stesso tempo di esecuzione: in questo modo le code in ingresso dei vari stadi sarebbero sempre vuote ed ogni stadio sarebbe sempre attivo.
Nella pipeline ideale il MIPS cresce linearmente con il numero di stadi, ma nel caso di pipeline reale (in cui quindi non tutte le operazioni richiedono lo stesso tempo) il MIPS cresce linearmente fino ad un certo numero di stadi per poi stabilizzarsi su un certo valore.
Nel processore Pentium esiste una pipeline a cinque stadi:
-fetch (eseguita dalla coda o da L1 cache). E' possibile che l'operazione sia in memoria RAM, rendendo questa fase molto onerosa.
-decodifica, in cui vengono eseguiti i controlli di privilegio e di attributo in modo protetto. Questa fase è onerosa nel caso in cui gli operandi siano in memoria.
-calcolo degli indirizzi/operandi, in cui sono calcolati gli indirizzi fisici mediante segmentazione e paginazione.
-esecuzione, in cui le operazioni sono eseguite dalla ALU e sono settati i flag. In caso di operazioni aritmetiche complesse (divisioni, moltiplicazioni…), questa fase può occupare molto tempo.
-write-back, in cui i risultati sono scritti in memoria, in L1 cache o nei registri. Nel caso in cui si debbano scrivere i risultati in memoria questa fase risulta molto onerosa.
Teoricamente ogni stadio dovrebbe impiegare un colpo di clock per essere eseguito, anche se molto spesso vengono impiegati più periodi di clock, a causa delle criticità dette prima.
In alcune versioni di Pentium si è arrivati ad una pipeline a 31 livelli. In caso di predizione errata dell'istruzione successiva possono essere annullati ben 30 livelli. Accostando questa tecnica con l'incremento della frequenza di clock si ha avuto un notevole incremento delle prestazioni. Un numero così alto di stadi ha però portato ad una grande complessità di gestione. E' proprio per questo motivo che si è preferito negli ultimi anni aumentare la capacità di integrazione (cache, multicore), riducendo in questo modo la complessità dei singoli core.
Nelle versioni Core2 si è tornati a 12/14 stadi di pipeline, garantendo comunque prestazioni migliori attraverso il parallelismo dei threads.

Superscalarità
In un processore superscalare, istruzioni diverse trattano i propri operandi contemporaneamente, su ALU distinte sullo stesso chip. In questo modo più istruzioni possono essere eseguite in un unico colpo di clock. I Pentium accostano alla pipeline la superscalarità. In questo tipo di architetture sono presenti più pipeline in parallelo (2 intere a 5 stadi e una floating a 8 stadi). Il fatto di avere più pipeline in parallelo porta ad avere delle regole in modo da non eseguire operazioni che dipendono l'una dall'altra nello stesso istante, quando, quindi, non si hanno ancora pronti i risultati sui quali agire.
Nei processori superscalari le istruzioni che portano a ridurre le prestazioni sono:
-incompatibilità tra le istruzioni sui dati e le operazioni. Ad esempio questa situazione si verifica nel momento in cui si ha un operando in comune a più operazioni.
-stallo tra le pipeline, ad esempio quando una accede in memoria l'altra non può farlo contemporaneamente.
-salti condizionati, in quanto bisogna svuotare tutta la pipeline corrispondente.
Il calcolo delle prestazioni per P pipeline in parallelo è dato da MPS=(1/tmax)*P=(fck/m)*P.
Nelle ultime versioni di Pentium la superscalarità è stata notevolmente aumentata, in quanto il numero di unità operative è cresciuto, anche se in questo modo la gestione dell'intero apparato risulta più complessa (aumentando le pipeline, aumento la probabilità di dipendenze tra le pipelines).
Nei processori CISC, in quanto si hanno istruzioni non omogenee, la complessità cresce ancora più velocemente. In questo tipo di processore si è tentato di dividere le operazioni CISC, in operazioni più piccole, simili al RISC.

Multithreads
Nei sistemi multiprocessori (Core 2), intere parti di codice possono essere eseguite parallelamente. In questo caso è il programmatore che può dividere i propri programmi in parti tra loro indipendenti, in modo da evitare problemi di condivisione di dati.

Cache
Il problema della latenza della memoria è uno dei fattori determinanti nella valutazione delle prestazioni. Come già detto l'inserimento di più livelli di cache all'interno del sistema, aiuta a risolvere, almeno in parte, il problema. Oltre ad avere cache di primo livello molto veloci, è indispensabile avere un sistema in grado di riempire queste piccole memorie in tempi rapidi. Il sistema tipico per riempire la coda di istruzioni è dato da una catena composta da una BIU interna, la cache di primo livello, una BIU esterna, una cache di secondo livello e le memorie DRAM. La BIU esterna è pilotata dal BUS.
Nel caso in cui inizi l'esecuzione di un nuovo programma, probabilmente si avrà una miss sia nella prima, che nella seconda cache, causando un notevole ritardo nell'esecuzione. Seguendo il principio di località la cache di secondo livello, viene riempita con i dati contigui a quelli della prima operazione, e una parte di questi vengono caricati nella cache di primo livello. Il contenuto delle cache non è quindi niente altro che una copia di una parte dei dati contenuti nella DRAM. In questo modo, quando il sistema è a regime, è molto probabile che trovi la maggior parte delle operazioni da caricare nella coda di istruzioni nelle cache, diminuendo il tempo di caricamento.
In caso di MISS si ha il blocco della pipeline per un periodo di tempo abbastanza lungo.


blog comments powered by Disqus
 

http://sartomiki.net/modules/mod_fuofb/assets/it/find-us-on-facebook-1.png

Follow me

Amici

Chi è online

 3 visitatori online

Siti amici

Banner

Notizie flash

Sono online un po' di appunti! A partire da calcolatori elettronici, proseguendo per introduzione alle reti telematiche e passando infine per sistemi operativi. Scrivetemi se trovate qualche errore... A breve saranno aggiunti nuovi appunti e completati quelli attuali!

PUBBLICITA'