Execuția speculativă este o tehnică de optimizare în care un sistem informatic îndeplinește o sarcină care poate să nu fie necesară. Lucrările sunt finalizate înainte de a se ști că este efectiv necesară, pentru a preveni întârzierile care pot apărea în finalizarea lucrărilor după ce se știe că este nevoie. Dacă se dovedește că munca nu este necesară până la urmă, majoritatea modificărilor aduse lucrării sunt eliminate și rezultatele sunt ignorate.
Scopul este de a oferi mai multă concurență dacă sunt disponibile mai multe resurse . Această abordare este utilizată într-o varietate de domenii, inclusiv predicția de ramificație în procesoarele pipeline , predicția valorii pentru a exploata localitatea valorii, preîncărcarea memoriei și a fișierelor și controlul optimist al concurenței în sistemele de baze de date [1] [2] [3] .
Multithreading-ul speculativ este un caz special de execuție speculativă.
Microprocesoarele moderne cu pipeline folosesc execuția speculativă pentru a reduce costul instrucțiunilor de ramificație condiționată folosind circuite care prezic calea de execuție a programului pe baza istoricului execuției ramurilor [2] . Pentru a îmbunătăți performanța și utilizarea resurselor computerului, instrucțiunile pot fi programate într-un moment în care nu este încă stabilit că instrucțiunile trebuie executate înainte de ramificare [4] [5] .
Calculul speculativ a fost legat de un concept anterior [6] .
Execuția dornică este o formă de execuție speculativă în care sunt executate ambele părți ale ramurii condiționate; cu toate acestea, rezultatele sunt capturate numai dacă predicatul este adevărat. Cu resurse nelimitate, execuția activă (cunoscută și sub numele de execuție oracol ) ar oferi, teoretic, aceeași performanță ca predicția perfectă a ramurilor . Cu resurse limitate, execuția activă ar trebui utilizată cu prudență, deoarece cantitatea de resurse necesară crește exponențial cu fiecare nivel al ramului executat cu ardoare [7] .
Execuția predictivă este o formă de execuție speculativă în care un rezultat este prezis și execuția continuă pe calea prezisă până când rezultatul real este cunoscut. Dacă predicția este corectă, execuția prezisă este permisă să fie comisă; totuși, dacă există o predicție greșită, execuția trebuie să fie inversată și reîncercată. Formele comune ale acestui lucru includ predictorul de ramuri și predicția dependenței de memorie . Forma generalizată este uneori numită prognoză de cost [8] .
Execuția leneșă este opusul execuției dornice și nu implică speculații. Includerea execuției speculative în implementările limbajului de programare Haskell , un limbaj leneș, este un subiect de cercetare actual. Eager Haskell , o variantă a limbajului, se bazează pe ideea execuției speculative. Într-o teză de doctorat din 2003, GHC a susținut un fel de execuție speculativă cu un mecanism de failover în cazul unei alegeri proaste, numită execuție optimistă [9] . A fost considerat prea complicat [10] .
Începând cu 2017, au fost găsite o serie de vulnerabilități de securitate în implementările de execuție speculativă pe arhitecturi comune ale procesoarelor, permițând escaladarea privilegiilor .
Acestea includ:
Tehnologii de procesoare digitale | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arhitectură | |||||||||
Arhitectura set de instrucțiuni | |||||||||
cuvânt mașină |
| ||||||||
Paralelism |
| ||||||||
Implementări | |||||||||
Componente | |||||||||
Gestionare a energiei |