A spekulatív végrehajtás olyan optimalizálási technika , amelyben a számítógépes rendszer olyan feladatot hajt végre, amelyre esetleg nincs szükség. A munkát azelőtt fejezik be, hogy ténylegesen szükség lenne rá, hogy elkerülhető legyen a késedelem a munka befejezésében, miután kiderült, hogy szükség van rá. Ha kiderül, hogy a munkára mégsem van szükség, a munkán végrehajtott változtatások nagy részét elvetik, az eredményeket pedig figyelmen kívül hagyják.
A cél több párhuzamosság biztosítása, ha több erőforrás áll rendelkezésre . Ezt a megközelítést számos területen alkalmazzák, beleértve az elágazás előrejelzését a csővezetékes processzorokban , az érték előrejelzését az érték helyének kihasználására, a memória és a fájl előzetes letöltését, valamint az optimista párhuzamosság-vezérlést adatbázis - rendszerekben [1] [2] [3] .
A spekulatív multithreading a spekulatív végrehajtás speciális esete.
A modern csővezetékes mikroprocesszorok spekulatív végrehajtást alkalmaznak, hogy csökkentsék a feltételes elágazási utasítások költségeit olyan áramkörök segítségével, amelyek az ágvégrehajtási előzmények alapján megjósolják a program végrehajtási útvonalát [2] . A teljesítmény és a számítógépes erőforrások kihasználtságának javítása érdekében az utasításokat olyan időpontban lehet ütemezni, amikor még nem határozták meg, hogy az utasításokat végre kell hajtani az elágazás előtt [4] [5] .
A spekulatív számításokat egy korábbi koncepcióhoz kapcsolták [6] .
A lelkes végrehajtás a spekulatív végrehajtás egyik formája, amelyben a feltételes ág mindkét oldalát végrehajtják; az eredményeket azonban csak akkor rögzítjük, ha az állítmány igaz. Korlátlan erőforrások mellett az aktív végrehajtás (más néven oracle execution ) elméletileg ugyanazt a teljesítményt nyújtaná, mint a tökéletes ág-előrejelzés . Korlátozott erőforrások esetén az aktív végrehajtást óvatosan kell használni, mivel a szükséges erőforrások mennyisége exponenciálisan növekszik a mohón végrehajtott ág minden egyes szintjével [7] .
A prediktív végrehajtás a spekulatív végrehajtás egyik formája, amelyben bizonyos kimeneteleket jósolnak meg, és a végrehajtás az előre jelzett úton folytatódik, amíg a tényleges eredmény nem ismert. Ha az előrejelzés helyes, az előre jelzett végrehajtás végrehajtható; téves előrejelzés esetén azonban a végrehajtást meg kell fordítani és újra meg kell próbálni. Ennek gyakori formái közé tartozik az elágazás előrejelzése és a memóriafüggőség előrejelzése . Az általánosított formát néha költség-előrejelzésnek is nevezik [8] .
A lusta végrehajtás a lelkes végrehajtás ellentéte, és nem jár spekulációval. A spekulatív végrehajtás beépítése a Haskell programozási nyelv , egy lusta nyelv megvalósításaiba, aktuális kutatási téma. Az Eager Haskell , a nyelv egy változata a spekulatív végrehajtás gondolatán alapul. Egy 2003-as PhD disszertációjában a GHC egyfajta spekulatív végrehajtást támogatott egy feladatátvételi mechanizmussal rossz választás esetén, az úgynevezett optimista végrehajtást [9] . Túl bonyolultnak ítélték [10] .
2017-től kezdődően számos biztonsági rést találtak a gyakori processzorarchitektúrákon végrehajtott spekulatív végrehajtásokban, amelyek lehetővé tették a jogosultságok kiterjesztését .
Ezek tartalmazzák:
processzortechnológiák | Digitális|||||||||
---|---|---|---|---|---|---|---|---|---|
Építészet | |||||||||
Instruction Set Architecture | |||||||||
gépszó | |||||||||
Párhuzamosság |
| ||||||||
Megvalósítások | |||||||||
Alkatrészek | |||||||||
Energiagazdálkodás |