Execuție speculativă

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ă.

Prezentare generală

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] .

Opțiuni

Calculul speculativ a fost legat de un concept anterior [6] .

Performanță nerăbdătoare

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] .

Performanța proiectată

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] .

Concepte înrudite

Execuție leneșă

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] .

Vulnerabilitati de securitate

Î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:

Vezi și

Note

  1. ↑ Execuție leneșă și speculativă Arhivată 4 martie 2016 la Wayback Machine Butler Lampson Microsoft Research OPODIS , Bordeaux , Franța 12 decembrie 2006
  2. 1 2 International Business Machine Corporation. Departamentul de cercetare, Prabhakar Raghavan, Hadas Shahnai, Mira Yaniv. Scheme dinamice pentru execuția codului speculativ . — IBM, 1998. Arhivat la 27 noiembrie 2020 la Wayback Machine
  3. H. T. Kung, John T. Robinson (iunie 1981). „Despre metodele optimiste de control al concurenței” (PDF) . Tranzacții ACM în sistemele de baze de date . 6 . Arhivat (PDF) din original pe 2019-08-31 . Preluat 2021-08-17 . Parametru depreciat utilizat |deadlink=( ajutor );Verificați data la |date=( ajutor în engleză )
  4. Bernd Krieg-Brückner. ESOP '92: 4th European Programming Symposium, Rennes, Franta, 26-28 februarie 1992: Papers . - Springer, 1992. - P. 56–57. - ISBN 978-3-540-55253-6 . Arhivat pe 12 iunie 2014 la Wayback Machine
  5. ( ESOP este o abreviere pentru combinația în limba engleză European Symposium On P roprogramming , Russian European Symposium on Programming )
  6. Randy B. Osborne. Calcul speculativ în Multilisp // Parallel Lisp: Limbi și sisteme ( PS ). Note de curs în informatică 441 . - Laboratorul de Cercetare Digital Equipment Corporation , 1990-03-21. - P. 103-137. — ISBN 3-540-52782-6 . - doi : 10.1007/BFb0024152 .
  7. Yuri Shilts, Borut Robich, Theo Ungerer. Arhitectura procesorului: de la fluxul de date la superscalar și nu numai . - Springer, 1999. - P.  148-150 . — ISBN 978-3-540-64798-0 .
  8. Mark D. Hill, Norman P. Juppy , Gurindar S. Sohi. Lecturi în arhitectura calculatoarelor . - Morgan Kaufman, 2000. - ISBN 9781558605398 . Arhivat pe 22 noiembrie 2020 la Wayback Machine
  9. Simon Peyton Jones, Robert Ennals (1 august 2003). „Estimarea optimistă: o strategie de estimare rapidă pentru programele nerigoare” . Arhivat din original pe 22.11.2020 . Preluat la 15 mai 2019 – prin www.microsoft.com. Parametru depreciat utilizat |deadlink=( ajutor );Verificați data la |access-date=, |date=( ajutor în engleză )
  10. [https://web.archive.org/web/20201122170921/https://mail.haskell.org/pipermail/haskell/2006-August/018424.html Arhivat 22 noiembrie 2020 la Wayback Machine [Haskell] Optimistic Evaluare?]