Se hai mai fatto molti acquisti comparativi per una nuova CPU, potresti aver notato che i core sembrano tutti avere la velocità piuttosto che una combinazione di quelli diversi. Perché? Il post di domande e risposte di SuperUser di oggi contiene la risposta alla domanda di un lettore curioso.
La sessione di domande e risposte di oggi ci arriva per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento guidato dalla comunità di siti web di domande e risposte.
La domanda
Il lettore SuperUser Jamie vuole sapere perché i core della CPU hanno tutti la stessa velocità invece di quelli diversi:
In generale, se si acquista un nuovo computer, si determina quale processore acquistare in base al carico di lavoro previsto per il computer. Le prestazioni nei videogiochi tendono a essere determinate dalla velocità del singolo core, mentre le applicazioni come l'editing video sono determinate dal numero di core. In termini di ciò che è disponibile sul mercato, tutte le CPU sembrano avere più o meno la stessa velocità con le differenze principali che sono più thread o più core.
Per esempio:
- Intel Core i5-7600K, frequenza di base 3,80 GHz, 4 core, 4 thread
- Intel Core i7-7700K, frequenza di base 4,20 GHz, 4 core, 8 thread
- AMD Ryzen 5 1600X, frequenza di base 3,60 GHz, 6 core, 12 thread
- AMD Ryzen 7 1800X, frequenza di base 3,60 GHz, 8 core, 16 thread
Perché vediamo questo modello di core in aumento, ma tutti i core hanno la stessa velocità di clock? Perché non ci sono varianti con velocità di clock differenti? Ad esempio, due core "grandi" e molti core piccoli.
Invece di, diciamo, quattro core a 4,0 GHz (cioè 4 × 4 GHz, 16 GHz massimo), che ne dici di una CPU con due core che funzionano a 4,0 GHz e quattro core che funzionano a 2,0 GHz (cioè 2 × 4,0 GHz + 4 × 2,0 GHz, 16 GHz massimo)? La seconda opzione sarebbe altrettanto valida per i carichi di lavoro a thread singolo, ma potenzialmente migliore per i carichi di lavoro multi-thread?
La pongo come domanda generale e non specificamente per quanto riguarda le CPU sopra elencate o su un carico di lavoro specifico. Sono solo curioso di sapere perché lo schema è quello che è.
Perché i core della CPU hanno tutti la stessa velocità invece di quelli diversi?
La risposta
Il collaboratore di SuperUser bwDraco ha la risposta per noi:
Questo è noto come multielaborazione eterogenea (HMP) ed è ampiamente adottato dai dispositivi mobili. Nei dispositivi basati su ARM che implementano grande piccolo , il processore contiene core con prestazioni e profili di potenza diversi, ovvero alcuni core funzionano velocemente ma assorbono molta energia (architettura più veloce e / o clock superiori) mentre altri sono efficienti dal punto di vista energetico ma lenti (architettura più lenta e / o clock inferiori). Ciò è utile perché il consumo di energia tende ad aumentare in modo sproporzionato man mano che si aumentano le prestazioni una volta superato un certo punto. L'idea qui è di ottenere le prestazioni quando ne hai bisogno e la durata della batteria quando non ne hai bisogno.
Sulle piattaforme desktop, il consumo energetico è molto meno problematico, quindi non è veramente necessario. La maggior parte delle applicazioni si aspetta che ogni core abbia caratteristiche prestazionali simili e i processi di pianificazione per i sistemi HMP sono molto più complessi della pianificazione per i sistemi SMP (symmetric multi-processing) tradizionali (tecnicamente, Windows 10 ha il supporto per HMP, ma è principalmente destinato ai dispositivi mobili dispositivi che utilizzano ARM big.LITTLE).
Inoltre, la maggior parte dei processori desktop e laptop oggi non sono termicamente o elettricamente limitati al punto in cui alcuni core devono funzionare più velocemente di altri, anche per brevi raffiche. Abbiamo praticamente sbattuto contro un muro quanto velocemente possiamo realizzare i singoli core , quindi la sostituzione di alcuni core con altri più lenti non consentirà ai core rimanenti di funzionare più velocemente.
Sebbene ci siano alcuni processori desktop che hanno uno o due core in grado di funzionare più velocemente degli altri, questa capacità è attualmente limitata a determinati processori Intel di fascia alta (noti come Turbo Boost Max Technology 3.0) e comporta solo un leggero guadagno in prestazioni per quei core che possono essere eseguiti più velocemente.
Sebbene sia certamente possibile progettare un processore x86 tradizionale con core grandi e veloci e core più piccoli e più lenti per ottimizzare per carichi di lavoro con thread pesanti, ciò aggiungerebbe una notevole complessità al design del processore ed è improbabile che le applicazioni lo supportino adeguatamente.
Prendi un ipotetico processore con due veloci Kaby Lake (7a generazione) core e otto lenti Goldmont (Atom) core. Avresti un totale di 10 core e i carichi di lavoro con thread pesanti ottimizzati per questo tipo di processore potrebbero ottenere un aumento delle prestazioni e dell'efficienza rispetto a un normale processore Kaby Lake quad-core. Tuttavia, i diversi tipi di core hanno livelli di prestazioni estremamente diversi, ei core lenti non supportano nemmeno alcune delle istruzioni supportate dai core veloci, come AVX (ARM evita questo problema richiedendo che entrambi i core big e LITTLE supportino le stesse istruzioni).
Anche in questo caso, la maggior parte delle applicazioni multi-thread basate su Windows presume che ogni core abbia lo stesso o quasi lo stesso livello di prestazioni e possa eseguire le stesse istruzioni, quindi è probabile che questo tipo di asimmetria si traduca in prestazioni tutt'altro che ideali, forse anche si blocca se utilizza istruzioni non supportate dai core più lenti. Sebbene Intel possa modificare i core lenti per aggiungere il supporto di istruzioni avanzate in modo che tutti i core possano eseguire tutte le istruzioni, ciò non risolverebbe i problemi con il supporto software per processori eterogenei.
Un approccio diverso alla progettazione dell'applicazione, più vicino a ciò a cui probabilmente stai pensando nella tua domanda, utilizzerebbe la GPU per l'accelerazione di porzioni di applicazioni altamente parallele. Questo può essere fatto utilizzando API come OpenCL e MIRACOLI . Per quanto riguarda una soluzione a chip singolo, AMD promuove il supporto hardware per l'accelerazione GPU nelle sue APU, che combina una CPU tradizionale e una GPU integrata ad alte prestazioni nello stesso chip, come Architettura di sistema eterogenea , anche se questo non ha visto molto assorbimento da parte dell'industria al di fuori di poche applicazioni specializzate.
Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere altre risposte da altri utenti esperti di tecnologia Stack Exchange? Dai un'occhiata al thread di discussione completo qui .
Credito immagine: Mirko Waltermann (Flickr)