Mikroarchitektūra

Kompiuterių inžinerijoje mikroarchitektūra (kartais sutrumpintai vadinama µarch arba uarch) - tai kompiuterio, centrinio procesoriaus arba skaitmeninio signalų procesoriaus elektrinės grandinės aprašymas, kurio pakanka visiškai aprašyti aparatinės įrangos veikimą.

Mokslininkai vartoja terminą "kompiuterių organizacija", o kompiuterių pramonės atstovai dažniau sako "mikroarchitektūra". Mikroarchitektūra ir instrukcijų rinkinio architektūra (ISA) kartu sudaro kompiuterių architektūros sritį.

Termino kilmė

Kompiuteriuose valdymo logika mikroprogramuojama nuo 1950-ųjų. Centrinis procesorius iššifruoja instrukcijas ir tranzistorių jungikliais siunčia signalus atitinkamais keliais. Mikroprogramos žodžių viduje esantys bitai valdė procesorių elektrinių signalų lygmeniu.

Terminas: mikroarchitektūra buvo vartojamas apibūdinti vienetams, kurie buvo valdomi mikroprogramos žodžiais, priešingai nei terminas: "architektūra", kuri buvo matoma ir dokumentuojama programuotojams. Nors architektūra paprastai turėjo būti suderinama su skirtingomis aparatinės įrangos kartomis, pagrindinę mikroarchitektūrą buvo galima lengvai keisti.

Ryšys su instrukcijų rinkinio architektūra

Mikroarchitektūra yra susijusi su instrukcijų rinkinio architektūra, bet ne tokia pati. Instrukcijų rinkinio architektūra yra artima procesoriaus programavimo modeliui, kurį mato asemblerio kalbos programuotojas arba kompiliatoriaus autorius ir kuris apima vykdymo modelį, procesoriaus registrus, atminties adresų režimus, adresų ir duomenų formatus ir t. t. Mikroarchitektūra (arba kompiuterio organizacija) daugiausia yra žemesnio lygio struktūra, todėl ji valdo daugybę detalių, kurios yra paslėptos programavimo modelyje. Joje aprašomos vidinės procesoriaus dalys ir tai, kaip jos veikia kartu, kad būtų įgyvendinta architektūros specifikacija.

Mikroarchitektūriniai elementai gali būti įvairūs - nuo pavienių loginių vartų, registrų, paieškos lentelių, multipleksorių, skaitiklių ir t. t. iki išbaigtų ALU, FPU ir dar didesnių elementų. Savo ruožtu elektroninės schemos lygmuo gali būti suskirstytas į tranzistorių lygmens detales, pavyzdžiui, kokias pagrindines vartų sudarymo struktūras naudoti ir kokie loginės realizacijos tipai (statinis/dinaminis, fazių skaičius ir t. t.) yra pasirinkti, be to, faktiškai naudojamas loginis dizainas, pagal kurį jie sudaryti.

Keletas svarbių dalykų:

  • Viena mikroarchitektūra, ypač jei ji apima mikrokodą, gali būti naudojama daugeliui skirtingų instrukcijų rinkinių įgyvendinti keičiant valdymo atmintį. Tačiau tai gali būti gana sudėtinga, net ir supaprastinus mikrokodą ir (arba) lentelių struktūras ROM arba PLA.
  • Dviejų mašinų mikroarchitektūra gali būti tokia pati, taigi ir blokinė schema, tačiau jų aparatinė įranga gali būti visiškai skirtinga. Tai valdo ir elektroninės schemos, ir dar labiau fizinis gamybos (integrinių grandynų ir (arba) diskrečiųjų komponentų) lygmuo.
  • Skirtingų mikroarchitektūrų mašinos gali turėti tą pačią instrukcijų rinkinio architektūrą, todėl abi gali vykdyti tas pačias programas. Naujos mikroarchitektūros ir (arba) grandynų sprendimai, taip pat puslaidininkių gamybos pažanga leidžia pasiekti didesnį našumą naujesnių kartų procesoriams.

Supaprastinti aprašymai

Labai supaprastintame aukšto lygio aprašyme, kuris yra įprastas rinkodaroje, gali būti nurodytos tik gana pagrindinės charakteristikos, pavyzdžiui, magistralės plotis, taip pat įvairių tipų vykdymo blokai ir kitos didelės sistemos, pavyzdžiui, šakų prognozavimas ir spartinančiosios atmintinės, pavaizduotos kaip paprasti blokai, galbūt su pažymėtomis kai kuriomis svarbiomis savybėmis ar charakteristikomis. Kartais taip pat gali būti pateikiama tam tikra informacija apie vamzdyno struktūrą (pvz., paėmimas, dekodavimas, priskyrimas, vykdymas, įrašymas atgal).

Mikroarchitektūros aspektai

Šiuo metu mikroarchitektūroje dažniausiai naudojamas ištisinis duomenų kelias. Šis metodas naudojamas daugumoje šiuolaikinių mikroprocesorių, mikrovaldiklių ir DSP. Pipelined architektūra leidžia, kad kelios instrukcijos būtų vykdomos iš karto viena po kitos, panašiai kaip surinkimo linijoje. Vamzdyną sudaro keli skirtingi etapai, kurie yra esminiai mikroarchitektūros projektuose. Kai kurie iš šių etapų yra instrukcijų gavimas, instrukcijų atkodavimas, vykdymas ir įrašymas atgal. Kai kurios architektūros apima ir kitus etapus, pavyzdžiui, prieigą prie atminties. Vamzdynų projektavimas yra viena iš pagrindinių mikroarchitektūros užduočių.

Vykdymo vienetai taip pat yra labai svarbūs mikroarchitektūrai. Vykdymo blokai apima aritmetinius loginius blokus (ALU), slankiojo kablelio blokus (FPU), įkrovimo/išsaugojimo blokus ir šakų prognozavimą. Šie blokai atlieka procesoriaus operacijas arba skaičiavimus. Vykdymo vienetų skaičiaus, jų vėlinimo trukmės ir pralaidumo pasirinkimas yra svarbūs mikroarchitektūros projektavimo uždaviniai. Atmintinių dydis, vėlinimas, pralaidumas ir jungiamumas sistemoje taip pat yra mikroarchitektūriniai sprendimai.

Sistemos lygmens projektavimo sprendimai, pavyzdžiui, ar įtraukti periferinius įrenginius, pavyzdžiui, atminties valdiklius, gali būti laikomi mikroarchitektūros projektavimo proceso dalimi. Tai apima sprendimus dėl šių periferinių įrenginių našumo lygio ir jungiamumo.

Skirtingai nuo architektūrinio projektavimo, kai pagrindinis tikslas yra tam tikras našumo lygis, mikroarchitektūriniame projektavime daugiau dėmesio skiriama kitiems apribojimams. Reikia atkreipti dėmesį į tokius klausimus, kaip:

  • Lustų plotas ir kaina.
  • Energijos suvartojimas.
  • Loginis sudėtingumas.
  • Lengvas prijungimas.
  • Gaminamumas.
  • Lengvas derinimas.
  • Galimybė išbandyti.

Mikroarchitektūros koncepcijos

Apskritai visi procesoriai, vieno lusto mikroprocesoriai ar daugia lustinės realizacijos, vykdo programas atlikdami šiuos veiksmus:

  1. Perskaitykite instrukciją ir ją iššifruokite.
  2. Raskite visus susijusius duomenis, reikalingus instrukcijai apdoroti.
  3. Vykdykite nurodymą.
  4. Užrašykite rezultatus.

Šią paprastą veiksmų seką apsunkina tai, kad atminties hierarchija, apimanti spartinančiąją atmintį, pagrindinę atmintį ir nepastoviąją saugyklą, pvz., kietuosius diskus (kur saugomos programos instrukcijos ir duomenys), visada buvo lėtesnė už patį procesorių. Žingsnis (2) dažnai sukelia vėlavimą (procesoriaus terminais dažnai vadinamą "stabdymu"), kol duomenys pasiekia kompiuterio magistralę. Daug mokslinių tyrimų buvo atlikta siekiant sukurti konstrukcijas, kurios padėtų kuo labiau išvengti šių vėlavimų. Metams bėgant pagrindinis projektavimo tikslas buvo lygiagrečiai vykdyti daugiau instrukcijų ir taip padidinti efektyvų programos vykdymo greitį. Šiomis pastangomis buvo įdiegtos sudėtingos loginės ir grandininės struktūros. Anksčiau tokius metodus buvo galima įgyvendinti tik brangiuose pagrindiniuose kompiuteriuose arba superkompiuteriuose dėl šiems metodams reikalingų grandynų kiekio. Tobulėjant puslaidininkių gamybai, vis daugiau šių metodų buvo galima įgyvendinti viename puslaidininkiniame luste.

Toliau apžvelgiami šiuolaikiniuose procesoriuose paplitę mikroarchitektūros metodai.

Instrukcijų rinkinio pasirinkimas

Pasirinkimas, kokią instrukcijų rinkinio architektūrą naudoti, daro didelę įtaką didelio našumo įrenginių diegimo sudėtingumui. Metams bėgant kompiuterių projektuotojai stengėsi supaprastinti instrukcijų rinkinius, kad būtų galima įgyvendinti našesnes programas ir sutaupyti projektuotojų pastangų ir laiko, skirto našumą didinančioms funkcijoms, o ne instrukcijų rinkinio sudėtingumui.

Instrukcijų rinkinių projektavimas nuo CISC, RISC, VLIW, EPIC tipų. Duomenų lygiagretinimo architektūros apima SIMD ir vektorius.

Instrukcijų sujungimas į vieną liniją

Vienas iš pirmųjų ir galingiausių našumo didinimo metodų yra instrukcijų konvejerio naudojimas. Ankstyvosios procesorių konstrukcijos visus pirmiau nurodytus veiksmus atlikdavo su viena instrukcija ir tik tada pereidavo prie kitos. Didelė procesoriaus grandinės dalis bet kurio žingsnio metu būdavo nenaudojama; pavyzdžiui, instrukcijos dekodavimo grandinė būdavo nenaudojama vykdymo metu ir pan.

Vamzdynai pagerina našumą, nes vienu metu procesoriuje gali veikti kelios instrukcijos. Tame pačiame pagrindiniame pavyzdyje procesorius pradėtų dekoduoti (1 žingsnis) naują instrukciją, kol paskutinė laukia rezultatų. Tai leistų vienu metu "skristi" iki keturių instrukcijų, todėl procesorius atrodytų keturis kartus greitesnis. Nors bet kuriai vienai instrukcijai įvykdyti reikia tiek pat laiko (vis dar yra keturi žingsniai), procesorius kaip visuma instrukcijas "nurašo" daug greičiau ir gali veikti daug didesniu taktiniu dažniu.

Talpykla

Patobulinus mikroschemų gamybą, į tą pačią mikroschemą buvo galima sutalpinti daugiau grandynų, todėl dizaineriai ėmė ieškoti būdų, kaip juos panaudoti. Vienas iš labiausiai paplitusių būdų buvo į lustą įdėti vis daugiau spartinančiosios atminties. Spartinančioji atmintis - tai labai greita atmintis, atmintis, kurią galima pasiekti per kelis ciklus, palyginti su tuo, kiek reikia bendrauti su pagrindine atmintimi. Procesoriuje yra spartinančiosios atminties valdiklis, kuris automatizuoja duomenų skaitymą ir rašymą iš spartinančiosios atminties; jei duomenys jau yra spartinančiojoje atmintyje, jie tiesiog "atsiranda", o jei ne, procesorius "stabdomas", kol spartinančiosios atminties valdiklis juos perskaito.

Devintojo dešimtmečio viduryje ir pabaigoje į RISC konstrukcijas pradėta dėti spartinančiąją atmintį, dažnai tik 4 KB. Laikui bėgant šis skaičius didėjo ir dabar tipiniai procesoriai turi apie 512 KB, o galingesni procesoriai turi 1, 2 ar net 4, 6, 8 ar 12 MB, išdėstytų keliais atminties hierarchijos lygiais. Paprastai kalbant, daugiau spartinančiosios atminties reiškia didesnę spartą.

Talpyklos ir vamzdynai puikiai derėjo tarpusavyje. Anksčiau nebuvo prasmės kurti konvejerį, kuris galėtų veikti greičiau nei prieigos prie ne lusto atminties su grynaisiais pinigais uždelsimas. Vietoj to naudojant luste esančią talpyklinę atmintį, tai reiškė, kad vamzdynas gali veikti talpyklos prieigos vėlinimo greičiu, t. y. daug trumpesnį laiką. Tai leido procesorių darbo dažnius didinti daug sparčiau nei ne lustinės atminties darbo dažnį.

Šakų numatymas ir spekuliacinis vykdymas

Du pagrindiniai dalykai, trukdantys pasiekti didesnį našumą naudojant instrukcijų lygmens lygiagretumą, yra vamzdyno stabdymas ir dėl atšakų atsirandantys išplaukimai. Nuo to laiko, kai procesoriaus instrukcijų dekoderis nustatė, kad jis susidūrė su sąlygine atšakos instrukcija, iki to laiko, kai galima nuskaityti sprendžiamojo šuolio registro vertę, vamzdynas gali būti sustabdytas keliems ciklams. Vidutiniškai kas penkta vykdoma instrukcija yra atšakos, todėl tai didelis stabdymo kiekis. Jei atšakos įvykdomos, dar blogiau, nes tada reikia išplauti visas vėlesnes instrukcijas, kurios buvo vamzdyne.

Šių baudų už šakas mažinimui naudojami tokie metodai kaip šakų numatymas ir spekuliacinis vykdymas. Šakų numatymas - tai kai techninė įranga daro pagrįstus spėjimus, ar tam tikra šaka bus vykdoma. Spėjimas leidžia aparatinei įrangai iš anksto parinkti instrukcijas nelaukiant, kol bus nuskaitytas registras. Spekuliacinis vykdymas - tai dar vienas patobulinimas, kai kodas išilgai numatyto kelio vykdomas dar prieš sužinant, ar šakos reikia imtis, ar ne.

Vykdymas ne eilės tvarka

Pridėjus spartinančiąsias atmintines sumažėja sustojimų, atsirandančių laukiant, kol duomenys bus paimti iš pagrindinės atminties hierarchijos, dažnumas arba trukmė, tačiau šių sustojimų visiškai neatsikratoma. Ankstyvuosiuose projektuose dėl praleistos spartinančiosios atmintinės spartinančiosios atmintinės valdiklis sustabdydavo procesorių ir laukdavo. Žinoma, programoje gali būti kokia nors kita instrukcija, kurios duomenys tuo metu yra talpykloje. Vykdymas ne eilės tvarka leidžia apdoroti tą paruoštą instrukciją, o senesnė instrukcija laukia talpykloje, tada pakeičia rezultatų eiliškumą, kad atrodytų, jog viskas įvyko užprogramuota tvarka.

Superscalar

Net ir esant tokiam sudėtingumui ir vartams, reikalingiems pirmiau aprašytoms koncepcijoms palaikyti, netrukus patobulinus puslaidininkių gamybą buvo galima naudoti dar daugiau loginių vartų.

Pirmiau pateiktoje schemoje procesorius vienu metu apdoroja vienos instrukcijos dalis. Kompiuterių programos galėtų būti vykdomos greičiau, jei vienu metu būtų apdorojamos kelios instrukcijos. Tai pasiekiama superskalariniuose procesoriuose, atkartojant funkcinius vienetus, pavyzdžiui, ALU. Funkcinių blokų atkartojimas tapo įmanomas tik tada, kai integrinių grandynų (kai kada vadinamų "die") plotas nebeaprėpė patikimai pagaminamų procesorių ribų. Aštuntojo dešimtmečio pabaigoje į rinką pradėjo plūsti superskalariniai projektai.

Šiuolaikiniuose projektuose įprasta rasti du įkėlimo blokus, vieną saugojimo bloką (daugelyje instrukcijų nėra rezultatų, kuriuos reikėtų išsaugoti), du ar daugiau sveikųjų skaičių matematikos blokų, du ar daugiau slankiojo kablelio blokų ir dažnai kokį nors SIMD bloką. Instrukcijų išdavimo logika tampa vis sudėtingesnė, nes iš atminties nuskaitomas didžiulis instrukcijų sąrašas ir jos perduodamos įvairiems tuo metu nenaudojamiems vykdymo padaliniams. Tuomet rezultatai surenkami ir pabaigoje pertvarkomi.

Registro pervadinimas

Registrų pervadinimas - tai metodas, naudojamas siekiant išvengti nereikalingo serijinio programos instrukcijų vykdymo, nes tos pačios instrukcijos pakartotinai naudoja tuos pačius registrus. Tarkime, turime kelias instrukcijų grupes, kurios naudos tą patį registrą, viena instrukcijų grupė vykdoma pirma, kad registras liktų kitai grupei, tačiau jei kitai grupei priskirtas kitas panašus registras, abi instrukcijų grupės gali būti vykdomos lygiagrečiai.

Daugiaprocesorinis apdorojimas ir daugiasluoksniškumas

Dėl didėjančio atotrūkio tarp procesoriaus darbo dažnio ir DRAM prieigos laiko nė vienas iš metodų, kuriais vienoje programoje didinamas instrukcijų lygmens lygiagretumas (ILP), negalėjo įveikti ilgų užstrigimų (vėlavimų), kurie atsirasdavo, kai reikėdavo paimti duomenis iš pagrindinės atminties. Be to, dėl didelio tranzistorių skaičiaus ir aukštų darbo dažnių, reikalingų pažangesniems ILP metodams, reikėjo išsklaidyti tokią galią, kurios nebebuvo galima pigiai aušinti. Dėl šių priežasčių naujesnės kartos kompiuteriuose pradėta naudoti aukštesnio lygmens lygiagretumą, egzistuojantį už vienos programos ar programos gijos ribų.

Ši tendencija kartais vadinama "pralaidumo skaičiavimu". Ši idėja kilo iš pagrindinių kompiuterių rinkos, kur apdorojant sandorius internetu buvo akcentuojamas ne tik vieno sandorio atlikimo greitis, bet ir gebėjimas vienu metu apdoroti didelį skaičių sandorių. Kadangi per pastarąjį dešimtmetį labai padaugėjo sandoriais pagrįstų taikomųjų programų, pavyzdžiui, tinklo maršrutizavimo ir interneto svetainių aptarnavimo, kompiuterių pramonė vėl akcentavo pajėgumo ir pralaidumo klausimus.

Vienas iš būdų, kaip pasiekti lygiagretumą, yra daugiaprocesorinės sistemos - kompiuterių sistemos su keliais procesoriais. Anksčiau tai buvo skirta tik aukštos klasės pagrindiniams kompiuteriams, tačiau dabar nedideli (2-8) daugiaprocesoriai serveriai tapo įprasti smulkaus verslo rinkoje. Didelėms korporacijoms įprasti didelės apimties (16-256) daugiaprocesoriai. Nuo 1990-ųjų pasirodė net asmeniniai kompiuteriai su keliais procesoriais.

Puslaidininkių technologijos pažanga sumažino tranzistorių dydį; atsirado daugiabranduoliniai procesoriai, kai viename silicio luste įdiegta keletas procesorių. Iš pradžių jie buvo naudojami mikroschemose, skirtose įterptosioms rinkoms, kur paprastesni ir mažesni procesoriai leisdavo viename silicio gabalėlyje sutalpinti daugybę jų modifikacijų. Iki 2005 m. puslaidininkių technologijos leido gaminti dvigubus aukštos klasės stalinių kompiuterių CPU CMP lustus dideliais kiekiais. Kai kuriose konstrukcijose, pavyzdžiui, UltraSPARC T1, buvo naudojamos paprastesnės (skaliarinės, in-order) konstrukcijos, kad viename silicio gabalėlyje tilptų daugiau procesorių.

Pastaruoju metu išpopuliarėjo dar vienas metodas - daugiasluoksniškumas. Naudojant daugiajuostį darbą, kai procesorius turi gauti duomenis iš lėtosios sistemos atminties, užuot laukęs, kol duomenys bus gauti, jis persijungia į kitą programą arba programos giją, kuri yra pasirengusi vykdyti programą. Nors tai nepagreitina konkrečios programos (gijos), tačiau padidina bendrą sistemos pralaidumą, nes sumažina procesoriaus neveikimo laiką.

Konceptualiai daugiasluoksniškumas prilygsta konteksto perjungimui operacinės sistemos lygmeniu. Skirtumas tas, kad daugiasluoksnis procesorius gali perjungti giją per vieną procesoriaus ciklą, o ne per šimtus ar tūkstančius ciklų, kurių paprastai reikia konteksto perjungimui. Tai pasiekiama atkartojant kiekvienos aktyvios gijos būsenos techninę įrangą (pvz., registrų failą ir programos skaitiklį).

Dar vienas patobulinimas - vienalaikis daugiasluoksniškumas. Šis metodas leidžia superskalariniams procesoriams tuo pačiu metu vykdyti skirtingų programų ir (arba) gijų instrukcijas per tą patį ciklą.

Susiję puslapiai

Klausimai ir atsakymai

K: Kas yra mikroarchitektūra?


A: Mikroarchitektūra - tai kompiuterio, centrinio procesoriaus arba skaitmeninio signalų procesoriaus elektrinės schemos aprašymas, kurio pakanka visiškai aprašyti aparatinės įrangos veikimą.

K: Kaip mokslininkai vadina šią sąvoką?


A: Mokslininkai, kalbėdami apie mikroarchitektūrą, vartoja terminą "kompiuterio organizacija".

K: Kaip šią sąvoką vadina kompiuterių pramonės atstovai?


A: Kompiuterių pramonės žmonės, kalbėdami apie šią sąvoką, dažniau sako "mikroarchitektūra".

K: Kokios dvi sritys sudaro kompiuterių architektūrą?


A: Mikroarchitektūra ir instrukcijų rinkinio architektūra (ISA) kartu sudaro kompiuterių architektūros sritį.

K: Ką reiškia ISA?


A: ISA reiškia instrukcijų rinkinio architektūrą.

K: Ką reiškia µarch? A: µArch reiškia mikroarchitektūrą.

AlegsaOnline.com - 2020 / 2023 - License CC3