Wykonywanie poza kolejnością
Z Wikipedii
Wykonywanie poza kolejnością (ang. out-of-order execution) - w mikroprocesorach superskalarnych zdolność do zmiany wykonywania kolejności instrukcji, tak aby jak najpełniej wykorzystać dostępne jednostki wykonawcze (moc obliczeniową procesora) - a więc by równolegle wykonywać jak najwięcej instrukcji, minimalizując tym samym czas wykonywania programów. Współczesne mikroprocesory posiadają 2 lub więcej jednostek wykonawczych, np. w Pentium II jest pięć, Pentium IV ponad 10.
Ta cecha powoduje jednak, że mikroprocesor musi pamiętać rzeczywistą kolejność (zwykle posiada wiele kopii rejestrów, niewidocznych dla programisty) i uaktualniać stan w oryginalnym porządku, ale 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, także czas wykonywania będzie 2 razy mniejszy:
czas . . . . 1 3 2 4