Non riesco a capire questo, qual è la differenza tra superscalar e un processore multi-core?
Continuo a mescolarli, quindi alcuni semplici punti su ciò che fanno sarebbero grandi.
Non riesco a capire questo, qual è la differenza tra superscalar e un processore multi-core?
Continuo a mescolarli, quindi alcuni semplici punti su ciò che fanno sarebbero grandi.
Risposte:
Processori super-scalari significano che invii più istruzioni durante un singolo ciclo di clock. Il motivo per cui questo è differenziato dal multi-core è che si ottiene solo un contatore di istruzioni. Quindi tieni traccia di più istruzioni in volo, ma tutte le istruzioni provengono da un singolo programma. Questo è ancora solo un processo. Ora ho detto "ottieni un contatore di istruzioni" e tecnicamente è vero in quanto non vi è alcun punto in cui il tuo codice subirà una disparità se non usando alcuni schemi di previsione dei rami (Esecuzione speculativa: esegui simultaneamente entrambi i rami e butti via il "sbagliato" "risultato della previsione).
Quando entri nel multi-core hai più flussi di istruzioni in esecuzione contemporaneamente. La parte importante è che ogni core (eseguendo con il proprio contatore di istruzioni) può anche essere super-scalare per eseguire ogni singolo processo più rapidamente!
È possibile avere un super-scalare senza pipeline o esecuzione fuori ordine avendo ciò che viene chiamato parola di istruzione molto lunga o "VLIW". Questo è anche chiamato super-scalare "statico" (cioè è nel codice stesso). Qui è praticamente possibile disporre di componenti sufficienti per eseguire più istruzioni contemporaneamente e recuperare più istruzioni contemporaneamente e quindi eseguirle. Nella sua forma più semplice, immagina di aver detto "questo processore prenderà sempre ed eseguirà due istruzioni contemporaneamente". Quindi, fintanto che il programmatore potrebbe trovare lavoro da svolgere contemporaneamente nello stesso processo, raddoppieresti la tua produttività! Se non riuscissi a trovare due istruzioni da mettere insieme, dovresti semplicemente accoppiare un'istruzione e un NOP. Questa idea non è molto buona soprattutto perché se crei una versione migliore del processore in grado di eseguire 3, 4 o più istruzioni contemporaneamente, tutto il tuo vecchio codice si rompe! Ma hanno risolto questo in modo abbastanza ingegnoso, dovresti dare un'occhiata a istruzioni esplicitamente parallele o cose "EPIC" se vuoi saperne di più.
Il super-scalare dinamico con pipelining può sfruttare sia le istruzioni indipendenti dai dati che il parallelismo a livello di istruzione, che è ciò che lo rende una combinazione così potente. In sostanza ti consente, con sufficiente hardware, di eseguire quante più istruzioni indipendenti contemporaneamente.
Il super-scalare dinamico con pipeline ed esecuzione fuori ordine era essenzialmente il limite del parallelismo a livello di istruzione: si tentava di eseguire contemporaneamente più istruzioni nello stesso stadio, cercando di trovare operazioni che funzionavano senza dipendenze dei dati. Potresti finire fuori servizio, iniziare fuori ordine, ci sono un sacco di cose che devi fare per tenere la testa dritta mentre fai cose super-scalari. Multi-core dice "Ehi programmatore! Dammi più problemi che posso risolvere allo stesso tempo!" e quindi poiché il programmatore è in grado di vedere problemi risolvibili in modo indipendente oltre poche righe nell'assieme compilato, possono programmare in modo più efficiente quelle soluzioni per multi-core.
Super-scalare non è nemmeno in grado di risolvere problemi come "come posso eseguire questi due programmi più rapidamente". Poteva solo eseguire ogni programma indipendente più velocemente.
Spero che ti aiuti, scusami se è un po 'sconnessa.
--Modificare--
Modificato per tenere conto del punto di ajs410 che avevo confuso più idee.
Se si guarda indietro a processori precedenti come l'80486 o Pentium, una CPU era una singola unità logica di elaborazione. Esegue un singolo flusso di istruzioni alla volta. Una singola CPU era anche un singolo chip di silicio. Se desideri maggiore potenza di elaborazione, potresti acquistare una scheda madre del server costosa con slot per adattarsi a due CPU separate. Quindi hai avuto una macchina con due CPU e quindi due core di elaborazione.
Ad un certo punto, la Legge di Moore significava che disponevamo di così tanti transistor nel silicio che si potevano posizionare tutti i circuiti per due CPU in un solo chip. Ora hai il potenziale per la confusione dei nomi. Dire che hai due CPU potrebbe significare che hai due pacchetti di silicio di vecchio stile o il nuovo pacchetto di silicio singolo ma con la configurazione di elaborazione di due processori. Per risolvere questo, intendiamo ora che la CPU è un singolo pacchetto di silicio e un Core è una singola unità di elaborazione logica al suo interno.
Super-scalare si riferisce a una tecnica utilizzata all'interno di un core per cercare di migliorare le prestazioni e consentirgli di elaborare in media più istruzioni per ciclo. Un processore scalare esegue al massimo un'istruzione per ciclo, super-scalare significa che può potenzialmente eseguire più di un'istruzione per ciclo. Ad esempio, se il processore ha un'unità funzionale per l'aritmetica intera e un'altra per il virgola mobile, perché non utilizzare entrambe contemporaneamente per eseguire due istruzioni contemporaneamente. Cosa succede se si dispone di tre unità intere e due unità in virgola mobile? Ora hai un potenziale ancora maggiore per l'esecuzione parallela. Ma hai anche bisogno di più transistor per l'implementazione e una logica molto più complicata per farlo funzionare in modo affidabile. Nel mondo reale tendi ad usare super-scalare insieme a progetti fuori ordine perché si completano a vicenda.