Jaki rodzaj przewidywania gałęzi jest ważniejszy?

11

Zauważyłem, że w przewidywaniu gałęzi istnieją dwa różne typy stanów.

  1. W wykonywaniu superskalarnym, gdzie przewidywanie rozgałęzienia jest bardzo ważne i dotyczy głównie opóźnienia wykonania, a nie opóźnienia pobierania.

  2. 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?

Kaveh
źródło
1
Może oba są ważne, w zależności od okoliczności?
Raphael

Odpowiedzi:

6

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)cpcr2c2c+pcrCpcrpz 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)tt+ptrp

Raphael
źródło
O ile mi wiadomo, Intel próbował „przeczytać instrukcje dla obu stron gałęzi”, a nawet „wykonać instrukcje dla obu stron gałęzi” i przestał to robić. Albo dlatego, że nic nie zyskało, albo dlatego, że koszt i złożoność były tak wysokie, że mogli uzyskać więcej korzyści na różne sposoby za ten sam koszt.
gnasher729,
@ gnasher729 A było to prawdopodobnie zanim dowiedzieliśmy się o błędach bezpieczeństwa związanych z takimi funkcjami?
Raphael
2

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.)

Paul A. Clayton
źródło
To naprawdę fajna odpowiedź! Dziękuję Ci. :-)