Oblike ILP
Implementacija ILP
Implementacija ILP je napredovala po dveh ločenih, a dopolnjujočih se poteh: statičnih (kompilacijskih) in dinamičnih (izvedbenih) pristopih. Vsak pristop obravnava različne vidike izziva paralelizma, sodobni procesorji pa običajno uporabljajo obe strategiji za maksimalno izrabo zmogljivosti.
Statični ILP
Tehnike statičnega ILP temeljijo na analizi in optimizaciji v času kompilacije, kar predstavlja sofisticiran poskus prepoznavanja in izkoriščanja paralelizma še preden program začne izvajanje. Ta pristop se začne z analizo strukture programa, ki jo izvede prevajalnik, ki prepozna odvisnosti med ukazi in sprejme premišljene odločitve o vrstnem redu izvajanja in izkoriščanju virov.
Prevajalnik uporablja številne sofisticirane tehnike za izboljšanje ILP. Razvijanje zank (angl. Loop Unrolling), na primer, vključuje širjenje telesa zanke, da se zmanjša preobremenitev z nadzorom zanke in odkrije več priložnosti za paralelno izvajanje. Razmislite o zanki, ki sešteva elemente dveh tabel. Prevajalnik lahko obdeluje več elementov na eno iteracijo z razvijanjem zanke, kar omogoča boljše načrtovanje izvajanja in izkoriščanje virov.
Cevovodno izvajanje programske opreme predstavlja še eno močno tehniko statičnega ILP. Ta pristop reorganizira zanke, tako da se več iteracij prekriva pri izvajanju, podobno kot na proizvodni liniji. Medtem ko ena iteracija izvaja izračune, druga nalaga podatke, tretja pa shranjuje rezultate, vse pa hkrati delujejo na različnih podatkovnih elementih.
Načrtovanje ukazov v času kompilacije vključuje skrbno razporeditev ukazov, da se zmanjša zamuda in maksimalno izkoristi razpoložljive enote za izvajanje. Prevajalnik mora uskladiti več dejavnikov: odvisnosti med ukazi, zakasnitve različnih operacij in omejitve virov procesorja. Ta proces načrtovanja pogosto vključuje kompleksne heuristike in optimizacijske algoritme za iskanje učinkovitih zaporedij ukazov.
Dinamični ILP
Tehnike dinamičnega ILP predstavljajo drugačen pristop, ki se opira na mehanizme strojne opreme za prepoznavanje in izkoriščanje paralelizma med izvajanjem programa. Te tehnike so postale vse bolj sofisticirane, kar omogoča procesorjem, da sprejemajo kompleksne odločitve o izvajanju ukazov v realnem času.
Izvedba izven vrstnega (angl. Out-of-order Execution) reda je morda najpomembnejša inovacija dinamičnega ILP. Ta mehanizem omogoča procesorju, da izvaja ukaze, takoj ko so njihovi operandi na voljo, ne glede na njihov izvorni vrstni red v programu. Procesor ohranja okno ukazov, ki natančno pregleduje tiste, ki so pripravljene za izvajanje, in jih dodeli razpoložljivim enotam za izvajanje.
Za podporo izvajanju izven vrstnega reda procesorji izvajajo preimenovanje registrov (angl. Register Renaming), tehniko, ki odpravi napačne odvisnosti med ukazi. Z ohranjanjem več fizičnih registrov za vsak arhitekturni register procesor omogoči več ukazom, ki pišejo v isti register, da se izvajajo hkrati, dokler so njihove podatkovne odvisnosti ohranjene.
Spekulativno izvajanje predstavlja še eno ključno tehniko dinamičnega ILP. Ko procesor naleti na vejni ukaz, namesto da bi čakal na razrešitev pogoja veje, napove verjeten izid in izvaja ukaze ob predvideni poti. Če se napoved izkaže za pravilno, je procesor učinkovito skril zakasnitev razrešitve veje. Če je napoved napačna, mora razveljaviti spekulativno izvajanje in nadaljevati po pravilni poti.