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.
- 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.
- 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.