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ż
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ 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].