Optymalizacja skoków i wywołań funkcji
Słabo przewidywalne rozgałęzienia
- Rozgałęzienia są słabo przewidywalne jeżeli każda z gałęzi jest wybierana średnio z częstotliwością 50%
i nie ma prostej reguły wyboru ani skorelowania z poprzednimi rozgałęzieniami.
- Należy unikać dużej liczby rozgałęzień wewnątrz pętli.
Czasami korzystniej jest podzielić jedną dużą pętlę na kilka mniejszych.
- Skoki pośrednie i pośrednie wywołania funkcji (gdzie adres skoku jest efektem pewnych obliczeń)
są często słabo przewidywalne. Starsze procesory przewidują ze adres będzie ten sam co ostatnio,
nowsze potrafią wykrywać proste wzorce.
- Powroty są przewidywane przez bufor przechowujący adresy powrotu dla ostatnio wywołanych funkcji.
Jeżeli ma on miejsce na 16 adresów to może poprawnie przewidywać powroty do 16 poziomu zagnieżdżenia.
Jeżeli się przepełni to opóźnienia będą tylko dla najbardziej zewnętrznych funkcji (więc sporadyczne).
Bufor ten zawiedzie jeżeli wywołania CALL i RET nie są sparowane.
Tomasz Kapela, Kraków 2011-2020