Wykonywanie spekulatywne

Wykonywanie spekulatywne (ang. speculative execution) – zdolność mikroprocesorów, przetwarzających potokowo instrukcje maszynowe programu, do wykonywania instrukcji znajdujących się już po skoku warunkowym, co do którego jeszcze nie wiadomo, czy nastąpi, a więc czy (formalnie) kolejne instrukcje zostaną kiedykolwiek wykonane. Ten mechanizm jest zwykle stosowany wraz z mechanizmem prognozowania skoków/odgałęzień (ang. branch prediction), który bazuje na historii realizacji skoków w programie, do optymalizacji wydajności i wykorzystania zasobów systemu. Ostatecznie wyniki uzyskane z wyprzedzeniem zostaną albo uwzględnione, albo odrzucone – w zależności od tego czy skok zostanie wykonany zgodnie z wynikiem mechanizmu predykcji skoków, czy też nie[1].

Przykład w pseudokodzie, gdzie użycie określenia adres xxx: pozwala na uproszczenie opisu adresacji instrukcji programu znajdujących się w pamięci operacyjnej, a ... to ciąg dowolnych instrukcji tego programu:

    a := 0
adres 100:
    a := a + 1
    c := c - 1
    ...
    jeśli a < 10 wtedy skok_do_adresu_100
    jeśli c = 20 wtedy skok_do_adresu_200
adres 120:
    b := 0
    ...
adres 200:
    c := 0

W powyższym przykładzie, gdy mechanizm predykcji skoków określi, że jest duże prawdopodobieństwo wykonania skoku do adresu 200, to do potoku wykonawczego procesora zostaną wstawione instrukcje od adresu 200, a nie od adresu 120. Jeśli jednak w rzeczywistej realizacji programu okaże się, że skok do adresu 200 nie nastąpi (wartość c jest różna od 20), to potok zostaje wyczyszczony, a tym samym wyniki tego fragmentu kodu anulowane, i ładowane są do niego instrukcje od adresu 120.

Tego typu przetwarzanie jest stosowane w nowoczesnych mikroprocesorach, które mają zdolność wykonywania instrukcji poza kolejnością, do optymalnego wykorzystywania jednostek wykonawczych i uzyskiwania dzięki temu maksymalnej wydajności.

Zobacz też

Przypisy

  1. International Business Machines Corporation. Research Division, Prabhakar Raghavan, Hadas Schachnai, Mira Yaniv: Dynamic schemes for speculative execution of code. IBM, 1998. [dostęp 2017-10-18].