Come si calcola la velocità del processore su processori multi-core?
L'avvento di processori multi-core di livello consumer economico solleva la domanda per molti utenti: come si calcola in modo efficace la velocità reale di un sistema multi-core? Un sistema 3Ghz a 4 core è davvero da 12 Ghz? Continua a leggere mentre indaghiamo.
La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di domande e risposte di community-drive.
La domanda
Lettore SuperUser NReilingh era curioso di sapere come calcolare la velocità del processore per un sistema multi-core:
È corretto dire, ad esempio, che un processore con quattro core ciascuno funzionante a 3GHz è in realtà un processore che funziona a 12 GHz?
Una volta sono entrato in un argomento "Mac vs. PC" (che tra l'altro NON è al centro di questo argomento ... che era tornato alle medie) con un conoscente che ha insistito sul fatto che i Mac venivano pubblicizzati solo come macchine da 1Ghz perché erano duali -processore G4 ciascuno in esecuzione a 500 MHz.
All'epoca sapevo che questo era un problema per ragioni che penso siano evidenti per la maggior parte delle persone, ma ho appena visto un commento su questo sito per l'effetto di "6 core x 0.2GHz = 1.2Ghz" e questo mi ha fatto pensare di nuovo se c'è una vera risposta a questo.
Quindi, questa è una domanda tecnica più o meno filosofica / profonda sulla semantica del calcolo della velocità di clock. Vedo due possibilità:
- Ogni core esegue infatti calcoli x al secondo, quindi il numero totale di calcoli è x (core).
- La velocità di clock è piuttosto un conteggio del numero di cicli che il processore attraversa nello spazio di un secondo, quindi fintanto che tutti i core funzionano alla stessa velocità, la velocità di ogni ciclo di clock rimane la stessa indipendentemente dal numero di core esistenti . In altre parole, Hz = (core1Hz + core2Hz + ...) / core.
Quindi qual è il modo appropriato per indicare la velocità totale del clock e, cosa più importante, è anche possibile utilizzare la nomenclatura di velocità single-core su un sistema multi-core?
La risposta
Contributi SuperUser Mokubai aiuta a chiarire le cose. Lui scrive:
Il motivo principale per cui un processore quad-core 3GHz non è mai veloce come un core single da 12 GHz riguarda il modo in cui funziona l'attività in esecuzione su quel processore, cioè single-threaded o multi-threaded. La legge di Amdahl è importante quando si considerano i tipi di compiti che si stanno eseguendo.
Se si dispone di un'attività che è intrinsecamente lineare e deve essere eseguita passo-passo esattamente come (un programma grossolanamente semplice)
10: a = a + 1
20: goto 10
Quindi il compito dipende molto dal risultato del passaggio precedente e non può eseguire più copie di se stesso senza corrompere il valore di
'un'
come ogni copia otterrebbe il valore di'un'
in momenti diversi e scriverlo diversamente. Ciò limita l'attività a un singolo thread e pertanto l'attività può essere eseguita sempre su un singolo core in qualsiasi momento, se dovesse essere eseguita su più core, si verificherà il danneggiamento della sincronizzazione. Ciò lo limita a 1/2 della potenza della CPU di un sistema dual core, o 1/4 in un sistema quad-core.Ora fai un compito come:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10
Tutte queste linee sono indipendenti e possono essere suddivise in 4 programmi separati come il primo e eseguiti nello stesso momento, ognuno in grado di utilizzare in modo efficace tutta la potenza di uno dei core senza alcun problema di sincronizzazione, è qui che la legge di Amdahl entra dentro.
Quindi, se si dispone di un'applicazione a thread singolo che esegue calcoli di forza bruta, il singolo processore a 12 GHz potrebbe vincere le mani, se in qualche modo si riesce a suddividere l'attività in parti separate e multi-thread, i 4 core potrebbero avvicinarsi, ma non raggiungere, la stessa esibizione, secondo la legge di Amdahl.
La cosa principale che ti dà un sistema multi CPU è la reattività. Su una macchina single core che sta lavorando sodo il sistema può sembrare lento come la maggior parte del tempo potrebbe essere utilizzato da una sola attività e le altre attività vengono eseguite solo a brevi intervalli tra un'attività più grande, risultando in un sistema che sembra lento o tremolante . Su un sistema multi-core l'attività pesante ottiene un core e tutte le altre attività giocano sugli altri core, svolgendo il proprio lavoro in modo rapido ed efficiente.
L'argomento di "6 core x 0.2GHz = 1.2Ghz" è spazzatura in ogni situazione tranne dove le attività sono perfettamente parallele e indipendenti. Ci sono un buon numero di compiti che sono altamente paralleli, ma richiedono ancora una qualche forma di sincronizzazione. Il freno a mano è un video trancoder che è molto bravo nell'usare tutte le CPU disponibili ma richiede un processo di base per mantenere gli altri thread pieni di dati e raccogliere i dati con cui sono fatti.
- Ogni core esegue infatti calcoli x al secondo, quindi il numero totale di calcoli è x (core).
Ogni core è in grado di eseguire calcoli x al secondo, supponendo che il carico di lavoro sia adatto in parallelo, su un programma lineare tutto ciò che si ha è 1 core.
- La velocità di clock è piuttosto un conteggio del numero di cicli che il processore attraversa nello spazio di un secondo, quindi fintanto che tutti i core funzionano alla stessa velocità, la velocità di ogni ciclo di clock rimane la stessa indipendentemente dal numero di core esistenti . In altre parole, Hz = (core1Hz + core2Hz + ...) / core.
Penso che sia un errore pensare che 4 x 3GHz = 12GHz, a condizione che la matematica funzioni, ma stai confrontando le mele con le arance e le somme non sono giuste, GHz non può semplicemente essere aggiunto insieme per ogni situazione. Lo cambierei a 4 x 3GHz = 4 x 3GHz.
Hai qualcosa da aggiungere alla spiegazione? Sound off nei commenti. Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla la discussione completa qui.