Spekulativ udførelse er en optimeringsteknik, hvor et computersystem udfører en opgave, som måske ikke er nødvendig. Arbejdet afsluttes, før det vides, at det reelt er nødvendigt, for at forhindre forsinkelser, der kan opstå i færdiggørelsen af arbejdet, efter at det vides, at det er nødvendigt. Hvis det viser sig, at arbejdet alligevel ikke er nødvendigt, kasseres de fleste af de ændringer, der er foretaget i arbejdet, og resultaterne ignoreres.
Målet er at give mere samtidighed , hvis flere ressourcer er tilgængelige . Denne tilgang bruges på en række forskellige områder, herunder brancheforudsigelse i pipelinede processorer , værdiforudsigelse til at udnytte værdilokalitet , hukommelse og filforudhentning og optimistisk samtidighedskontrol i databasesystemer [1] [2] [3] .
Spekulativ multithreading er et særligt tilfælde af spekulativ henrettelse.
Moderne pipelinede mikroprocessorer bruger spekulativ eksekvering til at reducere omkostningerne ved betingede forgreningsinstruktioner ved hjælp af kredsløb, der forudsiger programudførelsesstien baseret på filialudførelseshistorien [2] . For at forbedre ydeevne og udnyttelse af computerressourcer kan instruktioner planlægges på et tidspunkt, hvor det endnu ikke er bestemt, at instruktionerne skal udføres før forgrening [4] [5] .
Spekulativ beregning er blevet knyttet til et tidligere koncept [6] .
Ivrig henrettelse er en form for spekulativ henrettelse, hvor begge sider af den betingede gren udføres; resultaterne fanges dog kun, hvis prædikatet er sandt. Med ubegrænsede ressourcer vil aktiv eksekvering (også kendt som orakeludførelse ) teoretisk give den samme ydeevne som perfekt grenforudsigelse . Med begrænsede ressourcer bør aktiv eksekvering bruges med forsigtighed, da mængden af nødvendige ressourcer vokser eksponentielt med hvert niveau af den ivrigt udførte gren [7] .
Prediktiv eksekvering er en form for spekulativ eksekvering, hvor et eller andet udfald forudsiges, og eksekveringen fortsætter langs den forudsagte vej, indtil det faktiske udfald er kendt. Hvis forudsigelsen er korrekt, tillades den forudsagte eksekvering at blive begået; men hvis der er en fejlforudsigelse, skal udførelsen vendes og forsøges igen. Almindelige former for dette omfatter forudsigelse af grenprædiktor og hukommelsesafhængighed . Den generaliserede form kaldes undertiden en omkostningsprognose [8] .
Doven henrettelse er det modsatte af ivrig henrettelse og involverer ikke spekulation. Inkluderingen af spekulativ eksekvering i implementeringer af Haskell-programmeringssproget , et dovent sprog, er et aktuelt forskningsemne. Eager Haskell , en variant af sproget, er baseret på ideen om spekulativ henrettelse. I en ph.d.-afhandling fra 2003 støttede GHC en slags spekulativ eksekvering med en failover-mekanisme i tilfælde af et dårligt valg, kaldet optimistisk eksekvering [9] . Det blev anset for at være for kompliceret [10] .
Fra og med 2017 blev der fundet en række sikkerhedssårbarheder i implementeringer af spekulativ eksekvering på almindelige processorarkitekturer, hvilket muliggjorde privilegieeskalering .
Disse omfatter:
processorteknologier | Digitale|||||||||
---|---|---|---|---|---|---|---|---|---|
Arkitektur | |||||||||
Instruktionssæt arkitektur | |||||||||
maskinord | |||||||||
Parallelisme |
| ||||||||
Implementeringer | |||||||||
Komponenter | |||||||||
Strømstyring |