Kas ir instrukciju caurule?

click fraud protection

Jebkura procesora instrukcija darbojas vairākos posmos. Katram no šiem posmiem ir nepieciešams viens CPU cikls. Šie posmi ir instrukciju ielāde, instrukciju dekodēšana, izpilde, piekļuve atmiņai un atpakaļrakstīšana. Attiecīgi tie saņem instrukciju, kas ir jāaizpilda, atdala darbību no darbināmajām vērtībām ieslēgtu, izpildiet procesu, atveriet reģistru, kurā tiks ierakstīts rezultāts, un ierakstiet rezultātu atvērtajā reģistrēties.

Vēsturiski sakārtoti apstrādātāji

Pirmajos datoros centrālais procesors neizmantoja instrukciju cauruļvadu. Šajos CPU katrai viena cikla darbībai bija jānotiek katrai instrukcijai. Tas nozīmēja, ka bija nepieciešami pieci pulksteņa cikli, lai vidējā instrukcija tiktu pilnībā apstrādāta, pirms varēja sākt nākamo. Dažām darbībām, iespējams, nav nepieciešams izrakstīt rezultātu reģistrā, kas nozīmē, ka piekļuves atmiņai un ierakstīšanas posmus var izlaist.

Subskalārajā procesorā bez konveijera katras instrukcijas daļa tiek izpildīta secībā.

Tomēr pastāv problēma, kad tiek izpildīta pilnīga instrukcija, lai pēc tam varētu pāriet uz nākamo instrukciju. Problēma ir kešatmiņas trūkums. CPU datus, kurus tas aktīvi apstrādā, saglabā reģistrā. Tam var piekļūt ar viena cikla latentumu. Problēma ir tā, ka reģistrs ir mazs, jo tas ir iebūvēts procesora kodolā. Ja dati vēl nav ielādēti, centrālajam procesoram ir jāpāriet uz lielāku, bet lēnāku L1 kešatmiņu. Ja tā nav, tai atkal ir jāiet uz lielāku un lēnāku L2 kešatmiņu. Nākamais solis ir L3 kešatmiņa; pēdējā iespēja ir sistēmas RAM. Katrai no šīm opcijām ir nepieciešams vairāk un vairāk CPU ciklu, lai pārbaudītu.

Tagad šis papildu pievienotais latentums var būt liela problēma sistēmā, kurai pirms nākamās instrukcijas ir pilnībā jāpabeidz katra instrukcija. Tas, kas iepriekš bija 5 ciklu uz vienu instrukciju procesors, pēkšņi var palikt pie vienas instrukcijas desmitiem vai simtiem pulksteņa ciklu. Visu laiku datorā nekas cits nevar notikt. Tehniski to var nedaudz mazināt, ja ir divi neatkarīgi kodoli. Tomēr nekas neliedz viņiem abiem darīt vienu un to pašu, iespējams, vienlaikus. Tāpēc vairāku kodolu maršruts to neatrisina.

Klasiskais RISC cauruļvads

RISC apzīmē samazinātu instrukciju komplekta datoru. Tas ir procesora dizaina stils, kas optimizē veiktspēju, atvieglojot katras instrukcijas atšifrēšanu. Tas ir salīdzinājumā ar CISC vai Complex Instruction Set Computer, kas izstrādā sarežģītākas instrukciju kopas, ļaujot to pašu uzdevumu veikšanai izmantot mazāk instrukciju.

Klasiskais RISC dizains ietver instrukciju cauruļvadu. Tā vietā, lai jebkurā ciklā palaistu kādu no pieciem instrukciju posmiem, konveijers ļauj izpildīt visus piecus posmus. Protams, jūs nevarat izpildīt visus piecus vienas instrukcijas posmus ciklā. Bet jūs varat ievietot rindā piecus secīgus norādījumus ar viena posma nobīdi. Tādā veidā katru pulksteņa ciklu var izpildīt jaunu instrukciju. Piedāvājot potenciālu 5x veiktspējas pieaugumu salīdzinoši zemam kodola sarežģītības pieaugumam.

Skalārā konveijera procesorā katru instrukciju izpildes posmu var veikt vienu reizi pulksteņa ciklā. Tas nodrošina vienas pabeigtas instrukcijas maksimālo caurlaidspēju ciklā.

Procesori, kuriem nav konveijera, vienmēr var būt tikai subskalāri, jo tie nevar izpildīt vienu pilnīgu instrukciju ciklā. Izmantojot šo primāro piecu pakāpju cauruļvadu, varat izveidot skalāru centrālo procesoru, kas var izpildīt norādījumus katram procesam. Izveidojot vēl tālejošākus cauruļvadus, varat izveidot superskalārus CPU, kas vienā pulksteņa ciklā var izpildīt vairāk nekā vienu instrukciju. Protams, joprojām pastāv iespējamās problēmas.

Joprojām secīgi

Neviens no tiem neatrisina problēmu, kas saistīta ar daudzu ciklu gaidīšanu, lai saņemtu atbildi, kad nepieciešams vaicāt dažādos kešatmiņas un RAM līmeņos. Tas arī ievieš jaunu problēmu. Ko darīt, ja viena instrukcija balstās uz iepriekšējās instrukcijas izvadi? Šīs problēmas tiek patstāvīgi atrisinātas, izmantojot progresīvu dispečeru. Tā rūpīgi plāno izpildes secību, lai neviena instrukcija, kas balstās uz cita izvadi, neatrastos pārāk tuvu viena otrai. Tas arī apstrādā kešatmiņas kļūdas, novietojot instrukciju un aizstājot to konveijerā ar citu instrukcijas, kas ir gatavas izpildei un kurām nav nepieciešams rezultāts, atsākot norādījumu izpildi, kad tas ir gatavs.

Šie risinājumi var darboties bezkonveijera procesoros, taču tie ir nepieciešami superskalāram procesoram, kas vienā pulkstenī izpilda vairāk nekā vienu instrukciju. Nozares prognozētājs ir arī ļoti noderīgs, jo tas var mēģināt paredzēt instrukcijas iznākumu ar vairāk nekā vienu iespējamo iznākumu un turpināt pieņemt, ka tas ir pareizs, ja vien nav pierādīts pretējais.

Secinājums

Cauruļvads ļauj izmantot visas procesora atšķirīgās iespējas katrā ciklā. Tas tiek darīts, vienlaikus izpildot dažādus dažādu instrukciju posmus. Tas pat nepalielina CPU dizaina sarežģītību. Tas arī paver iespēju vairāk nekā vienai instrukcijai veikt vienu posmu ciklā.