Optymalizacja kodu
Definicje
- Łańcuch zależności jest to ciąg instrukcji,
w którym wykonanie następnej instrukcji zależy od wyniku poprzedniej.
- Latency (opóźnienie) - dla instrukcji jest to opóźnienie jakie powoduje
w łańcuchu zależnośći.
Jest to w przybliżeniu liczba cykli zegara jakie potrzebuje CPU aby daną instrukcję wykonać.
(Bardziej dokładnie ile musi czekać następna instrukcja która jest od niej zależna).
- Troughput (przepustowość) - jest to maksymalna liczba instrukcji tego samego rodzaju,
która może być wykonana w jednym cyklu zegara (jeżeli nie ma między nimi zależności).
- Reciprocal throughput to odwrotność przepustowości. Jest to średnia liczba
cykli zegara na instrukcje, które nie są częścią łańcucha zależnośći.
Materiały
Więcej informacji można znaleźć w
Wąskie gardła
Wiele rzeczy może spowalniać pętle. Najprawdopodobniejsze wąskie gardła to
- Złe cache'owanie (częste nietrafienia w bufor)
- Propagowane przez pętle łańcuchy zależności
- Pobieranie instrukcji
- Decodowanie instrukcji
- Przepustowość portów
- Przepustowość jednostek wykonywania kodu
- Nieoptymalne kolejność wykonywania mikrooperacji
- Pomyłki w przewidywaniu rozgałęzień
- Wyjątki w obliczeniach zmiennoprzecinkowych i operacje na liczbach zdenormalizowanych
Należy znaleść wąskie gardło, które najbardziej ogranicza wydajność.
Przeważnie poprawianie innych rzeczy nie daje żadnej poprawy.
Tomasz Kapela, Kraków 2011-2020