Mikroarhitektuur (Inglise keeles microarchitecture), informaatikas ja arvutitehnikas kirjeldab mikroarhitektuur kuidas protsessoris on teostatud etteantud käsustik. Kui käsustik kirjeldab kuidas protsessor käske täidab siis mikroarhitektuur kirjeldab kuidas protsessori [1]osad on ühendatud loogilselt ja füüsiliselt. Mikroarhitektuur võib kirjeldada ühendusi suuremate osade vahel, nagu kuidas aritmeerika-loogikaplokk on registritega ühenuses või kuidas on ühendatud individuaalsed loogikaväravad.

Intel Nehalem mikroarhitektuuri kujutav pilt
Intel Nehalem mikroarhitektuur

Mikroarhitektuuri ja käsustiku vahe

Käsustik hoomab enda alla assemblerkeele, registrid, grammatika (Inglise keeles: syntax), käitumise (Inglise keeles: Execution model), aadressid ja andmetüübid. Näiteks sama käsustiku jagavad kõik x86 protsessorid, x86_64 protsessorid (tuntud ka kui AMD64) ja muud teised.

Protsessori mikroarhitektuur on tavaliselt esitatud kui protsessori osade omavaheliste ühenduste loogikadiagramm. Nendel joonistel on tavaliselt eraldatud juhtsignaalid ja andmesignaalid. Mikroarhitektuuri erinevaid komponente on võimalik kirjeldada sarnaste skeemidega kus on näidatud ühendused erinevate loogika komponentide vahel, nendest loogika komponentidest on omakorda tehtud elektriskeemid mis kirjeldavad tema tööd[2].

Mikroarhitektuuri skeem koosneb aritmeerika-loogikaplokkist, registritest, ühest või mitmestandmesiinist, puhvermälust, juhtliinidest. Diagramm näitab mis juhtsignaalide, sisendite ja väljunditega teatud masina osad tegelevad.

Erinevatel protsessoritel võivad olla erinevad lahendused, et saavutada sama lõpp tulemust kui teised sama käsustiku protsessorid. Mikroarhitektuuri muutused võivad esile tuua ka tehnoloogilised arengud kas pooljuhtides, tootmises või muus[3].

Sama mikroarhitektuuriga masinatel on võimalik kasutada erinevaid käsustike miniaalsete mikrokoodi muudatustega[4][5]. Mikrokood on protsessori sees olev püsimälu mis määrab kuidas protsessori masinkäske täidetakse. Uuematel protsessoritel on võimalik, et see püsimälu on ülekirjutatav (vaata välkmälu). Seda mikrokoodi uuendatakse tihti läbi BIOS ja UEFI püsivara uuenduste.

Mikroarhitektuuri mõisted

Programmide käivitamiseks peab protsessori tegema järgmist:

Toru ehk konveier (Inglise keeles pipeline)

 Pikemalt artiklis Toru (arvutustehnika)

Toru ehk konveier on kogum jadamisi ühendatud andmete töötlemise elemente, kus ühe elemendi väljund on järgmise elemendi sisendiks. Torud on aruvutiteks kasutuses selleks, et protsessoril oleks võimalik teha mitu erinevat ülesannet ühe takti jooksul. Olenevalt ülesandest võib see drastiliseslt suurendada käskude täitmise kiirust. Kui aga on tegu üksteistele järgnevate käskudega mis kõik omaette olenevad endast varema käsu tulemusest siis ei pruugi muutus olla märgatav.

Viieetapiline käsukonveier RISC-arhitektuuris

Käsu töötlemise saab jagada näiteks viieks etapiks:

Superskalaarne arhitektuur

Superkalaarseks arhitektuuriks nimetatakse arhitektuuri, mis on varustatud rohkem kui ühe konveieriga. Sellisel korral peavad igal konveieril olema oma komponentide komplekt. Superskalaarse arhitektuuriga seadmetel on kahte tüüpi rakendustega konveiereid:

Vahemälu

 Pikemalt artiklis Vahemälu

Vahemälu (Inglise keeles cache) on suure kiirusega mälu, mis asub protsessorile võimalikult lähedal, kõige kiirem L1 vahemälu asub protsessori põhi räni peal. Vahemälu eesmärk on hoida andmeid mida võib korduvalt vaja minna ning vältida ajakulukat põhimälust andmete leidmist.

Mitmetasemelise vahemälu struktuur ja põhimälu

Vahemälu tasemed:

Igal füüsilisel tuumal võib olla mitu käsumootorit (Inglise keeles: execution unit) ja oma vahemälu. L2 ja L3 vahemälude korral on tihti tegu tuumade vahel jagatud vahemäluga. Kui vahemälu kasutaja (CPU, veebibrauser, operatsioonisüsteem) soovib andmeid, uuritakse kõigepealt vahemälu.

Kui vahemälust leitakse kirje ID-ga, mis sobib otsitud andmeühiku ID-ga, siis kasutatakse andmeelementide vahemälu. Vastasel korral prab pöörduma põhimälu poole.

Käsustik

 Pikemalt artiklites Käsustik ja en:Instruction set architecture

Käsustiku valik võib drastiliselt mõjutada protsessori mikroarhitektuuri kompleksust. CISC protsessori mikroarhitektuur on palju keerulisem, kui RISC protsessoritel, sest neil on aja jooksul kujunenud keerulisemad käsud spetsialiseeritud ülessanete jaoks. RISC protsessorite põhi disaini strateegia oli lihtsustada individuaalseid juhiseid ja nende täitmiseks vajaliku loogikat.

Spekulatiivne käivitamine ja Siirete ennustamine

 Pikemalt artiklites en:Speculative execution ja Siirete ennustamine

Siirete ennustamine on tehtud protsessori poolt, et määrata kuhu käskude täitmine läheb peale tingimuslikku hüppet, selleks, et lugeda mälust järgmisi käske. Spekulatiivne käivitamine on 1 samma rohkem ja tegelikult määrab mis järgneva koodi tulemus oleks.

Spekulatiivse käivitamise puhul käivitatakse kood enne kui selle koodi tulemusi vaja läheb teadmata kas selle koodi tulemust läheb vaja. See tähendab, et tingimusliku hargnemise puhul käiakse läbi mõlemad harud ja kui selgub kummale poole kood tegelikult peale minema peab siis heidetakse vale haru ära. Seda on võimalik teha kui protsessoril on vabu ressursse. Kaasaegsetel protsessoritel võimaldab see meetod paremini ära kasutada konveiereid ja konveieri registrites olevaid ressursse.

Joonis 1: Näide kuidas käsud liiguvad läbi 4-sammulisest konveierist ehk torust. Ühte värvi kastid kujutavad ühte instruktsiooni. Kui lilla käsk on hüpe, mis sõltub rohelise käsu tulemusest, siis ei saa hüppele järgnevat sinist käsku kohe kindlalt sisse lugeda, sest ei ole teada, kas hüpe toimub ja võib-olla tuleb hoopis mõni teine käsk sisse lugeda. Üks võimalus on oodata, kuni roheline käsk saab täidetud, aga see tekitab viivise. Parem variant on siirete ennustamine

Siirete ennustamine on programmis olevate hüppete ennustamine enne kui on teada kas hüppet sooritatakse. Kuna instruktsioonide konveier on mitmesammuline ja käsu täitmiseks kulub mitu takti, siis hüppele järgnevaid käske ei saa alati kohe mällu laadida, vaid tuleb oodata, kuni eelnevad käsud on konveieri läbinud ja nende tulemuse järgi on teada, kas hüpe toimub. Siirete ennustamise võimaluse puudumisel peab protsessor ootama ära hüppe sooritamiseks vajaliku tingimuse tulemust.

Ennustamise implementeerimise viisid:

Dünaamiline ajastamine

 Pikemalt artiklis en:Out-of-order execution

Dünaamiline ajastamise[6] (Inglise keeles dynamic execution või out-of-order execution) puhul käivitatakse koodi võimalusel erinevas järjekorras, et optimeerida konveieri kasutust ja minimseerida seisakuid. Näiteks kui protsessor peab ootama, et mingit informatsiooni põhimäust leitakse, siis on ootamise ajal võimalik täita teise käske mis ei vaja andmeid mälust.

Multitöötlus, mitmeprotsessorilisus ja Mitmelõimelisus

 Pikemalt artiklites en:Multiprocessing , en:Multithreading  ja en:Multiprocessor system architecture

Multitöötlus (Inglise keeles multiprocessing) on mitme protsessori kasutus ühe arvuti süsteemi sees. Multitöötlus süsteemis võivad kõik protsessorid olla võrdsed, tuntud kui sümmetriline multitöötlus, või võib tegu olla süsteemiga kus on üks põhiprotsessor mis jagab ülesandeid teistele protsessoritele, asünkroonne multitöötlus. Multitöötluse all mõeldakse pigem, et ühe füüsilise protsessori kiibi sees on mitu n.ö loogilist protsessorit.

Mitmeprotsessorilisus.[7] (Inglise keels multiprocessor system) on kui ühe süsteemi sees on mitu füüsilist protsessorit.

Leebelt ühendatud mitmeprotsessori süsteem

Mitmeprotsessoriga süsteemide tüübid:

Mitmelõimelisus (Inglise keeles multithreading) on protsessori või protsessori tuuma võime jagada programm mitmele lõimele laiali.

Näide protsessist kahe lõimega läbi aja

See on erinev multitöötlusest, sest mitmelõimelises programmis lõimed jagavad ühe või mitme tuuma ressursse, sealhulgas vahemälu, puhvreid jm. Kui multitöötlus süsteemid sisaldavad mitmeid töötlusplokke ühes või mitmes tuumas, siis mitmelõimelisuse eesmärk on optimiseerida ühe tuuma kasutust.

Allikad

  1. Curriculum Guidelines for Undergraduate Degree Programs in Computer Engineering (PDF). Association for Computing Machinery. 2004. Lk 60. Originaali (PDF) arhiivikoopia seisuga 3. juuli 2017.
  2. Hennessy, John L.; Patterson, David A. (2006). Computer Architecture: A Quantitative Approach (4th ed.). Morgan Kaufmann. ISBN 0-12-370490-1.
  3. Flynn, Michael J. (2007). "An Introduction to Architecture and Machines". Computer Architecture Pipelined and Parallel Processor Design. Jones and Bartlett. Lk 1–3. ISBN 9780867202045.
  4. Murdocca, Miles; Heuring, Vincent (2007). Computer Architecture and Organization, An Integrated Approach. Wiley. Lk 151. ISBN 9780471733881.
  5. Clements, Alan. Principles of Computer Hardware (4th ed.). Lk 1–2.
  6. "Käsukonveierid, käsutaseme paralleelsus, dünaamiline ajastamine ja spekulatiivne käivitamine EUCIP".
  7. "Multiprocessor definition and meaning - Collins English Dictionary". www.collinsdictionary.com.

Lisa lugemist