Procesorių branduoliai: kodėl skiriasi jų skaičius ir kaip jie lemia bendrą procesoriaus našumą ()
Kol procesoriuose būdavo vienas branduolys, viskas buvo kur kas aiškiau – koks jau yra procesoriaus dažnis, tokiu greičiu jis ir sugeba apdoroti duomenis. Kuo aukštesnis dažnis, tuo greičiau apdorojami duomenys.
Prisijunk prie technologijos.lt komandos!
Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.
Sudomino? Užpildyk šią anketą!
Kodėl prireikė daugiau nei vieno branduolio?
Taigi, procesoriaus taktinis dažnis (clock speed) parodo, kiek procesorius gali „apdoroti“ instrukcijų per sekundę. Dažnis matuojama hercais (Hz), kompiuterių procesoriuose milijonais (megahercai – MHz), ir milijardais (gigahercai – GHz) hercų.
Skirtingo dažnio procesoriai gali būti palyginami su skirtingo greičio keliais – kuo didesnis leidžiamas greitis, tuo greičiau nukeliausite iš taško A į tašką B. Tad, kuo didesnis procesoriaus dažnis, tuo greičiau jis atliks tam tikras operacijas.
Žinoma, kuo didesniu greičiu keliausite, tuo didesnė avarijos tikimybė. Procesorių atveju, kuo didesnis dažnis, tuo labiau jis kaista. Ir nuo tam tikro dažnio jis kaista taip stipriai, kad tiesiog „iškepa“, nežiūrintį visus bandymus jį aušinti.
Taigi, kaip keliuose atsirado greičio ribojimai, tai procesorių dažnis nuo pat 2004 metų sustingo ties 4 GHz – plačiau apie tai skaitykite straipsnyje Ką reiktų žinoti apie procesorių dažnį, našumą, gamybos procesą ir „Intel“ „tick – tock" strategiją
Tad procesorių gamintojams teko ieškoti kitokių bendro procesorių našumo kėlimo, nedidinant jų dažnio būdų. Taip atsirado kelių branduolių procesoriai – fiziškai tai vienas procesorius, tačiau turintis du ar daugiau vidinių skaičiavimo įrenginių.
Kad būtų aiškiau, vėl galime paimti greitkelio pavyzdį. Jeigu dėl saugumo jau negalima padidinti greičio kelyje, tačiau pravažiuojančių automobilių tiek, kad formuojasi kamščiai, vienintelė išeitis – didinti eismo juostų skaičių. Taigi, papildomos eismo juostos kelyje atitinka papildomus branduolius procesoriuje.
Tačiau kaip papildomos eismo juostos nedidina didžiausio greičio kelyje, taip ir papildomas branduolių skaičius nedidina didžiausio procesoriaus dažnio.
Kitaip tariant, jeigu turite 2 branduolių 1.5GHz dažnio procesorių, tai nėra identiška vieno branduolio 3 GHz dažnio procesoriui.
Norint suprasti šiuos skirtumus, reiktų pasigilinti į tai, kaip kompiuteryje išnaudojami papildomi branduoliai.
Kaip kompiuteryje išnaudojami skirtingi branduoliai
Grįžkime prie greitkelio pavyzdžio. Taigi, kelyje formuojasi spūstis ir po ilgų rekonstrukcijų mums pavyko nutiesti papildomą juostą. Ar spūstys sumažės? Sumažės tuo atveju, jei dalis automobilių iš pirmos juostos persirikiuos į antrąją juostą. Jei abi juostos bus užimtos pilnai, tuomet greitkeliu pravažiuos dvigubai daugiau automobilių, nei viena juosta tuo pačiu greičiu.
Tačiau jei į antrąją juostą rikiuosis tik nedidelė dalis automobilių, o didžioji srauto dalis vis tiek judės pirmąją juosta, bendras greitkeliu pravažiuojančių automobilių srautas šiek tiek padidės, bet palyginti nedaug.
Labai panaši situacija vyksta ir procesorių atveju. Nors procesorius turi 2 ar daugiau branduolių, tai dar nereiškia, kad kompiuterio greitis paspartės dvigubai – daug kas priklauso nuo vykdomų programų sugebėjimo išnaudoti tuos du branduolius.
Įsivaizduokime situaciją, kad kompiuteryje su vieno branduolio procesoriumi paleidome programą, kuri skaičiuoja, kiek yra skaičių, kurie be liekanos dalinasi iš 6 intervale nuo 0 iki 100 milijardų. Pačiu paprasčiausiu atveju, procesorius ima po vieną skaičių ir tikrina, ar jis dalinasi, ar ne. Ir taip kantriai nuo 0 iki pat 100 milijardų. Kad ir koks greitas procesorius, toks tikrinimas užtruks gan ilgai.
Kas pasikeistų, jei tą pačią programą paleistume kompiuteryje su dviejų branduolių procesoriumi? Viskas priklausytų nuo to, kaip elgtųsi skaičiavimus vykdanti programa. Jei ji veiktų nekeisdama algoritmo, tuomet iš dviejų branduolių nebūtų jokios naudos – skaičiavimus vykdytų tik vienas branduolys, o antras nieko neveiktų. Tad bendras sistemos našumas išliktų identiškas kaip ir vieno branduolio atveju. Panašiai kaip su greitkeliu – koks skirtumas, kad yra antra juosta, jei visi važiuoja viena.
Tad, jei programa nemoka išnaudoti procesoriaus branduolių, nėra jokios skirtumo, ar yra vienas branduolys, ar 2, ar 4 ar net 8.
O kas keičiasi, jei programa protinga ir moka išnaudoti du branduolius? Pavyzdžiui, vienam branduoliui paveda skaičių tikrinimą nuo 0 iki 50 milijardų, o kitam – nuo 50 milijardų iki 100 milijardų? Atskiro skaičiaus tikrinimas užtruks tiek pat laiko, tačiau vienu metu bus tikrinami du skirtingi skaičiai. Taigi, rezultatą gausite dvigubai greičiau.
Kokią galima padaryti išvadą? Jei branduoliai yra du ar daugiau, realų sistemos greitį nulems programinė įranga.
Kas tai yra „single-thread“ir „multi-thread“ sparta
Štai todėl vertinant realų procesorių našumą, reikia tiksliai žinoti, kas bus vertinama – ar procesoriaus greitis vykdant vienos gijos programą, ar vykdant kelių gijų programą. Šiems skirtumams apibūdinti naudojami angliški terminai “single-thread“, bei “multi-thread“. Tad vienos gijos programa (“single-thread“), veikdama kelių branduolių procesoriuje, negaus jokio pranašumo, o kelių gijų (“multi-thread“) programa – gaus.
Dar viena bėda, kad būna tam tikros operacijos, kurių tiesiog neįmanoma išskaidyti lygiagrečiai. Įsivaizduokime, jog platinant greitkelį atsitrenkėme į kalną, pro kurį iškastas tunelis ir štai šiame tunelyje telpa tik viena kelio juosta. Išplatinti tunelį būtų pernelyg brangu, tad kelią platiname iki tunelio ir už jo. Tad dviejų eismo srautui privažiavus tunelį teks rikiuotis į vieną juostą ir kelyje vėl kamštis.
Panašiai vyksta ir procesoriuje – ne visas vykdomas operacijas galima lygiagretinti.
Tai kaip čia išeina – nebelieka jokios naudos iš kelių branduolių?
Grįžkime prie greitkelio – verta ar ne platinti kelią, jei pusiaukelėje yra siauras tunelis? Aišku, jog verta – mat ne visi automobiliai važiuoja vienodu greičiu. Tie, kas važiuoja lėčiau, netrukdo tiems, kas važiuoja greičiau. Tad panaudojus kelias kelio juostas, iki tunelio ir už tunelio sumažėja kamščių dėl greičių skirtumo.
Tas pats vyksta ir su programomis – vienoms operacijoms reikia daugiau laiko, kitoms mažiau. Tad keli branduoliai efektyviai pagreitiną bendrą sistemos darbą, kuomet vienas branduolys užsiėmęs ilgais skaičiavimais, o kitas vykdo greitesnes užklausas.
O ar nėra būdų, kaip pašalinti tokį siaurą greitkelio tunelį? Tai tikrai aktualus klausimas, tad prie jo inžinieriai irgi nuosekliai dirba. Sugalvotos įvairios technologijos, kurios sumažina arba iš viso padeda išvengti tokių susiaurėjimų, tačiau jos diegiamos ne visuose procesoriuose.
Be to, dabartinės programos jau irgi gan gerai moka paskirstyti skaičiavimo užduotis keliems branduoliams, o ir pati operacinė sistema išmoko nukreipinėti užduotis tam branduoliui, kuris yra laisvas nuo darbų. Pavyzdžiui, jei kompiuteris kažką intensyviai skaičiuoja ir norite tuo pačiu klausytis muzikos, vieno branduolio procesorius negali vienu metu atlikti dviejų užduočių – jis kelias mikrosekundes paskaičiuos, po to kelias mikrosekundes pagros muziką. Tai vyksta taip greitai, kad žmogaus ausis net nesupranta, kad garsas yra trūkčiojantis (na, nebent išskyrus tikrus melomanus). Tačiau dėl nuolatinių pertraukimų skaičiavimus procesorius pabaigs vėliau nei dirbdamas be pertraukimų.
Operacinėje sistemoje tvarkingą užduočių atlikimą ir procesoriaus darbo laiko paskirstymą vykdo savas tvarkaraštininkas – procesas sheduler. Štai jis ir paskirsto, kokią programą ir kiek laiko turės vykdyti procesorius. Jeigu procesorius turi kelis branduolius, vienas branduolys gali skaičiuoti, o kitas groti muziką. Nebent prireikia tų operacijų, kurios konkrečiame procesoriuje negali būti lygiagretinamos – tokiu atveju vėl vyksta pakaitinis darbas: pradžioje viena programa, paskui kita.
Akivaizdu, kad kelių branduolių procesorių greitis labai priklauso nuo to, kokios programos vykdomos, koks jų veikimo algoritmas, kiek yra operacijų, kurių konkretus procesorius negali lygiagretinti, todėl ir testuose pateikiami du greičio vertinimai – dirbant „single-thread“ režimu ir „multi-thread“ režimu.
Žymiai svarbesnis parametras yra procesoriaus greitis „single-thread“ režimu – kuo šis parametras aukštesnis, tuo bendras procesoriaus našumas bus didesnis. Iš čia išvada – namų kompiuterių atveju geriau turėti procesorių su mažiau spartesnių branduolių, nei procesorių su daug, bet lėtesnių branduolių.
Taigi, keli spartūs branduoliai tikrai geriau, nei to paties dažnio vieno branduolio procesorius. Tačiau koks yra optimalus branduolių kiekis – 2, 4, 8? Apie tai – jau kitame straipsnyje.