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

iDevice ikoon 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.