Mikroarhitektūra
Datortehnikā mikroarhitektūra (dažkārt saīsināti µarch vai uarch) ir datora, centrālā procesora vai ciparu signālu procesora elektriskās shēmas apraksts, kas ir pietiekams, lai pilnībā aprakstītu aparatūras darbību.
Zinātnieki lieto terminu "datoru organizācija", bet datoru nozarē strādājošie biežāk lieto terminu "mikroarhitektūra". Mikroarhitektūra un instrukciju kopuma arhitektūra (ISA) kopā veido datoru arhitektūras jomu.
Termina izcelsme
Datoros vadības loģikas mikroprogrammēšana tiek izmantota kopš pagājušā gadsimta 50. gadiem. Procesors dekodē instrukcijas un, izmantojot tranzistoru slēdžus, nosūta signālus pa attiecīgiem ceļiem. Mikroprogrammas vārdos esošie biti vadīja procesoru elektrisko signālu līmenī.
Termins: mikroarhitektūra tika lietots, lai aprakstītu vienības, ko kontrolēja mikroprogrammu vārdi, pretstatā terminam: "Arhitektūra", kas bija redzama un dokumentēta programmētājiem. Lai gan arhitektūrai parasti bija jābūt savietojamai starp aparatūras paaudzēm, pamatā esošo mikroarhitektūru varēja viegli mainīt.
Saistība ar instrukciju kopuma arhitektūru
Mikroarhitektūra ir saistīta ar instrukciju kopuma arhitektūru, taču nav tā pati. Instrukciju kopuma arhitektūra ir tuva procesora programmēšanas modelim, kā to redz asembleru valodas programmētājs vai kompilatora rakstītājs, kas ietver izpildes modeli, procesora reģistrus, atmiņas adreses režīmus, adrešu un datu formātus utt. Mikroarhitektūra (vai datora organizācija) galvenokārt ir zemāka līmeņa struktūra, un tāpēc tā pārvalda lielu skaitu detaļu, kas ir apslēptas programmēšanas modelī. Tā apraksta procesora iekšējās daļas un to, kā tās darbojas kopā, lai īstenotu arhitektūras specifikāciju.
Mikroarhitektūras elementi var būt visdažādākie elementi, sākot ar atsevišķiem loģiskajiem vārtiem, reģistriem, meklēšanas tabulām, multiplekseriem, skaitītājiem utt., līdz pat pilniem ALU, FPU un vēl lielākiem elementiem. Savukārt elektronisko shēmu līmeni var iedalīt tranzistoru līmeņa detaļās, piemēram, kādas galvenās vārtu veidošanas struktūras tiek izmantotas un kādi loģiskās implementācijas tipi (statiskā/dinamiskā, fāžu skaits utt.) tiek izvēlēti papildus faktiskajam loģiskajam projektam, ko izmanto, lai tos izveidotu.
Daži svarīgi punkti:
- Ar vienu mikroarhitektūru, jo īpaši, ja tā ietver mikrokodu, var īstenot daudzus dažādus instrukciju kopumus, mainot vadības atmiņu. Tomēr tas var būt diezgan sarežģīti, pat ja to vienkāršo mikrokods un/vai tabulas struktūras ROM vai PLA.
- Divām mašīnām var būt viena un tā pati mikroarhitektūra un līdz ar to arī viena un tā pati bloku shēma, bet pilnīgi atšķirīgas aparatūras implementācijas. Tas pārvalda gan elektronisko shēmu līmeni, gan vēl jo vairāk ražošanas (gan integrālās shēmas, gan diskrēto komponentu) fizisko līmeni.
- Mašīnām ar dažādām mikroarhitektūrām var būt vienāda instrukciju kopuma arhitektūra, tāpēc abas spēj izpildīt vienādas programmas. Jaunas mikroarhitektūras un/vai shēmas risinājumi, kā arī pusvadītāju ražošanas attīstība ļauj jaunākajām procesoru paaudzēm sasniegt lielāku veiktspēju.
Vienkāršoti apraksti
Ļoti vienkāršotā augsta līmeņa aprakstā, kas parasti tiek izmantots mārketingā, var būt redzami tikai diezgan pamatraksti, piemēram, kopņu platums, kā arī dažāda veida izpildes vienības un citas lielas sistēmas, piemēram, zaru prognozēšana un kešatmiņas atmiņas, kas attēlotas kā vienkārši bloki - iespējams, norādot dažus svarīgus atribūtus vai īpašības. Dažreiz var iekļaut arī sīkāku informāciju par konveijera struktūru (piemēram, fetch, decode, assign, execute, write-back).
Mikroarhitektūras aspekti
Šobrīd mikroarhitektūrā visbiežāk izmantotais datu celiņš ir cauruļveidīgs datu celiņš. Šo paņēmienu izmanto lielākajā daļā mūsdienu mikroprocesoru, mikrokontrolleru un DSP. Cauruļveida arhitektūra ļauj izpildīt vairākas instrukcijas, kas pārklājas, līdzīgi kā montāžas līnija. Cauruļvads ietver vairākus dažādus posmus, kas ir būtiski mikroarhitektūras projektos. Daži no šiem posmiem ietver instrukciju saņemšanu, instrukciju atšifrēšanu, izpildi un ierakstīšanu atpakaļ. Dažās arhitektūrās ir arī citi posmi, piemēram, piekļuve atmiņai. Cauruļvadu projektēšana ir viens no galvenajiem mikroarhitektūras uzdevumiem.
Mikroarhitektūrai ir būtiskas arī izpildes vienības. Izpildes blokos ietilpst aritmētiskās loģikas bloki (ALU), svārstīgā komata bloki (FPU), ielādes/uzglabāšanas bloki un zaru prognozēšana. Šīs vienības veic procesora darbības vai aprēķinus. Izpildes vienību skaita, to latentuma un caurlaidspējas izvēle ir svarīgi mikroarhitektūras projektēšanas uzdevumi. Mikroarhitektūras lēmumi ir arī atmiņu izmērs, latence, caurlaidspēja un savienojamība sistēmā.
Sistēmas līmeņa projektēšanas lēmumus, piemēram, par to, vai iekļaut perifērijas ierīces, piemēram, atmiņas kontrolierus, var uzskatīt par daļu no mikroarhitektūras projektēšanas procesa. Tas ietver lēmumus par šo perifēro ierīču veiktspējas līmeni un savienojamību.
Atšķirībā no arhitektūras projektēšanas, kur galvenais mērķis ir konkrēts veiktspējas līmenis, mikroarhitektūras projektēšanā lielāka uzmanība tiek pievērsta citiem ierobežojumiem. Uzmanība jāpievērš šādiem jautājumiem:
- Mikroshēmas platība/izmaksa.
- Enerģijas patēriņš.
- Loģikas sarežģītība.
- Savienojamības vieglums.
- Izgatavojamība.
- Atjaunošanas vieglums.
- Pārbaudāmība.
Mikroarhitektūras koncepcijas
Kopumā visi centrālie procesori, vienķipu mikroprocesori vai daudzķipu implementācijas programmas izpilda, veicot šādus soļus:
- Izlasiet instrukciju un atšifrējiet to.
- Atrodiet visus saistītos datus, kas nepieciešami instrukcijas apstrādei.
- Apstrādājiet norādījumu.
- Uzrakstiet rezultātus.
Šo vienkāršo soļu virkni sarežģī fakts, ka atmiņas hierarhija, kas ietver kešatmiņu, galveno atmiņu un negaistošo atmiņu, piemēram, cietos diskus (kur atrodas programmas instrukcijas un dati), vienmēr ir bijusi lēnāka par pašu procesoru. Solis (2) bieži rada aizkavēšanos (procesora terminoloģijā to bieži sauc par "aizkavēšanos"), kamēr dati nonāk pa datora kopni. Ir veikts liels pētījums, lai pēc iespējas izvairītos no šādas aizkavēšanās. Gadu gaitā galvenais projektēšanas mērķis bija paralēli izpildīt vairāk instrukciju, tādējādi palielinot programmas faktisko izpildes ātrumu. Šajos centienos tika ieviestas sarežģītas loģikas un shēmu struktūras. Agrāk šādus paņēmienus varēja īstenot tikai dārgos mainstreimenos vai superdatoros, ņemot vērā šiem paņēmieniem nepieciešamo shēmu daudzumu. Attīstoties pusvadītāju ražošanai, arvien vairāk šo metožu varēja īstenot vienā pusvadītāju mikroshēmā.
Tālāk ir sniegts pārskats par mikroarhitektūras metodēm, kas ir izplatītas mūsdienu procesoru procesos.
Instrukciju kopas izvēle
Izvēle, kuru instrukciju kopas arhitektūru izmantot, būtiski ietekmē augstas veiktspējas ierīču ieviešanas sarežģītību. Gadu gaitā datoru konstruktori darīja visu iespējamo, lai vienkāršotu instrukciju kopas, tādējādi nodrošinot augstāku veiktspēju, ietaupot konstruktoru pūles un laiku uz funkcijām, kas uzlabo veiktspēju, nevis tērējot to instrukciju kopas sarežģītībai.
Instrukciju kopu projektēšana ir progresējusi no CISC, RISC, VLIW, EPIC tipiem. Arhitektūras, kas nodarbojas ar datu paralēlismu, ietver SIMD un vektorus.
Instrukciju konveijeru savienošana
Viens no pirmajiem un jaudīgākajiem paņēmieniem veiktspējas uzlabošanai ir instrukciju konveijera izmantošana. Agrīnajās procesoru konstrukcijās visas iepriekš minētās darbības tika veiktas ar vienu instrukciju, pirms pāriet pie nākamās. Liela daļa procesora shēmas jebkurā no šiem soļiem tika atstāta dīkstāvē; piemēram, instrukcijas dekodēšanas shēma izpildes laikā bija dīkstāvē utt.
Cauruļvadi uzlabo veiktspēju, ļaujot vairākiem norādījumiem vienlaicīgi darboties procesorā. Tajā pašā pamatpierādījumā procesors sāktu dekodēt (1. solis) jaunu instrukciju, kamēr iepriekšējā instrukcija gaidītu rezultātus. Tas ļautu vienlaicīgi "lidot" līdz pat četrām instrukcijām, padarot procesoru četras reizes ātrāku. Lai gan jebkuras atsevišķas instrukcijas izpilde aizņem tikpat daudz laika (joprojām ir četri soļi), procesors kopumā "izņem" instrukcijas daudz ātrāk un var darboties ar daudz lielāku taktātrumu.
Cache
Uzlabojumi mikroshēmu ražošanā ļāva vienā mikroshēmā ievietot vairāk shēmu, un konstruktori sāka meklēt veidus, kā tās izmantot. Viens no izplatītākajiem veidiem bija pievienot arvien lielāku kešatmiņas atmiņas apjomu mikroshēmā. Kešatmiņa ir ļoti ātra atmiņa, atmiņa, kurai var piekļūt dažu ciklu laikā salīdzinājumā ar to, kas nepieciešams, lai sazinātos ar galveno atmiņu. Procesorā ir kešatmiņas kontrolieris, kas automatizē kešatmiņas lasīšanu un rakstīšanu, ja dati jau ir kešatmiņā, tie vienkārši "parādās", bet, ja to nav, procesors "apstājas", kamēr kešatmiņas kontrolieris tos nolasa.
RISC konstrukcijās kešatmiņu sāka pievienot 80. gadu vidū un beigās, bieži vien tikai 4 KB kopsummā. Laika gaitā šis skaits pieauga, un tagad tipiskiem procesoriem ir aptuveni 512 KB, bet jaudīgākie procesori ir aprīkoti ar 1 vai 2, vai pat 4, 6, 8 vai 12 MB, kas izvietoti vairākos atmiņas hierarhijas līmeņos. Vispārīgi runājot, vairāk kešatmiņas nozīmē lielāku ātrumu.
Kešatmiņas un cauruļvadi lieliski saderēja viens ar otru. Agrāk nebija lielas jēgas veidot konveijeru, kas varētu darboties ātrāk par ārpus mikroshēmas esošās kešatmiņas piekļuves latentumu. Tā vietā izmantojot mikroshēmas kešatmiņu, tas nozīmēja, ka cauruļvads varēja darboties ar kešatmiņas piekļuves latentuma ātrumu, kas ir daudz īsāks laika posms. Tas ļāva palielināt procesoru darbības frekvences daudz straujāk nekā ārpus mikroshēmas atmiņas darbības frekvences.
Atzarojumu paredzēšana un spekulatīvā izpilde
Divi galvenie šķēršļi, kas traucē sasniegt lielāku veiktspēju, izmantojot instrukciju līmeņa paralēlismu, ir cauruļvada aizkavēšanās un izplūšana, ko izraisa zaru darbības. No brīža, kad procesora instrukciju dekodētājs ir konstatējis, ka tas ir saskāries ar nosacītu atzarojuma instrukciju, līdz brīdim, kad var nolasīt izšķirošā lēciena reģistra vērtību, cauruļvads var būt apstājies uz vairākiem cikliem. Vidēji katra piektā izpildītā instrukcija ir atzarojums, tātad tas ir liels kavēšanās laiks. Ja atzarojums tiek veikts, tas ir vēl sliktāk, jo tad visas turpmākās instrukcijas, kas bija cauruļvadā, ir jāizpludina.
Lai mazinātu šos soda punktus, tiek izmantoti tādi paņēmieni kā zaru prognozēšana un spekulatīvā izpilde. Atzarojumu paredzēšana ir tāda, kad aparatūra veic pamatotus minējumus par to, vai konkrētais atzars tiks izmantots. Šis minējums ļauj aparatūrai iepriekš iegūt instrukcijas, negaidot reģistra nolasīšanu. Spekulatīvā izpilde ir vēl viens uzlabojums, kurā kods pa paredzamo ceļu tiek izpildīts, pirms ir zināms, vai atzars ir jāizmanto vai ne.
Ārpus kārtas izpilde
Kešatmiņas pievienošana samazina apstāšanās biežumu vai ilgumu, kas rodas, gaidot, kad dati tiks ielādēti no galvenās atmiņas hierarhijas, taču pilnībā no šīs apstāšanās neatbrīvojas. Agrīnajos projektos kešatmiņas iztrūkums piespieda kešatmiņas kontrolieri apturēt procesoru un gaidīt. Protams, programmā var būt kāda cita instrukcija, kuras dati tajā brīdī ir pieejami kešatmiņā. Ārpus kārtas izpilde ļauj apstrādāt šo gatavo instrukciju, kamēr vecākā instrukcija gaida kešatmiņā, pēc tam mainot rezultātu secību, lai radītu iespaidu, ka viss noticis ieprogrammētajā secībā.
Superscalar
Pat ņemot vērā visu sarežģītības un vārtu sarežģītību, kas bija nepieciešami iepriekš izklāstīto koncepciju atbalstam, pusvadītāju ražošanas uzlabojumi drīz vien ļāva izmantot vēl vairāk loģisko vārtu.
Iepriekš attēlotajā shēmā procesors apstrādā vienas instrukcijas daļas vienlaikus. Datorprogrammas varētu izpildīt ātrāk, ja vienlaicīgi tiktu apstrādātas vairākas instrukcijas. To panāk superskalārie procesori, dublējot funkcionālās vienības, piemēram, ALU. Funkcionālo vienību replikācija kļuva iespējama tikai tad, kad integrālās shēmas (dažkārt sauktas par "die") platība vairs nepārsniedza to, ko varēja droši izgatavot. Astoņdesmito gadu beigās tirgū sāka ienākt superskalārās konstrukcijas.
Mūsdienu projektos parasti ir divas ielādes vienības, viena glabāšanas vienība (daudzām instrukcijām nav jāglabā rezultāti), divas vai vairākas veselu skaitļu matemātiskās vienības, divas vai vairākas vienības ar peldošo komata punktu un bieži vien arī kāda veida SIMD vienība. Instrukciju izdošanas loģika kļūst arvien sarežģītāka, nolasot milzīgu instrukciju sarakstu no atmiņas un nododot tās dažādām izpildes vienībām, kas tajā brīdī ir dīkstāvē. Pēc tam rezultāti tiek apkopoti un beigās sakārtoti.
Reģistra pārdēvēšana
Reģistru pārdēvēšana ir metode, ko izmanto, lai izvairītos no nevajadzīgas programmas instrukciju sērijveida izpildes, jo šīs instrukcijas atkārtoti izmanto tos pašus reģistrus. Pieņemsim, ka mums ir divas instrukciju grupas, kas izmantos vienu un to pašu reģistru, viena instrukciju grupa tiek izpildīta pirmā, lai atstātu reģistru otrai grupai, bet, ja otrajai grupai ir piešķirts cits līdzīgs reģistrs, abas instrukciju grupas var izpildīt paralēli.
Daudzprocesoru un daudzpavedienu apstrāde
Tā kā starp procesora darbības frekvencēm un DRAM piekļuves laikiem arvien pieaug atšķirība, neviena no metodēm, kas uzlabo instrukciju līmeņa paralēlismu (ILP) vienas programmas ietvaros, nespēja pārvarēt ilgos kavējumus (aizkavēšanos), kas radās, kad dati bija jāievāc no galvenās atmiņas. Turklāt lielais tranzistoru skaits un augstās darba frekvences, kas bija nepieciešamas modernākajām ILP metodēm, prasīja tādu jaudas izkliedes līmeni, ko vairs nebija iespējams lēti dzesēt. Šo iemeslu dēļ jaunākās paaudzes datoros sāka izmantot augstākus paralēlisma līmeņus, kas pastāv ārpus vienas programmas vai programmas pavediena.
Šo tendenci dažkārt dēvē par "caurlaides skaitļošanu". Šī ideja radās mainstreamu datortehnikas tirgū, kur tiešsaistes transakciju apstrāde uzsvēra ne tikai viena darījuma izpildes ātrumu, bet arī spēju apstrādāt lielu skaitu transakciju vienlaicīgi. Tā kā pēdējā desmitgadē ievērojami pieauga tādu uz darījumiem balstītu lietojumprogrammu skaits kā tīkla maršrutēšana un tīmekļa vietņu apkalpošana, datoru nozare atkal uzsvēra jaudas un caurlaidspējas jautājumus.
Viens no paņēmieniem, kā panākt šo paralēlismu, ir daudzprocesoru sistēmas - datorsistēmas ar vairākiem CPU. Agrāk tas bija paredzēts tikai augstas klases mainstreimiem, bet tagad neliela mēroga (2-8) daudzprocesoru serveri ir kļuvuši ierasta parādība mazo uzņēmumu tirgū. Lielām korporācijām ir izplatīti liela mēroga (16-256) daudzprocesoru serveri. Kopš 90. gadiem ir parādījušies pat personālie datori ar vairākiem procesoriem.
Pusvadītāju tehnoloģijas attīstība samazināja tranzistoru izmērus; parādījās daudzkodolu procesori, kuros vienā silīcija mikroshēmā ir vairāki procesori. Sākotnēji tos izmantoja mikroshēmās, kas paredzētas iegulto ierīču tirgiem, kur vienkāršāki un mazāki procesori ļautu vienā silīcija gabalā ievietot vairākas procesora instalācijas. Līdz 2005. gadam pusvadītāju tehnoloģija ļāva masveidā ražot divkāršus augstas klases galddatoru CPU CMP mikroshēmas. Dažos projektos, piemēram, UltraSPARC T1, izmantoja vienkāršākus (skalāros, in-order) projektus, lai uz viena silīcija gabala ietilpinātu vairāk procesoru.
Pēdējā laikā arvien populārāka ir kļuvusi vēl viena metode - daudzpavedienu izmantošana. Ja procesoram ir jāiegūst dati no lēnas sistēmas atmiņas, daudzpavedienu režīmā, tā vietā, lai gaidītu, kamēr dati pienāk, procesors pārslēdzas uz citu programmu vai programmas pavedienu, kas ir gatavs izpildei. Lai gan tas nepalielina konkrētas programmas/vēkla darbības ātrumu, tas palielina kopējo sistēmas caurlaidspēju, samazinot procesora dīkstāves laiku.
Konceptuāli daudzpavedienu izmantošana ir līdzvērtīga konteksta pārslēgšanai operētājsistēmas līmenī. Atšķirība ir tāda, ka daudzpavedienu procesors var veikt pavedienu pārslēgšanu vienā procesora ciklā, nevis simtos vai tūkstošos procesora ciklu, kas parasti nepieciešami konteksta pārslēgšanai. Tas tiek panākts, dublējot katra aktīva pavediena stāvokļa aparatūru (piemēram, reģistru datni un programmas skaitītāju).
Vēl viens uzlabojums ir vienlaicīga daudzpavedienu izmantošana. Šis paņēmiens ļauj superskalārajiem procesoriem vienā ciklā vienlaicīgi izpildīt instrukcijas no dažādām programmām/dzīslām.
Saistītās lapas
- Mikroprocesors
- Mikrokontrolieris
- Daudzkodolu procesors
- Digitālais signālu procesors
- Procesora dizains
- Datapath
- instrukciju līmeņa paralēlisms (ILP)
Jautājumi un atbildes
J: Kas ir mikroarhitektūra?
A: Mikroarhitektūra ir datora, centrālā procesora vai ciparu signālu procesora elektriskās shēmas apraksts, kas ir pietiekams, lai pilnībā aprakstītu aparatūras darbību.
J: Kā zinātnieki apzīmē šo jēdzienu?
A: Zinātnieki, runājot par mikroarhitektūru, lieto terminu "datoru organizācija".
J: Kā šo jēdzienu dēvē datoru nozares pārstāvji?
A: Datoru nozarē strādājošie, runājot par šo jēdzienu, biežāk lieto terminu "mikroarhitektūra".
J: Kādas divas jomas veido datoru arhitektūru?
A: Mikroarhitektūra un instrukciju kopuma arhitektūra (ISA) kopā veido datoru arhitektūras jomu.
J: Ko nozīmē ISA?
A: ISA ir instrukciju kopas arhitektūra.
J: Ko nozīmē µarch? A: µArch ir mikroarhitektūra.