Instrukcijų sujungimas į eilę

Instrukcijų sujungimas į eilę - tai šiuolaikinių mikroprocesorių, mikrovaldiklių ir centrinių procesorių projektavimo metodas, naudojamas siekiant padidinti jų instrukcijų pralaidumą (instrukcijų, kurias galima įvykdyti per laiko vienetą, skaičių).

Pagrindinė idėja - padalyti (vadinama "padalyti") procesoriaus instrukcijos apdorojimą, kaip apibrėžta instrukcijos mikrokode, į keletą nepriklausomų mikrooperacijų (dar vadinamų "mikroinstrukcijomis", "mikrooperacijomis" arba "mikrooperacijomis"), o kiekvieno etapo pabaigoje - saugoti. Tai leidžia procesoriaus valdymo logikai apdoroti instrukcijas lėčiausio žingsnio apdorojimo sparta, kuri yra daug greitesnė už laiką, reikalingą instrukcijai apdoroti kaip vienam žingsniui.

Sąvoka "vamzdynas" reiškia, kad kiekviename žingsnyje yra viena mikroinstrukcija (kaip vandens lašas) ir kiekvienas žingsnis yra susijęs su kitu žingsniu (analogija; panašiai kaip vandens vamzdžiai).

Dauguma šiuolaikinių procesorių valdomi laikrodžiu. Centrinio procesoriaus vidų sudaro logika ir atmintis (flip flopai). Kai ateina laikrodžio signalas, flip flopai įrašo naują vertę, tada logikai reikia tam tikro laiko flip flopų naujoms vertėms iššifruoti. Tada ateina kitas laikrodžio impulsas ir flip flopai įrašo kitas vertes ir t. t. Suskaidžius logiką į mažesnes dalis ir įterpus flip flopus tarp logikos dalių, sutrumpėja laikas, kurio reikia logikai (iššifruoti vertes ir pagal jas generuoti galiojančius išėjimus). Tokiu būdu galima sutrumpinti laikrodžio periodą.
Pavyzdžiui, RISC konvejeris suskirstytas į penkis etapus, o tarp kiekvieno etapo įterpiami tokie flip flopai:

  1. Instrukcijos paėmimas
  2. Instrukcijų dekodavimas ir registrų surinkimas
  3. Vykdyti
  4. Prieiga prie atminties
  5. Registro įrašymas atgal

Procesorių su konvejeriniu valdymu viduje sudaro pakopos (moduliai), kurios gali pusiau nepriklausomai dirbti su atskiromis mikroinstrukcijomis. Kiekviena pakopa flip flopais sujungta su kita pakopa (kaip "grandinė"), kad pakopos išvestis būtų kitos pakopos įvestis, kol instrukcijos bus apdorotos. Toks procesoriaus vidinių modulių organizavimas sutrumpina bendrą instrukcijos apdorojimo laiką.

Neipeline architektūra nėra tokia efektyvi, nes kai kurie procesoriaus moduliai neveikia, o kitas modulis instrukcijų ciklo metu yra aktyvus. Vamzdelinė sistema visiškai nepanaikina neveikimo laiko, tačiau procesoriaus modulių lygiagretus darbas padidina instrukcijų pralaidumą.

Sakoma, kad instrukcijų konvejeris yra visiškai konvejerinis, jei jis gali priimti naują instrukciją kiekvieną taktinį ciklą. Nevisiškai ištisinis konvejeris turi laukimo ciklų, kurie uždelsia konvejerio eigą.

Pagrindinė penkių pakopų RISC mašinos konvejerinė linija (IF = instrukcijos paėmimas, ID = instrukcijos atkodavimas, EX = vykdymas, MEM = prieiga prie atminties, WB = registro įrašymas atgal). Vertikalioji ašis - nuoseklios instrukcijos, horizontalioji - laikas. Taigi žaliame stulpelyje anksčiausia instrukcija yra WB etape, o vėliausia instrukcija yra instrukcijų gavimo etape.Zoom
Pagrindinė penkių pakopų RISC mašinos konvejerinė linija (IF = instrukcijos paėmimas, ID = instrukcijos atkodavimas, EX = vykdymas, MEM = prieiga prie atminties, WB = registro įrašymas atgal). Vertikalioji ašis - nuoseklios instrukcijos, horizontalioji - laikas. Taigi žaliame stulpelyje anksčiausia instrukcija yra WB etape, o vėliausia instrukcija yra instrukcijų gavimo etape.

Vamzdžių jungimo privalumai ir trūkumai

Vamzdžių jungimo privalumai:

  1. Sutrumpėja procesoriaus ciklo trukmė, todėl padidėja instrukcijų našumas. Vamzdžių išdėstymas nesutrumpina laiko, reikalingo instrukcijai įvykdyti; vietoj to jis padidina vienu metu ("vienu metu") apdorojamų instrukcijų skaičių ir sumažina uždelsimą tarp įvykdytų instrukcijų (vadinamas "pralaidumu").
    Kuo daugiau vamzdyno pakopų turi procesorius, tuo daugiau instrukcijų jis gali apdoroti "vienu metu" ir tuo mažesnė uždelsimo trukmė tarp užbaigtų instrukcijų. Visuose šiandien gaminamuose
    vyraujančiuose bendrosios paskirties mikroprocesoriuose naudojami bent 2 iki 30 ar 40 pakopų vamzdynai.
  2. Jei naudojamas pipeliningas, procesoriaus aritmetinis loginis blokas gali būti suprojektuotas greičiau, tačiau jis bus sudėtingesnis.
  3. Teoriškai, lyginant su nepipelių branduoliu, našumas padidėja pakopų skaičiaus koeficientu (darant prielaidą, kad taktinis dažnis taip pat padidėja tuo pačiu koeficientu), o kodas yra idealiai pritaikytas vykdyti per konvejerį.
  4. Vamzdeliniai procesoriai paprastai dirba didesniu taktiniu dažniu nei operatyviosios atminties taktinis dažnis (nuo 2008 m. technologijų operatyvioji atmintis dirba mažesniu dažniu nei procesoriai), todėl padidėja bendras kompiuterių našumas.

Vamzdžių jungimo trūkumai:

Nors procesoriai ir kompiliatorių kūrėjai naudoja daugybę metodų daugumai trūkumų pašalinti, toliau pateikiamas dažniausiai pasitaikančių trūkumų sąrašas:

  1. Nebranduolinio procesoriaus konstrukcija yra paprastesnė ir pigesnė, nebranduolinis procesorius vienu metu vykdo tik vieną instrukciją. Taip išvengiama šakų vėlavimo (Pipelining'e kiekviena šaka vėluoja), taip pat problemų, kai vienu metu vykdomos nuoseklios instrukcijos.
  2. Vamzdeliniame procesoriuje tarp modulių įterpus flip flopus, instrukcijų vėlinimas padidėja, palyginti su nevamzdeliniu procesoriumi.
  3. Neipeline procesoriaus instrukcijų pralaidumas bus apibrėžtas. Daug sunkiau prognozuoti konvejerinio procesoriaus našumą ir jis gali labai skirtis skirtingoms programoms.
  4. Daugelyje konstrukcijų yra 7, 10, 20, 31 ir net daugiau pakopų vamzdynų; ilgo vamzdyno trūkumas yra tas, kad kai programa šakojasi, reikia išplauti (išvalyti) visą vamzdyną. Didesnis vamzdynų pralaidumas nepasiteisina, kai vykdomame kode yra daug atšakų: procesorius negali iš anksto žinoti, kur skaityti kitą instrukciją, ir turi laukti, kol atšakos instrukcija bus baigta, o už jos esantis vamzdynas lieka tuščias. Šį trūkumą galima sumažinti numatant, ar sąlyginė šakojimo instrukcija šakosis, remiantis ankstesne veikla. Po to, kai išsišakojimas išsprendžiamas, kita instrukcija turi nueiti visą kelią per vamzdyną, kol jos rezultatas tampa prieinamas ir procesorius vėl pradeda "dirbti". Tokiais kraštutiniais atvejais konvejerinio procesoriaus našumas gali būti prastesnis už nekonvejerinio procesoriaus našumą.
  5. Deja, ne visi nurodymai yra nepriklausomi. Paprastame konvejeryje instrukcijai įvykdyti gali prireikti 5 etapų. Kad šis konvejeris veiktų visu pajėgumu, jam reikės vykdyti 4 vėlesnes nepriklausomas instrukcijas, kol bus baigiama pirmoji. Bet kuri iš šių 4 instrukcijų gali priklausyti nuo pirmosios instrukcijos išvesties, todėl vamzdyno valdymo logika turi laukti ir į vamzdyną įterpti stabdymą arba nereikalingą taktinį ciklą, kol priklausomybė bus išspręsta. Laimei, tokie metodai kaip persiuntimas gali gerokai sumažinti atvejų, kai reikia stabdyti, skaičių.
  6. Savarankiškai modifikuojančios programos gali būti netinkamai vykdomos konvejerinėje architektūroje, kai modifikuojamos instrukcijos yra netoli vykdomų instrukcijų. Taip gali atsitikti dėl to, kad instrukcijos jau gali būti išankstinėje įvesties eilėje (Prefetch Input Queue), todėl modifikavimas gali neįsigalioti būsimoms instrukcijoms vykdyti. Instrukcijų spartinančioji atmintinė šią problemą dar labiau apsunkina.
  7. Pavojai: Kai programuotojas (arba kompiliatorius) rašo asemblerio kodą, jis paprastai daro prielaidą, kad kiekviena instrukcija įvykdoma prieš vykdant kitą instrukciją. Kai ši prielaida nepatvirtinama konvejeriniu būdu, programa elgiasi neteisingai, tokia situacija vadinama pavojumi. Egzistuoja
    įvairūs pavojaus sprendimo arba apėjimo
    būdai, pavyzdžiui, persiuntimas ir vėlavimas (įterpiant stabdymą arba praleistą taktinį ciklą).

Pavyzdžiai

Bendrasis vamzdynas

Dešinėje pavaizduotas bendras vamzdynas su keturiais etapais:

  1. Parsisiųsti
  2. Iššifruoti
  3. Vykdyti
  4. Įrašymas atgal

Viršutiniame pilkame langelyje yra instrukcijų, laukiančių vykdymo, sąrašas, apatiniame pilkame langelyje - įvykdytų instrukcijų sąrašas, o viduriniame baltame langelyje - vamzdynas.

Vykdymas yra toks:

Laikas

Vykdymas

0

Laukiama keturių instrukcijų vykdymo

1

  • žalioji instrukcija paimama iš atminties

2

  • iššifruojama žalia instrukcija.
  • violetinė instrukcija paimama iš atminties

3

  • vykdoma žalia instrukcija (atliekama tikroji operacija).
  • iššifruojama violetinė instrukcija
  • gaunama mėlyna instrukcija

4

  • žalios instrukcijos rezultatai įrašomi atgal į registrų failą arba atmintį.
  • vykdomas violetinis nurodymas.
  • iššifruojama mėlyna instrukcija.
  • gaunama raudona instrukcija

5

  • žalias nurodymas įvykdytas.
  • violetinė instrukcija įrašoma atgal
  • vykdomas mėlynas nurodymas.
  • iššifruojama raudona instrukcija.

6

  • Violetinė instrukcija įvykdyta
  • mėlyna instrukcija įrašoma atgal
  • vykdomas raudonas nurodymas.

7

  • mėlyna instrukcija įvykdyta
  • raudona instrukcija įrašoma atgal

8

  • raudona instrukcija įvykdyta

9

Vykdomi visi nurodymai

Burbulas

Įvykus vykdymo "užstrigimui" (pertraukai), vamzdyne susidaro "burbulas", kuriame nieko naudingo neįvyksta. 2 cikle violetinės instrukcijos surinkimas vėluoja, o 3 ciklo dekodavimo etape dabar yra "burbulas". Viskas, kas yra už violetinės instrukcijos, taip pat vėluoja, tačiau viskas, kas yra prieš violetinę instrukciją, toliau vykdoma.

Akivaizdu, kad lyginant su pirmiau pateiktu vykdymu, burbulas užtikrina ne 7, o 8 laikrodžio taktų bendrą vykdymo laiką.

"Burbulai" yra tarsi užlaikymai (vėlavimai), kai nieko naudingo neįvyksta paėmimo, atkodavimo, vykdymo ir įrašymo atgal metu. Tai tarsi NOP (trumpinys nuo No OPeration) kodas.

1 pavyzdys

Tipiška dviejų skaičių sudėjimo instrukcija gali būti ADD A, B, C, kuri sudeda atminties vietose A ir B esančias reikšmes ir rezultatą įrašo į atminties vietą C. Vamzdeliniame procesoriuje vamzdynų valdiklis šią instrukciją suskaidytų į keletą užduočių, panašių į:

LOAD A, R1 LOAD B, R2 ADD R1, R2, R3 STORE R3, C LOAD next instruction

Vietos "R1" ir "R2" yra procesoriaus registrai. Atminties vietose, pažymėtose "A" ir "B", saugomos vertės įkeliamos (nukopijuojamos) į šiuos registrus, tada sudedamos ir rezultatas įrašomas į atminties vietą, pažymėtą "C".

Šiame pavyzdyje vamzdynas susideda iš trijų etapų - įkėlimo, vykdymo ir saugojimo. Kiekvienas iš šių etapų vadinamas vamzdyno etapais.

Procesoriuje, kuris nėra daugiapakopis, vienu metu gali veikti tik vienas etapas, todėl visa instrukcija turi būti baigta, kad būtų galima pradėti kitą instrukciją. Procesoriuje su vamzdeliu visos pakopos vienu metu gali dirbti su skirtingomis instrukcijomis. Taigi, kai ši instrukcija yra vykdymo etape, kita instrukcija bus dekodavimo etape, o trečioji - surinkimo etape.

2 pavyzdys

Kad geriau suprastume šią sąvoką, galime pažvelgti į teorinį trijų pakopų vamzdyną:

Etapas

Aprašymas

Krovinys

Instrukcijos skaitymas iš atminties

Vykdyti

Instrukcijos vykdymas

Parduotuvė

Rezultato išsaugojimas atmintyje ir (arba) registruose

ir pseudokodo asemblerio sąrašą, kuris turi būti vykdomas:

LOAD #40, A ; įkelkite 40 į A MOVE A, B ; nukopijuokite A į B ADD #20, B ; pridėkite 20 į B STORE B, 0x300 ; įrašykite B į atminties ląstelę 0x300

Taip jis būtų vykdomas:

Laikrodis 1

Krovinys

Vykdyti

Parduotuvė

ĮKROVIMAS

 

 

LOAD instrukcija paimama iš atminties.

Laikrodis 2

Krovinys

Vykdyti

Parduotuvė

MOVE

ĮKROVIMAS

 

Vykdoma LOAD instrukcija, o MOVE instrukcija paimama iš atminties.

Laikrodis 3

Krovinys

Vykdyti

Parduotuvė

ADD

MOVE

ĮKROVIMAS

LOAD instrukcija yra saugojimo etape, kurio rezultatas (skaičius 40) bus įrašytas į registrą A. Tuo tarpu vykdoma MOVE instrukcija. Kadangi ji turi perkelti A turinį į B, ji turi laukti LOAD instrukcijos pabaigos.

Laikrodis 4

Krovinys

Vykdyti

Parduotuvė

PARDUOTUVĖ

ADD

MOVE

STORE instrukcija įkeliama, o MOVE instrukcija baigiama ir ADD skaičiuojama.

Ir taip toliau. Atkreipkite dėmesį, kad kartais instrukcija priklauso nuo kitos instrukcijos rezultato (pvz., mūsų pavyzdys MOVE). Kai daugiau nei viena instrukcija nurodo tam tikrą operando vietą, ją skaitydama (kaip įvestį) arba rašydama (kaip išvestį), šių instrukcijų vykdymas kitokia nei pradinė programos tvarka gali sukelti pavojingą situaciją (minėta pirmiau).

Bendras 4 pakopų vamzdynas; spalvoti langeliai žymi viena nuo kitos nepriklausomas instrukcijasZoom
Bendras 4 pakopų vamzdynas; spalvoti langeliai žymi viena nuo kitos nepriklausomas instrukcijas

3 ciklo burbulas atideda vykdymąZoom
3 ciklo burbulas atideda vykdymą

Susiję puslapiai

  • Vamzdynas (kompiuterija)
  • Lygiagretieji skaičiavimai
  • Instrukcijų lygmens lygiagretumas

Klausimai ir atsakymai

Klausimas: Kas yra instrukcijų konvejerizacija?


A: Instrukcijų išvedžiojimas - tai šiuolaikinių mikroprocesorių, mikrovaldiklių ir centrinių procesorių projektavimo metodas, naudojamas instrukcijų našumui padidinti, padalijant procesoriaus instrukcijos apdorojimą į kelis nepriklausomus etapus, kiekvieno etapo pabaigoje juos saugant.

Klausimas: Kaip veikia konvejerinis paskirstymas?


A: Vamzdynų sujungimas veikia skaidant logiką į mažesnes dalis ir įterpiant flip flopus tarp logikos dalių, todėl sutrumpėja laikas, reikalingas logikai iššifruoti vertes, kol ji sugeneruoja galiojančius išėjimus, priklausančius nuo šių verčių. Tai leidžia pagreitinti laikrodžio periodus.

K.: Kokie yra keli vamzdynų pavyzdžiai?


A: Vienas iš vamzdynų pavyzdžių yra RISC vamzdynas, kuris yra suskirstytas į penkis etapus, o tarp kiekvieno etapo yra flip flopų rinkinys.

K: Kaip konvejeriai padidina instrukcijų pralaidumą?


A. Vamzdynų sujungimas padidina instrukcijų pralaidumą, nes leidžia procesoriaus moduliams dirbti lygiagrečiai, todėl sutrumpėja neveikimo laikas per instrukcijų ciklą ir pailgėja bendras apdorojimo laikas.

K.: Ar kiekvienas vamzdynas yra visiškai sujungtas su vamzdynais?


Atsakymas: Ne, ne kiekvienas vamzdynas yra visiškai sujungtas; kai kuriuose vamzdynuose yra laukimo ciklų, dėl kurių vėluojama judėti vamzdynu.

AlegsaOnline.com - 2020 / 2023 - License CC3