Zauważyłem, że w przewidywaniu gałęzi istnieją dwa różne typy stanów.
W wykonywaniu superskalarnym, gdzie przewidywanie rozgałęzienia jest bardzo ważne i dotyczy głównie opóźnienia wykonania, a nie opóźnienia pobierania.
W potoku instrukcji, gdzie pobieranie jest większym problemem, ponieważ instrukcje faktycznie nie są wykonywane aż do później.
Który z nich jest bardzo ważny (ponieważ w którym z nich tak naprawdę liczy się teraz procesor?) Jeśli oba są równie ważne lub w przypadku, gdy drugi jest ważniejszy, to dlaczego nie mamy dwóch instrukcji (prawdopodobnie o połowie długości), a następnie w zależności od gałęzi, wystarczy wybrać jedną z nich, a następnie ponownie uruchomić populację od początek?
Odpowiedzi:
Nie wiem, który przypadek jest powszechny, ale chciałbym podzielić się przemyśleniami na temat twojej propozycji podwójnych potoków.
Przede wszystkim potrzebujesz podwójnego drutu, który zużyłby podwójnie energię i wytworzyłby podwójnie ciepło podczas aktywności. Z drugiej strony, choć nie jest potrzebny, byłby całkowicie bezużyteczny. Można więc argumentować, że nie jest to dobre wykorzystanie zasobów, które są rzadkie w nowoczesnych procesorach.
Mówiąc bardziej ogólnie, jeśli nie wolisz jednej gałęzi na podstawie prawdopodobieństwa, skąd wiesz, którą wersję napisać? Jeśli nie, nic nie możesz zapisać, ponieważ inne procesory i tak mogą czekać na twoją decyzję. Jeśli pozostaniesz przy jednym z nich, masz zasadniczo takie samo prawdopodobieństwo wycofania i koszt jak teraz.
Zróbmy zgrubne obliczenia. Dla uproszczenia załóżmy, że obsługa dwóch potoków zamiast jednego nie powoduje dodatkowych kosztów zarządzania. Oczekiwany koszt (np. Energia, ciepło) wynosi przy jednym potoku ( koszt wykonania jednej z alternatyw, prawdopodobieństwo wycofania i koszt wycofania bez kosztu wykonania drugiego alternatywnie), ale albo a nawet - albo jest dużo większy niż jeśli i są stosunkowo małe, aC=c+p(cr+c) c p cr 2c 2c+pcr C p cr p z pewnością jest (o ile mi wiadomo, współczesne prognozy branżowe mają dokładność ponad 90%). I nie dostajemy dużo za te koszty! Oczekiwane czasy wykonania to z jednym i odpowiednio. z dwoma; ponieważ jest małe, oszczędności czasu są znikome.t+p(tr+t) t t+ptr p
źródło
W pewnym sensie efekt przewidywania gałęzi jest bardziej krytyczny w pobieraniu instrukcji, ponieważ instrukcja, która nie jest pobierana, nie może zostać wykonana.
Jeśli chodzi o wykonywanie obu ścieżek gałęzi, nazywa się to chętnym wykonywaniem i zostało nieco gruntownie zbadane. Warto zajrzeć do Augusta K. Uht i Vijaya Sindagiego „Disjoint Eager Execution: A Optimal Form of Spekulative Execution” (1995).
Szybka realizacja ma kilka problemów. W przypadku głębokich spekulacji liczba ścieżek, które należy śledzić, może rosnąć wykładniczo (każda rozwidlona ścieżka gałęzi może napotkać gałąź). Prognozowanie rozgałęzień jest często bardzo dokładne (> 90% poprawne), więc zawsze wykonanie obu ścieżek byłoby marnotrawstwem. Szybka realizacja może również „zanieczyścić” pamięci podręczne bezużyteczną zawartością. (W wyżej wspomnianym artykule zaproponowano inteligentnie ograniczone chętne wykonanie w celu uniknięcia niektórych z tych problemów.) Ograniczone chętne pobieranie alternatywnej ścieżki ma mniej problemów i może być nieco atrakcyjne w zmniejszaniu opóźnienia odzyskiwania błędnych prognoz w krótszych rurociągach.
Innym podejściem, które zostało zaproponowane, jest dynamiczne przewidywanie gałęzi „hamaku” (krótkie gałęzie do przodu, które łączą się z powrotem z główną ścieżką przepływu instrukcji). Artur Klauser i wsp. „Dynamiczne przewidywanie hamaka dla nie predykowanych architektur zestawu instrukcji” (1998) może być warte przeczytania dla tego pomysłu. („Wish Branchches: Łączenie rozgałęzienia warunkowego i predykcji w celu adaptacyjnego predykcyjnego wykonania” Hyesoon Kim i in. Proponuje dodanie gałęzi ISA, które ułatwiają przewidywanie hamaków i rozszerza tę metodę predykcji na trudne do przewidzenia gałęzie pętli.)
źródło