Domanda

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

MODIFICARE:ecco la mia comprensione attuale dopo aver imparato online e imparato dai commenti degli altri;qualcuno potrebbe rivedere il commento per favore?

  1. Penso che l'hyper-thread sia la tecnologia più inferiore tra loro, ma economica.La sua idea principale è quella di duplicare i registri per risparmiare tempo nel cambio di contesto;
  2. Il multiprocessore è migliore dell'hyper-thread, ma poiché CPU diverse si trovano su chip diversi, la comunicazione tra CPU diverse ha una latenza maggiore rispetto al multi-core e, utilizzando più chip, vi è una spesa maggiore e un maggiore consumo energetico rispetto al multi-core ;
  3. il multi-core integra tutte le CPU su un singolo chip, quindi la latenza di comunicazione tra le diverse CPU è notevolmente ridotta rispetto al multi-processore.Poiché utilizza un singolo chip per contenere tutte le CPU, consuma meno energia ed è meno costoso di un sistema multiprocessore.

Grazie in anticipo, George

È stato utile?

Soluzione

Multi-CPU era la prima versione:Avresti una o più schede madri con uno o più chip CPU.Il problema principale qui era che le CPU avrebbero dovuto esporre alcuni dei loro dati interni all'altra CPU in modo da non intralciarsi.

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

Lo sviluppo attuale è multi-core.Fondamentalmente è l'idea originale (diverse CPU complete) ma in un unico chip.Il vantaggio:I progettisti di chip possono facilmente inserire i cavi aggiuntivi per i segnali di sincronizzazione nel chip (invece di doverli instradare su un pin, quindi sulla scheda madre affollata e su in un secondo chip).

I super computer oggi sono multi-cpu, multi-core:Hanno molte schede madri con solitamente 2-4 CPU, ogni CPU è multi-core e ognuna ha la propria RAM.

[EDIT] Hai capito più o meno 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 fuori servizio.Ciò mantiene le unità di esecuzione alimentate con il lavoro, anche quando un thread è bloccato per un errore nella cache, una previsione errata del ramo o in attesa di risultati da istruzioni ad alta latenza.È un modo per ottenere un throughput totale maggiore senza replicare molto hardware, ma se non altro rallenta ogni thread individualmente. Vedi queste domande e risposte per maggiori dettagli, e una spiegazione di cosa c'era di sbagliato nella formulazione precedente di questo paragrafo.

  • Il problema principale con più CPU è che il codice in esecuzione su di esse prima o poi accederà alla RAM.Ci sono N CPU ma un solo bus per accedere alla RAM.Quindi è necessario disporre di hardware che assicuri che a) ciascuna CPU abbia una discreta quantità di accesso alla RAM, b) che l'accesso alla stessa parte della RAM non causi problemi e c) soprattutto, che la CPU 2 venga informata quando la CPU 1 scrive in un indirizzo di memoria che la CPU 2 ha nella sua cache interna.Se ciò non accade, la CPU 2 utilizzerà volentieri il valore memorizzato nella cache, ignaro del fatto che è obsoleto

    Immagina di avere attività in un elenco e di volerle distribuire a tutte le CPU disponibili.Quindi la CPU 1 preleverà il primo elemento dall'elenco e aggiornerà i puntatori.La CPU 2 farà lo stesso.Per ragioni di efficienza, entrambe le CPU non copieranno solo i pochi byte nella cache ma un'intera "riga di cache" (qualunque essa sia).Il presupposto è che, quando leggi il byte X, presto leggerai anche X+1.

    Ora entrambe le CPU hanno una copia della memoria nella cache.La CPU 1 preleverà quindi l'elemento successivo dall'elenco.Senza la sincronizzazione della cache, non noterà che anche la CPU 2 ha modificato l'elenco e inizierà a funzionare sullo stesso elemento della CPU 2.

    Questo è ciò che rende effettivamente il multi-CPU così complicato.Gli effetti collaterali di ciò possono portare a prestazioni peggiori di quelle che otterresti se l'intero codice funzionasse solo su una singola CPU.La soluzione era multi-core:Puoi aggiungere facilmente tutti i cavi necessari per sincronizzare le cache;potresti anche copiare i dati da una cache all'altra (updating parti di una linea di cache senza doverla svuotare e ricaricare), ecc.Oppure la logica della cache potrebbe garantire che tutte le CPU ottengano la stessa linea di cache quando accedono alla stessa parte della RAM reale, semplicemente bloccando la CPU 2 per alcuni nanosecondi finché la CPU 1 non ha apportato le modifiche.

[EDIT2] Il motivo principale per cui il multi-core è più semplice del multi-cpu è che su una scheda madre semplicemente non è possibile far passare tutti i cavi tra i due chip di cui avresti bisogno per rendere efficace la sincronizzazione.Inoltre un segnale viaggia solo a 30 cm/ns al massimo (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 a vicenda (diafonia).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 superiore a 0,8 V.

Se hai tutto all'interno di un singolo chip, i segnali funzionano molto più velocemente e puoi averne quanti ne vuoi (beh, quasi :).Inoltre, la diafonia del segnale è molto più semplice da controllare.

Altri suggerimenti

Si possono trovare alcuni articoli interessanti su CPU dual e multi-core e hyper-threading su sito web di Intel o in un breve articolo di Yale University .

Spero che trovate qui tutte le informazioni necessarie.

In breve: multi-CPU o sistema multi-processore ha diversi processori. Un sistema multi-core è un sistema multi-processore con più processori sullo stesso chip. In hyperthreading, più thread possono essere eseguiti sullo stesso processore (cioè il tempo context-switch tra questi più thread è molto piccolo).

Multi-processori sono stati lì per 30 anni, ma per lo più nei laboratori. Multi-core è il nuovo popolare multi-processore. processori server oggi implementano hyperthreading insieme a multiprocessore.

Gli articoli di Wikipedia su questi argomenti sono molto illustrativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top