Sommario
Economia. È più economico e più semplice progettare una CPU che ha più core di una velocità di clock superiore, perché:
Significativo aumento del consumo di energia. Il consumo di energia della CPU aumenta rapidamente quando si aumenta la velocità di clock: è possibile raddoppiare il numero di core che operano a una velocità inferiore nello spazio termico necessario per aumentare la velocità di clock del 25%. Quadrupla per il 50%.
Esistono altri modi per aumentare la velocità di elaborazione sequenziale e i produttori di CPU ne fanno buon uso.
Prenderò pesantemente spunto dalle eccellenti risposte a questa domanda su uno dei nostri siti SE gemelli. Quindi votali!
Limitazioni della velocità di clock
Esistono alcune limitazioni fisiche note alla velocità di clock:
Tempo di trasmissione
Il tempo impiegato da un segnale elettrico per attraversare un circuito è limitato dalla velocità della luce. Questo è un limite rigido e non è noto alcun modo per aggirarlo 1 . A gigahertz-clocks ci stiamo avvicinando a questo limite.
Tuttavia, non ci siamo ancora. 1 GHz significa un nanosecondo per tick di clock. In quel momento, la luce può viaggiare di 30 cm. A 10 GHz, la luce può viaggiare di 3 cm. Un singolo core della CPU è largo circa 5 mm, quindi incontreremo questi problemi da qualche parte oltre i 10 GHz. 2
Ritardo di commutazione
Non è sufficiente considerare semplicemente il tempo impiegato da un segnale per spostarsi da un'estremità all'altra. Dobbiamo anche considerare il tempo impiegato da un gate logico all'interno della CPU per passare da uno stato all'altro! Aumentando la velocità di clock, questo può diventare un problema.
Sfortunatamente, non sono sicuro dei dettagli e non posso fornire alcun numero.
Apparentemente, pompare più energia al suo interno può accelerare la commutazione, ma ciò porta a problemi di consumo energetico e dissipazione del calore. Inoltre, più potenza significa che sono necessari condotti più grandi in grado di gestirlo senza danni.
Dissipazione del calore / consumo di energia
Questo è quello grande. Citando la risposta di fuzzyhair2 :
Processori recenti sono prodotti utilizzando la tecnologia CMOS. Ogni volta che c'è un ciclo di clock, l'energia viene dissipata. Pertanto, velocità del processore più elevate significano una maggiore dissipazione del calore.
Ci sono alcune misurazioni adorabili in questo thread del forum AnandTech e hanno persino derivato una formula per il consumo di energia (che va di pari passo con il calore generato):
Ringraziamo Idontcare
Possiamo visualizzarlo nel seguente grafico:
Ringraziamo Idontcare
Come puoi vedere, il consumo di energia (e il calore generato) aumenta molto rapidamente man mano che la velocità di clock aumenta dopo un certo punto. Ciò rende poco pratico aumentare senza limiti la velocità di clock.
La ragione del rapido aumento del consumo di energia è probabilmente correlata al ritardo di commutazione - non è sufficiente aumentare semplicemente la potenza proporzionale alla frequenza di clock; la tensione deve anche essere aumentata per mantenere la stabilità a clock più alti. Questo potrebbe non essere completamente corretto; sentiti libero di segnalare le correzioni in un commento o di apportare una modifica a questa risposta.
Più core?
Quindi perché più core? Bene, non posso rispondere in modo definitivo. Dovresti chiedere alla gente di Intel e AMD. Ma puoi vedere sopra che, con le moderne CPU, a un certo punto diventa poco pratico aumentare la velocità di clock.
Sì, il multicore aumenta anche la potenza richiesta e la dissipazione del calore. Ma evita accuratamente i tempi di trasmissione e i problemi di ritardo di commutazione. E, come puoi vedere dal grafico, puoi facilmente raddoppiare il numero di core in una CPU moderna con lo stesso sovraccarico termico di un aumento del 25% della velocità di clock.
Alcune persone l'hanno fatto: l'attuale record mondiale di overclocking è solo di 9 GHz. Ma è una sfida ingegneristica significativa farlo mantenendo i consumi energetici entro limiti accettabili. I progettisti ad un certo punto hanno deciso che l'aggiunta di più core per eseguire più lavori in parallelo avrebbe fornito un incremento più efficace delle prestazioni nella maggior parte dei casi.
È qui che entra in gioco l'economia: è stato probabilmente più economico (meno tempo di progettazione, meno complicato da produrre) seguire il percorso multicore. Ed è facile da commercializzare: chi non ama il nuovissimo chip octa-core ? (Certo, sappiamo che il multicore è piuttosto inutile quando il software non lo utilizza ...)
V'è un aspetto negativo di multicore: avete bisogno di più spazio fisico per mettere il cuore in più. Tuttavia, le dimensioni dei processi della CPU si riducono costantemente di molto, quindi c'è molto spazio per mettere due copie di un progetto precedente: il vero compromesso non è in grado di creare singoli core più grandi e più complessi. Inoltre, aumentare la complessità del core è una cosa negativa dal punto di vista del design: più complessità = più errori / bug ed errori di produzione. Sembra che abbiamo trovato un mezzo felice con core efficienti che sono abbastanza semplici da non occupare troppo spazio.
Abbiamo già raggiunto un limite con il numero di core che possiamo adattare su un singolo die alle attuali dimensioni del processo. Potremmo raggiungere un limite a quanto lontano possiamo ridurre le cose presto. Allora, qual è il prossimo? Abbiamo bisogno di più? Purtroppo è difficile rispondere. Qualcuno qui è chiaroveggente?
Altri modi per migliorare le prestazioni
Quindi, non possiamo aumentare la velocità di clock. E più core hanno uno svantaggio aggiuntivo, vale a dire, aiutano solo quando il software in esecuzione su di essi può farne uso.
Quindi, cos'altro possiamo fare? In che modo le CPU moderne sono molto più veloci di quelle più vecchie alla stessa velocità di clock?
La velocità di clock è in realtà solo un'approssimazione molto approssimativa del funzionamento interno di una CPU. Non tutti i componenti di una CPU funzionano a quella velocità - alcuni potrebbero funzionare una volta ogni due tick, ecc.
Ciò che è più significativo è il numero di istruzioni che è possibile eseguire per unità di tempo. Questa è una misura molto migliore di quanto un singolo core della CPU può realizzare. Alcune istruzioni; alcuni prenderanno un ciclo di clock, altri ne prenderanno tre. La divisione, ad esempio, è notevolmente più lenta dell'aggiunta.
Quindi, potremmo migliorare le prestazioni di una CPU aumentando il numero di istruzioni che può eseguire al secondo. Come? Bene, potresti rendere un'istruzione più efficiente - forse la divisione ora richiede solo due cicli. Poi c'è il pipeline di istruzioni . Rompendo ogni istruzione in più fasi, è possibile eseguire le istruzioni "in parallelo" - ma ogni istruzione ha ancora un ordine sequenziale ben definito rispetto alle istruzioni prima e dopo di essa, quindi non richiede supporto software come multicore lo fa.
C'è un altro modo: istruzioni più specializzate. Abbiamo visto cose come SSE, che forniscono istruzioni per elaborare grandi quantità di dati contemporaneamente. Ci sono nuovi set di istruzioni costantemente introdotti con obiettivi simili. Questi, ancora una volta, richiedono il supporto software e aumentano la complessità dell'hardware, ma forniscono un buon incremento delle prestazioni. Di recente, c'è stato AES-NI, che fornisce crittografia e decrittografia AES con accelerazione hardware, molto più veloce di un gruppo di aritmetica implementata nel software.
1 Non senza approfondire la fisica quantistica teorica, comunque.
2 Potrebbe effettivamente essere inferiore, poiché la propagazione del campo elettrico non è così veloce come la velocità della luce nel vuoto. Inoltre, è solo per la distanza in linea retta - è probabile che ci sia almeno un percorso che è considerevolmente più lungo di una linea retta.