Qual è la differenza tra multithreading e hyperthreading? [chiuso]


10

Ho sentito i termini hyper-threading e multi-threading, ma qual è esattamente la differenza tra loro? Che tipo di processore Intel li utilizza?


2
Stai cercando di confrontare cose che non sono direttamente comparabili; appena imparentato. È come chiedere "Qual è la differenza tra un piede e una scarpa?" A parte questo, cosa ha rivelato la tua ricerca finora? Dove sei esattamente impiccato a determinare la differenza in base alle definizioni facilmente individuabili da Internet?
Ƭᴇcʜιᴇ007,


1
non conosco né il multithreading né l'hyperthreading, mi viene chiesto di conoscerli
aumentato l'

1
i nazisti di overflow dello stack hanno chiuso l'argomento come "off topic" ... È un'ottima domanda, è popolare e non dovrebbe essere chiuso ..
Robbo_UK,

Risposte:


19

Il multithreading si riferisce all'attività generale di eseguire più di un thread di esecuzione all'interno di un sistema operativo. Il multithreading è più genericamente chiamato "multiprocessing", che può includere più processi di sistema (un semplice esempio su Windows potrebbe essere, ad esempio, l'esecuzione di Internet Explorer e Microsoft Word contemporaneamente), oppure può consistere in un processo che ha più thread all'interno esso.

Il multithreading (o dovrei dire multiprocessing) è un concetto di software . Praticamente qualsiasi CPU completa di Turing può eseguire il multithreading, anche se il computer ha un solo core CPU e quel core non supporta l'hyperthreading. Al fine di supportare il multiprocessing, la CPU intercalerà l' esecuzione di diversi thread di esecuzione, eseguendo uno, quindi un altro, quindi un altro, in cui il sistema operativo suddividerà il tempo disponibile in "sezioni" e fornirà un tempo approssimativamente uguale a ogni thread (il tempo non deve essere uguale, ma in genere è così che viene fatto a meno che un processo non richieda una priorità più alta).

Si noti che, ogni volta che ci sono più thread di esecuzione del software che tentano di eseguire in un dato momento di quanti siano i thread di esecuzione hardware (simultanei) disponibili , questi thread del software saranno "interfogliati" tra i core disponibili. Nel caso di un "uniprocessore" (un core della CPU senza hyperthreading), se hai più di un thread software, saranno sempreessere intercalato. Se si dispone di una CPU a 4 core con hyperthreading, si tratta di 8 "thread hardware", il che significa che la CPU può eseguire 8 thread di esecuzione simultanei nello stesso istante, quindi se si avessero 8 thread di software che cercavano di funzionare, potevano essere eseguiti contemporaneamente ; ma se avessi 9 thread software, uno dei thread hardware dovrebbe intercalare una coppia di thread (la coppia esatta di thread scelti dipenderà dall'implementazione dello scheduler del sistema operativo).


L'hyperthreading, d'altra parte, si riferisce a una tecnologia hardware molto specifica creata da Intel, che consente a un singolo core del processore di intercalare più thread di esecuzione in modo più efficiente. In altre parole, una CPU con hyperthreading fornirà prestazioni leggermente superiori a una CPU che è altrimenti uguale ma senza hyperthreading, poiché la CPU hyperthreaded sarà in grado di bilanciare contemporaneamente due (a volte di più, ma l'hyperthreading è in genere 2- modo) thread di esecuzione su un dato core.

Tuttavia, l'hyperthreading è strettamente più lento rispetto ad avere core fisici completamente separati, perché ci sono alcuni tipi di operazioni che possono interrompere i vantaggi prestazionali dell'hyperthreading, mentre ci sono meno operazioni che possono causare un tale evento con core completamente separati.

Prendi l'esempio seguente, in cui si presume che "1 core" esegua esattamente lo stesso in tutti gli esempi:

Esempio 1: 2 core, nessun hyperthreading.
Esempio 2: 4 core, nessun hyperthreading.
Esempio 3: 2 core con hyperthreading.
Esempio 4: 4 core con hyperthreading.

In questo caso, l'esempio 4 sarà sempre il più veloce. L'Esempio 2 a volte potrebbe essere più veloce dell'esempio 4, su carichi di lavoro estremamente scarsi per sfruttare le ottimizzazioni dell'hyperthreading.

L'Esempio 3, d'altra parte, a volte potrebbe, sui carichi di lavoro in cui l'hyperthreading è più vantaggioso, essere quasi altrettanto veloce dell'Esempio 2, anche se ha la metà del numero di core fisici.

L'esempio 1 ovviamente, sarà il più lento di tutti gli esempi, ma a volte potrebbe essere più veloce dell'esempio 3, quando si esegue un carico di lavoro scarsamente adatto all'hyperthreading.

Nei benchmark del mondo reale con le moderne CPU Intel, in genere troviamo che l'hyperthreading comporta, in termini molto generali, un miglioramento delle prestazioni dal 20% al 40% rispetto a nessun hyperthreading (con il caso "no hyperthreading" confrontato disabilitando la funzionalità hyperthreading nella BIOS). Occasionalmente ci saranno carichi di lavoro in cui la disabilitazione dell'hyperthreading mostra un vantaggio in termini di prestazioni , ma questi carichi di lavoro possono essere rari nell'uso effettivo. Ma, se potessi scegliere tra 4 core con hyperthreading o 8 core, supponendo che ogni core stesso abbia le stesse prestazioni, sceglierei sempre la CPU 8 core.


2
Per essere precisi, il multithreading e il multiprocessing non sono la stessa cosa. I thread condividono il contesto di esecuzione con il processo a cui sono associati, mentre i processi hanno i propri contesti di esecuzione. Tuttavia, per questa risposta questa distinzione non è così importante.
Tero Kilkanen,

1
La tecnologia di hyperthreading non è stata "creata da Intel"; per mainline x86 è solo un nome registrato per il multithreading simultaneo. Se l'Alpha 21464 fosse stato prodotto, sarebbe stato uno dei primi utenti importanti di SMT. Intel produsse il primo uso rilasciato di SMT (forse escludendo processori meno noti) con alcuni Pentium 4s, ma l'idea di base non era un'invenzione Intel.
Paul A. Clayton,

2
Quibble: l'hyperthreading non è strettamente più lento dei core separati. Si possono escogitare casi (artificiali) in cui la condivisione di cache L1 è un vantaggio maggiore rispetto all'utilizzo completo delle risorse di un core. Un altro caso particolare potrebbe essere quando un thread è permanentemente attivo e un altro gestisce brevemente eventi intermittenti; svegliare un core in modo intermittente è più costoso che svegliare un thread su un core attivo. Per i thread con ILP estremamente basso, se la contesa della cache non è un problema, la maggiore efficienza energetica dell'utilizzo di un singolo core potrebbe consentire un maggiore turboboost (prestazioni migliori).
Paul A. Clayton,

3
Le risposte sono modificabili su SU, quindi se volete migliorarlo, non esitate. Inoltre, tenere presente l'apparente livello di conoscenza del PO; anche la mia risposta autonoma è probabilmente più tecnica di quanto si aspettassero o volessero. Ho volutamente ripassato alcuni dettagli a favore della facilità di spiegazione. Dubito che il PO progetterà processori in qualunque momento presto e abbia un disperato bisogno di conoscere tutti questi dettagli. Ciononostante commenti interessanti.
allquixotic,

1
Le modifiche suggerite che cambiano il contenuto (vale a dire, non solo correzioni grammaticali o di errori di battitura o riformulazioni per chiarezza) sono probabilmente respinte.
Paul A. Clayton,

4

Multithreading è un termine per l'elaborazione parallela a livello di sistema operativo. Il processore non ha nulla a che fare con il multithreading.

L'hyperthreading è un concetto Intel che implementa l'elaborazione "simultanea" di più thread in un singolo core del processore. Il sistema operativo vede due core del processore, sebbene sia presente un solo core fisico.

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.