Qual è la differenza tra hyper-threading e core multipli?


42

In una conversazione con l'amministratore di rete, ho detto che la mia macchina era un dual-core. Mi ha detto che non lo era. Ho portato il task manager, sono andato alla scheda perfomance e gli ho mostrato che ci sono due grafici di utilizzo della CPU separati. Ho una macchina quad-core a casa e ha quattro grafici. Ha detto che c'erano due grafici su questa macchina particolare a causa dell'hyper-threading. Un tempo avevo un processore hyper-thread pentium 4 in passato, ma non ho mai capito fino in fondo cosa significasse. Quindi qual è la differenza tra hyper threading e dual-core? E come dici quale hai?

Risposte:


20

L'hyper-threading espone più core logici per un singolo core fisico della CPU. In termini semplici, l'hyper-threading rende il cambio di contesto più efficiente per ciascun core della CPU.

I chip dual-core, d'altra parte, in realtà hanno due core fisici della CPU che possono eseguire diversi processi contemporaneamente.

Esistono anche altri chip multi-core che hanno molti più di due core e, come menzionato da Svish, le ultime offerte multi-core di Intel supportano anche l'hyper-threading su tutti i core.

È possibile utilizzare un'utilità di identificazione della CPU come CPU-Z per determinare il numero di core disponibili. Come puoi vedere nella parte inferiore dello screenshot, in questo caso la CPU ha 2 core fisici. Se il numero di thread è superiore al numero di core, l'hyper-threading è abilitato. Ad oggi tutte le CPU orientate al consumatore con Hyper-threading hanno 2 thread per core, quindi se HT è abilitato, il numero di thread sarà il doppio del numero di core.

inserisci qui la descrizione dell'immagine

Se hai una CPU Intel, puoi invece scaricare l'utilità ID CPU Intel .


E chip multi-core che supportano l'hyper-threading in modo da ottenere il doppio della quantità di core logici.
Svish,

Grazie! Come faccio a sapere (dall'interno del sistema operativo) quale tipo di CPU ho?
Josh Stodola,

3
UltraSparc T2 + ha 8 core, ognuno dei quali supporta 8 thread che lo rendono 64 CPU virtuali su un singolo chip: en.wikipedia.org/wiki/UltraSPARC_T2
jlliagre

Il modo di conoscere la CPU in uso dipende dal sistema operativo in uso.
jlliagre,

@jilliagre: nice!
rapina il

16

L'hyper-threading è il punto in cui il tuo processore finge di avere 2 core del processore fisico, ma ne ha solo 1 e qualche junk extra.

Il punto di hyperthreading è che molte volte quando si esegue codice nel processore, ci sono parti del processore che sono inattive. Includendo un set aggiuntivo di registri CPU, il processore può agire come se avesse due core e quindi utilizzare tutte le parti del processore in parallelo. Quando i 2 core devono entrambi utilizzare un componente del processore, ovviamente un core finisce in attesa. Questo è il motivo per cui non può sostituire i processori dual-core e di questo tipo.

Vedi anche: questa domanda


6

L'hyperthreading è un'alternativa più economica e più lenta all'avere dual core

Il Manuale Intel Volume 3 sistema di programmazione - Guida 325384-056US settembre 2015 8.7 "Intel Hyper-Threading architettura" descrive brevemente HT. Contiene il seguente diagramma:

inserisci qui la descrizione dell'immagine

TODO è più lento di quanto percento in media nelle applicazioni reali?

L'hyperthreading è possibile perché i moderni core di singole CPU eseguono già più istruzioni contemporaneamente con la pipeline di istruzioni https://en.wikipedia.org/wiki/Instruction_pipelining

La pipeline di istruzioni è una separazione di funzioni all'interno di un singolo core per garantire che ogni parte del circuito venga utilizzata in qualsiasi momento: lettura della memoria, istruzioni di decodifica, istruzioni di esecuzione, ecc.

L'hyperthreading separa ulteriormente le funzioni utilizzando:

  • un unico backend, che esegue effettivamente le istruzioni con la sua pipeline.

    Il dual core ha due backend, il che spiega i maggiori costi e prestazioni.

  • due front-end, che accettano due flussi di istruzioni e li ordinano in modo da massimizzare l'utilizzo delle tubazioni del singolo backend evitando i pericoli .

    Dual core avrebbe anche 2 front-end, uno per ogni backend.

    Ci sono casi limite in cui il riordino delle istruzioni non produce alcun vantaggio, rendendo inutile l'hyperthreading. Ma produce un miglioramento significativo in media.

Due hyperthread in un singolo core condividono ulteriori livelli di cache (TODO quanti? L1?) Rispetto a due core diversi, che condividono solo L3, vedi:

L'interfaccia che ogni hyperthread espone al sistema operativo è simile a quella di un core effettivo ed entrambi possono essere controllati separatamente. Così cat /proc/cpuinfomi mostra 4 processori, anche se ho solo 2 core con 2 hyperthreads ciascuno.

I sistemi operativi possono tuttavia trarre vantaggio dal sapere quali hyperthreads si trovano sullo stesso core per eseguire più thread di un determinato programma su un singolo core, il che potrebbe migliorare l'utilizzo della cache.

Questo video di LinusTechTips contiene una spiegazione non tecnica leggera: https://www.youtube.com/watch?v=wnS50lJicXc


1
Risponderai alle tue domande "TODO"?
pacoverflow,

1
@pacoverflow se un giorno imparerò la risposta, o se qualcuno modificherà la risposta per me :-)
Ciro Santilli 11 改造 中心 法轮功 六四 事件
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.