Rodomi pranešimai su žymėmis 11. Konvejerinis duomenų išrinkimo ir apdorojimo principas. Rodyti visus pranešimus
Rodomi pranešimai su žymėmis 11. Konvejerinis duomenų išrinkimo ir apdorojimo principas. Rodyti visus pranešimus

2013 m. sausio 10 d., ketvirtadienis

11.6. Temos apibendrinimas



1        Konvejeris - speciali loginė schema, leidžianti optimizuoti procesoriaus darbą, vykdant nepriklausomus veiksmus lygiagrečiai.
2        Šiuolaikiniai procesoriai informaciją apdoroja konvejeriniu (Pipelined) būdu. Taip apdorojant informaciją, ilgai trunkanti operacija suskaidoma į etapus, ir jie nuosekliai sujungtuose įtaisuose vykdomi vienas paskui kitą.
3        Kadangi programos kai kada šakojasi, procesoriuose yra specialus prognozavimo įtaisas (BTB - Branch Target Buffer), nusprendžiantis, kurios programos šakos instrukcijas įrašyti į registrus, nes, apsirikus, tenka gaišti laiką jau įrašytoms instrukcijoms pakeisti kitos šakos instrukcijomis.
4        Konvejerizacija (pipelining) numato kiekvienos instrukcijos skaidymą į kelis etapus, be to kiekvienas etapas vykdomas atskiroje procesoriaus konvejerio pakopoje. Atsilaisvinant kitoms pakopoms, vykdoma instrukcija juda konvejeriu. Tuo būdu, konvejeryje vienu metu gali būti vykdomos kelios iš eilės einančios instrukcijos.
5        Kai kurie sudėtingesni konvejeriai būna apjungti su kešavimo schemomis, ilgiau trunkančius veiksmus (komandų išrinkimą, jų duomenų išrinkimą) leidžia vykdyti iš anksto.
6        Itin efektyviai konvejeriai naudojami RISC procesoriuose: dėl mažo komandų skaičiaus, vienodo komandų (ir duomenų) ilgio, mažo kiekio operandų (dažniausiai - vieno), adresavimo būdų ribojimo, RISC procesoriuose esančius konvejerių darbą galima efektyviai prognozuoti ir smarkiai optimizuoti.
7        Šiuolaikiniai CPU turi ne vieną konvejerį, todėl vienu metu gali apdoroti keletą komandų. Pavyzdžiui, “Pentium 4” ir “Athlon XP” per vieną sinchronizatoriaus taktą gali iššifruoti apie 2,5 komandos. Procesoriuje “Pentium 4” yra keli labai ilgi konvejeriai, leidžiantys procesoriui vienu metu ir skirtingomis stadijomis apdoroti 126 komandas. Todėl CPU gali padaryti daugiau darbo, kai lygiagrečiai veikia keli konvejeriai:
8        Problema su keliais konvejeriais iškyla tada, kai procesorius gali lygiagrečiai iššifruoti keletą komandų – kiekvieną atskiriame konvejeryje. Kartais neįmanoma išvengti neteisingai nuspėtų komandų (netinkama eilės tvarka). Tai vadinama klaidingu numatymu, kuris išeikvoja daugybę laikmačio taktų, nes turi būti išrinkta kita komanda, turinti pereiti per konvejerį.

11.4. Konvejerio ilgis



Procesoriuose skiriasi konvejerio ilgis – pakopų skaičius. Pavyzdžiui, “Pentium II” ir “Pentium III” yra 11 pakopų, o “Pentium 4” – 20. “Athlon” ALU konvejeriai turi 10 pakopų, o FPU/MMX/SSE konvejeriai - 15.
Pentium 2 konvejeris yra 11 pakopų. Išskiriamos 3 komandos išrinkimo, 2 dekodavimo, 3 parengiamieji (registrų peradresavimo, vykdymo buferių formavimo ir spartaus perdavimo), 1 vykdantysis ir 2 rezultato įsiminimo blokai.


IFU       Instruction Fetch Unit
ID         Instruction Decode
RAT     Register Allocator
ROB     Reorder Buffer
DIS       Dispatcher
EX        Execute Stage
RET      Retire Unit


Akivaizdu, jog kuo ilgesnis konvejeris, tuo lengviau didinti taktinį dažnį. Reikalas tame, jog didesnis konvejerio pakopų skaičius atskiriems taktams paskirsto mažiau darbo, tuo pačiu taktas vykdomas greičiau. Pentium 3 turi 12 pakopų konvejerį (FPU  -17-os). Athlon – 10.  Svarbu prisiminti, kad tais atvejais, kai programose yra daug ciklų, neteisingo nuspėjimo atveju konvejeris iškraunamas ir vėl užpildomas kitomis komandomis, todėl per didelis  pakopų skaičius gali turėti ir neigiamą įtaką procesoriaus spartai.
Procesoriaus efektyvumą galima įvertinti ir pagal IPC skaičių (komandas per valandą). Šiuo atžvilgiu AMD “Athlon XP” lenkia “Pentium 4”. AMD “Athlon XP” procesoriai iš tiesų daug spartesni už “Pentium 4”, esant tokiems patiems taktiniams dažniams. Tą patį galima pasakyti apie “Motorola” procesorius “G4”, naudojamus, pavyzdžiui, “Macintosh” kompiuteriuose. “G4” turi tik 4 stadijų konvejerį, todėl iš esmės gali atlikti tą patį, ką ir  “Pentium 4” per pusę taktinio dažnio ar net mažiau. pasirinko “Pentium 4” su labai ilgu konvejeriu.



Vienintelė problema – su tokiu trumpu konvejeriu taktinio dažnio nebegalima smarkiai padidinti.

Pentium 4 turintis 20 pakopų ilgio konvejerį, turi ir mažiausią takto vykdymo laiką, leidžiantį pasiekti didžiausią taktinį dažnį. Deja, vykdant susietas tarpusavyje operacijas, antrajai  teks 20 taktų laukti, kol pasibaigs pirmoji operacija).
Ši problema dalinai išsprendžiama dėka buferio. Kai kurias operacijas iš jo galima vykdyti nepriklausomai nuo ankstesnių rezultato. Tam reikia tiksliai nuspėti atšakas. Taigi, pirmo lygio priešatmintinės talpa Pentium 4 procesoriuje padidintas iki 256 KB (palyginimui: Pentium 3 turi 32, Athlon-128 KBaitus). Be to, naujasis atšakų nuspėjimo mechanizmas leido padidinti atšakų nuspėjimo tikslumą iki 95%.


11.1 lentelė. Procesorių konvejerių pakopos
CPU
Konvejerio pakopos
Maksimalus taktinis dažnis
“Pentium”
5
300 MHz
“Motorola G4”
4
500 MHz
“Motorola G4e”
7
1000 MHz
“Pentium II, III”
12
1400 MHz
“Athlon XP”
10/15
2500 MHz
“Athlon Clawhammer”
12/17
>3000 MHz
“Pentium 4”
20
>5000 MHz

Atkreipkite dėmesį, kad dviejų AMD procesorių sveikųjų skaičių ir slankiojo kablelio skaičių konvejerių ilgis skiriasi .
Procesorinės architektūros naujove tapo priešatmintinė su instrukcijų tvarkymo mechanizmu. Jos užduotis – instrukcijų saugojimas ta tvarka, kurią jos turi būti vykdomos. T.y.,  jei pirmoji instrukcija, esanti adresu 100, nukreipia valdymą į instrukciją esančią adresu 200, tai priešatmintinėje ji bus tiesiogiai po pirmos, instrukcijos, būtent taip kaip turi būti vykdoma ir t.t..

11.3. Konvejeriai superskaliariniuose procesoriuose



Šiuolaikiniai CPU turi ne vieną konvejerį, todėl vienu metu gali apdoroti keletą komandų. Pavyzdžiui, “Pentium 4” ir “Athlon XP” per vieną sinchronizatoriaus taktą gali iššifruoti apie 2,5 komandos. Procesoriuje “Pentium 4” yra keli labai ilgi konvejeriai, leidžiantys procesoriui vienu metu ir skirtingomis stadijomis apdoroti 126 komandas. Todėl CPU gali padaryti daugiau darbo, kai lygiagrečiai veikia keli konvejeriai:

Galima būtų manyti, kad “Intel” ir “AMD” inžinieriai viename CPU gali sukurti daugiau lygiagrečių konvejerių ir darbas tikriausiai turėtų padvigubėti? Deja, tai nėra taip paprasta. Atminties sistema dar nėra pajėgi vienu metu daugybės konvejerių prikimšti duomenų. Net ir šiuolaikiniuose konvejeriuose išeikvojama gausybė taktų. Tiesiog procesoriaus branduolys duomenų efektyviai nesunaudoja, nes jie tiekiami nepakankamai sparčiai.
Kita problema su keliais konvejeriais iškyla tada, kai procesorius gali lygiagrečiai iššifruoti keletą komandų – kiekvieną atskiriame konvejeryje. Kartais neįmanoma išvengti neteisingai išrinktų komandų (netinkama eilės tvarka). Tai vadinama klaidingu numatymu, kuris išeikvoja daugybę laikmačio taktų, nes turi būti išrinkta kita komanda, turinti pereiti per konvejerį.
“Intel” mėgino išspręsti šią problemą su šakos numatymo elementu, kuris nuolatos bando atspėti teisingą komandų eilės tvarką.

11.2. Konvejeriai RISC procesoriuose



Itin efektyviai konvejeriai naudojami RISC procesoriuose: dėl mažo komandų skaičiaus, vienodo komandų (ir duomenų) ilgio, mažo kiekio operandų (dažniausiai - vieno), adresavimo būdų ribojimo, RISC procesoriuose esančių konvejerių darbą galima efektyviai prognozuoti, atitinkamai - ir smarkiai optimizuoti.
Kaip jau minėta, komandos išrenkamos ir pagrindiniame procesoriuje suskaidomos į mikroopercijas. Šis skaidymas ir vykdymas atliekamas konvejeryje. Konvejeris panašus į surinkimo liniją. CPU komandos suskaidomos (iššifruojamos) konvejerio pradžioje. Jos paverčiamos mikrooperacijomis, kurios po vieną apdorojamos likusioje konvejerio dalyje:
Pirmiausia CISC komandos dešifruojamos ir pakeičiamos lengviau apdorojamomis mikrokomandomis. Tada jos apdorojamos konvejeryje.     
Konvejerį sudaro daugybė pakopų. Senesniuose procesoriuose yra tik kelios pakopos, o naujesniuose – daug (paprastai 10-20). Kiekvienoje stadijoje su komanda “kas nors” daroma, o vienai stadijai iš procesoriaus reikia vieno takto.

11.1 Komandų vykdymo fazės



Tipiškas procesorius bet kurią komandą vykdo keliais etapais:
  1. Komanda išrenkama iš atminties (pasiunčiama užklausa į atmintį, sulaukiama, kol atmintis procesoriui perduos komandos kodą);
  2. Komanda identifikuojama (nustatoma, kaip ir kokius duomenis komanda naudos) ;
  3. Iš atminties išrenkami komandos naudojami duomenys (pasiunčiama užklausa į atmintį, sulaukiama, kol atmintis procesoriui perduos komandos naudojamus duomenis);
  4. Komanda įvykdoma;
  5. Į atmintį perkeliami komandos apdoroti duomenys (į atmintį pasiunčiami duomenys, sulaukiama, kol jie bus įrašyti);
  6. Apskaičiuojamas kitos komandos adresas.
Visi šie etapai vykdomi gana nepriklausomai vienas nuo kito, todėl vykdant vieną iš šių veiksmų, už kitus veiksmus atsakingos paprasto procesoriaus dalys stovi be darbo. Naudojant konvejerį, visi šie darbai vykdomi lygiagrečiai, pvz., kol viena procesoriaus dalis identifikuoja naujai gautą komandą, kita dalis išrinkinėja iš atminties kitai komandai reikalingus duomenis.
Kai kurie sudėtingesni konvejeriai būna apjungti su kešavimo schemomis, ilgiau trunkančius
veiksmus (komandų išrinkimą, jų duomenų išrinkimą) jie vykdo iš anksto.

11. Konvejerinis duomenų išrinkimo ir apdorojimo principas



Tikslai:
1. Suprasti konvejerinio duomenų esmę.
2. Atpažinti konvejerių pakopų skaičių ir paaiškinti jo įtaką procesoriaus darbo dažniui.
3. Apibūdinti hiperkonvejerio privalumus ir trūkumus
Temos studijoms reikalingas laikas:  1 val. teorijos.
Naujųjų technologijų dėka kompiuterizuotos sistemos tobulėja, didėja jų našumas. Tai leidžia padaryti atsirandantys nauji spartesni schemotechniniai sprendimai. Kompiuterizuotų sistemų našumas didinamas ir tobulinant centrinio procesoriaus sandarą.
Šiuolaikiniai procesoriai informaciją apdoroja konvejeriniu (Pipelined) būdu. Taip apdorojant informaciją, ilgai trunkanti operacija suskaidoma į etapus, ir jie nuosekliai sujungtuose įtaisuose vykdomi vienas paskui kitą.
Pavyzdžiui, jeigu kiekviena programos instrukcija yra suskaidoma į penkis maždaug per vienodą laiką įvykdomus etapus, vienos operacijos vykdymo trukmė nesumažėja, bet vykdant viena paskui kitą daug operacijų, jos įvykdomos maždaug 5 kartus sparčiau.
Kadangi programos kai kada šakojasi, procesoriuose yra specialus prognozavimo įtaisas (BTB - Branch Target Buffer), nusprendžiantis, kurios programos šakos instrukcijas įrašyti į registrus, nes, apsirikus, tenka gaišti laiką jau įrašytoms instrukcijoms pakeisti kitos šakos instrukcijomis.
Konvejerizacija (pipelining) numato kiekvienos instrukcijos skaidymą į kelis etapus, be to kiekvienas etapas vykdomas atskiroje procesoriaus konvejerio pakopoje. Atsilaisvinant kitoms pakopoms, vykdoma instrukcija juda konvejeriu. Tuo būdu, konvejeryje vienu metu gali būti vykdomos kelios iš eilės einančios instrukcijos ir procesoriaus našumą galima vertinti pagal įvykdytų instrukcijų kiekį iš visų jo konvejerių. Tam, kad pasiekti maksimalų procesoriaus našumą, t.y. užtikrinti pilną konvejerių apkrovimą su minimaliu baudos ciklų (penalty cycles) skaičiumi, programa turi būti sudaryta atsižvelgiant į architektūrinius procesoriaus ypatumus. Savaime aišku, kad įprastu būdu sugeneruotas kodas Pentium ir P6 klasės procesoriuose bus vykdomas pakankamai sparčiai. “Klasikinio” Pentium procesoriaus konvejeris susideda iš 5-ių pakopų. Superkonvejerinės architektūros procesoriai (superpipelined) turi didesnį pakopų skaičių, kas leidžia kiekvieną iš jų supaprastinti ir tuo sumažinti instrukcijų vykdymo laiką. Hiperkonvejeris Pentium 4 jau turi 20 pakopų.
Konvejeris - speciali loginė schema, leidžianti optimizuoti procesoriaus darbą, vykdant nepriklausomus veiksmus lygiagrečiai.

Etiketės