Wykonywanie poza kolejnością

Wykonywanie poza kolejnością (ang. out-of-order execution) – w mikroprocesorach superskalarnych zdolność do zmiany wykonywania kolejności instrukcji, tak, aby jak najefektywniej wykorzystać dostępne jednostki wykonawcze (moc obliczeniową procesora) – by równolegle wykonywać jak najwięcej instrukcji maszynowych, minimalizując tym samym czas wykonywania programów. Współczesne mikroprocesory posiadają 2 lub więcej jednostek wykonawczych, np. w Pentium II jest ich pięć, a w Pentium 4 już ponad 10.

Ta cecha powoduje jednak, że mikroprocesor musi pamiętać rzeczywistą kolejność instrukcji (zwykle posiada wiele kopii rejestrów niewidocznych dla programisty) i uaktualniać stan w rzeczywistym porządku, a także anulować (wycofywać) zmiany w przypadku, gdy wystąpił jakiś błąd podczas wykonywania wcześniejszej instrukcji.

Ilustracja dla hipotetycznego mikroprocesora z dwiema jednostkami wykonawczymi:

1) a = b + 5
2) c = a + 10
3) d = e + 5
4) f = d + 10

Instrukcja nr 2 nie może wykonać się przed pierwszą, bowiem jej argument zależy od wyniku instrukcji 1., podobnie instrukcja 4. zależy od 3. Bez zmiany kolejności procesor wykonałby szeregowo 4 instrukcje w założonym porządku, wykorzystując jednak tylko jedną jednostkę wykonawczą:

czas . . . . . .
     1
       2
         3
           4

Jednak można wykonać równolegle, niezależne od siebie, instrukcje 1. i 3., następnie również równolegle instrukcje 2. i 4. – w ten sposób wykorzystane zostaną obie jednostki wykonawcze, toteż czas wykonywania instrukcji będzie 2 razy krótszy:

czas . . . .
     1
     3
       2
       4 

Zobacz też