Perché la mia CPU dual-core è riconosciuta come quad-core?


52

Il mio processore è un Intel Core i3-380m . Come puoi vedere, sono 2 core e 4 thread.

Tuttavia, sia Ubuntu 11.04 che Windows 7 sembrano pensare che sia una CPU quad-core:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Perchè è questo? È perché ci sono 2 thread per core, dividendo la CPU in 4 unità di elaborazione?

Risposte:


43

Come accennato, hai un sistema dual-core, con 2 thread per core.

Questo è commercializzato da Intel come hyperthreading ed è stato fatto in vari modi nel corso degli anni da vari produttori diversi.

Per spiegarlo nella sua forma più semplice, ogni core della CPU è costituito da un "core" e da un'architettura diversa attorno a quel core che mantiene le informazioni sullo stato e sul processo per ogni thread. Un singolo core con thread ha l'architettura per mantenere 1 thread di informazioni sullo stato conservate alla volta, un core hyperthreaded mantiene due insiemi distinti di informazioni sullo stato, consentendo l'esecuzione di due processi separati contemporaneamente finché richiedono parti diverse del core ( che è ragionevolmente probabile che accada poiché il nucleo è costituito da più unità di più diversi tipi di unità di elaborazione).

Per semplificare il modo in cui la CPU viene vista nel sistema, ogni hyperthread viene visto come una CPU separata, quindi un processore dual core, 2 thread per core appare come un processore quad core.

È anche possibile che il sistema operativo utilizzi Core-parking (una funzionalità nei processori Intel più recenti) consente al sistema operativo di sospendere metà di un core hyperthreaded in modo che quando non è necessaria la capacità di elaborazione aggiuntiva dell'hyperthreading, le prestazioni del singolo thread viene aumentato poiché il core non condivide più la sua cache su 2 thread e ora può dedicare completamente la cache on-core a un singolo thread.


Grazie per la spiegazione. Quindi, possiamo dire qui che un thread è per un core ciò che un core è per un processore?
seriousdev,

2
In un certo senso, sì. Il sistema operativo vede il processore, sa quanti core ci sono su quel processore e, a sua volta, quanti thread supporta ciascun core, da questo l'utilizzo della CPU che stai vedendo è ora "per thread" anziché "per core". Non è abbastanza così semplice (come ogni filetto realtà non sembra un non-hyperthreading OS consapevoli come nucleo CPU vera e propria), ma che è l'idea generale di essa.
Mokubai

Il link core-parking @Mokubai non funziona.
Biswapriyo,

49

Il motivo è l' hyperthreading , supportato dal processore. L'hyperthreading non è l'equivalente di un processore aggiuntivo, ma può davvero migliorare le prestazioni su applicazioni multithread. Per ogni core del processore fisicamente presente, il sistema operativo si rivolge a due processori virtuali e, quando possibile, condivide il carico di lavoro tra di loro.


7
Questo è noto come core fisico vs logico?
xdumaine,

11
Sì, un nucleo fisico è - beh ... fisico. Puoi toccarlo. I core hyperthreaded non sono reali, quindi logici. Puoi anche suddividere i core fisici in core logici attraverso la virtualizzazione.
Keltari,

3
@Keltari in realtà, c'è una parte fisica ad esso ... L'hyperthreading è un componente hardware in un core della CPU (e può essere disabilitato solo a livello hardware). Vedi questo white paper Intel per i dettagli. Fondamentalmente, condivide le risorse di un nucleo tra due unità di esecuzione fisica. Tecnicamente, entrambi i core visti dal sistema operativo in un core hyperthreaded sono "logici", non ce n'è uno sia fisico che logico.
Sfondamento

1
vero, l'hyperthreading è una parte fisica del processore, ma non un nucleo fisico.
Keltari,

1
Il modo migliore di pensare all'HT è un "core-and-half" che condivide con suo fratello molte più risorse rispetto ai core separati. Tuttavia è in grado di eseguire un thread "da solo" e il sistema operativo lo considera come un'unità di esecuzione del thread (che è stata associata a un core).
crasic

12

Le cose sono molto più complesse di quanto lo fossero ai tempi di un'istruzione cpu per un ciclo di clock.

Ora c'è una pipeline per ogni istruzione che consiste in una serie di passaggi. Ne ho ascoltate ben 41, anche se è stato un po 'di tempo fa e non ho idea di come siano le attuali condotte della cpu. So che se la pipeline è abbastanza lunga, puoi iniziare una nuova istruzione lungo la pipeline prima che l'ultima istruzione sia terminata, a volte nello stesso ciclo di clock, in modo che il tuo singolo core stia effettivamente facendo due cose contemporaneamente.

C'è un trucco qui, però. Non puoi semplicemente usarlo per accelerare la velocità con cui il tuo processore mastica attraverso le istruzioni di un programma specifico. C'è un problema di correttezza: l'istruzione successiva potrebbe dipendere dal risultato non ancora determinato dell'istruzione precedente. Per sfruttare in sicurezza la lunga pipeline , il chip presenterà due core del processore separati allo scheduler del sistema operativo e istruzioni alternate inviate a ciascun core in modo che due istruzioni allo stesso "core" non siano mai nella pipeline contemporaneamente. In questo modo possiamo essere certi che qualsiasi istruzione eseguita simultaneamente non interferirà l'una con l'altra. Questo si chiama hyperthreading .

Vale la pena notare che mentre l'hyperthreading può aumentare significativamente la quantità di lavoro che si ottiene dalla CPU, non è affatto buono come avere così tanti core fisici. A seconda del carico di lavoro, potrebbe significare un miglioramento del 15% o un miglioramento del 40%. In alcune circostanze, potresti persino voler disabilitare la funzione in modo che i core rimanenti abbiano pieno accesso esclusivo alla cache L1 / L2 per quel core (a volte questo viene fatto con server di database dedicati).

Quando il tuo chip si annuncia come avere 2 core con 4 thread, significa che è un processore dual core che supporta l'hyperthreading.


2

Dai un'occhiata a questa pagina di informazioni : contiene molte animazioni che mostrano come l'hyperthreading acceleri i tuoi compiti.

Il Utilization of Processor Resourcesè la migliore animazione, sguardo e li fare clic sul pulsante "advance".


1

Perchè è questo? È perché ci sono 2 thread per core, dividendo la CPU in 4 unità di elaborazione?

Detto semplicemente, la risposta è sì. Ogni core della tua cpu può supportare due thread indipendenti, quindi 4 in totale. Ma ciò non significa che abbia le stesse prestazioni di una CPU quad-core single-thread. praticamente le prestazioni di una CPU a doppio thread dual core sono inferiori a quelle di una CPU a thread singolo quad core. Come l'AMD Phenom X4.


Sai perché?
seriousdev,

1
Il motivo è che in un core a doppio thread le risorse hardware (come il buffer di riordino) sono condivise tra due thread, mentre in una CPU a thread singolo tutte le risorse sono dedicate a un core. Vale la pena ricordare che avere un core con pacciamatura aumenta l'utilizzo dell'hardware e la velocità effettiva, ma è dannoso per la latenza. Ci sono molti compromessi coinvolti. Quindi la parola "spettacolo" è davvero vaga qui. Per la gente comune significa la latenza di un singolo thread.
aminfar,
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.