Mikroarhitektura
V računalništvu je mikroarhitektura (včasih skrajšano µarch ali uarch) opis električnega vezja računalnika, centralne procesne enote ali digitalnega signalnega procesorja, ki zadostuje za popoln opis delovanja strojne opreme.
Znanstveniki uporabljajo izraz "organizacija računalnikov", medtem ko ljudje v računalniški industriji pogosteje uporabljajo izraz "mikroarhitektura". Mikroarhitektura in arhitektura nabora ukazov (ISA) skupaj tvorita področje računalniške arhitekture.
Izvor izraza
V računalnikih se mikroprogramiranje krmilne logike uporablja že od petdesetih let prejšnjega stoletja. Procesor dekodira navodila in s pomočjo tranzistorskih stikal pošilja signale po ustreznih poteh. Biti znotraj mikroprogramskih besed so upravljali procesor na ravni električnih signalov.
Izraz mikroarhitektura je bil v nasprotju z izrazom mikroarhitektura uporabljen za opis enot, ki so jih upravljale besede mikroprograma: "arhitektura", ki je bila vidna in dokumentirana za programerje. Medtem ko je morala biti arhitektura običajno združljiva med generacijami strojne opreme, je bilo osnovno mikroarhitekturo mogoče preprosto spremeniti.
Povezava z arhitekturo nabora ukazov
Mikroarhitektura je povezana z arhitekturo nabora ukazov, vendar z njo ni enaka. Arhitektura nabora ukazov je blizu programskemu modelu procesorja, kot ga vidi programer zbirnega jezika ali pisec prevajalnika, ki vključuje model izvajanja, registre procesorja, načine naslavljanja pomnilnika, naslovne in podatkovne formate itd. Mikroarhitektura (ali organizacija računalnika) je večinoma struktura nižje ravni in zato upravlja veliko število podrobnosti, ki so skrite v programskem modelu. Opisuje notranje dele procesorja in njihovo medsebojno delovanje za izvajanje arhitekturne specifikacije.
Mikroarhitekturni elementi so lahko vse od posameznih logičnih vrat, registrov, preglednic, multipleksorjev, števcev itd. do celotnih enot ALU, FPU in še večjih elementov. Raven elektronskega vezja pa se lahko razdeli na podrobnosti na ravni tranzistorjev, kot so, na primer, katere osnovne strukture za gradnjo vrat so uporabljene in kateri tipi logične izvedbe (statična/dinamična, število faz itd.) so izbrani, poleg dejanske logične zasnove, ki se uporablja za njihovo gradnjo.
Nekaj pomembnih točk:
- Z eno samo mikroarhitekturo, zlasti če vključuje mikrokodo, je mogoče s spreminjanjem krmilne shrambe izvesti več različnih naborov ukazov. Vendar je to lahko precej zapleteno, tudi če je poenostavljeno z mikrokodo in/ali strukturami tabel v pomnilnikih ROM ali PLA.
- Dva stroja imata lahko enako mikroarhitekturo in s tem enak blokovni diagram, vendar popolnoma različni strojni izvedbi. To se dogaja tako na ravni elektronskega vezja kot še bolj na fizični ravni proizvodnje (integriranih vezij in/ali diskretnih komponent).
- Stroji z različnimi mikroarhitekturami imajo lahko enako arhitekturo nabora ukazov, zato lahko oba izvajata enake programe. Nove mikroarhitekture in/ali rešitve vezij skupaj z napredkom v proizvodnji polprevodnikov omogočajo, da novejše generacije procesorjev dosegajo večjo zmogljivost.
Poenostavljeni opisi
Zelo poenostavljen opis na visoki ravni, ki je običajen v trženju, lahko prikazuje le precej osnovne značilnosti, kot so širine vodila, skupaj z različnimi vrstami izvajalnih enot in drugimi velikimi sistemi, kot so napovedovanje vej in predpomnilniki, ki so prikazani kot preprosti bloki - morda z nekaterimi pomembnimi atributi ali značilnostmi. Včasih so lahko vključene tudi nekatere podrobnosti o strukturi cevovoda (kot so pridobivanje, dekodiranje, dodeljevanje, izvajanje, zapisovanje in vračanje).
Vidiki mikroarhitekture
Pipelinska podatkovna pot je danes najpogosteje uporabljena zasnova podatkovne poti v mikroarhitekturi. Ta tehnika se uporablja v večini sodobnih mikroprocesorjev, mikrokrmilnikov in DSP. Pipelinska arhitektura omogoča, da se več ukazov med izvajanjem prekriva, podobno kot pri montažni liniji. Cevovod vključuje več različnih stopenj, ki so temeljnega pomena pri oblikovanju mikroarhitektur. Nekatere od teh stopenj vključujejo zajemanje navodil, dekodiranje navodil, izvajanje in zapisovanje nazaj. Nekatere arhitekture vključujejo še druge stopnje, kot je dostop do pomnilnika. Načrtovanje cevovodov je ena od osrednjih nalog mikroarhitektur.
Bistvenega pomena za mikroarhitekturo so tudi izvajalne enote. Izvedbene enote vključujejo aritmetične logične enote (ALU), enote s plavajočo vejico (FPU), enote za nalaganje in shranjevanje ter napovedovanje vej. Te enote izvajajo operacije ali izračune procesorja. Izbira števila izvajalnih enot, njihove zakasnitve in prepustnosti so pomembne naloge mikroarhitekturnega načrtovanja. Velikost, zakasnitev, prepustnost in povezljivost pomnilnikov v sistemu so prav tako mikroarhitekturne odločitve.
Odločitve o zasnovi na ravni sistema, kot so odločitve o vključitvi perifernih naprav, na primer pomnilniških krmilnikov, se lahko štejejo za del postopka zasnove mikroarhitekture. To vključuje odločitve o ravni zmogljivosti in povezljivosti teh perifernih naprav.
Za razliko od arhitekturnega načrtovanja, kjer je glavni cilj določena raven zmogljivosti, je pri mikroarhitekturnem načrtovanju več pozornosti namenjene drugim omejitvam. Pozornost je treba nameniti vprašanjem, kot so:
- Površina čipa/stroški.
- Poraba energije.
- Logična zapletenost.
- Enostavna povezljivost.
- Možnost izdelave.
- Enostavno odpravljanje napak.
- Preizkusljivost.
Mikroarhitekturni koncepti
Na splošno vsi procesorji, enočipni mikroprocesorji ali veččipne izvedbe, izvajajo programe z naslednjimi koraki:
- Preberi navodilo in ga dekodiraj.
- Poiščite vse povezane podatke, ki so potrebni za obdelavo navodila.
- Obdelajte navodilo.
- Zapišite rezultate.
Ta na videz preprost niz korakov otežuje dejstvo, da je hierarhija pomnilnika, ki vključuje predpomnilnik, glavni pomnilnik in negibljivo shrambo, kot so trdi diski (kjer so programska navodila in podatki), vedno bila počasnejša od samega procesorja. Korak (2) pogosto povzroči zakasnitev (v terminologiji procesorjev se pogosto imenuje "zastoj"), medtem ko podatki prispejo po računalniškem vodilu. Veliko raziskav je bilo vloženih v zasnove, ki se v največji možni meri izogibajo tem zamudam. V preteklih letih je bil osrednji cilj zasnove vzporedno izvajanje večjega števila ukazov, s čimer se je povečala dejanska hitrost izvajanja programa. Ta prizadevanja so uvedla zapletene logične strukture in strukture vezij. V preteklosti je bilo takšne tehnike zaradi količine vezij, potrebnih za te tehnike, mogoče izvajati le na dragih glavnih računalnikih ali superračunalnikih. Z razvojem proizvodnje polprevodnikov je bilo mogoče vse več teh tehnik izvajati na enem samem polprevodniškem čipu.
Sledi pregled mikroarhitekturnih tehnik, ki so običajne v sodobnih procesorjih.
Izbira nabora ukazov
Izbira arhitekture nabora ukazov, ki jo je treba uporabiti, močno vpliva na zapletenost implementacije visoko zmogljivih naprav. Oblikovalci računalnikov so si z leti prizadevali poenostaviti nabore ukazov, da bi omogočili izvajanje zmogljivejših izvedb, saj so oblikovalcem prihranili trud in čas za funkcije, ki izboljšujejo zmogljivost, namesto da bi jih zapravljali za zapletenost naborov ukazov.
Načrtovanje naborov ukazov je napredovalo od CISC, RISC, VLIW, EPIC. Arhitekture, ki se ukvarjajo s podatkovnim paralelizmom, vključujejo SIMD in vektorje.
Navodilo pipelining
Ena prvih in najmočnejših tehnik za izboljšanje zmogljivosti je uporaba cevovoda ukazov. Zgodnje zasnove procesorjev so opravile vse zgornje korake pri enem ukazu, preden so prešle na naslednjega. Velik del vezja procesorja je bil v vsakem koraku v mirovanju; na primer vezje za dekodiranje ukazov je bilo med izvajanjem v mirovanju in tako naprej.
Cevovodi izboljšajo zmogljivost, saj omogočajo, da več ukazov hkrati prehaja skozi procesor. V istem osnovnem primeru bi procesor začel dekodirati (korak 1) novo navodilo, medtem ko bi zadnje čakalo na rezultate. To bi omogočilo, da bi bili naenkrat "v pogonu" do štirje ukazi, zaradi česar bi bil procesor videti štirikrat hitrejši. Čeprav posamezno navodilo traja enako dolgo (koraki so še vedno štirje), procesor kot celota "upokojuje" navodila veliko hitreje in lahko deluje z veliko višjim taktom.
Predpomnilnik
Izboljšave pri izdelavi čipov so omogočile, da je bilo na isti čip mogoče namestiti več vezij, zato so oblikovalci začeli iskati načine za njihovo uporabo. Eden najpogostejših načinov je bil dodajanje vedno večje količine predpomnilnika na čip. Predpomnilnik je zelo hiter pomnilnik, pomnilnik, do katerega je mogoče dostopati v nekaj taktih v primerjavi s tistim, ki je potreben za pogovor z glavnim pomnilnikom. Procesor vsebuje krmilnik predpomnilnika, ki avtomatizira branje in pisanje iz predpomnilnika; če so podatki že v predpomnilniku, se preprosto "pojavijo", če pa niso, se procesor "ustavi", medtem ko jih krmilnik predpomnilnika prebere.
Projekti RISC so začeli dodajati predpomnilnik sredi in konec osemdesetih let prejšnjega stoletja, pogosto le 4 KB skupaj. To število se je sčasoma povečevalo in tipični procesorji imajo zdaj približno 512 KB, zmogljivejši pa 1 ali 2 ali celo 4, 6, 8 ali 12 MB, organiziranih v več ravneh pomnilniške hierarhije. Na splošno velja, da več predpomnilnika pomeni večjo hitrost.
Predpomnilniki in cevovodi so se odlično ujemali. Prej ni bilo smiselno graditi cevovoda, ki bi lahko deloval hitreje od zakasnitve dostopa do pomnilnika zunaj čipa. Uporaba predpomnilnika na čipu je namesto tega pomenila, da lahko cevovod deluje s hitrostjo zakasnitve dostopa do predpomnilnika, kar je pomenilo veliko krajši čas. To je omogočilo, da so se delovne frekvence procesorjev povečevale veliko hitreje kot delovne frekvence pomnilnika zunaj čipa.
Napovedovanje vej in špekulativno izvajanje
Ustavljanje cevovodov in izpiranje zaradi vej sta dve glavni stvari, ki preprečujeta doseganje večje zmogljivosti s paralelizmom na ravni ukazov. Od trenutka, ko procesorjev dekoder navodil ugotovi, da je naletel na navodilo za pogojno vejitev, do trenutka, ko je mogoče prebrati vrednost registra za odločanje o skoku, se lahko cevovod ustavi za več ciklov. V povprečju je vsako peto izvedeno navodilo vejitev, zato je to veliko število zastojev. Če je vejitev izvedena, je to še slabše, saj je treba nato sprati vsa naslednja navodila, ki so bila v cevovodu.
Tehnike, kot sta napovedovanje vej in špekulativno izvajanje, se uporabljajo za zmanjšanje teh kazni za veje. Pri napovedovanju vej strojna oprema na podlagi izkustvene ocene predvideva, ali bo določena veja izvedena. To ugibanje strojni opremi omogoča, da vnaprej pripravi navodila, ne da bi čakala na branje registra. Špekulativno izvajanje je nadaljnja izboljšava, pri kateri se koda vzdolž predvidene poti izvede, preden je znano, ali naj se veja izvede ali ne.
Izvedba zunaj vrstnega reda
Dodajanje predpomnilnikov zmanjša pogostost ali trajanje zastojev zaradi čakanja na prenos podatkov iz hierarhije glavnega pomnilnika, vendar se teh zastojev ne znebi v celoti. V zgodnjih zasnovah je zaradi izpada predpomnilnika krmilnik predpomnilnika ustavil procesor in počakal. Seveda lahko v programu obstaja kak drug ukaz, katerega podatki so v tistem trenutku na voljo v predpomnilniku. Izvajanje zunaj vrstnega reda omogoča obdelavo tega pripravljenega ukaza, medtem ko starejši ukaz čaka v predpomnilniku, nato pa spremeni vrstni red rezultatov, da je videti, da se je vse zgodilo v programiranem vrstnem redu.
Superskalarni
Kljub vsej dodatni zapletenosti in vratom, ki so bila potrebna za podporo zgoraj opisanih konceptov, so izboljšave v proizvodnji polprevodnikov kmalu omogočile uporabo še več logičnih vrat.
V zgornji shemi procesor obdeluje dele posameznega ukaza naenkrat. Računalniški programi bi se lahko izvajali hitreje, če bi hkrati obdelovali več navodil. To dosežejo superskalarni procesorji z repliciranjem funkcionalnih enot, kot so enote ALU. Replikacija funkcionalnih enot je bila mogoča šele, ko površina integriranega vezja (včasih imenovana "die") enoprocesorja ni več presegala meje zanesljive proizvodnje. Konec osemdesetih let prejšnjega stoletja so se na trgu začele pojavljati superskalarne zasnove.
V sodobnih zasnovah pogosto najdemo dve enoti za nalaganje, eno za shranjevanje (veliko ukazov nima rezultatov za shranjevanje), dve ali več celoštevilskih matematičnih enot, dve ali več enot s plavajočo vejico in pogosto nekakšno enoto SIMD. Logika izdaje navodil postaja vse bolj zapletena, saj se iz pomnilnika prebere ogromen seznam navodil, ki se posredujejo različnim izvedbenim enotam, ki so v tistem trenutku nedejavne. Na koncu se rezultati zberejo in ponovno uredijo.
Preimenovanje registrov
Preimenovanje registrov se nanaša na tehniko, ki se uporablja za preprečevanje nepotrebnega serijskega izvajanja programskih ukazov zaradi ponovne uporabe istih registrov s strani teh ukazov. Recimo, da imamo dve skupini navodil, ki bosta uporabljali isti register, najprej se izvede en sklop navodil, da se register prepusti drugemu sklopu, če pa je drugi sklop dodeljen drugemu podobnemu registru, se lahko oba sklopa navodil izvajata vzporedno.
Večpredstavnostni procesi in večnitnost
Zaradi vse večjega razkoraka med delovnimi frekvencami procesorjev in dostopnimi časi DRAM-a nobena od tehnik, ki povečujejo vzporednost na ravni ukazov (ILP) znotraj enega programa, ni mogla odpraviti dolgih zastojev (zamud), do katerih je prišlo, ko je bilo treba podatke pridobiti iz glavnega pomnilnika. Poleg tega je bilo zaradi velikega števila tranzistorjev in visokih delovnih frekvenc, potrebnih za naprednejše tehnike ILP, treba porabiti toliko energije, da je ni bilo več mogoče poceni ohladiti. Zaradi teh razlogov so novejše generacije računalnikov začele uporabljati višje ravni vzporednosti, ki obstajajo zunaj posameznega programa ali programske niti.
Ta trend je včasih znan kot "računalništvo s pretočnostjo". Ta zamisel je nastala na trgu glavnih računalnikov, kjer se pri spletni obdelavi transakcij ni poudarjala le hitrost izvedbe ene transakcije, temveč tudi sposobnost hkratnega obravnavanja velikega števila transakcij. Ker se je v zadnjem desetletju močno povečalo število aplikacij, ki temeljijo na transakcijah, kot so usmerjanje omrežij in servisiranje spletnih strani, je računalniška industrija ponovno poudarila vprašanja zmogljivosti in prepustnosti.
Ena od tehnik za doseganje vzporednosti so večprocesorski sistemi, računalniški sistemi z več procesorji. V preteklosti je bilo to rezervirano za zmogljive glavne računalnike, zdaj pa so postali običajni majhni (2-8) večprocesorski strežniki za mala podjetja. V velikih podjetjih so običajni veliki (16-256) večprocesorji. Od devetdesetih let prejšnjega stoletja se pojavljajo celo osebni računalniki z več procesorji.
Napredek v polprevodniški tehnologiji je zmanjšal velikost tranzistorjev; pojavili so se večjedrni procesorji, pri katerih je na istem silicijevem čipu nameščenih več procesorjev. Sprva so se uporabljali v čipih za vgrajene trge, kjer so preprostejši in manjši procesorji omogočali, da se je na en kos silicija lahko namestilo več različic. Do leta 2005 je polprevodniška tehnologija omogočila serijsko proizvodnjo dvojnih procesorjev CMP za namizne računalnike visokega razreda. Nekatere zasnove, kot je UltraSPARC T1, so uporabljale preprostejše (skalarne, v vrstnem redu) zasnove, da bi na en kos silicija spravile več procesorjev.
V zadnjem času je vse bolj priljubljena še ena tehnika, in sicer večnitno branje. Pri večnitnosti, ko mora procesor iz počasnega sistemskega pomnilnika pridobiti podatke, namesto da bi čakal, da podatki prispejo, preklopi na drug program ali programsko nit, ki je pripravljena za izvajanje. Čeprav to ne pospeši določenega programa/niti, pa poveča splošno prepustnost sistema, saj skrajša čas, ko je procesor v mirovanju.
Konceptualno je večnitnost enakovredna preklopu konteksta na ravni operacijskega sistema. Razlika je v tem, da lahko večnitni procesor preklop niti izvede v enem procesorskem ciklu namesto v stotinah ali tisočih procesorskih ciklov, ki jih običajno zahteva preklop konteksta. To dosežemo z repliciranjem strojne opreme stanja (kot sta datoteka registrov in programski števec) za vsako aktivno nit.
Dodatna izboljšava je hkratna večnitnost. Ta tehnika omogoča superskalarnim procesorjem, da v istem ciklu hkrati izvajajo navodila iz različnih programov/niti.
Sorodne strani
- Mikroprocesor
- Mikrokrmilnik
- Večjedrni procesor
- Procesor digitalnih signalov
- Zasnova procesorja
- Datapath
- vzporednost na ravni navodil (ILP)
Vprašanja in odgovori
V: Kaj je mikroarhitektura?
O: Mikroarhitektura je opis električnega vezja računalnika, centralne procesne enote ali digitalnega signalnega procesorja, ki zadostuje za popoln opis delovanja strojne opreme.
V: Kako se znanstveniki sklicujejo na ta koncept?
O: Znanstveniki uporabljajo izraz "organizacija računalnika", ko govorijo o mikroarhitekturi.
V: Kako ta pojem poimenujejo ljudje v računalniški industriji?
O: Ljudje v računalniški industriji pogosteje rečejo "mikroarhitektura", ko govorijo o tem konceptu.
V: Kateri dve področji sestavljata računalniško arhitekturo?
O: Mikroarhitektura in arhitektura nabora ukazov (ISA) skupaj tvorita področje računalniške arhitekture.
V: Kaj pomeni ISA?
O: ISA je kratica za Instruction Set Architecture (arhitektura nabora ukazov).
V: Kaj pomeni µarch? O: µArch pomeni mikroarhitektura.