1.3.4 Käsukonveierid, käsutaseme paralleelsus, dünaamiline ajastamine ja spekulatiivne käivitamine

Protsessoris on erinevate
käsutäitmisetappide jaoks erinevad osad ning kui käskude täitmine toimuks
protsessoris ükshaaval tuleb iga käsu alustamiseks oodata ära eelneva käsu
täitmise tulemus ja protsessori erinevad osad peavad ootama jõudeolekus mitu
takti kuni eelmise käsu täitmine on lõpetatud. Protsessori erinevate osade
efektiivseks kasutamiseks ja protsessori jõudluse tõstmiseks rakendatakse
kaasaegsetes protsessorites käsukonveieri
meetodit (Instruction Pipelining). Käsukonveieri põhimõte on alustada järgmise
käsu täitmise tsüklit kohe peale jooksva käsutsükli esimese osa lõpetamist ehk
kui on jooksva käsu lugemine mälust lõppenud ja algab selle dekodeerimine
alustatakse kohe ka järgmise käsu mälust lugemisega, jne. Käsukonveier toimib
ideaalselt juhul kui käsud ei ole üksteisest sõltuvad ja eelmise käsu tulemust
ei ole vaja järgmise käsu täitmisel kasutada. Kui järgnevate käskude täitmisel
on vaja eelmise käsu tulemust tuleb tekitada käsukonveieril seisak või tühi
operatsioon, et oodata ära vajalik eelmise käsu tulemus. Käsukonveieril võib
tekkida seisak ka juhul kui üks käsk nõuab keerukamat arvutust ja suunatakse
täitmiseks ujukoma seadmesse, kus käsu täitmine võib võtta aega palju
protsessori takte. Selle olukorra vastu on kaasaegsetes protsessorites mitu
käsukonveierit, millest üks täidab näiteks aritmeetikakäske ja teine
ujukomakäske nii et protsessori töö ei seiskuks.
Käsutaseme paralleelsus (ILP -
Instruction Level Parallelism) on termin, mis viitab võimalusele täita mitut
käsku protsessoris samaaegselt kui nende käskude tulemused ei ole teineteisest
sõltuvuses.Näiteks kui kolmest käsust kahe tulemused ei ole ülejäänutest
sõltuvuses siis saab täita kolm käsku kahe ajaühiku sees, mis teeb käsutaseme
paralleelsuseks ILP=3/2. On olemas kaks varianti ILP lahendusteks:
- Rohkemate käskude samaaegne täitmine, mis peavad siiski olema erineval täitmise astmetel. Sellisel juhul on tegemist käsukonveieriga.
- Eri käskude samal astmel oleku võimaldamine. See lahendus nõuab täitmise ressursside mitmekordistamist. Seda lahendust pakub superskalaarne protsessor.
Superskalaarseteks nimetatakse selliseid arhitektuure, mis on varustatud rohkem kui ühe konveieriga. Selliste arhitektuuride puhul on funktsionaalsed seadmed konveieris dubleeritud. Superskalaarse protsessori arhitektuuri saab omakorda rakendada erinevalt:
- sõltumatute konveieritega: iga funktsionaalne seade kuulub mingi kindla konveieri juurde
- osaliselt kattuvate konveieritega: funktsionaalsete seadmete osas kulude kokkuhoidmiseks on mõned seadmed eri konveierite jaoks ühised.
Teisel juhul vajatakse
täiendavaid riistvarakomponente, mis võimaldaksid lahendada konflikte, kus
konveierid üritavad juurdepääsu samale jagatud seadmele üheaegselt.
Intel Pentiumi protsessoril on näiteks üks konveier, mida saab kasutada ükskõik
milliseks operatsiooniks (ALU või FPU), ning teine konveier, mida saab kasutada
ainult lihtoperatsioonideks, mis teostatakse täisarvulistel operandidel.
Võimalikud tehnoloogiad käsukonveierite seisakute vältimiseks:
- Dünaamiline ajastamine (Dynamic Sceduling), mille puhul riistvara korraldab programmi koodi käivitamise ümber, et vähendada seisakuid. See tehnoloogia aitab lahendada juhtumeid, kus käsutäitmise sõltuvused üksteisest on teadmata programmi kompileerimisel ja lihtsustab kompileerimise protsessi ning lubab ühe konveieri jaoks kirjutatud koodi efektiivselt käivitada mitmel konveieril.
- Spekulatiivne käivitamine (Speculative Execution), mille puhul käivitatakse koodi enne kui on teada, kas selle koodi tulemusi üldse vaja läheb. Seda saab teha juhul kui protsessoril on vabu ressursse. Näiteks täidavad kaasaegsed protsessorid selle meetodiga tingivuslikele hargnevustele järgnevat koodi. See meetod võimaldab paremini ära kasutada konveieri jõudeolekus seisva ressursi.