4. Procesor – informacje ogólne

4.8. Układ przewidywania skoków

W trakcie przetwarzania instrukcji programu mogą następować skoki bezwarunkowe lub warunkowe. Skoki bezwarunkowe nie są problemem, ponieważ adres skoku jest znany. Natomiast czy skok warunkowy zajdzie jest wiadomo po obliczeniu warunku skoku. Warunek ten jest obliczany dopiero na etapie wykonania rozkazu w potoku. Zatem instrukcje, które są umieszczone w kodzie programu po instrukcji skoku muszą być wykonywane spekulacyjnie. Procesor zgaduje, czy skok zajdzie, czy też nie. Ponieważ potoki mogą być długie, a wykonywanie instrukcji zachodzi też równolegle w różnych rdzeniach procesora, złe przewidzenie skoku skutkuje koniecznością opróżnienia potoku, skasowania wielu instrukcji, które były po prostu niepotrzebnie wykonane. Powoduje to znaczne opóźnienia w wykonywaniu instrukcji przez procesor. Przewidywaniem czy skok zajdzie czy nie zajmuje się układ przewidywania skoków. Każdy procesor klasy PC ma taki układ.

Przewidywanie skoków może być zrealizowane na wiele sposobów. Najprostszym jest przewidywanie statyczne. Już proste założenie, że skok zawsze zachodzi daje ok. 60% skuteczność przewidywania. Jeśli założymy, że skok w tył zachodzi, a w przód nie skuteczność wzrośnie do 65%. Jest to jednak bardzo słaba skuteczność przewidywania. Jej drastyczną poprawą można uzyskać stosując dynamiczne przewidywanie skoków. W tym celu konstruuje się tablice, w których przechowywana jest historia skoków. Historia może być zapisana w 1 bicie (czyli skok zaszedł lub nie przy ostatnim odwołaniu), albo na 2 bitach, gdzie można zapisać już pewną historię skoków. Takie informacje są zapisane w tablicy historii skoków (zwykle 128-1024 wpisy). W tablicy takiej często przechowywane są także inne potrzebne informacje, jak np. bity statusu v, adres instrukcji wywołującej skok, adres skoku itp. Skuteczność współcześnie stosowanych układów przewidywania skoków przekracza 98%.