Come può un processore eseguire più IPS della sua frequenza? [duplicare]


14

Questo è stato qualcosa che non riesco a avvolgere la testa. Quasi ogni moderno processore è in grado di eseguire più istruzioni al secondo della sua frequenza.

Posso capire perché i processori di classe inferiore possono eseguire meno IPS della sua frequenza. Ad esempio, l' ATmega328 esegue circa 16 MIPS a 16 MHZ (o almeno è quello che mi è stato detto) e lo Z80 esegue 0,5 MIPS a 4 MHz. Ma poi il Pentium 4 Extreme può eseguire più di 9 GIPS a soli 3,2 GHz. Sono circa tre istruzioni per ciclo di clock!

Come viene fatto e perché non viene implementato in processori più piccoli, come i microcontrollori AVR ?

Ho trovato tutte le mie informazioni, tranne l'ATmega328, da qui .


3
Dai un'occhiata a Wikipedia per parole d'ordine come pipeline, architettura super scalare, esecuzione fuori ordine, multithreading simultaneo, multi core, estensione vettoriale (SSE, ..., AVX), cache e così via. Tutto sommato il valore CPI può essere inferiore a 1,0.
Paebbels,

7
Volevi dire 9 GIPS per Pentium 4, non MIPS, vero?
Calimo,

5
Autopromozione: come può una CPU fornire più di un'istruzione per ciclo? mi è stato chiesto sullo scambio di pile di ingegneria elettrica (la mia risposta è stata accettata e forse troppo votata).
Paul A. Clayton,

Mi sono sempre chiesto, non dovrei votare qualcosa se è già alto come penso che dovrebbe essere? O sempre valorizzare se penso che lo sforzo e la qualità di un post meriti una ricompensa?
Peter Cordes,

@PeterCordes Esistono diverse filosofie di voto. Alcuni sostengono che "utile" sia l'unico criterio, altri considerano il merito relativo (per le risposte). Tendo a considerare il conteggio dei voti assoluti (i badge post "belli", "buoni", "grandi" implicano che dovrebbero essere considerati) e il conteggio relativo dei voti (che aiuta a rispondere al ranking). Sorprendentemente Meta.SE non sembra avere molto su questo argomento e " Come dovrei votare? " Non ha nemmeno una risposta!
Paul A. Clayton,

Risposte:


23

Ciò è dovuto a una combinazione di funzionalità dei processori moderni.

La prima cosa che contribuisce a un elevato IPS è il fatto che i processori moderni hanno più unità di esecuzione che possono operare in modo indipendente. Nell'immagine seguente (presa in prestito da Wikipedia: Intel Core Microarchitecture ) puoi vedere in fondo che ci sono otto unità di esecuzione (mostrate in giallo) che possono eseguire tutte le istruzioni contemporaneamente. Non tutte queste unità sono in grado di garantire gli stessi tipi di istruzione, ma almeno 5 di esse possono eseguire un'operazione ALU e sono disponibili tre unità SSE.

inserisci qui la descrizione dell'immagine

Che si combinano con una lunga pipeline che possono efficacemente istruzioni di stack pronto per quelle unità per eseguire le istruzioni ( in ordine , se necessario) significa che un processore moderno può avere un gran numero di istruzioni al volo in un dato momento.

Per eseguire ciascuna istruzione potrebbero essere necessari alcuni cicli di clock, ma se si può parallelizzare in modo efficace la loro esecuzione, è possibile dare un notevole impulso all'IPS a costo della complessità del processore e della produzione termica.

Mantenere queste pipeline di grandi dimensioni piene di istruzioni richiede anche una cache di grandi dimensioni che può essere precompilata con istruzioni e dati. Ciò contribuisce alla dimensione della matrice e alla quantità di calore prodotta dal processore.

La ragione per cui ciò non viene fatto su processori più piccoli è perché aumenta sostanzialmente la quantità di logica di controllo richiesta attorno ai core di elaborazione, nonché la quantità di spazio richiesto e anche il calore generato. Se si desidera un processore piccolo, a bassa potenza e altamente reattivo, si desidera una pipeline breve senza troppi elementi "extra" che circondano i core funzionali effettivi. Quindi in genere minimizzano la cache, la limitano a un solo tipo di unità richiesto per elaborare le istruzioni e riducono la complessità di ogni parte.

Essi potrebbero fare un piccolo processore complesso come come processore grande e ottenere prestazioni simili, ma allora il potere disegnare e requisiti di raffreddamento sarebbe aumentato esponenzialmente.


Non ho mai saputo che esistessero unità di esecuzione specializzate e più di una. Tuttavia, sarebbe bello avere un Arduino superscalare. Non mi dispiacerebbe i requisiti di alimentazione e raffreddamento se ciò significasse una maggiore produttività. Grazie per la risposta.
Jaca,

1
Se si desidera un processore superscalare, utilizzarne uno. Ma gli Arduinos occupano una nicchia per le persone che si preoccupano dei requisiti di alimentazione e raffreddamento (e dei costi e della complessità) dei processori superscalari.
David Schwartz,

4

Non è difficile da immaginare. Basta un ciclo per commutare molte migliaia di transistor. Finché le istruzioni sono allineate in parallelo, un ciclo può essere sufficiente per eseguirle tutte.

Meglio che cercare di spiegarlo da solo, ecco un buon punto di partenza .


3

Per ottenere un po 'più fondamentale della risposta di Mokubai:

Le CPU Superscalar analizzano il flusso di istruzioni per le dipendenze dei dati (e altre) tra le istruzioni. Le istruzioni che non dipendono l'una dall'altra possono essere eseguite in parallelo.

Le CPU desktop x86 tipiche ottengono 16 o 32 B di istruzioni ad ogni ciclo di clock. Intel progetta dal momento che Core2 può emettere fino a 4 istruzioni per ciclo. (O 5, se esiste un confronto-e-ramo che può fondere macro).

Vedi la bella risposta di Mobukai per collegamenti e dettagli su come le CPU in pratica svolgono il compito di estrarre tanto parallelismo a livello di istruzione quanto fanno dal codice che eseguono.

Vedi anche http://www.realworldtech.com/sandy-bridge/ e articoli simili per altre architetture di CPU per una spiegazione approfondita di cosa c'è sotto il cofano.


-2

Le risposte precedenti mostrano come si ottengono più istruzioni eseguite dalla definizione di "istruzione" del processore e si immagina che in realtà sia l'intento dell'interrogatore.

Ma un'altra fonte potrebbe essere che ogni "istruzione" è in realtà una certa quantità di dati trattati come un input di istruzione dal processore. Se il conteggio della sua fonte conta solo ciò che il processore considera istruzioni, il seguente non aggiunge nulla. Ma se la sua fonte conta tutto ciò che un essere umano chiamerebbe "istruzione", allora: aggiungi che non tutte le istruzioni sono fisicamente lunghe come tutte le altre istruzioni (una potrebbe essere di 12 byte, un'altra potrebbe essere di 56 byte, ecc.). Quindi, se carica 64 byte di materiale ogni ciclo come "un'istruzione" (o quante più istruzioni possibili prima di colpire 64 byte) e uno ha sei istruzioni in quei 64 byte, allora sei istruzioni (come tu e io potremmo considerarle ) sarà terminato in quel ciclo.

Dal momento che molte istruzioni di base (la nostra definizione "sensata") sono gli avanzi dei primi tempi con lunghezze di istruzioni di 8 byte, e le istruzioni di base sono, per definizione, forse utilizzate in modo sproporzionato, solo questo farebbe molto per avere più "istruzioni" eseguite che la frequenza sembrerebbe consentire.


Questo è un po 'vicino a come funzionano effettivamente le CPU, ma il recupero di più insins macchina per ciclo è solo una parte del funzionamento di una CPU superscalare. (e le lunghezze medie degli insns sono più simili a 4 byte, per x86). Pipeline profonde indicano che le istruzioni che vengono recuperate ora potrebbero non terminare l'esecuzione per 15 cicli (o molto più a lungo, se trattenute da una mancanza della cache, ma istruzioni non dipendenti potrebbero continua l'esecuzione.) La tua spiegazione non descrive affatto un progetto pipeline. Inoltre, non è chiaro quale sia la differenza tra un 886 8086 add al, ble un 80386 add eax, ebx.
Peter Cordes,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.