Kuidas arvutate protsessori kiirust mitme tuumaga protsessoritel?
Ökoloogiliste tarbijaklassi mitmetuumaliste protsessorite tekkimine tõstatab küsimuse paljude kasutajate jaoks: kuidas arvutada tõhusalt mitme tuumaga süsteemi tegelik kiirus? Kas 4-tuumane 3Ghz süsteem on tõesti 12 GHz? Lugege edasi, kui uurime.
Tänane küsimuste ja vastuste seanss saabub meiega kohtades, kus on SuperUser-Stack Exchange'i alajaotus, kogukondliku draivi rühmitus Q&A veebisaitidel.
Küsimus
SuperUser-lugeja NReilingh oli uudishimulik, kuidas protsessorikiirust mitme südamiku süsteemi jaoks tegelikult arvutatakse:
Kas on õige öelda näiteks, et nelja südamikuga protsessor, mis igaüks töötab 3GHz-is, on tegelikult 12 GHz töötav protsessor?
Kui ma sattusin "Mac vs PC" argumendisse (mis muide ei ole selle teema fookus ... mis oli tagasi keskkoolis) koos tuttavaga, kes nõudis, et Maci reklaamitaks ainult 1Ghz masinaid, sest nad olid kahekordsed -protsessor G4, igaüks töötab 500 MHz juures.
Tol ajal ma teadsin, et see on hohwash põhjustel, mis minu arvates on enamiku inimeste jaoks ilmsed, kuid ma nägin just sellel veebilehel kommentaari „6 südamiku x 0,2GHz = 1,2 Ghz” tagajärjel ja see mulle mõtlesin uuesti, kas sellele on reaalne vastus.
Niisiis, see on rohkem või vähem filosoofiline / sügav tehniline küsimus kella kiiruse arvutamise semantika kohta. Ma näen kahte võimalust:
- Iga südamik teeb tegelikult x arvutused sekundis, seega on arvutuste koguarv x (südamikud).
- Kella kiirus on pigem tsüklite arv, mida protsessor teise sekundi jooksul läbib, nii et seni, kuni kõik südamikud töötavad samal kiirusel, jääb iga kella tsükli kiirus samaks, olenemata sellest, kui palju südamikke on olemas . Teisisõnu, Hz = (core1Hz + core2Hz +…) / südamikud.
Niisiis, milline on õige kellaaja kiiruse tähistamise viis ja mis veelgi olulisem, kas on isegi võimalik kasutada ühe südamiku kiiruse nomenklatuuri mitme südamiku süsteemis?
Vastus
SuperUser'i toetajad Mokubai aitab asju selgeks teha. Ta kirjutab:
Peamine põhjus, miks nelja-tuumane 3GHz protsessor ei ole kunagi nii kiire kui 12 GHz ühe südamikuga, on seotud sellega, kuidas protsessor töötab, st ühe keermega või mitme keermega. Amdahli seadus on oluline, kui arvestate, milliseid ülesandeid te kasutate.
Kui teil on ülesanne, mis on oma olemuselt lineaarne ja seda tuleb teha täpselt samm-sammult, näiteks (äärmiselt lihtne programm)
10: a = a + 1
20: goto 10
Siis sõltub ülesanne suuresti eelmise käigu tulemusest ja ei saa käivitada mitut koopiat, ilma et see kahjustaks selle väärtust
"a"
kuna iga koopia oleks väärt"a"
erinevatel aegadel ja kirjutades selle erinevalt. See piirab ülesannet üheks lõngaks ja seega saab ülesanne kunagi töötada ühel tuumal igal ajahetkel, kui see peaks töötama mitme südamikuga, siis sünkroniseerimise korruptsioon toimuks. See piirab seda 1/2 kahekordse südamiku süsteemi cpu võimsusest või 1/4 quad core süsteemis.Nüüd võtke ülesanne, näiteks:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10
Kõik need read on sõltumatud ja neid võib jagada neljaks eraldi programmiks, nagu esimene ja käivitada samal ajal, igaüks suudab tõhusalt kasutada ühe südamiku täisvõimsust ilma sünkroniseerimisprobleemita, see on koht, kus Amdahli seadus sinna jõuab.
Nii et kui teil on üks keermestatud rakendus, mis teeb brutse jõu arvutusi, võidaks üksik 12GHz protsessor käed maha, kui sa saad kuidagi teha ülesande jagatud osadeks ja mitme keermega, siis võivad neli südamikku jõuda lähedale, kuid mitte päris jõuda sama tulemus nagu Amdahli seaduses.
Peamine asi, mida mitme protsessori süsteem pakub, on reageerimisvõime. Ühekordselt töötaval masinal, mis töötab kõvasti, võib süsteem tunduda aeglane, kuna enamikku ajast võib kasutada üks ülesanne ja teised ülesanded töötavad ainult lühikese purunemisega suurema ülesande vahel, mille tulemuseks on süsteem, mis tundub aeglane või mõttetu . Mitme südamikuga süsteemis on raske ülesanne üks südamik ja kõik teised ülesanded mängivad teisi südamikke, tehes oma tööd kiiresti ja tõhusalt.
„6 südamiku x 0,2GHz = 1,2 GHz” argument on igas olukorras prügi, välja arvatud juhul, kui ülesanded on täiesti paralleelsed ja sõltumatud. On palju ülesandeid, mis on väga paralleelsed, kuid vajavad endiselt mingit sünkroniseerimist. Käsipidur on videomoodul, mis on kõigi olemasolevate protsessorite kasutamisel väga hea, kuid see nõuab põhiprotsessi, et hoida teised lõngad andmetega täidetud ja koguda andmeid, mida nad on teinud.
- Iga südamik teeb tegelikult x arvutused sekundis, seega on arvutuste koguarv x (südamikud).
Iga südamik on võimeline tegema x arvutusi sekundis, eeldades, et töökoormus on paralleelne, lineaarses programmis on teil kõigil 1 südamik.
- Kella kiirus on pigem tsüklite arv, mida protsessor teise sekundi jooksul läbib, nii et seni, kuni kõik südamikud töötavad samal kiirusel, jääb iga kella tsükli kiirus samaks, olenemata sellest, kui palju südamikke on olemas . Teisisõnu, Hz = (core1Hz + core2Hz +…) / südamikud.
Ma arvan, et see on ekslik arvata, et 4 x 3GHz = 12GHz, mis antakse matemaatikale, aga te võrdlete õunu apelsinidega ja summad lihtsalt ei ole õiged, GHz ei saa lihtsalt iga olukorra jaoks kokku liita. Ma muudaksin selle 4 x 3GHz = 4 x 3GHz.
Kas teil on midagi lisada selgitusele? Hääletage kommentaarides. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Vaadake siin täielikku arutelu lõiku.