Apariția procesoarelor multi-core economice pentru consumatori ridică întrebarea multor utilizatori: cum calculați în mod eficient viteza reală a unui sistem multi-core? Este într-adevăr un sistem 3Ghz cu 4 nuclee de 12Ghz? Citiți mai departe pe măsură ce investigăm.
Sesiunea de Întrebări și Răspunsuri de astăzi ne vine prin amabilitatea SuperUser - o subdiviziune a Stack Exchange, un grup comunitar de site-uri de întrebări și răspunsuri.
Intrebarea
Cititorul SuperUser NReilingh era curios cum se calculează de fapt viteza procesorului pentru un sistem multi-core:
Este corect să spunem, de exemplu, că un procesor cu patru nuclee care rulează fiecare la 3GHz este de fapt un procesor care rulează la 12 GHz?
Am intrat odată într-un argument „Mac vs. PC” (care, apropo, 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 publicitate doar ca mașini de 1 Ghz, deoarece acestea erau duale. -procesorul G4 rulează fiecare la 500MHz.
La vremea respectivă, am știut că acesta este spălător de porc din motive care cred că sunt evidente pentru majoritatea oamenilor, dar tocmai am văzut un comentariu pe acest site despre efectul „6 nuclee x 0,2 GHz = 1,2 Ghz” și asta m-a făcut să mă gândesc din nou dacă există un răspuns real la asta.
Deci, aceasta este o întrebare tehnică mai mult sau mai puțin filosofică / profundă despre semantica calculului 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 de ceas este mai degrabă o numărare a numărului de cicluri prin care procesorul trece în spațiul unei secunde, astfel încât atâta timp cât toate nucleele rulează la 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 modul adecvat de a indica viteza totală a ceasului și, mai important, este chiar posibil să se utilizeze nomenclatura de viteză cu un singur nucleu pe un sistem multi-core?
Răspunsul
Contribuitorii 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 12 GHz este legat de modul în care funcționează sarcina care rulează pe acel procesor, adică un singur fir sau mai multe fire. Legea lui Amdahl este important atunci când luați în considerare tipurile de sarcini pe care le executați.
Dacă aveți o sarcină care este inerent liniară și trebuie realizată precis pas cu pas, cum ar fi (un program grosolan simplu)
10: a = a + 120: La fiecare 10Apoi, sarcina depinde în mare măsură de rezultatul trecerii anterioare și nu poate rula mai multe copii ale sale fără a deteriora valoarea lui
'A'deoarece fiecare copie ar obține valoarea'A'în momente diferite și redactându-l diferit. Acest lucru restrânge sarcina la un singur fir și, prin urmare, sarcina poate rula doar pe un singur nucleu la un moment dat, dacă ar rula pe mai multe nuclee, atunci corupția de sincronizare ar avea loc. Acest lucru îl limitează la 1/2 din puterea cpu a unui sistem dual core sau 1/4 într-un sistem quad core.Acum ia o sarcină precum:
10: a = a + 120: b = b + 130: c = c + 140: d = d + 150: La fiecare 10Toate aceste linii sunt independente și ar putea fi împărțite în 4 programe separate, cum ar fi primul și pot rula în același timp, fiecare fiind capabil să utilizeze efectiv puterea maximă a unuia dintre nuclee fără nicio problemă de sincronizare, aici este locul în care Legea lui Amdahl intră în ea.
Deci, dacă aveți o singură aplicație filetată care face calcule de forță brută, un singur procesor de 12 GHz ar câștiga mâinile, dacă puteți face cumva sarcina împărțită în părți separate și multi-filetate, atunci cele 4 nuclee ar putea să se apropie, dar nu să ajungă, aceeași performanță, conform Legii lui Amdahl.
Principalul lucru pe care vi-l oferă un sistem multiprocesor este receptivitatea. Pe o mașină cu un singur nucleu care funcționează din greu, sistemul poate părea lent, deoarece de cele mai multe ori ar putea fi folosite de o sarcină, iar celelalte sarcini se execută doar în rafale scurte între sarcina mai mare, rezultând un sistem care pare lent sau slab . Pe un sistem multi-core sarcina grea capătă un nucleu și toate celelalte sarcini joacă pe celelalte nuclee, realizându-și treaba rapid și eficient.
Argumentul „6 nuclee x 0,2 GHz = 1,2 Ghz” este gunoi în orice situație, cu excepția cazului în care sarcinile sunt perfect paralele și independente. Există un număr mare de sarcini care sunt foarte paralele, dar necesită totuși o anumită formă de sincronizare. Frână de mână este un transcoder video care este foarte bun la utilizarea tuturor procesorelor disponibile, dar necesită un proces de bază pentru a menține celelalte fire umplute cu date și a colecta datele cu care sunt realizate.
- 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, într-un program liniar tot ce aveți este 1 nucleu.
- Viteza de ceas este mai degrabă o numărare a numărului de cicluri prin care procesorul trece în spațiul unei secunde, astfel încât atâta timp cât toate nucleele rulează la 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 = 12 GHz, au acordat funcționarea matematicii, dar comparați merele cu portocalele și sumele nu sunt corecte, GHz nu poate fi adăugat pur și simplu pentru fiecare situație. L-aș schimba la 4 x 3GHz = 4 x 3GHz.
Aveți ceva de adăugat la explicație? Sună în comentarii. Doriți să citiți mai multe răspunsuri de la alți utilizatori ai Stack Exchange? Consultați aici firul complet de discuție .