Nuo procesoriaus instrukcijų rinkinio priklauso sužadinamos programos, o nuo architektūros ypatumų – kompiuterio darbo sparta. Kartais tuo pačiu dažniu veikiančių vienos šeimos procesorių darbo sparta gali skirtis net keletą kartų. Nors asmeninių kompiuterių rinkoje liko tik viena procesorių šeima – „x86“ (IA-32), tačiau kitose srityse ji nedominuoja arba apskritai nenaudojama. Pavyzdžiui, mobiliųjų telefonų rinkoje vyrauja ARM šeimos procesoriai (apie 90 proc. rinkos).
Kaip sudarytas procesorius
Beveik visi šiuolaikiniai procesoriai veikia pagal dar praėjusio amžiaus penktajame dešimtmetyje suformuluotus Johno von Neumano ar Harvardo architektūros principus. Užuot aprašius visus veiksmus aparatinėje įrangoje, programa išsaugoma atmintinėje, kurios turinį galima paprastai keisti ir taip parengti kompiuterį kitai užduočiai. Procesoriai instrukcijas vykdo keliais etapais. Paprastai skiriami išrinkimo, dekodavimo, vykdymo, rezultatų išsaugojimo ir grįžimo atgal (instruction fetch(IF), instruction decode (ID), memory (MEM), execute (EX), writeback(WB)) etapai, tačiau kai kuriuose procesoriuose yra numatyti ir papildomi.
Iš atmintinės nuskaityta instrukcija dekoduojama. Šiuo veiksmu nustatoma, kurios procesoriaus dalys veiks vykdant instrukciją. Prieš atliekant nurodytą komandą, sujungiamos atitinkamos procesoriaus dalys. Pavyzdžiui, vykdant sudėties operaciją, aktyvuojamas aritmetinis-loginis įrenginys (ALĮ), kuris, atlikęs operaciją, gali nustatyti rezultato požymius (pvz., pažymėti aritmetinio perpildymo vėliavėlę). Paskutinio veiksmo metu operacijos rezultatai perkeliami į nurodytą atmintinę (procesoriaus registrą ar pagrindinę atmintinę). Baigęs vykdyti vieną instrukciją, procesorius grįžta į pradinę padėtį ir imasi kitos.
Procesoriai kalba skirtingomis kalbomis
Procesoriaus architektūra grindžiama vidinių instrukcijų rinkiniu, kuris rodo, kaip procesorius interpretuoja gaunamas bitų sekas. Pavyzdžiui, „x86“ šeimos procesorius 10110000 01100001 bitų seką (šešioliktainiu formatu 0xB061) supranta kaip įkrauti skaičių 97 į procesoriaus registrą al. Tačiau 32 bitų „PowerPC“ įkraus pusę žodžio (101100 – instrukcija sth) į EA registro rodomą atmintinės sritį, kuri randama pagal segmentą (00011) ir poslinkį (00001). Visai „PowerPC“ instrukcijai sudaryti trūksta dar dviejų baitų duomenų.
Šis skirtumas – svarbiausia kompiuterių nesuderinamumo priežastis. Norint vykdyti kito procesoriaus kodą, reikia arba emuliatoriaus, arba tarpinio kodo, kurį būtų galima vykdyti virtualia mašina (JAVA, „SmallTalk“) ar paversti tinkamomis komandomis (IBM AS/400).
Pirmieji procesoriai (1950–1970) buvo projektuojami taip, kad programai vykdyti reikėtų kuo mažiau pagrindinės atmintinės ir procesoriaus registrų, nes atmintinė buvo labai brangi ir lėta. Sudėtingi procesoriai galėjo vykdyti aukšto lygio programavimo kalbų instrukcijas.
Tačiau sparčiai tobulėjant kompiuteriams buvo pastebėta, kad daugeliui programų (jų kompiliatoriams) nereikia visų sudėtingų instrukcijų (dalybos, daugybos), o jas pakeitus greitai vykdomų, paprastų instrukcijų (sudėties, atimties) rinkiniu užduotį galima atlikti gerokai sparčiau.
RISC ir CISC
Praėjusio amžiaus aštuntajame dešimtmetyje inžinieriai nusprendė supaprastinti sudėtingas instrukcijas ir priversti procesorius jas vykdyti sparčiau. Sistema buvo pavadinta „Reduced Instruction Set Computing“ (RISC), nors ją būtų tiksliau vadinti „load-store“. Šis pavadinimas geriau atspindi RISC idėją: apdorojamus duomenis pirmiausia reikia įkelti į registrus ir tik paskui apdoroti, o rezultatus pasiimti tik iš registrų. RISC procesoriuose yra dešimtys bendrosios paskirties registrų, iš kurių duomenys paimami gerokai greičiau nei iš atmintinės. Kita RISC procesorių ypatybė – visos instrukcijos yra vienodo ilgio, todėl jas galima greičiau dekoduoti. Skirtumui pabrėžti senesnė procesorių architektūra buvo pavadinta „Complete/Complex Instruction Set Computer“ – CISC, arba, siekiant pabrėžti duomenų apdorojimo pobūdį, „memory-memory“ ar „register-memory“.
RISC procesoriai buvo pradėti naudoti beveik visuose kompiuteriuose, išskyrus asmeninius. Pasirodžius RISC, į asmeninius kompiuterius jau buvo pradėta diegti daug CISC procesoriams pritaikytos programinės įrangos, kurios gamintojai nepanoro keisti. „Intel“ taip pat nenorėjo prarasti tuo metu turėtos monopolijos, todėl greitai išleido spartesnius „Pentium“ procesorius, kurie sumažino RISC spartos privalumus. Tiesa, dabar jau nėra aiškios ribos tarp RISC ir CISC.
Iš kitų kompiuterijos sričių (buitinės įrangos, automobilių technikos, mobiliųjų telefonų), kurios, pasirodžius RISC, buvo tik pradėtos tobulinti, CISC procesoriai buvo greitai išstumti. Tokį spartų populiarėjimą lėmė lankstūs RISC procesoriai: jie labai paprasti, naudoja mažai energijos, nekaista ir yra pigūs (ARM, PowerPC). Prireikus RISC architektūrą galima išplėsti ir sudaryti ypač sparčius procesorius, tokius kaip „Cell“, „POWER 6“ ar „UltraSPARC T1“.
Cache, Pipeline ir kiti užkeikimai
Darbinis dažnis jau seniai neatspindi procesoriaus spartos. Inžinieriai sugalvojo ne vieną būdą paspartinti klasikinį kompiuterį.
Pats paprasčiausias – procesoriuje įrengti atmintinės podėlį (cache), dėl kurio rečiau kreipiamasi į lėtą pagrindinę atmintinę. RISC procesoriuose yra atskiri duomenų ir instrukcijų podėliai, todėl tuo pat metu galima rinktis ir instrukciją, ir skaityti duomenis. Atskiri podėliai padeda įveikti opią CISC saugumo spragą (buferio perpildymo), kuria naudojasi dauguma „Windows“ kenkėjų.
RISC procesoriuose atsirado instrukcijų konvejeris (pipeline), leidžiantis tuo pat metu vykdyti instrukciją, išrinkti naują ir išsaugoti jau išrinktos komandos rezultatus. Deja, konvejerį ne visada pavyksta užpildyti, mat dažnai instrukcijos būna susijusios. Kai kurie procesoriai keičia jų vykdymo tvarką (MIPS) arba skaičiuoja abu galimus variantus ir pasirenka teisingą rezultatą, vos tik jis tampa akivaizdus (IBM RS6000).
Tobulinant procesorius, juose buvo įrengti keli konvejeriai, todėl atsirado puiki galimybė vienu metu išrinkti ar vykdyti keletą komandų. Skaičiuojant tokių procesorių darbo spartą atrodo, kad vienu darbo taktu jie įvykdo daugiau nei vieną komandą. Šie procesoriai yra vadinami superskaliariniais (superscalar).
Kai kurie inžinieriai atkreipė dėmesį į tai, kad procesorius dažnai apdoroja to paties tipo duomenis, tad buvo nuspręsta pasitelkus tą pačią instrukciją apdoroti keletą duomenų. Tokiu principu vykdomos MMX, SSE ir „AltiVec“ daugialypių sistemų instrukcijos.
Tačiau instrukcijų sekos spartinimas jau pasiekė ribą: procesoriai tapo labai sudėtingi ir eikvoja daug elektros energijos, juos vis sunkiau suderinti su lėta atmintine. Todėl tolesnis skaičiavimų spartos didinimas greičiausiai remsis daugelio branduolių ar daugelio procesorių sistemomis bei specializuotos paskirties branduoliais.
Tačiau keleto procesorių sistemos taip pat nėra panacėja. Apie kai kurias jų problemas buvo rašyta 2006 metų rugsėjo mėnesio „Kompiuterijoje“ (Nr. 106). Specializuotų procesorių privalumai apžvelgti sausio mėnesio numeryje (Nr. 113).
Interneto nuorodos
- Pagrindinio procesoriaus apžvalga.
- Stenfordo universiteto paskaitų ciklas apie RISC. Šiame universitete buvo sukurta viena populiariausių procesorių serijų MIPS.