Apariția unor procesoare economice multi-core pentru consumatori ridică problema pentru mulți utilizatori: cum puteți calcula în mod eficient viteza reală a unui sistem multi-core? Este un sistem 3Ghz de 4 nuclee cu adevărat de 12Ghz? Citiți-ne pe măsură ce investigăm.
Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea programului SuperUser - o subdiviziune a Stack Exchange, o grupare de comunicații pe site-uri cu întrebări și răspunsuri.
Cititorul superUser NReilingh a fost curios cum să viteza procesorului pentru un sistem multi-core este de fapt calculat:
Este corect să spunem, de exemplu, că un procesor cu patru nuclee fiecare care rulează la 3GHz este de fapt un procesor care rulează la 12GHz?
Apoi am intrat într-un argument "Mac vs. PC" (care, prin modul NU este punctul central al acestui subiect ... care a fost înapoi la școala medie), cu o cunoștință care a insistat că Mac-urile erau doar anunțate ca mașini 1Ghz, -procesor G4 fiecare care rulează la 500MHz.
În momentul în care am știut acest lucru pentru a fi hogwash din motive pe care cred că sunt evidente pentru majoritatea oamenilor, dar am văzut doar un comentariu pe acest site cu efect de "6 nuclee x 0.2GHz = 1.2Ghz" și că ma făcut să mă gândesc din nou despre există un răspuns real la acest lucru.
Deci, aceasta este o întrebare mai mult sau mai puțin filosofică / profundă tehnică despre semantica calculării vitezei ceasului. Văd două posibilități:
- Fiecare nucleu face de fapt x calcule pe secundă, astfel numărul total de calcule este x (nuclee).
- Viteza ceasului este mai degrabă un număr din numărul de cicluri pe care procesorul le trece în secundă, atâta timp cât toate nucleele funcționează cu aceeași viteză, viteza fiecărui ciclu de ceas rămâne aceeași indiferent de câte nuclee există . Cu alte cuvinte, Hz = (core1Hz + core2Hz + ...) / nuclee.
Deci, care este modalitatea adecvată de a denota viteza totală a ceasului și, mai important, este chiar posibil să se folosească nomenclatorul de viteză mono-core pe un sistem multi-core?
Utilizatorii SuperUser Mokubai ajută la clarificarea lucrurilor. El scrie:
Principalul motiv pentru care un procesor quad-core 3GHz nu este niciodată la fel de rapid ca un singur nucleu de 12GHz este de a face cu modul în care funcționează sarcina care rulează pe acel procesor, și anume un singur filet sau un multi-filetat. Legea lui Amdahl este importantă în luarea în considerare a tipurilor de sarcini pe care le executați.
Dacă aveți o sarcină care este în mod inerent liniară și trebuie făcută exact pas cu pas, cum ar fi (un program foarte simplu)
10: a = a + 1
20: Ai ajuns la 10
Apoi, sarcina depinde foarte mult de rezultatul trecerii anterioare și nu poate rula mai multe copii ale ei înșiși fără a corupe valoarea
'A'
deoarece fiecare copie ar fi obținută valoarea'A'
la momente diferite și scrierea înapoi în mod diferit. Acest lucru restricționează sarcina la un fir unic și, astfel, sarcina poate fi executată vreodată pe un singur nucleu la un moment dat, dacă ar fi rulat pe mai multe nuclee atunci s-ar produce corupția de sincronizare. Acest lucru se limitează la 1/2 din puterea CPU a unui sistem dual core, sau 1/4 într-un sistem quad core.Acum ia o sarcină, cum ar fi:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: Ai ajuns la 10
Toate aceste linii sunt independente și ar putea fi împărțite în 4 programe distincte, cum ar fi primul și executați în același timp, fiecare capabil să utilizeze eficient puterea completă a uneia dintre nuclee fără nici o problemă de sincronizare, aici este cazul Legii lui Amdahl intră în ea.
Deci, dacă aveți o singură aplicație cu filet care face calcule de forță brute, singurul procesor de 12GHz ar câștiga mâinile în jos, dacă puteți face cumva sarcina împărțită în părți separate și multi-filetate apoi cele 4 nuclee ar putea ajunge aproape, dar nu destul de ajunge, aceeași performanță, conform legii lui Amdahl.
Principalul lucru pe care îl oferă un sistem multiprocesor este receptivitatea. Pe o mașină cu un singur nucleu care lucrează din greu, sistemul poate părea lent, deoarece cele mai multe ori ar putea fi utilizate de o singură sarcină, iar celelalte sarcini se execută doar în scurte explozii între sarcina mai mare, rezultând un sistem care pare lent sau jalnic . Pe un sistem multi-core sarcina grea devine un nucleu și toate celelalte sarcini se joacă pe celelalte nuclee, făcând locurile lor de muncă rapid și eficient.
Argumentul "6 nuclee x 0.2GHz = 1.2Ghz" este gunoi în orice situație, cu excepția cazurilor în care sarcinile sunt perfect paralele și independente. Există un număr mare de sarcini care sunt foarte paralele, dar ele necesită încă o formă de sincronizare. Frâna de mână este un trancoder video care este foarte bun la utilizarea tuturor procesoarelor disponibile, dar necesită un proces central pentru a păstra celelalte fire pline cu date și pentru a colecta datele cu care sunt terminate.
- Fiecare nucleu face de fapt x calcule pe secundă, astfel numărul total de calcule este x (nuclee).
Fiecare nucleu este capabil să facă x calcule pe secundă, presupunând că volumul de lucru este adecvat paralel, pe un program liniar, tot ce ai este de 1 nucleu.
- Viteza ceasului este mai degrabă un număr din numărul de cicluri pe care procesorul le trece în secundă, atâta timp cât toate nucleele funcționează cu aceeași viteză, viteza fiecărui ciclu de ceas rămâne aceeași indiferent de câte nuclee există . Cu alte cuvinte, Hz = (core1Hz + core2Hz + ...) / nuclee.
Cred că este o eroare să credem că 4 x 3GHz = 12GHz, a acordat lucrările de matematică, dar comparați mere cu portocale și sumele nu sunt corecte, GHz nu pot fi adăugate împreună pentru fiecare situație. Aș schimba la 4 x 3GHz = 4 x 3GHz.
Aveți ceva de adăugat la explicație? Sunați în comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.