Pozwól, że zdefiniuję:
-
Gniazdo opóźnienia gałęzi: Zazwyczaj asemblery zmieniają kolejność instrukcji, aby przenieść niektóre instrukcje natychmiast po instrukcji rozgałęzienia, tak że przeniesiona instrukcja będzie zawsze wykonywana, niezależnie od tego, czy jest to gałąź jest pobierana lub nie, bez pozostawienia systemu w niespójnym stanie.
-
Wstępne pobieranie prognozy gałęzi: przewidywanie, jaki będzie wynik warunku rozgałęzienia, a następnie wstępne pobieranie instrukcji z wynikowej lokalizacji, tak aby były one wykonywane natychmiast po instrukcji rozgałęzienia.
Teraz , rozważmy poniższą sekwencję wykonywania (poniżej, F
: instrukcja pobierania, D
: instrukcja dekodowania, X
: eXecute, M
: Dostęp do pamięci, W
: Zapis):
BRANCH F D X M W INSTR1 F D X M W INSTR2 F D X M W INSTR3 F D X M W
Zwykle warunek rozgałęzienia jest oceniany i wykonywany na etapie X. Na tym etapie INSTR1
i INSTR2
są już uruchomione i są to instrukcje, na które może mieć wpływ nasz wybór, czy używać opóźnienia gałęzi sloty lub predykcja rozgałęzień, wstępne pobieranie lub jedno i drugie. Nie znalazłem żadnego tekstu, aby omówić to jasno. Więc zgadłem to jak poniżej:
Gdy używamy obu, kolejność instrukcji wyglądałaby tak:
BRANCH: branch-instruction INSTR1: branch-delay-slot INSTR2: branch-prediction-prefetch
Gdy używamy tylko przewidywania rozgałęzień, sekwencja instrukcji byłaby następująca:
BRANCH: branch-instruction INSTR1: branch-prediction-prefetch-1 INSTR2: branch-prediction-prefetch-2
Gdy używamy tylko przedziałów opóźnienia rozgałęzienia, sekwencja instrukcji będzie wyglądać następująco:
BRANCH: branch-instruction INSTR1: branch-delay-slot-1 INSTR2: branch-delay-slot-2
Czy mam rację? Czy tak właśnie się dzieje w różnych przypadkach? Czy jest więcej szczegółów?
Komentarze
- Nie ' nie rozumiem " Kiedy używamy tylko rozgałęzienia " sekwencji: w jaki sposób może mieć szczeliny brach-delay? Również pokazanie fragmentu asemblera, który wydaje się mieć w nagłówku, byłoby jasne.
- (1) " Nie ' w celu omówienia sekwencji " Kiedy używamy tylko rozgałęzienia " sekwencji: w jaki sposób może mieć przedziały opóźnienia? " – poprawiłem zdanie, przypadkowo zostawiłem je niekompletne. Mam nadzieję, że teraz ma to sens. (2) Nie rozumiem: " Również pokazanie fragmentu asemblera, który wydaje się mieć w nagłówku, byłoby wyjaśnieniem. " Zrób masz na myśli powiedzieć, powinienem określić asemblera, z którym pracuję? Jeśli tak: czytam rozdział o tworzeniu potoków z książki " Organizacja i projektowanie komputerów " autorstwa Pattersona. A więc zajmowanie się czystą teorią i rozwiązywanie problemów z ćwiczeniami.
Odpowiedź
Tak, to mogłoby się stać, chociaż nie przypominam sobie żadnej architektury, która łączyłaby szczeliny przewidywania i opóźnień: jeśli masz predykcję, może ona działać (wyszukiwać w małej pamięci) równolegle z krokiem wykonywania, więc nie będą potrzebne żadne przedziały opóźniające.
Komentarze
- dziękuję za potwierdzenie, bo takie scenariusze są omówione w zadaniach ćwiczeniowych książki Pattersona o architekturze komputerowej. Podaje bezpośrednie rozwiązania bez wyjaśnienia. Ani rozdział treści omawiają to.