Come calcolare la velocità dell'orologio nei processri multi-core?

È vero, per esempio, che un processre con quattro core ciascuno in esecuzione a 3GHz sia infatti un processre in esecuzione a 12 GHz?

Una volta ho raggiunto un argomento "Mac vs. PC" (che a proposito non è il focus di questo argomento … che è tornato nella scuola media) con una conoscenza che ha insistito che i Mac sono stati pubblicizzati solo come macchine da 1Ghz perché erano due processri G4 ciascuno che funzionavano a 500MHz.

A quel tempo sapevo che questo fosse un hogwash per motivi che penso siano evidenti per la maggior parte delle persone, ma ho appena visto un commento su questo sito web per effetto di "6 core x 0.2GHz = 1.2Ghz" e mi ha fatto pensare ancora se c'è una vera risposta a questo.

Quindi, questa è una questione più o less filosofica / profonda tecnica sulla semantica del calcolo della velocità dell'orologio. Vedo due possibilità:

  1. Ogni nucleo sta effettivamente calcoli x per secondo, quindi il numero totale di calcoli è x (core).
  2. La velocità dell'orologio è piuttosto un count del numero di loops che il processre attraversa nello spazio di un secondo, in modo che tutti i core siano in esecuzione alla stessa velocità, la velocità di each ciclo di clock rimane lo stesso, non import quanti nuclei esistono . In altre parole, Hz = (core1Hz + core2Hz + …) / core.

Il motivo principale per cui un processre quad-core da 3 GHz non è mai così veloce come un singolo core da 12 GHz è quello di funzionare con l'esecuzione dell'attività in esecuzione su quel processre, vale a dire singolo threading o multi-threaded. La Legge di Amdahl è importnte quando si considerano i tipi di attività che si sta eseguendo.

Se hai un task intrinsecamente lineare e deve essere fatto accuratamente passo dopo passo, ad esempio (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 sé senza corrompere il valore di 'a' poiché each copia avrebbe ottenuto il valore di 'a' in tempi diversi e la scriverà in modo diverso. Ciò limita l'attività a un singolo thread e quindi l'attività può essere eseguita solo su un singolo nucleo in un dato momento, se fosse eseguita su più core, allora la corruzione di sincronizzazione sarebbe avvenuta. Questo lo limita a 1/2 della potenza CPU di un sistema dual core, o 1/4 in un sistema a quad core.

Ora prendi un task come:

 10: a = a + 1 20: b = b + 1 30: c = c + 1 40: d = d + 1 50: goto 10 

Tutte queste righe sono indipendenti e possono essere suddivise in 4 programmi separati come il primo e eseguiti contemporaneamente, ognuno in grado di utilizzare efficacemente la piena potenza di uno dei core senza alcun problema di sincronizzazione, è qui che la legge di Amdahl entra in esso.

Quindi, se si dispone di un'unica applicazione filettata che effettua calcoli di forza bruta, il singolo processre a 12 GHz avrebbe conquistato le mani, se si può in qualche modo rendere l'attività suddivisa in parti separate e multi-filettate, allora i quattro core potrebbero avvicinarsi ma non abbastanza raggiunti, la stessa prestazione, come per la legge di Amdahl.

La cosa principale che un sistema multi CPU ti dà è la risposta. Su una macchina a nucleo singolo che lavora duro il sistema può sembrare lento come la maggior parte del tempo potrebbe essere utilizzato da un task e le altre mansioni eseguire solo in brevi sbocchi tra il task più grande, con conseguente un sistema che sembra lento o giudizio . Su un sistema multi-core il lavoro pesante ottiene un nucleo e tutte le altre attività svolgono gli altri nuclei, facendo i loro lavori in modo rapido ed efficiente.

L'argomento di "6 core x 0.2GHz = 1.2Ghz" è spazzatura in each situazione, eccetto where i compiti sono perfettamente paralleli e indipendenti. Ci sono un buon numero di compiti molto paralleli, ma richiedono ancora una qualche forma di sincronizzazione. Il freno a mano è un trancoder video che è molto utile nell'utilizzare tutte le CPU disponibili, ma richiede un process di base per mantenere le altre voci riempite con i dati e raccogliere i dati con cui sono stati fatti.

  1. Ogni nucleo sta effettivamente calcoli x per secondo, quindi il numero totale di calcoli è x (core).

Ogni nucleo è in grado di eseguire calcoli x al secondo, supponendo che il carico di lavoro sia adatto parallelo, in un programma lineare tutto ciò che hai è 1 nucleo.

  1. La velocità dell'orologio è piuttosto un count del numero di loops che il processre attraversa nello spazio di un secondo, in modo che tutti i core siano in esecuzione alla stessa velocità, la velocità di each ciclo di clock rimane lo stesso, non import quanti nuclei esistono . In altre parole, Hz = (core1Hz + core2Hz + …) / core.

Penso che sia un errore pensare che 4 x 3GHz = 12 GHz, ha permesso la math di funzionare, ma stai confrontando le mele con le arance e le somme non sono giuste, il GHz non può essere semplicemente aggiunto insieme per each situazione. Vorrei cambiarlo a 4 x 3GHz = 4 x 3GHz.

Altri hanno fatto un buon argomento dal punto di vista tecnico. Farò invece un paio di semplici analogie che spero vi spiegherò perché 4 * 3GHz non è equivalente a 1 * 12GHz.

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

Ecco un'altra: in una centrale idroelettrica che ho visitato di recente, uno dei generatori è stato aggiornato. Dovevano trasportre lo statore del generatore in nave. Un sesto dello statore potrebbe essere trasportto con camion, ma wherevano trasportre interi stator; quindi hanno dovuto usare una nave, non sei camion.

Un altro caso potrebbe essere la precisa tempistica degli events. A volte i processri di computer vengono utilizzati come timer precisi (anche se la pratica non è più raccomandata, a causa dell'orologio variabile nella maggior parte dei processri.). Se supponiamo che abbiamo un processre con orologio 12GHz relativamente stabile, possiamo utilizzarlo per misurare il tempo in una risoluzione molto più elevata che su un processre con clock 3GHz. Non import quanti core di 3GHz abbiamo, non saremo in grado di raggiungere la risoluzione del core a 12GHz. Questo è come avere 4 orologi con display a 7 segmenti where each orologio mostra solo il tempo corretto in ore. Non import quanto correttamente presentano ore, non è ansible utilizzarle per misurare gli intervalli di tempo in un intervallo di un secondo.

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

Per semplificare la logica, diciamo che stiamo parlando di un processre dual core. Se un insieme di calcoli sono stati, dite:

a = b + 1;

c = d + 1;

quindi, questi due calcoli potrebbero essere eseguiti su nuclei separati e un processre a xGHz sarebbe equivalente a un processre a un core 2 x GHz. Ciò è dovuto al fatto che i due calcoli, sebbene eseguiti a velocità x, verrebbero trattati contemporaneamente. Mentre il processre a corona singola poteva farli a velocità 2 * x, ma uno dopo l'altro. Se le due CPU eseguirono questo codice allo stesso tempo, finiranno allo stesso tempo. Tuttavia, se il codice fosse:

a = b + 1;

c = a + 1;

quindi, il processre dual-core richiederebbe due volte il tempo del processre singolo, perché nella seconda istruzione il valore di a dipende dalla prima istruzione e pertanto non può essere eseguito in parallelo. Questo è il modo in cui alcuni software possono trarre vantaggio da processri multi-filettati.

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

Questa è una domanda complicata da rispondere, ma la risposta è: no

Nelle applicazioni del mondo reale quattro processri 3Ghz non saranno più veloci come un singolo processre da 12Ghz a causa di inefficienze. Possono essere molto vicini, ma non saranno uguali a un singolo processre in termini di potenza di elaborazione.

La ragione di questo è nelle piccole inefficienze quando si tratta di programmi che possono essere eseguiti su più processri. Supponendo che il programma in questione possa funzionare in parallelo, continueremo ad affrontare problemi con corpi diversi che competono l'uno contro l'altro per altre risorse come RAM o addirittura problemi di cache e thread di sincronizzazione. Inoltre, ci sono sempre parti di programmi che non possono essere paralleli e necessitano di eseguire da solo su un singolo nucleo.

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

Sembra che non possiamo dire che 4 core a 3 GHz si può dire come 12 GHz.

Vari vincoli come la memory condivisa, la contesa della cache e altre risorse sono comuni a tutti i core in modo da eseguire un pezzo di codice parallelo su questi core non sarà così efficiente come eseguirlo su processri da 12 Ghz (anche se è difficile build un tale processre ).

Inoltre ho letto da qualche parte che se raddoublemo i transistori embedded sul chip (CMP), la velocità che intendiamo è solo il 40%. Questo fornisce un notevole segnale anche a questo argomento.

Per quanto riguarda i loops di clock eseguiti, sì, un processre multi-core produce completi loops di lavoro di x * cores al secondo. Di solito, le velocità di clock sono elencate su base per-core per un confronto più semplice (altrimenti come si confronterebbe facilmente un chip a doppio chip da 4GHz a 2GHz / core contro un chip quad-core a 4GHz in esecuzione a 1GHz / core?).

Purtroppo il problema si presenta complesso quando si tenta di confrontare diversi processri nelle applicazioni del mondo reale.

In primo luogo, la maggior parte dei processri multi-core dispongono di risorse condivise tra i core (ad es. CPU cache). Devono condividere l'accesso a quella cache, quindi non è ansible avere entrambi i core memorizzando o leggendo i dati a piena velocità. Questo è spesso attenuato nelle CPU multi-core, avendo più cache condivise (ad esempio, più chip quad-core hanno 2 cache, ognuno condiviso da un paio di core) per meglio dividere le probabilità di un collo di bottiglia su una risorsa condivisa.

In secondo luogo, e forse less conosciuto nel mondo non tecnologico, è che confrontare le velocità dell'orologio a volte può essere come confrontare mele e arance. Diverse CPU compiono una quantità diversa di lavoro in un singolo ciclo di clock, quindi dire che hai 1GHz vs 1.2GHz suoni eccezionali, ma il chip da 1GHz potrebbe in realtà get più lavoro fatto in un intervallo di tempo dato. Il Pentium 4 ha guidato questo punto a casa, portndo al Mito Megahertz (che non sapevo che avesse un nome coniato fino a scrivere questo post).

Due automobili each 50 miglia all'ora non si addicono a 100 miglia all'ora. E 'davvero così semplice. La velocità dell'orologio di un processre non è una misura della velocità con cui viene eseguito il lavoro, è una misura di quanto veloce l'orologio squilla.