Käskude pipelining

Käskude pipelining on tehnika, mida kasutatakse kaasaegsete mikroprotsessorite, mikrokontrollerite ja protsessorite projekteerimisel, et suurendada nende käskude läbilaskevõimet (ajaühikus täidetavate käskude arv).

Põhiidee on jagada (nn jagada) protsessori käsu töötlemine, nagu on määratletud käsu mikrokoodis, mitmeks sõltumatuks mikrooperatsioonide (mida nimetatakse ka "mikrokäsudeks", "mikro-op" või "µop") etapiks, kusjuures iga etapi lõpus toimub salvestamine. See võimaldab protsessori kontroll-logikal käske töödelda kõige aeglasema sammu töötluskiirusega, mis on palju kiirem kui käsu ühe sammuna töötlemiseks vajalik aeg.

Mõiste torujuhtme viitab sellele, et iga samm kannab ühte mikroinstruktsiooni (nagu veetilk) ja iga samm on seotud teise sammuga (analoogia; sarnane veetorudele).

Enamik kaasaegseid protsessoreid juhitakse taktiga. Protsessor koosneb sisemiselt loogikast ja mälust (flip flops). Kui taktsignaal saabub, salvestavad flip flops oma uue väärtuse, seejärel vajab loogika aega, et dekodeerida flip flopide uued väärtused. Seejärel saabub järgmine taktsignaal ja flip flopid salvestavad teise väärtuse jne. Loogika jaotamine väiksemateks osadeks ja flip floppide lisamine loogika osade vahele vähendab loogika ajakulu (väärtuste dekodeerimiseks kuni nende väärtuste alusel kehtivate väljundite genereerimiseni). Sel viisil saab vähendada taktsagedusperioodi.
Näiteks RISC-putk on jaotatud viieks etapiks, mille vahel on flip-flopid järgmiselt:

  1. Käskude hankimine
  2. Käskude dekodeerimine ja registrite hankimine
  3. Täita
  4. Juurdepääs mälule
  5. Registreeri tagasi kirjutada

Pipelininguga protsessorid koosnevad sisemiselt etappidest (moodulitest), mis võivad pooleldi sõltumatult töötada eraldi mikrokäskude kallal. Iga etapp on flip floppide abil seotud järgmise etapiga (nagu "ahel"), nii et etapi väljund on sisendiks teisele etapile, kuni käskude töötlemise töö on lõpetatud. Selline protsessori sisemiste moodulite korraldus vähendab käsu üldist töötlemisaega.

Mitte-pipeline'i arhitektuur ei ole nii tõhus, sest mõned protsessorimoodulid on käsutsükli ajal tühikäigul, samal ajal kui mõni teine moodul on aktiivne. Pipelining ei kõrvalda täielikult tühikäiguaega, kuid protsessorimoodulite paralleelne töötamine suurendab käskude läbilaskevõimet.

Käskude torujuhtme kohta öeldakse, et see on täielikult torujuhtmega, kui see suudab võtta vastu uue käsu iga taktsükli järel. Täielikult torustikuga mitte varustatud torujuhtmes on ootetsüklid, mis aeglustavad torujuhtme edenemist.

Põhiline viieastmeline protsessor RISC-masinas (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). Vertikaalne telg on järjestikused käsud, horisontaalne telg on aeg. Seega on rohelises veerus kõige varasem käsk WB-staadiumis ja kõige hilisem käsk on käsu kättesaamise etapis.Zoom
Põhiline viieastmeline protsessor RISC-masinas (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). Vertikaalne telg on järjestikused käsud, horisontaalne telg on aeg. Seega on rohelises veerus kõige varasem käsk WB-staadiumis ja kõige hilisem käsk on käsu kättesaamise etapis.

Pipeliningi eelised ja puudused

Pipeliningi eelised:

  1. Protsessori tsükliaeg väheneb; suureneb käskude läbilaskevõime. Pipelining ei vähenda käsu täitmiseks kuluvat aega; selle asemel suurendab see samaaegselt ("korraga") töödeldavate käskude arvu ja vähendab lõpetatud käskude vahelist viivitust (mida nimetatakse "läbilaskevõimeks").
    Mida rohkem on protsessoril torujuhtme etappe, seda rohkem käske saab ta "korraga" töödelda ja seda väiksem on viivitus lõpetatud käskude vahel. Kõik tänapäeval toodetud
    üldotstarbelised mikroprotsessorid kasutavad vähemalt 2 kuni 30 või 40 astmelist torujuhtmeahelat.
  2. Kui kasutatakse pipeliningi, saab protsessori aritmeetilise loogikaüksuse kavandada kiiremini, kuid see on keerulisem.
  3. Pipelining suurendab teoreetiliselt jõudlust võrreldes pipelininguta südamiku jõudlust mitu korda suuremaks (eeldusel, et ka taktsagedus suureneb sama palju) ja kood on ideaalne pipelininguga täitmiseks.
  4. Pipelined protsessorid töötavad üldiselt kõrgema taktsagedusega kui RAM-i taktsagedus (alates 2008. aasta tehnoloogiatest töötavad RAM-id madalamal sagedusel võrreldes CPU-de sagedusega), mis suurendab arvutite üldist jõudlust.

Pipeliningi puudused:

Pipeliningul on palju puudusi, kuigi protsessorite ja kompilaatorite projekteerijad kasutavad palju tehnikat, et enamik neist ületada; järgnevalt on esitatud loetelu levinumatest puudustest:

  1. Mitte-pipeliiniga protsessori konstruktsioon on lihtsam ja odavam valmistada, mitte-pipeliiniga protsessor täidab korraga ainult ühe käsu. Sellega välditakse hargnemiste hilinemist (pipeliningi puhul on iga hargnemine hilinenud) ning probleeme, kui järjestikuseid käske täidetakse samaaegselt.
  2. Pipelined protsessori puhul suurendab flip floppide lisamine moodulite vahele käskude latentsust võrreldes mittepipelined protsessoriga.
  3. Mitte-pipeliiniga protsessoril on määratletud käskude läbilaskevõime. Pipelined protsessori jõudlust on palju raskem ennustada ja see võib erinevate programmide puhul suuresti varieeruda.
  4. Paljude disainilahenduste torustikud on 7, 10, 20, 31 ja isegi rohkem astmeid; pika torustiku puuduseks on see, et kui programm hargneb, tuleb kogu torustik loputada (tühjendada). Pipeliinide suurem läbilaskevõime jääb puudulikuks, kui täidetav kood sisaldab palju hargnemisi: protsessor ei saa ette teada, kust lugeda järgmist käsku, ja peab ootama, kuni hargnemiskäsu lõpetatakse, jättes torujuhtme selle taga tühjaks. Seda puudust saab vähendada, kui ennustada, kas tingimuslik hargnemisjuhend hargneb eelneva tegevuse põhjal. Pärast hargnemise lahendamist peab järgmine käsk läbima kogu torujuhtme, enne kui selle tulemus muutub kättesaadavaks ja protsessor jätkab taas "tööd". Sellistel äärmuslikel juhtudel võib torujuhtmega protsessori jõudlus olla halvem kui torujuhtmeta protsessoril.
  5. Kahjuks ei ole kõik juhised sõltumatud. Lihtsa torujuhtme puhul võib ühe käsu täitmine nõuda 5 etappi. Täieliku jõudluse saavutamiseks peab see torujuhe käivitama 4 järgnevat sõltumatut käsku, samal ajal kui esimene käsk on lõpetatud. Mis tahes neist neljast käsust võib sõltuda esimese käsu väljundist, mille tõttu torujuhtme juhtloogika peab ootama ja lisama torujuhtmesse seisaku või raisku mineva taktsükli, kuni sõltuvus on lahendatud. Õnneks võivad sellised tehnikad nagu edastamine vähendada märkimisväärselt juhtumeid, kus on vaja peatada.
  6. Isemodifitseeruvad programmid ei pruugi torujuhtmelisel arhitektuuril korralikult käivituda, kui muudetavad käsud asuvad täidetavate käskude lähedal. Selle põhjuseks võib olla see, et käsud võivad juba olla eelvalimisjärjekorras, nii et muudatus ei pruugi mõjuda eelseisva käsu täitmise puhul. Käskude vahemälud muudavad probleemi veelgi hullemaks.
  7. Ohud: Kui programmeerija (või kompilaator) kirjutab koostekoodi, eeldab ta tavaliselt, et iga käsk täidetakse enne järgmise käsu täitmist. Kui seda eeldust ei kinnitata pipelininguga, põhjustab see programmi ebaõige käitumise, seda olukorda nimetatakse ohuks. Ohtude lahendamiseks või vältimiseks on olemas
    mitmesugused
    tehnikad, näiteks edastamine ja viivitamine (peatamise või taktimõõdutsükli lisamise teel).

Näited

Üldine torujuhe

Paremal on kujutatud nelja etapiga üldine torustik:

  1. Tooge
  2. Decodeeri
  3. Täita
  4. Tagasi kirjutamine

Ülemine hall kast on nimekiri käskudest, mis ootavad täitmist; alumine hall kast on nimekiri käskudest, mis on juba lõpetatud; ja keskmine valge kast on torujuhtme nimekiri.

Täitmine on järgmine:

Aeg

Täitmine

0

Täitmist ootab neli käsku

1

  • roheline käsk võetakse mälust välja

2

  • roheline käsk on dekodeeritud
  • lilla käsk on mälust välja otsitud

3

  • roheline käsk täidetakse (tegelik toiming sooritatakse).
  • lilla käsk on dekodeeritud
  • sinine käsk on välja otsitud

4

  • rohelise käsu tulemused kirjutatakse tagasi registrifaili või mällu
  • lillat värvi käsk täidetakse
  • sinine käsk on dekodeeritud
  • punane käsk on välja otsitud

5

  • roheline käsk on lõpetatud
  • lillat värvi käsk kirjutatakse tagasi
  • sinine käsk täidetakse
  • punane käsk on dekodeeritud

6

  • Purpurpunane käsk on lõpetatud
  • sinine juhis kirjutatakse tagasi
  • punane käsk täidetakse

7

  • sinine käsk on täidetud
  • punane käsk kirjutatakse tagasi

8

  • punane käsk on lõpetatud

9

Kõik juhised täidetakse

Bubble

Kui täitmises tekib "luksumine" (katkestus), tekib torujuhtmes "mull", milles ei toimu midagi kasulikku. Tsüklis 2 lükatakse lilla käsu kättesaamine edasi ja tsükli 3 dekodeerimisetapis on nüüd mull. Kõik, mis on lilla käsu taga, viibib samuti, kuid kõik, mis on lilla käsu ees, jätkab täitmist.

On selge, et võrreldes ülaltoodud täitmisega annab mull 7 taktimõõtme asemel 8 taktimõõtme täitmisaja.

Mullid on nagu peatused (viivitused), mille puhul ei toimu midagi kasulikku noppimise, dekodeerimise, täitmise ja tagasikirjutamise ajal. See on nagu NOP-kood (lühend No OPeration).

Näide 1

Tüüpiline käsk kahe arvu liitmiseks võib olla ADD A, B, C, mis liidab mälupunktides A ja B olevad väärtused ja seejärel paigutab tulemuse mälupunkti C. Pipeliiniprotsessoris jaotaks torujuhtmete kontroller selle rea ülesanneteks, mis on sarnased:

LOAD A, R1 LOAD B, R2 ADD R1, R2, R3 STORE R3, C LOAD järgmine käsk

Asukohad "R1" ja "R2" on protsessori registrid. Mälukohti "A" ja "B" salvestatud väärtused laaditakse (kopeeritakse) nendesse registritesse, seejärel liidetakse need ja tulemus salvestatakse mälukohti "C".

Selles näites on torujuhe kolmeastmeline - laadimine, täitmine ja salvestamine. Kõiki etappe nimetatakse torujuhtme etappideks.

Mitte-pipeliiniga protsessoril saab korraga töötada ainult üks etapp, nii et kogu käsk peab enne järgmise käsu algust lõpule jõudma. Pipelined protsessoril võivad kõik etapid töötada korraga erinevate käskude kallal. Seega, kui see käsk on täitmisetapis, on teine käsk dekodeerimisetapis ja kolmas käsk on noppimisetapis.

Näide 2

Kontseptsiooni paremaks mõistmiseks võime vaadelda teoreetilist 3-astmelist torujuhtme:

Etapp

Kirjeldus

Koormus

Mälust käsu lugemine

Täita

Käskluse täitmine

Kauplus

Tulemuse salvestamine mällu ja/või registritesse

ja pseudokoodi koostelistingut, mida tuleb täita:

LOAD #40, A ; laadi 40 A-sse MOVE A, B ; kopeeri A B-sse ADD #20, B ; lisa 20 B-sse STORE B, 0x300 ; salvesta B mälukambrisse 0x300

See oleks selline, kuidas seda teostatakse:

Kell 1

Koormus

Täita

Kauplus

LOAD

 

 

LOAD-käsklus võetakse mälust.

Kell 2

Koormus

Täita

Kauplus

MOVE

LOAD

 

Käsk LOAD täidetakse, samal ajal kui käsk MOVE võetakse mälust.

Kell 3

Koormus

Täita

Kauplus

ADD

MOVE

LOAD

Käsk LOAD on salvestamise etapis, kus selle tulemus (number 40) salvestatakse registrisse A. Samal ajal täidetakse käsku MOVE. Kuna see peab liigutama A sisu B-sse, peab see ootama LOAD-käsu lõppu.

Kell 4

Koormus

Täita

Kauplus

POOD

ADD

MOVE

Käsk STORE on laetud, samal ajal kui käsk MOVE on lõpetamas ja käsk ADD arvutab.

Ja nii edasi. Pange tähele, et mõnikord sõltub käsk teise käsu tulemusest (nagu meie näide MOVE). Kui rohkem kui üks käsk viitab operandi konkreetsele asukohale, kas lugedes seda (sisendina) või kirjutades seda (väljundina), võib nende käskude täitmine algsest programmijärjestusest erinevas järjekorras viia ohuolukordadeni (mida mainiti eespool).

Mull 3. tsüklis viivitab täitmistZoom
Mull 3. tsüklis viivitab täitmist

Üldine 4-etapiline torujuhtme; värvilised kastid tähistavad üksteisest sõltumatuid juhiseid.Zoom
Üldine 4-etapiline torujuhtme; värvilised kastid tähistavad üksteisest sõltumatuid juhiseid.

Seotud leheküljed

  • Torustik (arvutamine)
  • Paralleelne arvutamine
  • Käskude tasandi paralleelsus

Küsimused ja vastused

K: Mis on käskude pipelining?


V: Käskude pipelining on moodsate mikroprotsessorite, mikrokontrollerite ja protsessorite projekteerimisel kasutatav tehnika, mille eesmärk on suurendada nende käskude läbilaskevõimet, jagades protsessori käsu töötlemise mitmeks sõltumatuks etapiks, mille lõpus on salvestusruum.

K: Kuidas toimib pipelining?


V: Pipelining toimib loogika väiksemateks osadeks jaotamise ja loogikatükkide vahele flip flopide lisamise teel, mis vähendab loogika väärtuste dekodeerimiseks kuluvat aega kuni nende väärtustest sõltuvate kehtivate väljundite genereerimiseni. See võimaldab kiiremaid taktimisi.

K: Millised on mõned näited torujuhtmete kohta?


V: Üks näide torujuhtme kohta on RISC-putk, mis on jaotatud viieks etapiks, mille iga etapi vahel on flip-flopide kogum.

K: Kuidas suurendab pipelining käskude läbilaskevõimet?


V: Pipelining suurendab käskude läbilaskevõimet, võimaldades protsessorimoodulitel töötada paralleelselt, mis vähendab tühikäiku käsutsükli ajal ja suurendab üldist töötlemisaega.

K: Kas kõik torujuhtmed on täielikult torustikuga varustatud?


V: Ei, mitte kõik torujuhtmed ei ole täielikult torujuhtmepõhised; mõnes torujuhtmes on ootetsüklid, mis aeglustavad edasiliikumist torujuhtmes.

AlegsaOnline.com - 2020 / 2023 - License CC3