Vai al contenuto


Foto
- - - - -

FAQ Processore - Cos'è e come funziona. [GUIDA]

FAQ Processore Come funziona un processore? Cosè un processore?

  • Discussione bloccata Questa discussione è bloccata
9 risposte a questa discussione

#1 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:27 AM

La CPU (acronimo di Central Processing Unit, detta comunemente processore) è l'implementazione fisica di uno dei due componenti della macchina di Turing (l'altro è la memoria).

Compito della CPU è quello di leggere le istruzioni e i dati dalla memoria ed eseguire le istruzioni; il risultato della esecuzione di una istruzione dipende dal dato su cui opera e dallo stato interno della CPU stessa, che tiene traccia delle passate operazioni.

In base all'organizzazione della memoria si possono distingure due famiglie di CPU:

  • con architettura von Neumann classica, in cui dati ed istruzioni risiedono nella stessa memoria (è dunque possibile avere codice automodificante). Questa architettura è la più comune, perchè la più semplice e flessibile.
  • con architettura Harvard: i dati e le istruzioni risiedono in due memorie separate. Questa architettura garantisce migliori prestazioni poichè le due memorie possono lavorare in parallelo ma è più complessa da gestire. E' tipicamente utilizzata nei DSP.

Qualunque CPU contiene:

  • una ALU (Unità Aritmetico-Logica) che si occupa di eseguire le operazioni logiche e aritmetiche;
  • una Unità di Controllo che legge dalla memoria le istruzioni, se occorre legge anche i dati per l'istruzione letta, esegue l'istruzione e memorizza il risultato se c'è, scrivendolo in memoria o in un registro della CPU.
  • dei registri, speciali locazioni di memoria interne alla CPU, molto veloci, a cui è possibile accedere molto più rapidamente che alla memoria: il valore complessivo di tutti i registri della CPU costituisce lo stato in cui essa si trova attualmente.

Due registri sempre presenti sono:

  • il registro IP (Instruction Pointer) o PC (Program Counter), che contiene l'indirizzo in memoria della prossima istruzione da eseguire;
  • il registro dei flag: questo registro non contiene valori numerici convenzionali, ma è piuttosto un insieme di bit, detti appunto flag, che segnalano stati particolari della CPU e alcune informazioni sul risultato dell'ultima operazione eseguita.

I flag più importanti sono:

  • + Zero: vale 1 se l'ultima operazione ha avuto risultato zero, altrimenti vale 0.
  • + Carry: vale 1 se l'ultima operazione ha ecceduto la capacità del registro che contiene il risultato, altrimenti vale 0 (esempio: in un registro a 8 bit, che può rappresentare solo numeri da 0 a 255, la somma 178+250 darebbe come risultato 172 e il carry verrebbe posto a 1).
  • + Interrupt: se a questo flag viene assegnato valore 1, la CPU smette di rispondere alle richieste di servizio esterne delle periferiche (i segnali delle linee IRQ) finchè non viene ripristinato al valore 0, o finchè non arriva dall'esterno un segnale di RESET.

A proposto di registri le CPU si distinguono in:


  • basate su stack: i registri sono organizzati in una struttura a stack e tutte le istruzioni operano esclusivamente su questo stack (ad esempio il Transputer); questa architettura ha il vantaggio di non dover specificare su quale registro interno operare (è sempre quello in cima allo stack), ottenendo istruzioni (opcodes) più corte e più semplici da decodificare. L'altra faccia della medaglia è che nel caso sia necessario un dato "sepolto" in fondo allo stack, il suo recupero è un'operazione molto lenta.
  • basate su registri: queste CPU sono dotate di ulteriori registri generici che restano a disposizione dell'utente per memorizzarci valori temporanei. Le istruzioni possono accedere a questi registri generici. La maggioranza delle CPU sono di questo tipo.

Una CPU è un circuito digitale sincrono: vale a dire che il suo stato cambia ogni volta che riceve un impulso da un segnale di sincronismo detto CLOCK: quindi il tempo di esecuzione di una istruzione si misura in cicli di clock, cioè in quanti impulsi di clock sono necessari perchè la CPU la completi. In effetti, una parte importante e delicata di ogni CPU è il sistema di distribuzione che porta il segnale di clock alle varie unità e sottounità di cui è composta, per fare in modo che siano sempre in sincronia: tale sistema si dirama in una struttura ad albero con divisori e ripetitori che giunge ovunque nella CPU. Nei processori più moderni (Pentium, Athlon, PowerPC) questa "catena di ingranaggi" elettronica arriva ad impiegare circa il 30% di tutti i transistor disponibili. La velocità di questa distribuzione determina in maniera diretta la massima frequenza operativa di una CPU: nessuna CPU può essere più veloce del suo critical path, cioè del tempo che impiega il clock per percorrere il tratto più lungo in tutto l'albero di distribuzione del clock. Per esempio, se il segnale di clock di una data CPU impiega un nanosecondo per attraversare tutto il chip ed arrivare fino all'ultima sottounità, questa CPU potrà operare a non più di 1 GHz, perchè altrimenti le sue componenti interne perderebbero la sincronizzazione, con risultati imprevedibili (per motivi di tolleranze e margini di sicurezza, il limite pratico sarà anzi ben minore di 1GHz).
 

Cosa sono i Set di istruzioni?

Le istruzioni di una CPU (instruction set) sono semplicemente dei numeri, detti opcode o codici operativi: in base al loro valore l'unità di controllo intraprende delle azioni predefinite, come per esempio leggere la successiva locazione di memoria per caricare un dato, oppure attivare la ALU per eseguire un calcolo, oppure scrivere il contenuto di un registro in una certa locazione di memoria o in un altro registro, oppure una combinazione di queste.

Per una persona, stendere programmi scrivendo direttamente gli opcode è estremamente noioso e prono all'errore. Per questo motivo si utilizza l'assembly. L'assembly associa un simbolo mnemonico ad ogni istruzione della CPU e introduce una sintassi che permette di esprimere i vari metodi di indirizzamento.

Una caratteristica importante dell'insieme (set) delle istruzioni di una CPU è la sua ortogonalità: vale a dire, il fatto che ogni istruzione che usi i registri possa usarli tutti indifferentemente (tranne quelli "speciali" come l'IP) e che nessun registro sia in qualche modo privilegiato rispetto agli altri perché su di esso si possono compiere operazioni particolari: è stato dimostrato che un set di istruzioni ortogonali, a parità di tempo di esecuzione delle istruzioni e di numero dei registri, è più efficiente di uno non ortogonale.


Messaggio modificato da Mickyhood, 10 March 2016 - 12:17 PM


#2 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:28 AM

Cos'è l' Architettura della CPU

Qualunque CPU possiede almeno due unità distinte:

* una ALU (Unità Aritmetico-Logica) che si occupa di eseguire le operazioni logiche e aritmetiche;

* una Unità di Controllo che legge dalla memoria le istruzioni, se occorre legge anche i dati per l'istruzione letta, esegue l'istruzione e memorizza il risultato se c'è, scrivendolo in memoria o in un registro della CPU.

Oltre a queste possono esserne presenti altre, per esempio:

* una FPU (Floating Point Unit) che si occupa di eseguire calcoli in virgola mobile;

* una MMU (Memory Management Unit) che si occupa di tradurre gli indirizzi di memoria logici in indirizzi fisici, supportando la protezione della memoria e/o uno o più meccanismi di memoria virtuale.

Una generica CPU deve gestire una serie di operazioni sincronizzandole con il resto del sistema: perciò è dotata, oltre a quanto sopra elencato, anche di uno o più bus interni che si occupano di collegare registri, ALU, unità di controllo e memoria: inoltre, all'unità di controllo interna della CPU fanno capo una serie di segnali elettrici esterni che si occupano di tenere la CPU al corrente dello stato del resto del sistema e di agire su di esso. Il tipo e il numero di segnali esterni gestiti possono variare ma alcuni, come il RESET, le linee di IRQ e il CLOCK sono sempre presenti.

Il normale ciclo di operazioni di una CPU à il seguente: l'unità di controllo legge la locazione di memoria indicata dal registro IP, incrementa il registro IP di uno e la decodifica; se la decodifica indica che l'istruzione è più lunga di una locazione di memoria, legge anche il resto dell'istruzione e incrementa l'IP del numero di locazioni lette; esegue l'istruzione; se necessario scrive in memoria (o in altri registri) il risultato. Dopodiché torna a leggere l'indirizzo puntato da IP per caricare ed eseguire un'altra istruzione, all'infinito.

Questo ciclo elementare può essere migliorato in vari modi: per esempio, la decodifica di una istruzione può essere fatta contemporaneamente all'esecuzione della precedente e alla lettura dalla memoria della prossima (instruction prefetch) e lo stesso può essere fatto con i dati che si prevede saranno necessari alle istruzioni (data prefetch). La stessa esecuzione delle istruzioni può essere suddivisa in passi più semplici, da eseguire in stadi successivi, organizzando la unità di controllo e la ALU in stadi consecutivi, come delle catene di montaggio (pipeline): in questo modo più istruzioni possono essere eseguite "quasi contemporaneamente", ciascuna occupando ad un certo istante uno stadio diverso della pipeline.

Il problema di questo approccio sono le istruzioni di salto condizionato, cioè istruzioni che impostano il valore stesso del registro IP, ma solo se al momento della loro esecuzione sono verificate certe condizioni (particolari valori di registri). La CPU non può sapere a priori se dovrà eseguire o no il salto prima di aver eseguito quelle precedenti, cosa deve decidere se impostare la pipeline tenendo conto del salto o no: e in caso di previsione errata la pipeline va svuotata completamente e le istruzioni in corso di decodifica rilette da capo, perdendo molto tempo: e si perde tanto più tempo quanti più stadi ha la pipeline. Per evitare questo i processori moderni hanno unità interne (Branch prediction unit) il cui scopo ? tentare di prevedere se, data una istruzione di salto condizionato e quelle eseguite in precedenza, il salto dovrà essere eseguito o no.

Cos'è la Cache di una CPU?

In informatica, la cache (nascondiglio, deposito segreto, in inglese) è un insieme di dati che viene raccolto in una locazione temporanea, dove possa essere recuperato velocemente su richiesta. Le parole chiave sono "temporanea" e "velocemente": in pratica, questo significa che non c'è nessuna certezza che i dati si trovino nella cache, ma che convenga comunque fare un tentativo per verificarne l'eventuale esistenza.

Tipologie di cache

Ci sono vari tipi di cache, che si distinguono tra loro per il luogo dove vengono utilizzate.

* La CPU cache consiste nell'avere una CPU che possa caricare al suo interno più di una locazione di memoria (generalmente dati utilizzati nell'esecuzione del programma, ma anche le istruzioni che presumilmente saranno successive a quella attualmente in esecuzione"). In questo caso si sfrutta il vantaggio di potere caricare pi? o meno nello stesso tempo più dati consecutivi all'interno della RAM.

* La page cache consiste nell'avere una parte della RAM usata dal sistema operativo in cui si copiano dall'hard disk i dati correntemente in uso. In questo caso, l'accesso alla RAM è più veloce dell'accesso al disco. Poichè la memoria disponibile è generalmente limitata, il sistema operativo cerca di mantenere il più possibile in memoria una pagina, mantenendo una tabella delle pagine che non sono usate correntemente ma lo sono state in passato. Quando occorre caricare una pagina nuova, verrà sovrascritta la più vecchia non ancora in uso.

* la disk cache consiste nell'avere un hard disk che ha al suo interno una parte di RAM, dove possono venire caricati i settori del disco logicamente contigui a quello richiesto. Quando si accede in lettura al disco, nel caso i dati richiesti siano presenti nella cache si evita lo spostamento della testina di lettura del disco stesso, velocizzando il reperimento dell'informazione e contribuendo al ridurre l'usura del disco stesso.

* la web cache è una parte di hard disk dedicata da un server proxy http, oppure dal browser di un utente, a salvare le pagine man mano caricate durante la navigazione, che potranno pertanto essere riproposte senza doverle chiedere di nuovo al sistema remoto. In questo caso, il collo di bottiglia che si vuole eliminare è quello della larghezza di banda. Non sempre è però lecita l'operazione di mettere una pagina in cache: si pensi ad esempio a quando si fa un'operazione bancaria on line! Generalmente è la stessa pagina web che viene inviata insieme alle istruzioni sul suo possibile utilizzo in una cache; in certi casi si può forzare il proprio browser a ricaricare la pagina, tenendo schiacciato il tasto "ctrl" oppure "shift" mentre si clicca sull'icona di ricarica.

* la Google cache, o più propriamente cache dei motori di ricerca, consiste in copie delle pagine web salvate presso i server di un motore di ricerca. Queste vengono utilizzate per due motivi: eseguire ricerche locali all'interno delle pagine ed offrire la possibilità di vedere una copia, per quanto non aggiornata, di una pagina non disponibile, per problemi momentanei o perché è stata rimossa dal server originale.

* la cache DNS è un server DNS che non possiede informazioni autoritative, ma è in grado di chiederle ai server autoritativi e memorizzare le risposte. I server DNS utilizzati dagli utenti di Internet sono normalmente dei server cache. Il DNS usa un meccanismo di scadenza, per cui ogni record recuperato da un server autoritativo è valido per un certo tempo, dopo il quale deve essere scartato.

Funzionamento di una cache

Una cache è associata ad una memoria "principale", in cui risiedono i dati. La cache è tipicamente di capienza inferiore rispetto alla memoria principale, ma il suo utilizzo è più conveniente in termini di tempo di accesso e/o carico sul sistema. Quando è necessario l'accesso ad un dato, questo dato viene prima cercato nella cache. Se è presente e valido, viene utilizzata la copia presente nella cache. Viceversa, viene recuperato dalla memoria principale, e memorizzato nella cache, nel caso serva ancora successivamente.

La memoria principale può essere qualcosa di semplice come un disco rigido, ma anche un complesso database distribuito, come il DNS o il web. In questi casi, la memoria principale può essere modificata senza passare dalla cache, l'utilizzo di una cache comporta problemi di coerenza tra i dati "originali" e quelli presenti nella cache.

è quindi possibile che per validare i dati contenuti nella cache sia necessario interrogare la memoria principale. Questo è quello che fanno i server proxy: chiedono al server HTTP se la pagina che posseggono è stata modificata dopo la sua memorizzazione, e se non lo è evitano di trasferirla e la ripropongono direttamente al cliente.

Una cache riduce anche il carico di richieste che deve essere smaltito dalla memoria principale, e dal collegamento tra questa e l'utilizzatore dei dati. Anche questo può contribuire a migliorare le prestazioni del sistema. Si pensi per esempio ad un server proxy utilizzato da molti utenti: quando un utente richiede una pagina che era già stata richiesta da un altro, il proxy potrà rispondere senza doversi collegare al sito originale, ed eviterà così di caricare sia il sito originale che la rete.

Una cache utilizza un algoritmo per decidere quali dati mantenere e quali scartare, che tiene conto delle pagine utilizzate più di recente, della contiguità delle pagine, ...)

Una cache può indicizzare i dati memorizzati sulla base del loro indirizzo (un blocco di memoria o di dati su disco fisso) o del loro "nome" (cache associativa, ad esempio una pagina web o un nome DNS).

Problematiche

 

L'avere una memoria cache può complicare notevolmente la progettazione di un dispositivo elettronico dato che bisogna mantenere la coerenza tra le memorie cache e la memoria principale. Ci si vede specialmente nelle macchine multiprocessore dove lo sviluppo dei processori e delle schede madri deve tenere conto dei potenziali problemi di coerenza delle cache e deve provvedere adeguati meccanismi che evitino corruzioni dei dati per problemi di mancata sincronizzazione tra cache e memoria principale.


Messaggio modificato da Mickyhood, 19 November 2014 - 15:36 PM
sistemato testo


#3 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:28 AM

Cos'è l' ALU?

L'ALU (Arithmetic Logic Unit, Unità Aritmetico-Logica) è l'unita designata all'elaborazione dei dati in un microprocessore.

L'ALU è formata da un insieme di porte logiche opportunamente collegate. Queste porte logiche nel loro complesso provvedono ad eseguire tutte le operazioni aritmetiche e logiche gestite dal microprocessore.

Le prime ALU erano in grado di eseguire nativamente solo le operazioni di somma, sottrazione e shifting di bit. Le operazioni più complesse come le operazioni di moltiplicazioni o divisione venivano emulate utilizzato ripetutamente somme o sottrazioni. Con l'evolvere dell'elettronica si è riuscito a integrare nelle ALU anche le operazioni di divisione e moltiplicazione. Le ALU non sono in grado di svolgere tutte le operazioni supportate dai microprocessori moderni, infatti le operazioni in virgola mobile o le operazioni multimediali (tipo AltiVec o MMX) sono svolte da unità specializzate che non risiedono nell'ALU.

Cos'è una FPU?

La FPU (floating-point unit, unità di calcolo in virgola mobile) è una parte della CPU specializzata nello svolgere i calcoli in virgola mobile. La maggior parte delle operazioni svolte sono semplice aritmetica (come addizioni o moltiplicazioni), ma alcuni sistemi sono in grado di svolgere calcoli esponenziali o trigonometrici (come estrazioni di radice o il calcolo del seno).

Non tutte le CPU possiedono una FPU dedicata: alcune usano degli emulatori per svolgere il calcolo in virgola mobile con una ALU; ciò risparmia il costo di una unità di calcolo aggiuntiva, ma il procedimento è sensibilmente più lento.

In alcune CPU il calcolo in virgola mobile è gestito in modo completamente separato dal calcolo intero, con registri dedicati è schemi di clock indipendenti. Le operazioni di addizione e di moltiplicazione sono generalmente eseguite all'interno di una pipeline, ma operazioni più complicate, come la divisione, a volte non lo sono, e alcuni sistemi hanno addirittura un circuito dedicato alla divisione.

Cos'è una MMU?

Unità di gestione della memoria (dall'inglese Memory Management Unit, abbreviato MMU), è il nome dato a una classe di componenti hardware che gestisce le richieste di accesso alla memoria generate dalla CPU.

Una MMU può avere vari compiti, tra cui la traslazione (o traduzione) degli indirizzi virtuali in indirizzi fisici (necessaria per la gestione della memoria virtuale), la protezione della memoria, il controllo della cache della CPU, l'arbitraggio del bus, e, in architetture più semplici (specialmente nei sistemi a 8-bit), la commutazione di banchi di memoria.

Le MMU moderne generalmente suddividono lo spazio degli indirizzi virtuali (l'intervallo di indirizzi accessibili dal processore) in pagine di memoria dimensione 2N, tipicamente pochi kilobytes. Gli N bit meno significativi dell'indirizzo (l‘offset all'interno della pagina) rimangono invariati, mentre i bit restanti rappresentano il numero virtuale della pagina. La MMU contiene una tabella delle pagine indicizzata (possibilmente associativamente) dal numero della pagina. Ogni elemento di questa tabella (detto PTE o Page Table Entry) restituisce il numero fisico della pagina corrispondente a quello virtuale, che, combinato con l'offset della pagina, forma l'idirizzo fisico completo.

Un PTE può includere anche informazioni su quando la pagina è stata usata per l'ultima volta (per l'algoritmo di sostituzione LRU), quale tipo di processi (utente o supervisore) puo leggerla e scriverla, e se dovrebbe essere inserita nella cache.

È possibile che non esista memoria fisica (RAM) allocata a una data pagina virtuale. In questo caso, la MMU segnala una condizione di «pagina di memoria mancante» (page fault) alla CPU. Il sistema operativo interviene per gestire questa condizione, cerca di trovare una pagina libera nella RAM e di creare una nuova PTE nella quale mappare l'indirizzo virtuale richiesto nell'indirizzo fisico della pagina trovata. Quando non c'è spazio disponibile nella RAM per una nuova pagina di memoria, può essere necessario scegliere una pagina esistente utilizzando un algoritmo di sostituzione, farne una copia su disco rigido e rimpiazzarla con quella nuova. Analogamente, quando non ci sono PTE inutilizzate a disposizione, il sistema operativo deve liberarne una.

In alcuni casi un page fault puo indicare un errore nel software. Uno dei benefici della MMU è la protezione della memoria: un sistema operativo puo usarla per proteggere la memoria da processi erranti, impedendo a un processo di accedere a locazioni di memoria non autorizzate. Tipicamente, il sistema operativo assegna ad ogni processo il suo spazio di indirizzamento virtuale.

La MMU riduce anche il problema della frammentazione della memoria. Dopo che blocchi di memoria precedentemente allocati sono stati liberati, la memoria libera puo diventare frammentata (discontinua) quindi il blocco più grande di memoria libera contigua puo essere molto più piccolo del totale. Con la memoria virtuale, blocchi non contigui di memoria fisica possono essere mappati in indirizzi virtuali contigui.

La maggior parte delle MMU moderne, come quelle descritte, funzionano con sistemi di memoria paginata. Esistono tuttavia altri sistemi per organizzare la memoria, come la segmentazione e l'indirizzamento base-limite, che ne è uno sviluppo. Alcune MMU funzionano anche con questi sistemi di memoria, che benché meno frequenti sono utilizzati in alcune architetture moderne di rilevanza notevole. Ad esempio, l'architettura x86 può funzionare con memoria segmentata oltre che paginata.



Cos'è il Clock?

n Informatica per clock si intende un segnale di temporizzazione di durata fissa utilizzato per sincronizzare il funzionamento dei dispositivi elettronici.

Il ciclo di clock è il tempo che trascorre tra l'esecuzione di due colpi di clock successivi. La frequenza di clock è il numero di colpi di clock che vengono eseguiti in una determinata unità di tempo. L'unità di misura usata è l'hertz, ovvero il numero di cicli di clock eseguiti in un secondo. Poiché i clock sono in genere molto veloci, si usano comunemente i multipli kilohertz (Khz), megahertz (Mhz) e gigahertz (Ghz) per indicare mille, un milione e un miliardo di cicli al secondo.

Prendiamo, ad esempio, il funzionamento di un processore. Questo è composto da vari circuiti logici preposti ad eseguire operazioni diverse. Tali circuiti devono interagire tra loro e lo devono fare scambiandosi informazioni. Perché tale operazione avvenga correttamente però è necessario che ad ogni circuito sia indicato il momento esatto in cui può ritenere validi i segnali che riceve in ingresso. Il clock è il segnale che si occupa di questo, ed è condiviso tra tutti i circuiti. La sua frequenza quindi deve essere calcolata in modo tale che il ciclo di clock sia sufficientemente lungo da consentire a tutti i circuiti, anche il più lento, di completare correttamente le proprie operazioni.

Più è breve, e quindi maggiore è la frequenza, maggiori sono le operazioni che possono essere eseguite nello stesso lasso di tempo. Per aumentare le prestazioni di una CPU quindi è possibile agire sul Clock. Visto che tale valore è limitato dal circuito logico più lento, è facile che alcuni circuiti molto complessi causino colli di bottiglia che riducono molto le prestazioni generali. Per ovviare a questo problema è possibile ridurre la lunghezza massima dei circuiti logici spezzando in più parti quelli che lo sono eccessivamente. Le operazione quindi non sarebbero più completate in un solo ciclo di clock.

Ad esempio poniamo che un processore abbia circuiti logici che in media richiedono 1 ns (1/1.000.000.000 di secondo) per portare a termine i calcoli, ma il circuito più lento ne richiede 5. È possibile spezzare tale circuito in cinque parti, ottenendo così circuiti con latenze di 1 ns, consentendo la riduzione del clock. In particolar modo se tale circuito è sfruttato raramente la CPU ottiene un considerevole aumento di prestazioni. Tuttavia vi sono dei limiti nell'uso di questa tecnica. Un unico circuito logico infatti, nell'eseguire la medesima operazione, è complessivamente più veloce di più circuiti più piccoli in serie. Aumentare la frequenza di clock in questo modo può portare ad effettivi benefici nelle prestazioni solo se si ottiene un ragionevole compromesso.

Cos'è l'Overclocking?

In Informatica overclocking è l'operazione di spingere un componente elettronico (in genere una CPU) ad una frequenza maggiore rispetto a quella per cui è stato progettato (overclock), al fine di migliorarne le prestazioni. Questo procedimento è analogo alla elaborazione ("truccare" in gergo) delle automobili e delle moto. In italia viene anche utilizzato il neologismo overcloccare (italianizzato dal termine inglese overclocking).

Nel caso delle CPU, prese ad esempio, ciò che viene alterato è il loro orologio interno, che determina quanti cicli di operazioni il processore (il "motore") del computer deve eseguire nell'unità di tempo. Cambiando la frequenza alla quale questi cicli vengono eseguiti, in alcuni casi, è possibile aumentare o diminuire la velocità del processore.

A livello pratico si tratta di una operazione perfettamente legale - premessa la proprietà dell'hardware - ma che invalida istantaneamente la garanzia del prodotto oggetto della manipolazione, anche se in caso di rottura di un componente è difficile dimostrarne la causa. L'overclocking può essere eseguito in modo più o meno spinto ed i rischi sono molteplici: tali rischi vanno dall'elettromigrazione forzata degli elettroni, al surriscaldamento della CPU.


Messaggio modificato da Mickyhood, 19 November 2014 - 15:35 PM
sistemato testo


#4 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:28 AM

Cos'è l' MMX?

L'MMX è un instruction set SIMD, creato da Intel ed introdotto per la prima volta con i microprocessori Pentium MMX. Deriva da un oggetto simile incluso nell'i860. L'MMX è stato supportato in seguito dalla maggior parte dei processori IA-32 di Intel e di altri produttori.

Si è supposto che MMX fosse l'acronimo di MultiMedia eXtensions o di Multiple Math eXtension, sebbene ufficialmente Intel non abbia mai specificato il significato della sigla.

Per semplificare la progettazione gli ingegneri Intel decisero di preservare la vecchia architettura alla quale venne aggiunta l'unità MMX che operava tramite un cambio di contesto del processore. L'unità MMX utilizza i registri IA-32 della FPU. Questa infelice scelta progettuale impediva di utilizzare istruzioni in virgola mobile e istruzioni MMX contemporaneamente. Quando il processore incontrava istruzioni per la FPU doveva salvare i dati MMX per eseguire le istruzioni dell'FPU. Per massimizzare le prestazioni i programmatori utilizzavano il processore in un solo dei due modi possibili, isolando le parti MMX che venivano eseguite in modo esclusivo in modo da evitare il più possibile i lenti cambi di contesto.

Un altro difetto delle istruzioni MMX è che erano istruzioni in grado di operare solo su dati interi. I registri a 64 bit della FPU venivano utilizzati per memorizzare 2 dati a 32 bit oppure 4 dati a 16 bit o 8 dati a 8 bit. Nell'architettura del i860 l'utilizzo di questi vettori formati da dati interi era sensato dato che questi vettori venivano utilizzati per la grafica 2D e 3D. Ma nei personal computer moderni la grafica viene gestita dalla scheda grafica e quindi il mancato supporto delle operazioni in virgola mobile rappresenta una grave mancanza.

Intel successivamente decise di espandere le istruzioni MMX e sviluppò le istruzioni SSE. Queste istruzioni erano anch'esse istruzioni SIMD ma queste supportavano le operazioni in virgola mobile e utilizzavano dei registri separati a 128 bit. Questo consentiva l'utilizzo delle istruzioni SSE in contemporanea con la FPU e rappresentavano un notevole miglioramento alle istruzioni MMX. Le istruzioni SSE vennero successivamente estese con le SSE2 e poi le SSE3. Supportare questi set di istruzioni implica il supporto del MMX per retrocompatibilità.

L'azienda concorrente di Intel, l'AMD copiò le istruzioni MMX espandendole e chiamò il suo set di istruzioni 3DNow!.

Cosa sono le SSE?

SSE (Streaming SIMD Extensions) è un instruction set SIMD progettato dalla Intel ed utilizzato nel suo processore Pentium III come risposta al 3DNow! prodotto da AMD, che era presente sul mercato da circa un anno. Era originariamente conosciuto con la sigla KNI, da Katmai New Instructions (Katmai era il nome in codice del primo Pentium III). Durante il progetto Katmai Intel cercava di distinguerlo dalla sua precedente linea di prodotti, in particolare il Pentium_II. AMD aggiunse successivamente il supporto per le istruzioni SSE nel suo processore Athlon_XP.

Il primo tentativo di SIMD da parte della Intel, la tecnologia MMX, fu una delusione. MMX ha principalmente due problemi: riutilizza i registri a virgola mobile rendendo impossibile per la CPU lavorare contemporaneamente sui dati in virgola mobile e i dati SIMD contemporaneamente, ma può operare solo sugli interi.

SSE aggiunge otto nuovi registri a 128 bit con nomi che vanno da XMM0 a XMM7. Ogni registro raggruppa quattro numeri a virgola mobile a 32 bit (precisione singola).

Poiché questi registri a 128 bit rappresentano stati aggiuntivi che il sistema operativo deve preservare durante il cambio di contesto dei task, essi sono disabilitati finché il sistema operativo non li abilita esplicitamente. Questo significa che il SO deve essere programmato per utilizzare le istruzioni FXSAVE e FXRSTR, che sono la coppia di istruzioni introdotte da SSE per salvare in un'unica operazione i registri x86, MMX, 3DNow! e SSE. Il supporto per queste istruzioni fu aggiunto velocemente a tutti i principali sistemi operativi a 32 bit.

Poiché SSE aggiunge il supporto per la virgola mobile, fu molto più utilizzato di MMX dato che tutte le schede video gestiscono internamente i calcoli sui numeri interi. Con l'introduzione di SSE2 anche gli interi possono essere utilizzati con i nuovi registri XMM, perciò l'istruction set MMX adesso è ridondante.

Sul Pentium III, comunque, SSE è implementato utilizzando gli stessi circuiti della FPU, il che significa che la CPU non può inviare nella pipeline contemporaneamente le istruzioni SSE e quelle riguardanti la virgola mobile. I registri separati permettono di mescolare le operazioni SIMD e a virgola mobile, ma senza le prestazioni raggiunte passando esplicitamente dalla modalità a virgola mobile a quella MMX.

Il Pentium 4 della Intel implementa SSE2, un estensione del set di istruzioni SSE. Le caratteristiche principali di SSE2 sono il supporto per i numeri a virgola mobile a doppia precisione (64 bit) e il supporto per gli interi nel vettore di registri a 128 bit introdotti con SSE, il che permette al programmatore di utilizzare i registri MMX. Lo stesso SSE2 è stato esteso da SSE3 introdotto con in core Prescott delle ultime generazioni di Pentium 4.

Cosa sono le SSE2?

SSE2 è un instruction_set SIMD dell'architettura IA-32, sviluppato da Intel, che estende la precedente versione SSE e ha la funzione di soppiantare definitivamente le istruzioni MMX.

SSE2 aggiunge il supporto per il calcolo in virgola_mobile a doppia precisione a 64 bit, e per i 64, 32, 16 e 8 bit le operazioni con numeri interi sugli 8 registri 128-bit XMM già introdotti con le il set SSE. Non vengono invece aggiunti "program state" addizionali rispetto a quelli già presenti.

L'aggiunta di operazioni SIMD su interi a 128 bit consente ai programmatori di evitare completamente l'utilizzo degli otto registri a 64 bit delle MMX. Inquesto modo è possibile eseguire operazioni SIMD sia su valori interi che su numeri in virgola mobile senza la perdita di tempo necessaria precedentemente per passare dal "mode" MMX a quello SSE.

Altre istruzioni del set SSE2 consentono di effettuare un controllo della cache per limitare l'occupazione di questa memoria con dati inutili quando vengono elaborate grandi quantità di dati.

I primi processori ad implementare le istruzioni SSE2 sono stati i Pentium_4 con core Willamette nel 2001.

Successivamente questo set è stato esteso per mezzo delle SSE3, conosciute anche con il nome di "Prescott New Instructions", introdotte nei Pentium 4 di ultima generazione con core Prescott agli inizi del 2004.

La concorrente di Intel, AMD ha aggiunto il supporto alle SSE2 all'interno dei propri processori solo successivamente, nel 2003, attraverso le CPU Opteron e Athlon_64 che fanno parte delle prime architetture compatibili con i 64 bit prodotte da AMD. Comunque AMD ha esteso a sua volta il set SSE2 in maniera indipendente da Intel, raddoppiando il numero dei registri XMM e portandoli quindi da 8 a 16 (da XMM0 a XMM15). Tali registri aggiuntivi sono visibili solamente quando il processore funziona in modalità 64 bit, che per AMD prende il nome di AMD64. Quando Intel è passata anch'essa al supporto dei 64 bit nei suoi processori con architettura a 32 bit (Pentium 4 e Xeon) utilizzando la tecnologia EM64T, ha incrementato il numero dei registri al pari di quanto fatto da AMD. È da ricordare però che mentre l'architettura a 64 bit introdotta da Intel con le EM64T è molto simile a quella AMD64, differisce molto da quella utilizzate da diversi anni nei processori Itanium che sono progettati esclusivamente per i 64 bit e poggiano sull'architettura IA-64.

Cosa sono le SSE3?

Le SSE3, conosciute anche attraverso il proprio nome in codice usato presso la Intel durante la fase di sviluppo, Prescott New Instructions o PNI, rappresentano la terza generazione delle librerie SSE dedicate all'architettura IA-32. Sono a loro volta un instruction_set SIMD.

I primi set SIMD sulle piattaforme x86 sono stati l'MMX, e il 3DNow! (usato solo da parte di AMD), e successivamente SSE e SSE2.

Intel ha introdotto le istruzioni SSE3 agli inizi del 2004 con il Pentium_4 basato sul core Prescott, mentre AMD ha provveduto a implementarne il supporto nei suoi Athlon_64, attraverso la "revision" E, solo nell'aprile 2005.

Il set SSE3 aggiunge 13 nuove istruzioni rispetto al predecessore SSE2; la più rivoluzionaria di queste istruzioni consente di lavorare orizzontalmente in un registro in contrapposizione con quanto avveniva precedentemente in cui era possibile solo verticalmente. Più precisamente, sono state aggiunte le istruzioni per sommare e sottrarre i molteplici valori memorizzati in un singolo registro. Tali istruzioni semplificano l'implementazione di un gran numero di operazioni DSP e 3D. È inoltre presente una nuova istruzione per convertire i numeri a virgola mobile in interi senza interferire con il normale flusso dell'elaborazione della CPU, quindi senza creare stalli nella pipeline.


Messaggio modificato da Mickyhood, 19 November 2014 - 15:34 PM
sistemato testo


#5 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:28 AM

Cosa sono le 3DNow?

3DNow! è il nome di un'estensione multimediale creata da AMD per i propri processori, a partire dal K6-2 del 1998. Più tecnicamente, è instruction set SIMD aggiuntivo al tradizionale instruction set x86, rivolto a migliorare le prestazioni nel calcolo vettoriale richiesto da molte applicazioni grafiche. Inizialmente era un mero miglioramento dell'MMX di Intel con l'aggiunta del calcolo in virgola mobile oltre a quello intero. Intel avrebbe in seguito introdotto un set molto simile, ma incompatibile, chiamato SSE, col Pentium III.

AMD ha migliorato questo set di istruzioni nel tempo. Il primo aggiornamento fu chiamato semplicemente Enhanced 3DNow!; introdotto con la prima generazione di Athlon, introduceva 19 nuove istruzioni. Il secondo aggiornamento fu denominato 3DNow! Professional, e debuttò con l'Athlon XP. In pratica questa versione includeva completamente il SSE della Intel e lo integrava con il 3DNow!.

Un vantaggio del 3DNow! è che può addizionare e moltiplicare due numeri sullo stesso registro, mentre l'SSE può trattare solo operandi in posizioni uguali su registri diversi. Questa capacità, chiamata orizzontale da Intel, è la maggiore aggiunta all'SSE3, rilasciato recentemente.

Viceversa, una debolezza del 3DNow! è che può memorizzare solo due numeri in un registro, a confronto dei quattro dell'SSE. Comunque le sue istruzioni sono in generale più veloci nell'esecuzione.

Inoltre 3DNow! condivide gli stessi registri dell'MMX, mentre SSE ha i suoi propri registri. Dato che i registri di 3DNow! e di MMX sono usati dalle tradizionali FPU x87, le istruzioni di queste e del 3DNow! non possono essere eseguite contemporaneamente. Tuttavia, dato che l'unità 3DNow! è assimilata ad una FPU, essa può usare le istruzioni x87 FNSAVE e FRSTR per salvare e caricare le informazioni presenti nei registri. Questo significa che non sono necessarie modifiche al sistema operativo per supportare il 3DNow!.

Al contrario, l'SSE utilizza per salvare e caricare i registri delle istruzioni originali, chiamate FXSAVE e FXRSTR, aggiunte all'instruction set x87 per salvare solo i registri SSE e non anche i registri x87 (quelli usati dalla FPU, dall'MMX e dal 3DNow!). Per usare queste istruzioni FX* dovette essere introdotta una modalità protetta modificata, chiamata "enhanced mode"; l'unica differenza era che in quest'ultima abilitava l'uso dell'SSE e delle istruzioni FX*, mentre la precedente lo impediva. I sistemi operativi che supportavano l'SSE entravano nella enhanced mode, negli altri non era prevista questa possibilità.

Architettura Processori a 32 e 64bit

In informatica, 32 bit è un aggettivo usato per indicare che, in una determinata architettura, gli interi sono indicati con al massimo 32 bit di larghezza o per descrivere l'architettura di una determinata CPU, che usa i registri interni, il bus degli indirizzi o bus dei dati di quella dimensione.

Il termine "32 bit" può essere usato per descrivere la dimensione di:

* Una unità di dati

o Una unità di 4 bit (una cifra esadecimale) è chiamata anche nibble.

o Una unità di 8 bit è chiamata anche byte

* I registri interni di una CPU o della ALU che deve funzionare usando quei registri.

o Una unità di dati di questa dimensione viene detta anche word.

o Una CPU a 32 bit riesce a gestire (in prima approssimazione) 32 bit alla volta.

* Indirizzi di memoria

* Dati trasferiti per ogni lettura o scrittura alla memoria centrale

Il termine 32 bit è anche usato per una generazione di computer nella quale si usa in genere un processore a 32 bit.

L'intervallo di valori interi che è possibile memorizzare in 32 bit parte da 0 fino a 4294967295, o da -2147483648 fino a 2147483647 usando la codifica complemento a due. Quindi un processore con uno spazio degli indirizzi a 32 bit può accedere direttamente a 4GB di memoria (se viene indirizzata al byte).

Il bus degli indirizzi e dei dati usati esternamente potrebbero avere dimensione superiore ai 32 bit ma entrambi sono manipolati internamente come quantità a 32 bit. Per esempio, il Pentium Pro è una macchina a 32 bit, ma il bus esterno degli indirizzi è ampio 36 bit e il bus dati esterno è di 64 bit.

In informatica, 64 bit è un aggettivo usato per indicare che, in una determinata architettura, gli interi sono indicati con al massimo 64 bit di larghezza o per descrivere l'architettura di una determinata CPU, che usa i registri interni, il bus degli indirizzi o bus dei dati di quella dimensione.

Il termine "64 bit" può essere usato per descrivere la dimensione di:

* Una unità di dati

o Una unità di 4 bit (una cifra esadecimale) è chiamata anche nibble.

o Una unità di 8 bit è chiamata anche byte

* I registri interni di una CPU o della ALU che deve funzionare usando quei registri.

o Una unità di dati di questa dimensione viene detta anche word.

o Una CPU a 64 bit riesce a gestire (in prima approssimazione) 64 bit alla volta.

* Indirizzi di memoria

* Dati trasferiti per ogni lettura o scrittura alla memoria centrale

Ad oggi (2005) le CPU a 64 bit sono comuni nei server, e si stanno diffondendo sempre più anche nell'ambito dei personal computer (precedentemente a 32 bit), con le architetture AMD64, EM64T e PowerPC 970

Benché una CPU possa essere a 64 bit internamente, il suo bus dati esterno o il bus indirizzi possono avere dimensioni differenti, maggiori o minori, e il termine viene spesso usato per indicare anche la dimensione di questi bus. Per esempio, molte delle macchine attualmente in circolazione con processori a 32 bit usano internamente dei bus a 64 bit, e possono a volte essere indicati come a "64 bit" per questo motivo. Il termine può essere usato anche per indicare la dimensione dei codici operativi presenti nel set delle istruzioni del processore o di altri dati. In mancanza di ulteriori chiarimenti, comunque, un'architettura descritta come "64 bit" ha generalmente i registri del processore larghi 64 bit e gestisce dati di questa dimensione sia internamente che esternamente.


Messaggio modificato da Mickyhood, 19 November 2014 - 15:34 PM
testo sistemato


#6 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:29 AM

Implicazioni architetturali

I registri, in un processore, sono generalmente divisi in tre gruppi: interi, a virgola mobile e altri. In tutti i processori general purpose, solo i registri interi sono in grado di contenere puntatori (cioè, l'indirizzo di un qualche dato in memoria). Gli altri registri non possono contenere puntatori da utilizzare per leggere o scrivere la memoria, e quindi non possono essere utilizzati per oltrepassare le restrizioni imposte dalle dimensioni dei registri interi.

La quasi totalità dei processori general purpose (con le importanti eccezioni della architettura ARM e della maggior parte delle implementazioni a 32 bit della architettura MIPS) odierni hanno integrata al loro interno la gestione della matematica a virgola mobile, che può o meno fare uso di registri a virgola mobile larghi 64 bit per contenere i valori da elaborare. La architettura AMD64, per esempio, contiene una unità SSE che include 16 registri a 128 bit, oltre alla tradizionale unità x87 che ha, al suo interno, 8 registri a 80 bit in una configurazione a stack. Per contrasto, la famiglia Alpha a 64 bit definisce 32 registri a virgola mobile da 64 bit in aggiunta ai suoi 32 registri interi a 64 bit.

Limitazioni di memoria

La maggior parte delle CPU sono progettate in maniera da far sì che un singolo registro intero possa contenere l'indirizzo di un qualunque dato all'interno dello spazio di indirizzamento della memoria virtuale. Per cui, il numero totale di indirizzi nella memoria virtuale — la totalità dei dati che il computer può mantenere nell'area di lavoro — è determinato dalla dimensione di questi registri. A partire dagli anni 60 con il System 360 della IBM, continuando negli anni 70 con (insieme a molti altri) il minicomputer DEC VAX ed infine negli anni 80 con il processore Intel 80386, si sviluppò un consenso de facto sul fatto che 32 bit fosse una buona dimensione per i registri. Un registro a 32 bit consente di indirizzare 232 indirizzi, o 4 gigabyte di memoria. Nel periodo in cui queste architetture vennero progettate, 4 gigabyte di memoria erano talmente aldilà della quantità di memoria normalmente installata da venire considerati sufficienti. Un'altra importante ragione è che 4 miliardi (circa) di indirizzi bastano per assegnare una unica referenza a molti oggetti fisicamente numerabili in applicazioni come i database.

Col passare del tempo e con la continua diminuzione dei costi della memoria (vedi la legge di Moore), ora dei primi anni 90, cominciarono ad apparire macchine con quantitativi di RAM vicini ai 4 gigabyte, e l'uso di uno spazio di memoria virtuale maggiore di 4 gigabyte cominciò ad essere richiesto per gestire certe tipologie di problemi. In risposta, un certo numero di aziende cominciò a rilasciare nuove famiglie di chip con architettura a 64 bit, inizialmente per i supercomputer e le macchine (workstation e server) di fascia alta. La tecnologia a 64 bit è gradualmente arrivata anche sui normali PC, con il PowerMac(2003) e l'iMac(2004) della Apple che usano entrambi processori a 64 bit (Apple li chiama G5), e l'architettura AMD "AMD64" (copiata da Intel sotto il nome "EM64T") che si diffonde nei PC di fascia alta.

32 contro 64 bit

Il passaggio da un'architettura a 32 bit verso una a 64 comporta un cambiamento profondo, in quanto la maggior parte dei sistemi operativi devono venire pesantemente modificati per trarre vantaggio dalla nuova architettura. Anche gli altri programmi devono prima essere "portati" per poter sfruttare le nuove funzionalità; i vecchi programmi sono generalmente supportati attraverso una modalità di compatibilità hardware (dove cioè il processore supporta anche il vecchio set di istruzioni a 32 bit), attraverso l'emulazione software, o anche attraverso l'implementazione del nucleo di un processore a 32 bit all'interno del chip stesso del processore (come sui processori Itanium2 della Intel). Una significativa eccezione è l'AS/400, il cui software gira su una ISA(Instruction Set Architecture) virtuale implementata con un programma a basso livello. Questo programma, chiamato TIMI, è tutto ciò che bisogna riscrivere per portare l'intero sistema operativo e tutti i programmi su una nuova piattaforma, come quando IBM migrò la linea dai POWER a 32 bit a quelli a 64. Un'altra eccezione significativa è la z/Architecture di IBM che fa girare senza problemi applicazioni con diversi tipi di indirizzamento (24,31 e 64 bit) in contemporanea.

Benché le architetture a 64 bit rendano indiscutibilmente più semplice lavorare con quantitativi massicci di dati come per il video digitale, nell'elaborazione scientifica, e nei grossi database, ci sono state parecchie discussioni riguardo a quanto esse o le loro modalità 32 bit compatibili siano più veloci, in altri tipi di lavori, rispetto a sistemi a 32 bit di prezzo analogo.

Teoricamente, alcuni programmi potrebbero essere più veloci in modalità a 32 bit. Le istruzioni a 64 bit portano via più spazio di quelle a 32, per cui è possibile che certi programmi a 32 bit possano entrare nella velocissima memoria cache della CPU laddove quelli a 64 non ci riescano. In altri termini, usare 64 bit per effettuare operazioni che potrebbero essere gestite a 32, comporta un inutile spreco di risorse (memoria centrale, cache, ecc.). Comunque, in applicazioni come quelle scientifiche, i dati elaborati spesso usano in maniera naturale blocchi di 64 bit, e saranno quindi più veloci su un'architettura a 64 bit in quanto la CPU è progettata per lavorare direttamente con queste dimensioni piuttosto che costringere il programmi ad eseguire più passi per ottenere lo stesso risultato. Queste valutazioni sono complicate anche dal fatto che durante la definizione delle nuove architetture, i progettisti del set di istruzioni hanno colto l'opportunità per apportare modifiche che vanno a colmare lacune di quello vecchio, aggiungendo nuove caratteristiche tese a migliorare le prestazioni (come, ad esempio, i registri aggiuntivi nella architettura AMD64).

Pro e contro

Un errore comune è quello di ritenere che le architetture a 64 bit non siano migliori di quelle a 32 a meno che non si abbiano più di 4 gigabyte di memoria. Questo non è completamente vero:

* Alcuni sistemi operativi riservano per uso proprio una porzione dello spazio di indirizzamento di ciascun processo, riducendo di fatto lo spazio libero indirizzabile dai programmi. Per esempio le DLL di Windows XP e i componenti di sistema che girano in modalità utente vengono mappati all'interno dello spazio di indirizzamento di ogni processo, lasciando solo 2 o 3 gigabyte (dipende dalla configurazione del sistema) di spazio di indirizzamento disponibile, anche se la macchina ha 4 gigabyte di RAM. Questa restrizione non è presente nella versione a 64 bit di Windows.

* La mappatura in memoria dei file sta diventando sempre più problematica sui sistemi a 32 bit, specialmente dopo l'introduzione di soluzioni economiche per la scrittura di DVD. File da 4 GB sono ormai usuali, e viste le dimensioni la loro mappatura in memoria su macchine a 32 bit è complicata. Questo porta a problemi prestazionali, dal momento che la mappatura in memoria resta uno dei metodi più efficienti per i trasferimenti dal disco alla memoria, quando viene implementata correttamente dal sistema operativo.

Il maggior svantaggio delle architetture a 64 bit rispetto a quelle a 32 risiede nel fatto che gli stessi dati occupano uno spazio leggermente maggiore in memoria (a causa dei puntatori più larghi, altri tipi di dati e allineamenti -i compilatori in genere inseriscono dei byte inutilizzati allo scopo di allineare l'indirizzo dei dati a una qualche potenza del 2, spesso pari al numero di bit dell'architettura-). Questo incrementa le richieste di memoria dei programmi, e può avere implicazioni nell'uso efficiente della cache (che ha dimensioni limitate). Mantenere parzialmente un modello di dati a 32 bit è un modo, in genere ragionevolmente efficiente, di gestire la situazione. Infatti, il sistema operativo z/OS, decisamente orientato alle prestazioni, usa questo approccio e costringe il codice eseguibile a risiedere in un numero qualsiasi di spazi di indirizzamento a 31 bit mentre i dati possono opzionalemente risiedere in regioni a 64 bit.


Messaggio modificato da Mickyhood, 19 November 2014 - 15:36 PM
sistemato testo


#7 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:29 AM

Modelli di dati a 64 bit

Convertire applicazioni scritte in linguaggi ad alto livello da 32 a 64 bit presenta diversi gradi di difficoltà. Un problema ricorrente è che l'autore del programma ha dato per scontato il fatto che un puntatore (una variabile che contiene un indirizzo di memoria) ha la stessa dimensione di una variabile di un qualche altro tipo e che sia quindi possibile spostare valori tra i due tipi senza perdere informazioni. Questo assunto è valido su alcune macchine a 32 (e anche su alcune a 16), ma fallisce su architetture a 64. Il linguaggio C e il suo discendente C++ rendono particolarmente semplice compiere questo tipo di errore.

Per evitare questo problema, in C e C++, l'operatore sizeof() può essere usato per determinare le dimensioni dei vari tipi di dati, nel caso su queste si debbano prendere delle decisioni durante l'esecuzione. Inoltre, i file limits.h (standard C99) e climits (standard C++) danno ulteriori informazioni utili; sizeof() si limita a restituire la dimensione in byte, il che a volte non è sufficiente, perché neanche la dimensione del byte è ben definita in C e C++. È necessario essere prudenti e usare il tipo ptrdiff_t (nel file header <stddef.h>) quando si effettuano operazioni di aritmetica dei puntatori; troppo codice usa invece (sbagliando) i tipi "int" e "long".

Ne il C, ne il C++ definiscono la lunghezza in bit di un puntatore, int o long.

In molti ambienti di programmazione su sistemi a 32 bit le variabili puntatore, "int" e "long" sono tutte lunghe 32 bit.

In molti ambienti di programmazione a 64 bit, le variabili "int" sono ancora lunghe 32 bit, ma le "long" e i puntatori passano a 64. Questo viene descritto come avente un modello dati di tipo LP64. Un'altra alternativa è il modello ILP64 dove anche il tipo "int" passa a 64 bit. Ad ogni modo, nella maggior parte dei casi le modifiche necessarie per migrare del codice verso i 64 bit sono relativamente semplici, e molti programmi scritti correttamente possono essere semplicemente ricompilati senza variazioni. Una ulteriore alternativa è il modello LLP64 che mantiene la compatibilità con il codice a 32 bit, mantenendo a 32 bit i tipi "int" e "long". Il tipo "long long" ("LL") è ad almeno 64 bit su tutte le piattaforme comprese quelle a 32 bit.

È da notare che il modello di programmazione è una scelta da fare in base al compilatore, e ne possono coesistere più di uno per lo stesso sistema operativo. Comunque in genere prevale il modello utilizzato dalle API del sistema operativo.

Un'altra considerazione riguarda il modello dati usato per i driver. I driver formano la maggior parte del codice presente nei sistemi operativi moderni (benché molti potrebbero non essere in esecuzione mentre il sistema operativo sta girando). Molti driver usano pesantemente i puntatori ed in certi casi devono caricare puntatori di una dimensione precisa nei registri hardware di gestione del DMA. Per esempio, un driver per un dispositivo PCI a 32 bit che necessiti che quest'ultimo carichi in memoria dati ad un indirizzo oltre la barriera dei 4 gigabyte non potrebbe portare a termine l'operazione poiché il puntatore è troppo grande per essere contenuto nei registri del dispositivo. Il problema si risolve facendo sì che il sistema operativo tenga in considerazione le restrizioni del dispositivo al momento di generare le richiesta DMA.

Cronologia

* 1991: MIPS Technologies produce la prima CPU a 64 bit, in qualità di terza revisione della loro architettura (di tipo RISC) MIPS, il modello R4000. La CPU viene resa disponibile nel 1991 e usata nelle workstation grafiche SGI a cominciare dalla serie Crimson, usando la versione a 64 bit del sistema operativo IRIX.

* 1992: La Digital Equipment Corporation introduce l'architettura DEC Alpha nata dal progetto PRISM.

* 1994: Intel annuncia i suoi piani per l'architettura a 64 bit IA-64 (sviluppata congiuntamente con HP) succeditrice dei suoi processori a 32-bit (IA-32). Il lancio è previsto per il 1998-1999.

* 1995: HAL Computer Systems (di proprietà della Fujitsu) lancia delle workstation basate su CPU a 64 bit, la prima generazione dello SPARC64 progettata indipendentemente da HAL. Escono i sistemi AS/400 della IBM a 64 bit che grazie alla loro particolare architettura (il set di istruzioni TIMI) sono in grado di convertire tutto il vecchio software a 32 bit in software nativo a 64 bit senza bisogno di ricompilarlo.

* 1996: Sun e HP rilasciano i loro processori a 64 bit, lo UltraSPARC ed il PA-8000. Sun Solaris, IRIX, e altre varianti di UNIX continuano ad essere i sistemi operativi a 64 bit più utilizzati.

* 1999: Intel rilascia il [[|instruction set|set delle istruzioni]] relativo all'architettura IA-64. Prime notizie sulle estensioni a 64 bit (x86-64) per l'architettura IA-32 da parte di AMD.

* 2000: IBM mette in commercio il suo primo mainframe a 64 bit, lo zSeries z900, ed il nuovo sistema operativo z/OS — portando al culmine il maggior investimento nello sviluppo di una CPU a 64 bit nella storia e spazzando via istantaneamente i sistemi compatibili a 31 bit prodotti da concorrenti quali Fujitsu/Amdahl e Hitachi. Sistemi zSeries con a bordo Linux seguono velocemente.

* 2001: Intel mette infine in commercio la sua linea di processori a 64 bit, ora chiamata Itanium, puntando al mercato dei server di fascia alta. A causa dei continui ritardi sul suo rilascio, Itanium delude le aspettative e si trasforma in un fiasco. Linux è il primo sistema operativo a girare sul processore al momento del suo lancio.

* 2002: Intel introduce l'Itanium 2, successore di Itanium.

* 2003: AMD rilascia il processore a 64 bit Opteron e la linea di CPU Athlon 64. Anche Apple mette in commercio CPU PowerPC a 64 bit grazie ad IBM e Motorola, insieme ad un aggiornamento del suo sistema operativo Mac OS X. Diverse distribuzioni Linux escono con il supporto all'architettura x86-64. Microsoft annuncia lo sviluppo di una versione del suo sistema operativo Windows per i chip AMD. Intel resta sulla sua posizione di supporto ad Itanium come suo unico processore a 64 bit.

* 2004: Intel, in reazione al successo dell'architettura a 64 bit AMD, ammette lo sviluppo di un clone delle estensioni x86-64, che chiama EM64T. Versioni aggiornate delle famiglie Xeon e Pentium 4 che supportano le nuove istruzioni entrano in commercio.

* 2005: In Marzo, Intel annuncia che il suo primo processore dual-core verrà commercializzato nel secondo trimestre del 2005 col rilascio del processore Pentium Extreme Edition 840 e i nuovi chip Pentium D. I processori dual-core Itanium 2 seguiranno nel quarto trimestre.

* 2005: Il 18 Aprile, Beijing Longxin svela la sua prima CPU compatibile con le specifiche x86-64, chiamata Longxin II. Il chip di circa 2,5 centimetri quadrati contiene 13,5 milioni di transistor, con una capacità di picco di due miliardi di operazioni al secondo e di un miliardo rispettivamente con un singolo controllo di accuratezza e con uno doppio. La massima frequenza è di 500 Mhz ed il consumo va da 3 a 5 watt.

* 2005: Il 30 Aprile, Microsoft rilascia al pubblico Windows XP x64 Edition per i processori x86-64.

* 2005: A Maggio, AMD rilascia la famiglia di processori dual-core Athlon 64 X2 pensati per i desktop. I processori Athlon 64 X2 (Toledo) contengono due nuclei con 1MB di cache L2 per nucleo e sono composti da circa 233.2 milioni di transistor. Sono grandi 199 mm².

* 2005: In Luglio, IBM annuncia il suo nuovo processore dual core a 64 bit PowerPC 970MP (nome interno Antares).


Messaggio modificato da Mickyhood, 19 November 2014 - 15:36 PM
sistemato testo


#8 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:29 AM

CPU Dual Core

Una CPU dual core unisce due processori indipendenti, le rispettive cache e i cache controller in un singolo package. Questo tipo di architettura consente di aumentare la potenza di calcolo senza aumentare la frequenza di lavoro, a tutto vantaggio del calore dissipato.

I primi processori dual core sono stati gli IBM PowerPC nel 2003 ma il concetto ha assunto risonanza mondiale solo nel 2005, anno in cui i due maggiori produttori di CPU al mondo, vale a dire Intel e AMD hanno presentato e messo in commercio i primi esemplari di una nuova generazione di microprocessori, basati sui rispettivi prodotti esistenti, e contenenti 2 core appunto.

In pratica, si è giunti ad un momento in cui aumentare ulteriormente la frequenza di clock di una CPU (che fino a questo momento sono state single core) è diventato molto oneroso e complicato, per via dei consumi che hanno superato abbondantemente i 100 W e il conseguente problema di raffreddamento dei circuiti. La soluzione che è sembrata più ovvia ai progettisti è stata quella di puntare tutto sul parallelismo in modo da poter aumentare il numero di operazioni eseguibili in un unico ciclo di clock. Purtroppo questo approccio comporta anche alcuni svantaggi, in quanto i programmi devono essere ottimizzati per un utilizzo multi-thread per poter sfruttare appieno le caratteristiche di questi processori, in caso contrario essi impegneranno solo uno dei due core, lasciando l'altro pressoché inutilizzato, e al momento sono veramente pochi i software già pronti per queste nuove architetture. Una volta completato l'aggiornamento di tutti i programmi verso la nuova filosofia, tutto dovrebbe (il condizionale è d'obbligo) risultare più semplice, anche quando nel 2007 arriveranno i primi esemplari di processori quad core, ovvero formati da 4 core. Diversi analisti infatti, prevedono che se il software pensato per un utilizzo parallelo in ambito dual core viene realizzato in maniera oculata, tenendo conto non del funzionamento su un sistema dual core, ma su un sistema a più core, non richiederebbe poi grosse modifiche per essere utilizzato su un dual core o su un quad core. Secondo altri invece, gli sforzi necessari per realizzare software multi processore che funzioni in maniera ottimale saturando tutti i core e non occupandoli in modo disomogeneo saranno esagerati in relazione con i reali vantaggi, soprattutto di impatto di costi. Su una materia così nuova in ambito desktop, non si può fare altro che attendere maggiori dettagli.

Non è ancora chiaro comunque se in futuro questi core continueranno a rimanere "omogenei" o verranno presentate architetture con core "eterogenei" dove cioè ci saranno più core dedicati a vari ambiti di calcolo (decodifica video, audio, calcolo matematico, ecc.).

I primi processori dual core commerciali sono sostanzialmente 2 core della precedente generazione di processori delle 2 case, montati, come detto prima, su un unico package. Eistono tuttavia differenti approcci attraverso i quali si possono realizzare chip dual core e per approfondimenti si rimanda al seguente articolo: Dual core (tecniche di realizzazione).

Dual core di Intel

Intel è accesa sostenitrice del passaggio ai processori dual core, tanto è vero che già al momento del lancio dei primi processori della nuova generazione dedicati al settore desktop, vale a dire gli Intel Pentium D (basati sul progetto Smithfield), ha mantenuto i prezzi relativamente bassi (rispetto alla concorrente AMD) simili alle contro parti single core Pentium 4 basate sul core Prescott, questo anche poichè le frequenze dei suddetti processori sarebbero state impari rispetto a quelle dei rispettivi processori AMD e quindi la società ha deciso di utilizzare una tattica aggressiva di ingresso del mercato dei processori dual core. I primi Pentium D sono formati appunto da 2 core Prescott montati sullo stesso package; successivamente arriveranno anche quelli basati su core Presler che sarà la prossima generazione di processore Pentium D (In cui sono sempre presenti due core uguali affiancati, anche se non sullo stesso package per poter così aumentare le rese produttive), con processo produttivo a 65 nm, e Conroe presumibilmente per la fine del 2006.

Intel ha intenzione inoltre di estendere l'utilizzo di questa tecnologia a tutti i segmenti di mercato, inclusi quello mobile, di cui il primo esponente sarà Yonah e successivamente Merom, entrambi evoluzioni del Pentium M, e ovviamente al settore server. In questa categoria i primi dual core saranno Montecito evoluzione dell'attuale processore a 64 bit Itanium 2 con cache L3 che raggiungerà in alcune versioni i 24 MB di capacità, mentre per i server di fascia bassa basati sul processore Xeon vedranno la luce Dempsey (formato da due core Irwindale), e Paxville, nomi in codice di queste CPU, costruite con processo produttivo a 65 nm e destinate, rispettivamente, a sistemi workstation e server a 2 e 4 processori. Ultimo progetto conosciuto è Woodcrest, per sistemi server di fascia entry level dotati di due socket.

È interessante inoltre confrontare le dimensioni del die del processore Smithfield, con quelle di Yonah, Smithfield è costruito con processo a 90 nm e ha superficie del die molto elevata, mentre Yonah verrà lanciato nel corso del 2006 con processo a 65 nm.

Intel sta lavorando ad un totale di ben 17 differenti progetti di processori Dual Core, a diversi livelli di sviluppo e prevede che nel 2006 le vendite di tali soluzioni ammonteranno a ben 60 milioni di esemplari.

Dual core di AMD

I primi processori dual core di AMD sono stati gli Opteron nel mese di aprile 2005 seguiti poi dagli Athlon 64 X2 alla fine di maggio. La particolarità degli Athlon X2, a confronto con i Pentium D, è che il core è formato sostanzialmente da due Athlon 64 che funzionano alla stessa frequenza dei corrispondenti modelli single core ed anche il consumo medio è pressoché inalterato. Questo non comporta quindi un calo di prestazioni in caso di utilizzo con programmi single thread non ottimizzati per i dual core come accade invece nei confronti Pentium 4 - Pentium D.

Athlon 64

L'Athlon 64 (nomi in codice "ClawHammer", "Newcastle", "Winchester", "Venice" e "San Diego"), prodotto da AMD, è stato il primo processore desktop con supporto 64 bit della famiglia x86 (altri processori a 64 bit sono apparsi sul mercato in precedenza, da parte di Sun, Digital, Mips, IBM, anche se per lo più riservati al mercato workstation) ed è stato presentato al pubblico il 23 settembre 2003. È stato il primo processore della serie K8 per computer desktop e portatili.

Questo processore appartiene ad una famiglia di cui sono stati prodotti tre varianti: l'Athlon 64, l'Athlon 64 X2 (nomi in codice "Manchester", "Toledo" e "Windsor") e l'Athlon FX. Tutte e tre le varianti, grazie alla tecnologia AMD64, implementano il supporto 64, 32 e 16 bit.

Importante nuova implementazione dell'Athlon 64 è il controller di memoria (chiamato generalmente col suo nome inglese, memory controller) integrato. Questo componente, di solito presente nel Northbridge, serve a mettere in comunicazione la CPU con la memoria. L'implementazione nel die del processore di questo componente fa sì che i segnali non debbano più percorrere l'FSB per arrivare al Northbridge e poi da lì andare alle memorie e viceversa, ma fa in modo che vi sia un dialogo diretto con la memoria. Inoltre, in questo modo, il memory controller funziona alla stessa frequenza (clock) del processore guadagnando così in termini di prestazioni. Questa implementazione, in sostanza, abbassa di molto la latenza (tempo di risposta) delle memorie guadagnando molto in termini di prestazioni.

Un'altra importante tecnologia implementata nell'Athlon 64 è il Cool 'n' Quiet, derivato dal precedente PowerNow! per CPU mobile e similare allo SpeedStep delle CPU mobile di Intel. Grazie a questa quando il processore non usa la sua massima potenza perché sta eseguendo solo pochi programmi in background il clock ed il voltaggio del processore stesso vengono abbassati. Questo fa sì che si riduca la quantità di corrente utilizzata ed il calore prodotto, passando da un TDP (Thermal dissipation envelope) dichiarato da AMD di 89 watt ad uno di appena 32 o 22 Watt (diminuendo il clock rispettivamente di 800 e 1000 Mhz).

Le CPU Athlon 64 sono state prodotte con processo produttivo a 130 e 90 nanometri.


Messaggio modificato da Mickyhood, 19 November 2014 - 15:36 PM
sistemato testo


#9 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:29 AM

Opteron

L'AMD Opteron è stato il primo processore della serie K8 (Athlon 64, Athlon X2, Athlon FX) prodotto da AMD ed anche il primo processore compatibile con i 64 bit grazie alla tecnologia AMD64 implementata in esso. Rilasciato la prima volta il 22 aprile 2003, è destinato al mercato server in competizione con gli Intel Xeon ed Itanium.

Descrizione tecnica

Il maggiore vantaggio dell'Opteron rispetto all'Itanium (e agli Xeon di vecchia generazione) è il fatto di poter eseguire programmi a 32 bit senza decrementi di velocità, potendo comunque utilizzare anche programmi a 64 bit per poter accedere a più di 4 Gb di RAM (uno dei limiti fisici dei processori a 32 bit).

Altro vantaggio è il controller di memoria (chiamato generalmente col suo nome inglese, memory management unit o MMU) integrato. Questo componente, di solito presente nel Northbridge, serve a mettere in comunicazione la CPU con la memoria. L'implementazione nel die del processore di questo componente fa sì che i segnali non debbano più percorrere l'FSB per arrivare al Northbridge e poi da lì andare alle memorie e viceversa, ma fa in modo che vi sia un dialogo diretto con la memoria. Questa implementazione, in sostanza, abbassa di molto la latenza (tempo di risposta) delle memorie guadagnando molto in termini di prestazioni. Inoltre, visto che ogni Opteron ha il proprio controller ed i propri banchi di memoria, i server Opteron guadagnano molto di più in prestazioni con l'aggiunta di nuovi processori rispetto ai server Xeon. Infatti gli Xeon devono dividere la larghezza di banda del controller di memoria per il numero di processori; al contrario degli Opteron che per ogni processore aggiunto aumentano di conseguenza la larghezza di banda totale e questo è un grandissimo vantaggio in server di grosse dimensioni.

In sistemi a più processori (Più di un solo Opteron su una singola scheda madre) le CPU utilizzano la Direct Connect Architecture sul bus HyperTransport per dialogare fra loro e con le porte di I/O. Grazie a questo ogni CPU può accedere alla memoria di un altro processore.

Tutti i processori Opteron implementano le tecnologie AMD64, NXBit, 3DNow!, SSE e SSE2, montano su Socket 940 e hanno un TDP dichiarato di 30,55 e 95 watt. Soltanto le versioni costruite a 90 nanometri supportano le SSE3. Le più recenti versioni di Opteron della serie 1xx montano su Socket 939.

Opteron Dual Core

Il 21 aprile 2005, a 2 anni dalla presentazione del primo processore AMD Opteron, la compagnia di Sunnyvale ha presentato la versione dual Core del suo processore server. I nuovi processori dual core integrano al proprio interno due cache L1 e L2 separate ed un solo controller delle memoria in comune. I nomi in codice dei nuovi processori sono: Denmark, Italy e Egypt.

I processori Opteron single core disponibili sino ad oggi sono stati caratterizzati da model number crescenti a passi di 2 fino al modello Opteron 252. Per le versioni Dual Core la scelta è stata quella di utilizzare numeri crescenti a passi di 5. AMD ha dichiarato che questi nuovi processori, grazie a molte ottimizzazzioni, sebbene presentino all'interno del proprio die due core avranno un TDP di 95 watt come i predecessori.

Versioni

Ogni processore è marchiato con un model number di tipo XYY. La prima cifra (X) sta ad indicare per che tipi di sistema sono stati ideati questi processori:

* 1 - Sistemi a singolo processore

* 2 - Sistemi a due processori

* 8 - Sistemi a 4 o 8 processori

Le cifre YY stanno invece ad indicare la velocità del processore in relazione con gli altri modelli.

dal 2 agosto 2005 la compagnia di Sunnivale ha annunciato che le CPU Opteron serie 1YY saranno prodotte con Socket 939 e non più con Socket 940; questo permetterà la costruzioni di schede madri a prezzi più contenuti ed anche l'utilizzo di memoria DDR unbuffered al posto di quella ECC Registered richiesta dalle cpu Opteron Socket 940.

Multi core

Il termine multi core si usa per descrivere una CPU composta da più di due core, ovvero da più "cuori" di processori fisici montati sullo stesso package. Costituisce la naturale evoluzione delle CPU dual core composte da due core, e i primi esemplari di Intel e AMD arriveranno in commercio nel corso del 2007 anche se non è ancora chiaro se si tratterà ancora di core omogenei, cioè identici tra loro oppure più core diversi specializzati in alcuni ambiti (decodifica video, audio, calcolo matematico, ecc.). Questo tipo di architettura, al pari dei sistemi dual core e, più generalmente, di tutti i sistemi biprocessore e multiprocessore, consente di aumentare la potenza di calcolo senza aumentare la frequenza di lavoro, a tutto vantaggio del calore dissipato.

Nel corso del 2005 sono arrivati i primi chip dual core; questo perché in pratica, si è giunti ad un momento in cui aumentare ulteriormente la frequenza di clock di una CPU (che fino a questo momento erano state single_core) è diventato molto oneroso e complicato, per via dei consumi che hanno superato abbondantemente i 100 W e il conseguente problema di raffreddamento dei circuiti. La soluzione che è sembrata più ovvia ai progettisti è stata quella di puntare tutto sul parallelismo in modo da poter aumentare il numero di operazioni eseguibili in un unico ciclo di clock. Purtroppo questo approccio comporta anche alcuni svantaggi, in quanto i programmi devono essere ottimizzati per un utilizzo multi-thread per poter sfruttare appieno le caratteristiche di questi processori, in caso contrario essi impegneranno solo uno dei due core, lasciando l'altro pressoché inutilizzato, e al momento sono veramente pochi i software già pronti per queste nuove architetture. Una volta completato l'aggiornamento di tutti i programmi verso la nuova filosofia, tutto dovrebbe (il condizionale è d'obbligo) risultare più semplice, anche quando nel 2007 arriveranno i primi esemplari di processori quad core, ovvero formati da 4 core. Diversi analisti infatti, prevedono che se il software pensato per un utilizzo parallelo in ambito dual core viene realizzato in maniera oculata, tenendo conto non del funzionamento su un sistema dual core, ma su un sistema a più core, nel caso specifico solo 2, non richiederebbe poi grosse modifiche per essere utilizzato su un dual core o su un quad core. Secondo altri invece, gli sforzi necessari per realizzare software per molti processori che funzioni in maniera ottimale saturando tutti i core e non occupandoli in modo discontinuo, saranno esagerati in relazione con i reali vantaggi. Su una materia così nuova in ambito desktop, non si può fare altro che attendere maggiori dettagli.

In realtà esiste già un processore multi core ed è il Cell sviluppato dalla Sony e alla base della prossima PlayStation 3. In questo caso i core sono 8 ed eterogenei cioè ognuno svolge solo un compito specifico.

Cos'è il Core?

Con il termine Core in informatica si intende tipicamente il "cuore elaborativo" di un microprocessore. Un microprocessore infatti è costituito in realtà da 2 componenti principali: il core appunto, e il package. Il core, riconoscibile in quanto è un piccolo rettangolo nero leggermente sporgente al centro del microprocessore, contiene tutti i transistor che ne determinano il funzionamento e la capacità di elaborazione. Tutto quello che sta "intorno" è il package, ovvero lo "zoccolo" spesso in materiale plastico o ceramico, sui cui è montato il core e che collega quest'ultimo ai pin di contatto che poi andranno a incastrarsi nel socket. Solitamente le dimensioni del core rispetto a quelle dell'intero processore sono molto ridotte, circa 2 o 3 cm² a fronte di un package (quindi le dimensioni dell'intero microprocessore) di circa 20 cm²; tali dimensioni del package sono necessarie a a causa dell'elevato numero dei pin, nell'ordine di qualche centinaio.

Cos'è l' HyperTransport?

HyperTransport è un bus ad alta velocità privo di deviazioni utilizzato dai processori AMD. Ad esempio, gli Hammer si basano su Hypertransport.

Il risultato è quello di ottenere, a pari frequenza, un trasferimento di dati su AMD fino a 6,4 GB / sec e su un Intel P4 al massimo 3,97 GB / sec. Grazie all'interfaccia seriale con un bit rate variabile si può ottenere un data transfer simultaneamente in entrambe le direzioni.


Messaggio modificato da Mickyhood, 19 November 2014 - 15:36 PM
sistemato testo


#10 mmorselli

mmorselli

    Capitano

  • Webmaster
  • 1088 messaggi

Inviato 04 March 2006 - 11:29 AM

cache L1La cache L1 , chiamata anche cache di primo livello,é riferita alla CPU.Si trova solitamente all' interno del package processore , integrata sul chip della CPU per permettere le massime prestazioni con una integrazione sullo stesso silicio.Possono essere realizzate diverse strutture per L2 e diversi sistemi di accesso in scrittura o lettura.

La cache L1 é utilizzata per salvare i dati richiesti con maggiore frequenza dal processore senza che debba ogni volta recuperarle nella memoria esterna, con tempi di accesso molto maggiori.

Se il dato é presente nella cache L1 , la CPU non ha la necessitá di richiedere un accesso alla RAM del sistema (il fatto é definito come "cache hit") ; se il dato non é presente (si verifica un "cache miss" ) diventa necessario dipendere da una cache ulteriore (livello L2 o cache L2) ; se il dato non é presente neppure nella cache di secondo livello dovrá essere ricercato nella memoria del sistema,con una certa perdita di tempo .

cache L2

La cache L2 , chiamata anche cache di secondo livello , é riferita alla CPU . Per accelerare le prestazioni relative al trasferimento dati tra processore e memoria , viene implementata una area di RAM , di solito di tipo statico con tempo di accesso di 10ns o minore , che puó essere posta all' interno del package processore,oppure all' esterno,sulla scheda madre. Possono essere realizzate diverse strutture per L2 e diversi sistemi di accesso in scrittura o lettura.

Le dimensioni della cache L2 vanno tipicamente da 128kB a 2MB . La velocitá con cui il processore accede alla cache é determiannte per le prestazioni dell' insieme piú delle dimensioni della cahe stessa (oltre una certa dimensione,i benefici si riducono drasticamente).


Messaggio modificato da Mickyhood, 19 November 2014 - 15:37 PM
sistemato testo