Historikisht CPU-të kanë qenë makina të përkryera sekuenciale. Kjo është shumë logjike dhe e lehtë për t'u kuptuar, por mund të jetë një çështje e performancës. Me kalimin e viteve, ka pasur shumë rregullime të zgjuara në dizajnet e CPU-së për të nxjerrë sa më shumë performancë të jetë e mundur nga vaferat e silikonit. Një nga më interesantet, megjithatë, është ekzekutimi jashtë rendit. Në CPU-të e ekzekutimit jashtë rendit, udhëzimet nuk duhet domosdoshmërisht të ekzekutohen sipas radhës në të cilën janë lëshuar.
Ngelja në rregull
Çështja kryesore e performancës në të cilën ndeshet një CPU e rregullt quhet stallim i tubacionit. Kjo ndodh kur një instruksion është i varur nga një memorie, por ajo memorie nuk është drejtpërdrejt e disponueshme në një regjistër. Në këtë rast, CPU duhet ta gjejë atë vlerë në memorie. Memoria e kujtesës së CPU-së kontrollohet së pari pasi këto janë niveli më i shpejtë i memories. Nëse vlera nuk është aty, kontrollohet RAM-i i sistemit. Gjatë kësaj kohe, CPU duhet të qëndrojë boshe, pasi instruksioni i varur nga memorja duhet të plotësohet me radhë përpara udhëzimeve të mëposhtme.
Ndikimi i performancës së stallës së tubacionit mund të mos jetë aq i keq, por gjithashtu mund të jetë relativisht i rëndë. Për shembull, cache L1 zakonisht mund të kthejë një rezultat në rendin e madhësisë prej 5 cikleve të CPU. Cache L2 mund të marrë 20 cikle, L3 rreth 200 cikle dhe RAM-i i sistemit rreth 400 cikle. Duke pasur parasysh që një CPU mund të funksionojë në rreth 5 GHz, që është 5 miliardë cikle ore në sekondë, edhe 400 cikle nuk janë aq të këqija (0.000008%). Por nëse keni shumë udhëzime që duhet t'i referohen të dhënave më tej në nivelet e cache-it, efekti kumulativ mund të shkaktojë një ngadalësim të dukshëm.
Ekzekutimi jashtë rendit dhe riemërtimi i regjistrit
Ekzekutimi jashtë rendit është një teknikë që lejon planifikuesin të rirendisë udhëzimet në radhën e tij. Nëpërmjet këtij rirenditjeje, ai mund të zgjedhë t'i japë përparësi temave specifike mbi të tjerat. Ai gjithashtu mund të shtyjë udhëzimet përsëri në radhë kur ata kanë një varësi të të dhënave që ende nuk është përmbushur. Kjo parandalon sa më shumë që të jetë e mundur ngecjet e tubacionit, duke minimizuar ciklet boshe.
Ekzekutimi jashtë rendit kërkon një veçori të quajtur riemërimi i regjistrit. CPU mund të aksesojë të dhënat e mbajtura në regjistra brenda një cikli të vetëm. Regjistrat përdoren për të ruajtur të dhënat që lexohen dhe shkruhen. Megjithatë, është thelbësore të sigurohet që kompjuteri në përgjithësi të shohë gjithçka që ndodh në rendin logjik, jo në rendin jashtë rendit, të optimizuar për ciklin e CPU-së. Për të mundësuar këtë, CPU-të kanë shumë më tepër regjistra logjik sesa kërkon arkitektura e CPU-së.
Të dhënat që duhet të shkruhen, por që kanë një udhëzim “më të hershëm” që nuk është përfunduar ende, vendosen në një regjistër mbajtës. Këto të dhëna nuk transferohen në një regjistër tjetër kur porosia është rregulluar vetë. Në vend të kësaj, emri i regjistrit të mbajtjes ndryshohet në atë të regjistrit ku duhet të jetë. Kjo është disi e ngjashme me përgatitjen e një ëmbëlsirë përpara pjatës kryesore, por më pas mbajtjen e saj në frigorifer derisa të vijë koha për ta servirur.
Këta regjistra logjikë janë tërësisht të paadresuar. CPU mund të adresojë realisht vetëm regjistrat logjikë që aktualisht ndajnë emrin e regjistrave arkitekturorë. Thënë kështu, CPU-ja është gjithashtu e vetëdijshme për to sa që nëse udhëzimet e tjera të rirenditura mbështeten në të dhënat në regjistrin logjik të mbajtjes, ata mund t'i përdorin ato në vend të të dhënave "të vjetruara" në regjistrin arkitekturor në atë kohë të veçantë empirike.
Barrierat e kujtesës
Një pengesë memorie - e referuar gjithashtu si një membar, gardh memorie ose udhëzim i gardhit - është një udhëzim në kodin kompjuterik. Ai lejon një programues të zbatojë një kufizim porosie në operacionet e kujtesës të lëshuara para dhe pas pengesës së memories. Barriera e memories udhëzon planifikuesin e CPU-së të sigurojë që të gjitha instruksionet të përpunohen përpara çdo instruksioni pas barrierës. Kjo bëhet për të siguruar që operacionet e rëndësishme të kryhen në rendin e duhur.
Në përgjithësi, në kompjuterët modernë, kjo nuk duhet të jetë e nevojshme. Ekzekutimi jashtë rregullit dhe riemërtimi i regjistrit janë fusha të mirëpërcaktuara dhe të pjekura. Megjithatë, një pengesë memorie mund të jetë e dobishme për procesorët më të vjetër, më pak të sofistikuar, jashtë rendit ose të përdorur në operacionet kritike të memories.
Barrierat e kujtesës mund të vijnë me disa dëmtime të performancës. Kjo është për shkak se ata në mënyrë aktive parandalojnë planifikuesin e CPU-së nga optimizimi i pjesëve specifike të rrjedhës së udhëzimeve. Kjo rrit mundësinë e bllokimit të tubacionit.
konkluzioni
Një pengesë memorie është një instruksion që siguron një kufizim të renditjes në operacionet e kujtesës. Kjo është e rëndësishme sepse procesorët e ekzekutimit jashtë rendit mund të rirenditin instruksione specifike. Ndërsa riemërtimi i regjistrit është krijuar mirë si një metodë për të siguruar integritetin e kujtesës në këtë mjedis, mund të jetë e dobishme ta siguroni atë me dorë.
Barriera e memories detyron planifikuesin e CPU-së të sigurojë që udhëzimet të jenë përfunduar përpara çdo instruksioni pas barrierës. Kjo parandalon që operacionet e kujtesës të rirenditen. Ai gjithashtu parandalon CPU-në të optimizojë rrjedhën e udhëzimeve, gjë që mund të ndikojë në performancën.