# Execució especulativa

L'execució especulativa és una tècnica d'optimització on un sistema informàtic realitza alguna tasca que potser no és necessària. El treball es fa abans de saber si és realment necessari, per tal d'evitar un retard en el qual s'hauria d'incórrer en fer el treball després de saber-se que és necessari. Si al cap i a la fi resulta que el treball no era necessari, la majoria dels canvis fets pel treball es reverteixen i els resultats s'ignoren.
L'objectiu és proporcionar més concurrència si hi ha recursos addicionals disponibles. Aquest enfocament s'utilitza en una varietat d'àrees, inclosa la predicció de branques en processadors canalitzats, predicció de valors per explotar la localitat del valor, captura prèvia de memòria i fitxers i control de concurrència optimista en sistemes de bases de dades.
El multithreading especulatiu és un cas especial d'execució especulativa.

## Visió general

Els microprocessadors moderns canalitzats utilitzen l'execució especulativa per reduir el cost de les instruccions de branca condicional mitjançant esquemes que prediuen la ruta d'execució d'un programa basant-se en l'historial d'execucions de branca. Per tal de millorar el rendiment i la utilització dels recursos informàtics, es poden programar instruccions en un moment en què encara no s'hagi determinat que s'hauran d'executar les instruccions, abans d'una branca.

## Variants

La computació especulativa era un concepte anterior relacionat.

### Execució amb ganes

L'execució ansiosa és una forma d'execució especulativa on s'executen ambdós costats de la branca condicional; tanmateix, els resultats només es comprometen si el predicat és cert. Amb recursos il·limitats, l'execució ansiosa (també coneguda com a execució d'oracle ) proporcionaria, en teoria, el mateix rendiment que la predicció de branca perfecta. Amb recursos limitats, s'ha d'utilitzar amb cura l'execució amb ganes, ja que el nombre de recursos necessaris creix exponencialment amb cada nivell de branca executat amb entusiasme.

### Execució predictiva

L'execució predictiva és una forma d'execució especulativa on es prediu algun resultat i l'execució continua al llarg del camí previst fins que es coneix el resultat real. Si la predicció és certa, es permet l'execució prevista; tanmateix, si hi ha una predicció errònia, l'execució s'ha de desenrotllar i tornar a executar. Les formes habituals d'això inclouen predictors de branques i prediccions de dependència de memòria. Una forma generalitzada de vegades es coneix com a predicció de valors.

### Runahead

Runahead és una tècnica que permet a un processador de l'ordinador preprocessar les instruccions de manera especulativa durant els cicles de pèrdua de memòria cau. Les instruccions preprocessades s'utilitzen per generar instruccions i recuperacions prèvies del flux de dades executant instruccions que condueixen a errors de memòria cau (normalment anomenades càrregues de latència llarga) abans que es produeixin normalment, amagant efectivament la latència de memòria. En runahead, el processador utilitza els recursos d'execució inactiu per calcular les adreces d'instruccions i flux de dades utilitzant la informació disponible que és independent d'un error de memòria cau. Un cop el processador ha resolt l'error de memòria cau inicial, es descarten tots els resultats d'execució anticipada i el processador reprèn l'execució amb normalitat. El cas d'ús principal de la tècnica és mitigar els efectes del mur de memòria. La tècnica també es pot utilitzar per a altres propòsits, com ara els resultats de la branca prèvia al càlcul per aconseguir una predicció de branca altament precisa.

## Referències

* ↑ Bernd Krieg-Brückner. ESOP '92: 4th European Symposium on Programming, Rennes, France, February 26-28, 1992: proceedings (en anglès). Springer, 1992, p. 56–57. ISBN 978-3-540-55253-6.
* ↑ Randy B. Osborne. «Speculative Computation in Multilisp». A: Parallel Lisp: Languages and Systems (en anglès). 441. Digital Equipment Corporation Research Lab, 1990-03-21, p. 103–137 (Lecture Notes in Computer Science). DOI 10.1007/BFb0024152. ISBN 3-540-52782-6.
* ↑ Jurij Šilc. Processor architecture: from dataflow to superscalar and beyond (en anglès). Springer, 1999, p. 148–150. ISBN 978-3-540-64798-0.
* ↑ Mark D., Hill. Readings in Computer Architecture (en anglès). Morgan Kaufman, 2000. ISBN 9781558605398.