multi-CPU, multi-core e hyper-thread

Qualcuno potrebbe consigliarmi alcuni documenti per illustrare le differenze tra multi-CPU, multi-core e hyper-thread? Sono sempre confuso da queste differenze e dai pro / contro di ciascuna architettura in diversi scenari.

EDIT: ecco la mia comprensione attuale dopo aver imparato online e imparare dai commenti degli altri; Qualcuno potrebbe commentare commento per favore?

  1. Penso che l’hyper-thread sia la tecnologia più inferiore tra loro, ma economica. La sua idea principale sono i registri duplicati per salvare il tempo di commutazione del contesto;
  2. Il multiprocessore è migliore dell’hyper-thread, ma poiché le diverse CPU sono su chip diversi, la comunicazione tra diverse CPU ha una latenza più lunga rispetto al multi-core e, utilizzando più chip, c’è più spesa e più consumo di energia rispetto al multi-core ;
  3. multi-core integra tutte le CPU su un singolo chip, quindi la latenza della comunicazione tra diverse CPU è notevolmente ridotta rispetto al multiprocessore. Poiché utilizza un singolo chip per contenere tutte le CPU, consuma meno energia ed è meno costoso di un sistema multiprocessore.

grazie in anticipo, George

La multi-CPU era la prima versione: avresti una o più tabs madri con uno o più chip della CPU su di esse. Il problema principale qui era che le CPU avrebbero dovuto esporre alcuni dei loro dati interni all’altra CPU in modo che non si mettessero sulla loro strada.

Il passo successivo era l’hyper-threading. Un chip sulla scheda madre, ma aveva alcune parti interne due volte in modo da poter eseguire due istruzioni contemporaneamente.

Lo sviluppo attuale è multi-core. È fondamentalmente l’idea originale (diverse CPU complete) ma in un singolo chip. Il vantaggio: i progettisti di chip possono facilmente mettere i chip aggiuntivi per i segnali di sincronizzazione nel chip (invece di doverli instradare su un pin, poi sopra la mainboard affollata e su in un secondo chip).

Oggi i computer super sono multi-CPU, multi-core: hanno molte tabs madri con in genere 2-4 CPU, ciascuna CPU è multi-core e ciascuna ha una propria RAM.

[EDIT] Hai capito bene. Solo alcuni punti minori:

  • L’hyper-threading tiene traccia di due contesti contemporaneamente in un singolo core, esponendo più parallelismo al core della CPU out-of-order. Ciò mantiene le unità di esecuzione alimentate con il lavoro, anche quando un thread è in stallo su una cache miss, su una commissione errata o in attesa di risultati da istruzioni ad alta latenza. È un modo per ottenere un throughput più totale senza replicare molto hardware, ma semmai rallenta ogni thread singolarmente. Vedi questo Q & A per maggiori dettagli e una spiegazione di cosa c’era di sbagliato nella precedente formulazione di questo paragrafo.

  • Il problema principale con la multi-CPU è che il codice in esecuzione su di essi alla fine accederà alla RAM. Ci sono N CPU ma solo un bus per accedere alla RAM. Quindi è necessario disporre di un hardware che assicuri che a) ogni CPU abbia una discreta quantità di accesso alla RAM, b) che acceda alla stessa parte della RAM non causi problemi e c) soprattutto, che la CPU 2 venga notificata quando la CPU 1 scrive su un indirizzo di memoria che CPU 2 ha nella sua cache interna. Se ciò non accade, CPU 2 utilizzerà felicemente il valore memorizzato nella cache, ignaro del fatto che è obsoleto

    Immagina di avere delle attività in un elenco e di dividerle in tutte le CPU disponibili. Quindi CPU 1 recupererà il primo elemento dall’elenco e aggiornerà i puntatori. CPU 2 farà lo stesso. Per ragioni di efficienza, entrambe le CPU non solo copieranno i pochi byte nella cache ma un’intera “linea cache” (qualunque cosa sia). L’ipotesi è che, leggendo il byte X, leggerai presto anche X + 1.

    Ora entrambe le CPU hanno una copia della memoria nella loro cache. CPU 1 recupererà quindi l’elemento successivo dall’elenco. Senza la sincronizzazione della cache, non si sarà notato che anche la CPU 2 ha cambiato l’elenco e inizierà a lavorare sullo stesso elemento della CPU 2.

    Questo è ciò che rende davvero complicata la multi-CPU. Gli effetti collaterali di questo possono portare a una performance peggiore di quella che si otterrebbe se l’intero codice fosse eseguito solo su una singola CPU. La soluzione era multi-core: puoi facilmente aggiungere tutti i fili necessari per sincronizzare le cache; è anche ansible copiare i dati da una cache a un’altra (aggiornando le parti di una linea della cache senza doverla svuotare e ricaricare), ecc. Oppure la logica della cache potrebbe assicurarsi che tutte le CPU ottengano la stessa linea di cache quando accedono alla stessa parte di RAM reale, semplicemente bloccando la CPU 2 per pochi nanosecondi fino a quando la CPU 1 ha apportato le sue modifiche.

[EDIT2] La ragione principale per cui il multi-core è più semplice della multi-CPU è che su una scheda madre, non puoi semplicemente eseguire tutti i fili tra i due chip che ti servono per rendere la sincronizzazione efficace. Inoltre un segnale viaggia solo a 30 cm / ns (velocità della luce, in un filo, di solito ne hai molto meno). E non dimenticare che, su una scheda madre multistrato, i segnali iniziano a influenzarsi l’un l’altro (crosstalk). Ci piace pensare che 0 sia 0 V e 1 sia 5 V, ma in realtà, “0” è qualcosa tra -0,5 V (overdrive quando si rilascia una linea da 1> 0) e 0,5 V e “1” è qualsiasi cosa sopra 0,8 V.

Se hai tutto dentro un singolo chip, i segnali scorrono molto più velocemente e puoi averne quanti ne vuoi (beh, quasi :). Inoltre, il crosstalk del segnale è molto più facile da controllare.

È ansible trovare alcuni articoli interessanti su doppia CPU, multi-core e hyper-threading sul sito Web di Intel o in un breve articolo della Yale University .

Spero che tu trovi qui tutte le informazioni di cui hai bisogno.

In poche parole: il sistema multi-CPU o multi-processore ha diversi processori. Un sistema multi-core è un sistema multiprocessore con diversi processori sullo stesso die. Nell’hyperthreading, più thread possono essere eseguiti sullo stesso processore (ovvero il tempo di commutazione del contesto tra questi thread multipli è molto piccolo).

I multi-processori sono lì da 30 anni ormai, ma soprattutto nei laboratori. Multi-core è il nuovo multiprocessore popolare. I processori server implementano oggi hyperthreading e multiprocessore.

Gli articoli di Wikipedia su questi argomenti sono piuttosto illustrativi.