Executie speculativa

În informatică , execuția speculativă corespunde lansării anticipate a unei instrucțiuni , adică fără a fi sigur că trebuie într-adevăr executată.

Tipuri

În general, putem distinge trei tipuri de instrucțiuni și declarații într-un program:

Primul grup nu poate beneficia de execuția speculativă, deoarece membrii săi trebuie să fie executați în toate cazurile.

Al doilea grup poate fi respins cu ușurință, la fel ca și evaluarea leneșă .

Al treilea grup, la rândul său, este într-adevăr ținta execuției speculative, membrii săi pot fi de fapt executați în concurență cu instrucțiunile primului grup până când putem judeca dacă sunt utile sau dacă trebuie să le punem în al doilea grup. Această competiție înseamnă că execuția speculativă poate fi paralelizată .

Utilitate

Execuția speculativă este o optimizare a performanței care este utilă numai atunci când execuția prematură a unei instrucțiuni ocupă mai puțin timp și spațiu decât execuția normală a acesteia, suficient pentru a compensa posibilitatea ca acea instrucțiune să dea un rezultat care nu.

De microprocesoare moderne , folosind o conducta pentru a servi executarea speculativă pentru a reduce costul de instruire ramificare condiționată. Când se întâlnește o instrucțiune de ramură condiționată, procesorul ghicește ce cale a ramurii programul este probabil să urmeze (aceasta se numește predicție de ramură ) și începe să execute instrucțiunile corespunzătoare. Dacă presupunerea se dovedește a fi incorectă, toate calculele care au avut loc după ramificare sunt eliminate. Execuția prematură este relativ ieftină, deoarece, fără ea, etapele conductei implicate în calcul ar fi rămas inactive până când se cunoaște rezultatul ramificării. Cu toate acestea, instrucțiunile irosite folosesc cicluri de ceas, iar pe un laptop, de exemplu, aceste cicluri consumă energie. Prin urmare, există întotdeauna o penalizare pentru fiecare ramură prevăzută incorect. Din ce în ce mai multe procesoare (cum ar fi Intel Pentium II și succesorii săi) au instrucțiuni de mutare condiționate. Acest tip de instrucțiuni face posibilă mutarea datelor, de exemplu, între un registru și memorie, numai dacă este îndeplinită o condiție. Prin urmare, nu mai există ramificație, iar penalizarea cauzată de o predicție proastă este mai mică.

Execuție imediată

Deși rareori menționată ca atare, execuția imediată este, de asemenea, o formă speculativă de execuție (deși situația este complicată de prezența efectelor secundare . Executarea este adesea mai puțin costisitoare din cauza valorilor necesare. Pentru calcul se găsesc cel mai adesea pe stiva și nu trebuie să fie stocate și apoi extrase din heap .

Securitate

Execuția speculativă poate avea consecințe de securitate, cum ar fi vulnerabilitatea Spectre .