Wykonywanie poza kolejnością

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

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 

Zobacz też[edytuj | edytuj kod]