Datori ir programmēti ar programmēšanas valodām. Šīs valodas parasti ir cilvēkiem lasāmas un ļauj programmētājam konfigurēt datora darbību. Pēc tam šis kods ir jāapkopo datora instrukcijās. Precīza informācija par to atšķiras atkarībā no instrukciju kopas arhitektūras vai ISA, ko paredzēts izmantot datorā. Tāpēc ir dažādas lejupielādes saites x86 CPU no Intel un AMD un ARM CPU, kas tiek izmantoti mūsdienu Apple ierīcēs. x86 un ARM ISA atšķiras; programmatūra ir jākompilē atsevišķi. Kā Apple ir parādījis, ir iespējams izveidot izdomātu tulkošanas slāni; tā vienkārši nav ierasts darīt.
Varētu domāt, ka centrālais procesors redz tam sniegtos norādījumus un pēc tam izpilda tos secībā. Ir daudz triku, ko izmanto mūsdienu CPU, tostarp nepareiza izpilde, ļaujot CPU pārkārtot lietas lidojuma laikā, lai optimizētu veiktspēju. Tomēr gudra daļa, kas ir diezgan labi paslēpta, ir mikrooperācijas.
Cauruļvads uz mikrooperāciju
Atsevišķas instrukcijas mašīnkodā var saukt par instrukcijām vai operācijām; termini ir savstarpēji aizstājami. Viena no sarežģītām instrukciju kopu skaitļošanas vai CISC arhitektūrām, piemēram, x86, grūtībām ir tā, ka instrukcijas var atšķirties atkarībā no to ilguma. Tas īpaši attiecas uz to, cik daudz datu viņiem ir nepieciešams, lai attēlotu. Operētājsistēmā x86 instrukcija var būt viena baita īsa vai 15 gara. Salīdziniet to ar standarta RISC-V arhitektūru, ko izmanto mūsdienu ARM CPU ar fiksēta garuma 4 baitu instrukcijām.
Padoms: RISC nozīmē samazinātu instrukciju kopu skaitļošanu.
Viena no šīs struktūras atšķirības sekām ir tāda, ka RISC arhitektūras parasti ir daudz vienkāršāk efektīvi savienot. Katrai instrukcijai ir vairāki darbības posmi, kuros tiek izmantota atšķirīga aparatūra. Cauruļvadu izveide vienlaikus izpilda vairākas instrukcijas, izmantojot šos posmus, katrā posmā precīzi norādot vienu norādījumu. Cauruļvadu sistēma nodrošina ievērojamu veiktspējas pieaugumu, ja to izmanto efektīvi. Viens no galvenajiem faktoriem cauruļvada efektīvai izmantošanai ir nodrošināt, ka katrs posms tiek izmantots vienlaikus. Tādējādi viss cauruļvadā darbojas nevainojami.
Tā kā visas instrukcijas ir vienāda garuma, RISC instrukcijām parasti ir vajadzīgs tāds pats apstrādes laiks kā vienai otrai. Tomēr CISC, piemēram, x86, dažu instrukciju izpilde var aizņemt daudz ilgāku laiku nekā citu. Tas rada lielu efektivitātes problēmu, pievienojot CPU. Katru reizi, kad nāk garāka instrukcija, tā iestrēgst cauruļvadā uz ilgāku laiku. Tas izraisa burbuli un aiztur visu, kas atrodas aiz tā. Mikrooperācijas ir risinājums tam.
Efektīvas mikrooperācijas
Tā vietā, lai katru instrukciju uzskatītu par vienīgo darbības līmeni, ko var veikt, mikrooperācijas ievieš jaunu apakšējo slāni. Katru darbību var sadalīt daudzās mikrooperācijās. Rūpīgi izstrādājot mikrooperācijas, jūs varat optimizēt cauruļvadu.
Interesanti, ka tas piedāvā jaunas priekšrocības. Lai gan kopējā ISA, piemēram, x86, paliek nemainīga daudzās dažādās CPU paaudzēs, mikrooperācijas var pielāgot katrai aparatūras paaudzei. To var izdarīt, dziļi izprotot, cik daudz veiktspējas var izspiest no katra cauruļvada posma katrai mikrooperācijai.
Mikrooperāciju sākumposmā tie bija vadu savienojumi, kas aktivizēja vai atspējoja noteiktu funkcionalitāti atkarībā no mikrooperācijas. Mūsdienu CPU dizainā pārkārtošanas buferim tiek pievienota mikrooperācija. Tieši ar šo buferi CPU var veikt uz efektivitāti orientētu pārkārtošanu. Tās ir mikrooperācijas, nevis faktiskās instrukcijas, kas tiek pārkārtotas.
Dažos gadījumos, īpaši ar modernākiem CPU, var paveikt pat vairāk. Mikrooperāciju saplūšana ir vieta, kur vairākas mikrooperācijas tiek apvienotas vienā. Piemēram, vienkāršu mikrooperāciju secība var veikt darbību, ko var veikt ar vienu, sarežģītāku norādījumu. Samazinot veikto mikrooperāciju skaitu, process var tikt pabeigts ātrāk. Tas arī samazina stāvokļa izmaiņu skaitu, samazinot enerģijas patēriņu. Pilnas instrukcijas var pat analizēt un apvienot efektīvākās mikrooperācijas struktūrās.
Daži CPU izmanto mikrooperāciju kešatmiņu. Tas saglabā pilnībā dekodētas mikrooperāciju secības, kuras var izmantot atkārtoti, ja tās tiek izsauktas vēlreiz. Parasti šādas kešatmiņas lielumu norāda uz mikrooperāciju skaitu, ko tā var uzglabāt, nevis pēc baitu ietilpības.
Secinājums
Mikrooperācija ir CPU specifiska instrukciju kopas ieviešana. Instrukcijas tiek atšifrētas virknei mikrooperāciju. Šīs mikrooperācijas ir ievērojami vieglāk konveijerāt efektīvāk un tādējādi labāk izmantot CPU resursus. Tā kā mikrooperācijas nav iekodētas instrukciju kopā, tās var pielāgot katras CPU paaudzes konkrētajai aparatūrai. Mikrooperācijas bieži tiek saīsinātas līdz mikrooperācijām vai pat μops. Tas izmanto grieķu burtu μ ( izrunā Mu ), kas ir SI simbols mikro prefiksam.