Come posso calcolare la velocità di clock nei processori multi-core?


23

È corretto dire, ad esempio, che un processore con quattro core ciascuno funzionante a 3GHz è in realtà un processore funzionante a 12GHz?

Una volta ho avuto 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 1 Ghz perché erano G4 a doppio processore ciascuno in esecuzione a 500 MHz.

All'epoca sapevo che si trattava di un colpo di frusta per motivi che penso siano evidenti per la maggior parte delle persone, ma ho appena visto un commento su questo sito Web con l'effetto di "6 core x 0,2 GHz = 1,2 Ghz" e questo mi ha fatto pensare ancora se c'è una vera risposta a questo.

Quindi, questa è una domanda filosofica / tecnica più o meno profonda sulla semantica del calcolo della velocità di clock. Vedo due possibilità:

  1. Ogni core sta infatti eseguendo calcoli x al secondo, quindi il numero totale di calcoli è x (core).
  2. La velocità di clock è piuttosto un conteggio del numero di cicli che il processore attraversa nello spazio di un secondo, quindi finché tutti i core funzionano alla stessa velocità, la velocità di ciascun ciclo di clock rimane la stessa indipendentemente da quanti core esistono . In altre parole, Hz = (core1Hz + core2Hz + ...) / core.

Molte delle risposte qui fanno un buon lavoro nel spiegare perché, ad esempio, un processore quad-core da 2 GHz non è necessariamente uguale a un processore single-core da 8 GHz. Tuttavia, sto attraversando un momento difficile nel definire le velocità del processore multi-core da considerare quando si decide l'idoneità di un sistema per un'applicazione che elenca una velocità specifica e un numero di core nei suoi requisiti? (ad es. Borderlands 2 richiede un processore dual-core a 2,4 GHz. Dovremmo aspettarci che un quad-core a velocità più bassa o single-core a velocità più elevata faccia altrettanto?) Questa è la risposta (o potrebbe essere) qui, o dovrebbe essere una domanda separata?
Iszi,

@Iszi Questa dovrebbe essere un'altra domanda, ma è probabile che Borderlands sia ottimizzato per più di un thread se includono "dual core" nei loro requisiti. In tal caso, un processore single-core non sarebbe raccomandato, ma non è chiaro se può sfruttare> 2 core.
NReilingh,

È importante ricordare che la velocità di clock e il numero di core non determinano solo la "velocità" del processore. Ad esempio, le dimensioni e la velocità della cache influiranno sul tempo impiegato dal processore in attesa di istruzioni e dati. Inoltre, anche le istruzioni per ciclo (in un certo senso "efficienza", sebbene distinte e correlate all'efficienza energetica) influiranno anche sulla velocità dei calcoli. Processori diversi impiegheranno tempi diversi per eseguire la stessa istruzione.
Bob,

Risposte:


35

Il motivo principale per cui un processore quad-core 3GHz non è mai veloce come un single core 12GHz è a che fare con il funzionamento dell'attività in esecuzione su quel processore, ovvero single-threading o multi-threaded. La legge di Amdahl è importante quando si considerano i tipi di attività che si stanno eseguendo.

Se hai un'attività intrinsecamente lineare e deve essere eseguita esattamente passo-passo come (un programma grossolanamente semplice)

10: a = a + 1
20: goto 10

Quindi l'attività dipende fortemente dal risultato del passaggio precedente e non può eseguire più copie di se stesso senza corrompere il valore di 'a'come ogni copia otterrebbe il valore di 'a'in momenti diversi e riscriverlo in modo diverso. Ciò limita l'attività a un singolo thread e quindi l'attività può essere sempre in esecuzione su un singolo core in qualsiasi momento, se dovesse essere eseguita su più core, si verificherebbe 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 prendi 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 potrebbero essere suddivise in 4 programmi separati come il primo ed essere eseguite contemporaneamente, ognuna in grado di sfruttare efficacemente tutta la potenza di uno dei core senza alcun problema di sincronizzazione, è qui che la legge di Amdahl vi entra dentro.

Quindi se hai un'applicazione a thread singolo che esegue calcoli della forza bruta, il singolo processore a 12 GHz vincerebbe a mani basse, se in qualche modo riuscissi a dividere l'attività in parti separate e multi-thread, i 4 core potrebbero avvicinarsi, ma non raggiungere del tutto, 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 poiché la maggior parte del tempo potrebbe essere utilizzata da un'attività e le altre attività vengono eseguite solo in brevi intervalli tra l'attività più grande, risultando in un sistema che sembra lento o sdolcinato . Su un sistema multi-core il compito pesante ottiene un core e tutti gli altri compiti giocano sugli altri core, facendo il loro lavoro in modo rapido ed efficiente.

L'argomento di "6 core x 0,2 GHz = 1,2 Ghz" è spazzatura in ogni situazione tranne quando i compiti sono perfettamente paralleli e indipendenti. Esistono un buon numero di attività che sono altamente parallele, ma richiedono comunque una qualche forma di sincronizzazione. Il freno a mano è un trancoder video che è molto bravo a utilizzare 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 stati eseguiti.

  1. Ogni core sta infatti eseguendo 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 hai è 1 core.

  1. La velocità di clock è piuttosto un conteggio del numero di cicli che il processore attraversa nello spazio di un secondo, quindi finché tutti i core funzionano alla stessa velocità, la velocità di ciascun ciclo di clock rimane la stessa indipendentemente da quanti core esistono . In altre parole, Hz = (core1Hz + core2Hz + ...) / core.

Penso che sia un errore pensare che 4 x 3GHz = 12GHz, dato che la matematica funziona, ma stai confrontando le mele con le arance e le somme non sono giuste, GHz non può semplicemente essere sommato per ogni situazione. Lo cambierei in 4 x 3GHz = 4 x 3GHz.


Bel post .. Impossibile votare più di 1+ :-(
Gopalakrishnan Subramani

Ma la legge di Amdahl è un problema di programmazione, causato dal blocco, non un problema hardware. Se non è necessario sincronizzare, ciascun core potrebbe eseguire le istruzioni il più velocemente possibile. Si potrebbe progettare un programma parallelo (uno semplice) che sarebbe perfettamente diviso tra i core. I produttori di hardware non pubblicizzerebbero questo valore grezzo?
Justin Meiners,

Per chiarire, capisco perché questo risponde alla domanda sul perché 4 core a 3 ghz non sono così veloci, in pratica come un 12ghz, ma non la parte di come viene calcolata la velocità di clock per i multicore.
Justin Meiners,

@JustinMeiners La velocità di clock per core è semplicemente la velocità di clock a cui viene eseguito il core. Non esiste un calcolo magico che equiparasse un singolo core al multicore. Più core significa semplicemente che puoi eseguire più attività separate contemporaneamente. La legge di Amdahl si applica a causa del software, la sincronizzazione e il blocco necessari impediranno che un'attività sia "perfetta" nell'hardware tanto quanto il software. Le cache e la memoria condivise provocano conflitti e blocchi.
Mokubai

@Mokubai Solo per chiarire, quando un produttore elenca la velocità di clock, ogni singolo core gira alla velocità, giusto?
Justin Meiners,

6

Altri hanno argomentato bene dal punto di vista tecnico. Farò invece un paio di semplici analogie che spero spiegheranno perché 4 * 3GHz non è equivalente a 1 * 12GHz.

Ad esempio, una donna può produrre un bambino in nove mesi. Saranno nove le donne in grado di produrre un bambino in un mese? No, perché la gestazione non può essere parallelizzata (beh, almeno a questo livello tecnologico).

Eccone un altro: in una centrale idroelettrica che ho visitato di recente, uno dei generatori veniva aggiornato. Dovevano trasportare lo statore del generatore via nave. Un sesto dello statore poteva essere trasportato su camion, ma dovevano trasportare l'intero statore; quindi hanno dovuto usare una nave, non sei camion.

Un altro caso potrebbe essere la tempistica precisa degli eventi. A volte i processori per computer sono usati come timer precisi (anche se la pratica non è più raccomandata, a causa del clock variabile sulla maggior parte dei processori. Invece dovrebbe essere usato un timer per eventi ad alta precisione). Se supponiamo di avere un processore con un clock a 12 GHz relativamente stabile, possiamo usarlo per misurare il tempo con una risoluzione molto più elevata rispetto a un processore con un clock a 3 GHz. Non importa quanti core 3GHz abbiamo, non saremo in grado di raggiungere la risoluzione del core 12GHz. È come avere 4 orologi con display a 7 segmenti in cui ogni orologio mostra solo l'ora corretta in ore. Non importa quanto correttamente mostrino le ore, non puoi usarle per misurare gli intervalli di tempo in un intervallo di un secondo.


Risposta utile per i meno tecnici. Inoltre, mi piacciono le analogie :)
aff

3

Non sono un esperto in materia, ma ho una laurea in Ingegneria Informatica. In teoria (questa è una risposta altamente concettuale), un 3GHz quad-core ogni processore può essere l'equivalente di un processore 12GHz se, ad esempio, fossero necessari quattro set di calcoli per un singolo risultato finale. Questo è ciò che si chiama elaborazione parallela.

Per semplificare la logica, diciamo che stiamo parlando di un processore dual core. Se una serie di calcoli fosse, dire:

a = b + 1;

c = d + 1;

quindi, questi due calcoli potrebbero essere eseguiti su core separati e un processore xGHz sarebbe equivalente a un processore single-core 2 * xGHz. Questo perché i due calcoli, sebbene eseguiti a velocità x, verrebbero elaborati contemporaneamente. Considerando che il processore single-core potrebbe farli a velocità 2 * x ma uno dopo l'altro. Se le due CPU eseguissero questo codice contemporaneamente, finirebbero allo stesso tempo. Tuttavia, se il codice fosse:

a = b + 1;

c = a + 1;

quindi, il processore dual-core richiederebbe il doppio del processore single-core perché nella seconda istruzione, il valore di a dipende dalla prima istruzione e quindi non può essere eseguito in parallelo. Ecco come alcuni software possono trarre vantaggio dai processori multi-thread.

Quindi, in teoria, un processore single-core a 12 GHz può sempre funzionare più veloce (o più veloce) di un processore quad-core a 3GHz, ma non viceversa.


Si noti che tali calcoli saranno più veloci solo se è stato eseguito il mutlithreading e anche in questo caso si verifica un leggero sovraccarico. Ma sì, mentre è possibile realizzare un processore single core in grado di fare altrettanti calcoli, semplicemente non è plausibile a causa del calore e roba del genere.
Phoshi,

Questa risposta è fuorviante per due motivi. Innanzitutto, i core moderni fanno più di una cosa alla volta. In secondo luogo, la risposta presuppone che la velocità centrale sia la stessa della velocità con cui viene svolto il lavoro. Un processore single-core a 12 GHz non funzionerà alla stessa velocità di un processore quad-core a 3 GHz se il processore single-core necessita di un numero significativamente maggiore di cicli di clock per svolgere lo stesso lavoro. (Quale sarebbe poiché un processore a 12 GHz avrebbe bisogno di condutture molto più lunghe.)
David Schwartz,

2

Questa è una domanda complicata a cui rispondere, ma la risposta breve è: No

Nelle applicazioni del mondo reale quattro processori 3Ghz non saranno veloci come un singolo processore da 12 Ghz a causa delle inefficienze. Possono essere molto vicini, ma NON eguagliano un singolo processore in termini di potenza di elaborazione.

La ragione di ciò risiede nelle piccole inefficienze nella gestione di programmi che possono essere eseguiti su più di un processore. Supponendo che il programma in questione possa essere eseguito in parallelo, continueremo a riscontrare problemi con diversi core in competizione tra loro per altre risorse come RAM o persino problemi di sincronizzazione di cache e thread. Inoltre, ci sono sempre parti di programmi che non possono essere parallelizzati e che devono essere eseguiti su un singolo core da soli.

Dai un'occhiata a questo articolo: http://en.wikipedia.org/wiki/Amdahl%27s_law


Hai ragione e torto. Molto probabilmente quattro processori da 3 Ghz saranno più veloci di un singolo processore da 12 Ghz nelle applicazioni del "mondo reale". In questi giorni sempre più programmi utilizzano il multi-threading, il collegamento che hai fornito si riferisce a un'applicazione teorica a thread singolo. Un singolo processore a 12ghz ha un solo thread, quindi i vantaggi del multi-threading che un programma "mondo reale" ha da offrire andrebbero persi. L'industria non sta andando verso core più lenti invece che meno core più veloci solo perché, i vantaggi della tecnologia multi-core superano di gran lunga i vantaggi della tecnologia single core veloce.
ubiquibacon,

3
@typoknig: non è del tutto vero. Un processore single-core a 6 GHz eseguirà un'applicazione multi-thread alla stessa velocità di un processore dual-core 3GHz, supponendo che l'app stia sfruttando appieno ogni thread (cosa che molto probabilmente non sta facendo se è un "reale applicazione mondiale ", ma questo è un argomento separato). Non vediamo processori a 12 GHz perché è troppo difficile con la tecnologia attuale, non perché è più lento.
Sasha Chedygov,

4
@typoknig: ho programmato alcuni programmi di mutithreading e credimi, se avessi un singolo processore a 12 Ghz, lo userò invece. La programmazione a thread singolo è 10 volte più semplice e molto più efficiente della programmazione a thread muti. Il vero motivo per cui l'industria sta spostando i processori muticore twords non è perché sono più veloci, è perché non possiamo far funzionare le singole CPU più velocemente! Questo è stato delineato con la tecnologia netburst di Intel nei giorni p4. Stimarono i processori a 10 Ghz, almeno fino a quando la fisica quantistica non li schiaffeggiò in faccia e disse "noob!"
Falso

2
@typokning: L'F22 utilizza una serie di processori powerPC per ottenere 10 miliardi di istruzioni al secondo, molto diverso dall'essere 10 Ghz! È come dire che il tuo Radion HD5970 funziona a 4600 Ghz. È in grado di 4.6 TFLOPS ma solo perché è altamente parallelo.
Falso

1
@typoknig: Chiaramente non capisci la differenza tra frequenza della CPU e IPS (istruzioni al secondo), non sono la stessa cosa. Si prega di leggere: en.wikipedia.org/wiki/Instructions_per_second
Faken

2

Sembra che non possiamo dire che 4 core a 3 GHz possano essere definiti come 12 GHz.

Vari vincoli come la memoria condivisa, la contesa della cache e anche altre risorse sono comuni a tutti i core, quindi eseguire un pezzo di codice parallelo su questi core non sarà efficiente quanto eseguirlo su processori a 12 Ghz (anche se è difficile costruire un tale processore ).

Ho anche letto da qualche parte che se raddoppiamo i transistor integrati nel chip (CMP), la velocità che otterremo sarà solo del 40%. Ciò fornisce un suggerimento significativo anche a questo argomento.


1

Per quanto riguarda i cicli di clock eseguiti, sì, un processore multi-core esegue x * corescicli di lavoro completi al secondo. Convenzionalmente, le velocità di clock sono elencate in base al core per un confronto più semplice (altrimenti come si potrebbe facilmente confrontare un chip dual-core da 4 GHz in esecuzione a 2 GHz / core rispetto a un chip quad-core da 4 GHz in esecuzione a 1 GHz / core?).

Sfortunatamente, il problema diventa complesso quando si tenta di confrontare diversi processori nelle applicazioni del mondo reale.

Innanzitutto, la maggior parte dei processori multi-core ha alcune risorse condivise tra i core (ad esempio cache della CPU). Devono condividere l'accesso a quella cache, quindi non puoi avere entrambi i core che memorizzano o leggono i dati alla massima velocità. Questo è spesso mitigato nelle CPU a molti core avendo più cache condivise (ad esempio la maggior parte dei chip quad-core hanno 2 cache, ciascuna condivisa da una coppia di core), al fine di dividere meglio le possibilità di un collo di bottiglia su una risorsa condivisa.

In secondo luogo, e forse meno conosciuto nel mondo non tecnico, è che il confronto delle velocità di clock a volte può essere come il confronto di mele e arance. CPU diverse eseguono una diversa quantità di lavoro in un singolo ciclo di clock, quindi dire che hai 1 GHz contro 1,2 GHz suona alla grande, ma il chip da 1 GHz potrebbe effettivamente svolgere più lavoro in un determinato intervallo di tempo. Il Pentium 4 ha portato questo punto a casa, portando al Mito Megahertz (che non sapevo avesse un nome coniato fino a quando non ho scritto questo post).


Le velocità di clock non sono elencate su una "base per core". Le velocità non sono mai "per" nulla. Se un'auto percorre 50 miglia all'ora, la velocità è di 50 miglia all'ora. Se due auto percorrono 50 miglia all'ora, la velocità è comunque di 50 miglia all'ora. L'idea di una "velocità per macchina" è insignificante e incoerente.
David Schwartz,

1

Due auto ciascuna percorrendo 50 miglia orarie non si "sommano" a 100 miglia orarie. E 'davvero così semplice. La velocità di clock di un processore non è una misura della velocità con cui viene svolto il lavoro, è una misura della velocità del clock.

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.