Pok-1-wyk-Slajd20

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Optymalizacja kodu – zmienne indukowane i redukcja siły

Optymalizacja kodu – zmienne indukowane i redukcja siły


Najbardziej zauważalne efekty daje optymalizacja pętli w programie. Nawet pojedynczy takt procesora zaoszczędzony w implementacji ciała pętli zwielokrotni się w wyniku kolejnych iteracji.

Przykładem optymalizacji pętli wykonywanej na poziomie kodu pośredniego jest wykorzystanie zmiennych indukowanych i redukcja siły operatora.

Zmienne indukowane to takie zmienne, których wartości pozostają w stałej relacji w ciele pętli. Redukcja mocy operatora polega na zastąpienie operacji droższej (w sensie efektywności) – tańszą, np. z reguły obliczanie sumy jest szybsze niż mnożenie, mnożenie niż potęgowanie, a przesuwanie niż mnożenie

Przedstawiony kod trójadresowy jest przekładem programu w języku Pascal wypełniającego tablicę przez wpisywanie do kolejnych elementów ich indeksów. Jeżeli założymy, że elementy tablicy mają po np. 2 komórki, to na poziomie kodu pośredniego przy każdym odwołaniu do tablicy obliczamy wartość zmiennej tymczasowej (np. t2) równej w każdym obiegu pętli 2*i – zmienne i i t2 będą wówczas w stałej relacji.

Wychwycenie zależności wartości zmiennej t2 od i daje nam możliwość usprawnienia ciała pętli. Zamiast w każdym obiegu obliczać wartość zmiennej t2 z wykorzystaniem mnożenia możemy zastosować (tańsze) odejmowanie. W wyniku reorganizacji kolejności obliczeń musimy zadbać o poprawną inicjalizację zmiennej t2 przed wejściem do pętli – zamiast użyć mnożenia korzystamy oczywiście z okazji do redukcji siły operatora i zamiast „t2:=2*i” generujemy „t2:=i+i”.


<< Poprzedni slajd | Spis treści | Następny slajd >>