PL181901B1 - Sposób i urzadzenie do obslugi instrukcji spekulatywnychPierwszenstwo: PL PL PL - Google Patents

Sposób i urzadzenie do obslugi instrukcji spekulatywnychPierwszenstwo: PL PL PL

Info

Publication number
PL181901B1
PL181901B1 PL96321542A PL32154296A PL181901B1 PL 181901 B1 PL181901 B1 PL 181901B1 PL 96321542 A PL96321542 A PL 96321542A PL 32154296 A PL32154296 A PL 32154296A PL 181901 B1 PL181901 B1 PL 181901B1
Authority
PL
Poland
Prior art keywords
exception
speculative
instruction
bit
register
Prior art date
Application number
PL96321542A
Other languages
English (en)
Other versions
PL321542A1 (en
Inventor
Kemal Ebcioglu
Gabriel M Silberman
Original Assignee
Ibm
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ibm filed Critical Ibm
Publication of PL321542A1 publication Critical patent/PL321542A1/xx
Publication of PL181901B1 publication Critical patent/PL181901B1/pl

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

Abstract

1. Sposób obslugi instrukcji spekulatywnych, w któ- rym wykonuje sie spekulatywnie jedna albo wiecej m- strukcji, przez ustawienie bitu spekulatywnego, wyznacza sie kazdy wyjatek zwiazany z instrukcjami wykonanymi spekulatywnie, przez okreslenie, czy instrukcje wykony- wane spekulatywnie sa w obranej sciezce, oraz rozwiazuje sie przyczyne kazdego wyjatku spekulatywnego zwiaza- nego z instrukcja wykonana spekulatywnie, która jest nastepnie wykonywana jako nie spekulatywna przez wy- zerowanie bitu spekulatywnego, znamienny tym, ze w trakcie wyznaczania kazdego wyjatku zwiazanego z instrukcjami wykonywanymi spekulatywnie, wyznacza sie oryginalne wyjatki spekulatywne, w trakcie którego ustawia sie bit wyjatku w pliku bitu wyjatku zwiazanym z pierwszym rejestrem docelowym w pliku rejestrowym w odpowiedzi na warunek wyjatku oryginalnego, ustawia sie pierwszy rejestr docelowy, wskazujacy na adres in- strukcji wykonywanej spekulatywnie, zwiazanej z warun- kiem wyjatku oryginalnego, oraz zapamietuje sie w reje- strze dodatkowym w dodatkowym pliku rejestrowym co najmniej jeden argument operacji, jezeli wystepuje, in- strukcji wykonywanej spekulatywnie 1 zapamietuje sie bit wyjatku w dodatkowym pliku bitu wyjatku. PL PL PL

Description

Przedmiotem wynalazku jest sposób i urządzenie do obsługi instrukcji spekulatywnych, zwłaszcza do równoległego przetwarzania programów komputerowych.
Znanym sposobem poprawiania wydajności przetwarzania programów komputerowych jest zmniejszenie czasu cyklu przetwarzania. Przeszkodą w zmniejszaniu czasu cyklu jest instrukcja rozgałęzienia. Instrukcja rozgałęzienia wymaga zwykle oczekiwania na wynik pewnej instrukcji, przed określeniem, którą ścieżkę należy wybrać, to jest ścieżkę obraną (docelową) albo ścieżkę nie obraną (sekwencyjną). Obrana ścieżka składa się z sekwencji instrukcji, które mogą obejmować rozgałęzienia, z których niektóre są rozgałęzieniami wybranymi, a inne nie. Niektóre rozwiązania architektury komputera obsługujące równoległość przez potokowanie i/lub zastosowanie większej liczby jednostek funkcyjnych umożliwiają warunkowe wykonywanie instrukcji, aby zwiększyć ilość dostępnych ścieżek przetwarzania równoległego w programie. Instrukcje spekulatywne pojawiają się po warunkowych instrukcjach rozgałęzienia, dla których nie wyznaczono jeszcze warunków, tak więc mogą, być albo mogą nie być w rzeczywistej ścieżce obranej przy dalszym wykonywaniu programu. Procesor określa, którą ścieżkę ma obrać rozgałęzienie. Jeżeli określenie było poprawne, nie ma opóźnień i wykonywanie przetwarzania trwa dalej z pełną szybkością, Jeżeli określenie jest niepoprawne, procesor rozpoczyna wykonywanie przetwarzania według ścieżki, którą należało obrać i opóźnienie w wykonywaniu nie jest większe niż wtedy, gdyby nie przeprowadzono analizy. Ponieważ ich wykonywanie może nie być wymagane przez program, wyniki instrukcji spekulatywnych nie powinny być wiążące, dopóki nie ustali się, czy znajdują się w obranej ścieżce. Instrukcje nie będące instrukcjami spekulatywnymi są wykonywane w obranej ścieżce.
Tak jak w przypadku instrukcji nie będących instrukcjami spekulatywnymi, wyjątki takie jak błędy strony, nadmiar arytmetyczny i nielegalne adresowanie są również możliwe podczas wykonywania instrukcji spekulatywnej. Ale w tym przypadku pożądane jest pono4
181 901 szenie jak najmniejszych kosztów w obsługiwaniu każdego występującego wyjątku, ponieważ może się okazać, że instrukcja spekulatywna jest poza obraną ścieżką.
Z drugiej strony, jeżeli okaże się, że instrukcja spekulatywna powodująca wyjątek znajduje się w obranej ścieżce, pożądane jest właściwe zarządzanie wyjątkami i ponowne wykonywanie tylko tych instrukcji, które zależą od ich wyników. Co więcej, w przypadkach, gdy wyjątek jako taki jest „fatalny”, na przykład wykonanie programu zostaje przerwane, procesor i zawartość pamięci powinny być w precyzyjnie określonym stanie. Na przykład, przerwanie jest precyzyjne, jeżeli zapamiętany stan procesu odpowiada modelowi sekwencyjnemu wykonywania programu, gdzie, jedna instrukcja kończy się przed rozpoczęciem drugiej i dlatego procesor oraz pamięć muszą, być w identycznym stanie w porównaniu ze stanem osiągniętym przez szeregowe wykonywanie tego samego programu.
W ACM SIGPLAN NOTICES, tom 27, numer 9, z 1 września 1992, strony 238-247, w pracy pt. „Szeregowanie znacznikowe dla procesów VLIW i superskalamych” S.A. Mahlke i inni opisują zestaw cech architektury i obsługi szeregowania w czasie kompilacji określany jako szeregowanie znacznikowe. Szeregowanie znacznikowe stanowi efektywną podstawę dla wykonywania przetwarzania spekulatywnego sterowanego przez kompilator, które dokładnie wykrywa i zgłasza wszystkie wyjątki. Szeregowanie znacznikowe udostępnia również spekulatywne wykonywanie instrukcji zapisu do pamięci przez zastosowanie bufora pamięci, umożliwiającego testowe wprowadzanie. W szeregowaniu znacznikowym do pewnego stopnia możliwe jest również ponowne próbowanie wygenerowania wyjątku. Ze względu na nieodwracalne efekty uboczne ponowne wykonanie może być uniemożliwione, natomiast w innych przypadkach wszystkie instrukcje znajdujące się za szeregowaniem znacznikowym będą musiały być ponownie wykonywane.
Z kolei architektura zaproponowana przez M. D. Smitha, M. S. Lama i M. A. Horowitza, w pracy pt. „Programowanie szeregowania pozastatycznego w procesie superskalamym”, przedstawionej na 17-tym Międzynarodowym Sympozjum na temat architektury komputera, w Seattle, stan Waszyngton, w maju 1990, strony 344-354, obsługuje instrukcje spekulatywne, nazywane promowanymi, poprzez buforowanie efektów ubocznych przez zastosowanie kopii „cieni” pliku rejestru i bufora pamięci, przy czym jedna taka kopia „cień” jest wymagana dla każdego rozgałęzienia warunkowego, od którego mogą zależeć bieżące instrukcje spekulatywne. W tym momencie, struktury typu cieni są unieważniane i wszystkie instrukcje promowane są wykonywane ponownie, teraz jako instrukcje nie będące spekulatywnymi. Na końcu zostanie wykonana instrukcja powodująca wyjątek, w którym to momencie zostanie obsłużony wyjątek. Nie jest podany opis rzeczywistego sprzętu śledzącego instrukcje spekulatywne, które trzeba ponownie wykonać, ani też śledzącego występowanie wyjątku związanego z instrukcją promowaną. Co więcej, ponowne wykonywanie wszystkich instrukcji promowanych, bez względu na to, która spowodowała wyjątek, jest oczywiście nieefektywne. Na przykład należy rozważyć przypadek, gdy duża liczba instrukcji jest promowanych, a wyjątek występuje w ostatniej instrukcji promowanej. Ten znany mechanizm wykonałby ponownie je wszystkie, nawet gdyby wystarczało ponowne wykonanie tylko pojedynczej instrukcji.
W drugim rozwiązaniu proponuje się mechanizm programowy do obsługi ograniczonej liczby specjalnych przypadków instrukcji spekulatywnych, a mianowicie tylko spekulatywnych instrukcji ładowania adresów „globalnych” (wyznaczonych przez wykorzystywanie przez nie rejestru bazowego, który wskazuje na znaną tablicę „globalną”), adresów „podobnych” (ten sam rejestr bazowy i podobne przemieszczenie względem „bliskiego” ładowania nie będącego spekulatywnym) i adresy „wskaźnika zerowego” (których wartość może okazać się równa zeru, co powoduje adresowanie pierwszej strony w pamięci). Znane jest to z opracowania D. Bernstein, M. Rodeh i M. Sagiv, pt. „Zapewniania bezpieczeństwa instrukcji ładowanych spekulatywnie w czasie kompilacji”, opublikowanego w Lecture Notes in Computer Science, Vol. 582, B. Krieg-Brueckner (edytor), opracowanie z 4-tego Europejskiego Sympozjum na temat programowania, Rennes, Francja, luty 1992, Springer-Verlag. Mechanizm ten zaproponowany polega na tych specjalnych przypadkach w tworzeniu ładowań spekulatywnych przez analizę kodu obiektowego albo źródłowego, z pomocą ze strony programu
181 901 łączącego i systemu operacyjnego w celu unikania wyjątków w tych przypadkach, gdy instrukcje spekulatywne nie znajdują się w obranej ścieżce.
W znanej metodzie nie są rozwiązywane następujące problemy: możliwość że instrukcja spekulatywna w obranej ścieżce spowoduje wyjątek, niebezpieczne maskowanie wyjątku, które może wystąpić w programie sekwencyjnym, z powodu zmian wprowadzonych w programie łączącym, oraz możliwość wprowadzenia wyjątku, który nie wystąpiłby w programie oryginalnym. We wszystkich trzech przypadkach zachowanie programu przy instrukcjach spekulatywnych, z punktu widzenia programisty, jest różne od zachowania przy kodzie oryginalnym (sekwencyjnym).
Aby przedstawić te trzy przypadki, należy rozważyć następującą sekwencję instrukcji:
#1 LOAD R3, 0 (R5)
#2 LOAD R4, 8 (R5)
#3 COMPARE R4, 0
#4 BEO OUT
#5 COMPARE R3, 1000
#6 BEQ OUT
#7 LOAD R5, 16 (R4)
OUT:
Według metody Bernsteina i innych, instrukcję 7 można bezpiecznie przenieść ponad instrukcję 3 i uczynić ładowaniem spekulatywnym. W pierwszym przypadku i przy założeniu błędu w programie, takiego jak podanie przez programistę przesunięcia 8 zamiast 4 w instrukcji 2, adres utworzony przez dodanie 16 do niezerowej zawartości rejestru 4 spowoduje wskazanie na nielegalny adres. Wykonanie instrukcji 7 spowoduje wyjątek, bez względu na to, czy zostanie ona przeniesiona czy nie, ale to przeniesienie spowoduje nieprecyzyjny wyjątek (stan komputera będzie inny w obu przypadkach).
Bardziej poważny jest drugi przypadek, gdy wyjątek występujący w kodzie sekwencyjnym, oddający błąd w programie, jest maskowany przez dołączenie pustych dodatkowych stron na granicach segmentu danych, co proponują Bernstein i inni, aby uniemożliwić przejście przez granice przy „podobnych” ładowaniach. W powyższym segmencie kodu należy założyć, że do rejestru R3 ładuje się pewną wartość różną od 1000 (na przykład 2000) w instrukcji 1. Co więcej, należy założyć, że efektywny adres dla instrukcji 7 jest na zewnątrz segmentu danych programu, na przykład przesunięcie powinno wynosić 0 zamiast 16. Z powodu pustej strony wstawionej przez program łączący, instrukcja ładowania nie spowoduje wyjątku, bez względu na to, czy zostanie przeniesiona, czy nie, co może prowadzić do błędnych wyników, których przyczyna nie byłaby od razu oczywista dla programisty.
Trzeci przypadek dotyczy wprowadzenia wyjątku, powodowanego przez spekulatywne ładowanie, który nie występowałby w oryginalnym kodzie. Aby przedstawić ten przypadek, należy teraz założyć, że do rejestru 3 ładuje się wartość 1000 w instrukcji 1. Należy także założyć, że adres utworzony przez dodanie 16 do niezerowej zawartości rejestru 4 jest adresem nielegalnym. Ponieważ porównanie w instrukcji 5 daje wynik „równości”, obierane jest rozgałęzienie instrukcji 6. W oryginalnym kodzie instrukcja 7 nie zostałaby więc wykonana. Ale jeżeli przeniesie się ją ponad instrukcję 3, nie tylko zostanie wykonana, ale również spowoduje wyjątek.
Istotą sposobu obsługi instrukcji spekulatywnych, według wynalazku, w którym wykonuje się spekulatywnie jedną albo więcej instrukcji, przez ustawienie bitu spekulatywnego, wyznacza się każdy wyjątek związany z instrukcjami wykonanymi spekulatywnie, przez określenie, czy instrukcje wykonywane spekulatywnie są w obranej ścieżce, oraz rozwiązuje się przyczynę każdego wyjątku spekulatywnego związanego z instrukcją wykonaną spelailatywnie, która jest następnie wykonywana jako nie spekulatywna przez wyzerowanie bitu spekulatywnegó, jest to, że w trakcie wyznaczania każdego wyjątku związanego z instrukcjami wykonywanymi spekulatywnie, wyznacza się oryginalne wyjątki spekulatywne, w trakcie którego ustawią się bit wyjątku w pliku bitu wyjątku związanym z pierwszym rejestrem docelowym w pliku rejestrowym w odpowiedzi na warunek wyjątku oryginalnego, ustawia się
181 901 pierwszy rejestr docelowy, wskazujący na adres instrukcji wykonywanej spekulatywnie, związanej z warunkiem wyjątku oryginalnego, oraz zapamiętuje się w rejestrze dodatkowym w dodatkowym pliku rejestrowym co najmniej jeden argument operacji, jeżeli występuje, instrukcji wykonywanej spekulatywnie i zapamiętuje się bit wyjątku w dodatkowym pliku bitu wyjątku.
Korzystnie wyznacza się każdy wyjątek drugorzędny przez określenie, czy bit wyjątku został ustawiony, przy czym wyznaczone wyjątki drugorzędne występują w odpowiedzi na napotkanie przez instrukcję wykonywaną spekulatywnie jednego z wyznaczonych wyjątków oryginalnych.
Korzystnie w trakcie wyznaczania każdego wyjątku z instrukcjami wykonywanymi spekulatywnie wyznacza się zarówno wyjątki oryginalne, jak i drugorzędne, które występują gdy instrukcja wykonywana spekulatywnie próbuje użyć jako argumentu operacji wartości mającej ustawiony bit wyjątku wyznaczonego albo wyjątku mu odpowiadającego.
Korzystnie w trakcie wyznaczania każdego wyjątku z instrukcjami wykonywanymi spekulatywnie wyznacza się oryginalne wyjątki spekulatywne, utrzymuje się zapis warunku wyjątku, utrzymuje się zapis adresu instrukcji wykonywanej spekulatywnie powodującej warunek wyjątku oraz utrzymuje się zapis co najmniej jednego argumentu operacji dla instrukcji wykonywanej spekulatywnie powodującej wyjątek w związku z zapisem warunku wyjątku.
Korzystnie w trakcie wyznaczania każdego wyjątku z instrukcjami wykonywanymi spekulatywnie wyznacza się drugorzędne wyjątki spekulatywne, gdy instrukcja wykonywana spekulatywnie napotka zapis warunku wyjątku, w trakcie którego, utrzymuje się zapis warunku wyjątku drugorzędnego, utrzymuje się zapis adresu instrukcji wykonywanej spekulatywnie powodującej warunek wyjątku drugorzędnego, utrzymuje się zapis adresu co najmniej jednego argumentu operacji dla instrukcji wykonywanej spekulatywnie powodującej wyjątek drugorzędny, oraz utrzymuje się zapis instrukcji wykonywanej spekulatywnie powodującej oryginalny wyjątek spekulatywny dla jego rozwiązania.
Korzystnie w trakcie wyznaczania każdego wyjątku z instrukcjami wykonywanymi spekulatywnie wyznacza się drugorzędne wyjątki spekulatywne, gdy instrukcja wykonywana spekulatywnie próbuje użyć rejestru o ustawionym bicie wyjątku, w trakcie którego ustawia się bit wyjątku w pliku bitu wyjątku związanym z drugim rejestrem docelowym w pliku rejestrowym w odpowiedzi na wspomniany warunek wyjątku, ustawia się drugi rejestr docelowy, wskazujący na adres instrukcji wykonywanej spekulatywnie, związanej z warunkiem wyjątku drugorzędnego, oraz ustawia się zawartości rejestru dodatkowego pliku rejestrowego na numer rejestru argumentu operacji w instrukcji wykonywanej spekulatywnie zamiast zawartości rejestru i ustawiania bitu wyjątku dodatkowego pliku bitu wyjątku, z możliwością powrotu do instrukcji wykonywanej spekulatywnie powodującej oryginalny wyjątek spekulatywny dla jego rozwiązania.
Korzystnie na wstępie zaznacza się wszystkie instrukcje jako instrukcje niespekulatywne, natomiast zaznacza się jako spekulatywne instrukcje, które przenosi się ponad rozgałęzienie warunkowe, które określa, czy instrukcja będzie wykonana w obranej ścieżce kodu sekwencyjnego.
Korzystnie jako wyjątek spekulatywny stosuje się wyjątek błędu strony, nadmiar arytmetyczny albo nielegalny adres.
Korzystnie w trakcie rozwiązywania wyjątku spekulatywnego ładuje się stronę zawierającą żądaną daną do pamięci.
Istotą urządzenia do obsługi instrukcji spekulatywnych, według wynalazku, zbudowanego z jednostki przetwarzającej do spekulatywnego wykonywania jednej albo więcej instrukcji przez ustawienie bitu spekulatywnego oraz układu śledzenia wyjątków do wyznaczającego każdy wyjątek związany z instnikcjami wykonanymi spekulatywnie, przez wyznaczenie, czy instrukcje wykonywane spekulatywnie są w obranej ścieżce, połączonego z układem rozwiązywania każdego wyjątku spekulatywnego związanego z instrukcją wykonaną spekulatywnie, która jest następnie wykonywana jako nie spekulatywna przez wyzerowanie bitu spekulatywnego, jest to, że układ śledzenia wyjątków zawiera układ logiczny wyznaczania oryginalnych wyjątków spekulatywnych, który jest dołączony do pliku bitu wyjątku, dodat
181 901 kowego pliku bitu wyjątku, pliku rejestrowego i dodatkowego pliku rejestrowego, ustawiający bit wyjątku w pliku bitu wyjątku związanym z pierwszym rejestrem docelowym w pliku rejestrowym w odpowiedzi na warunek wyjątku oryginalnego i pierwszy rejestr docelowy w pliku, wskazujący na adres instrukcji wykonywanej spekulatywnie, związanej z warunkiem wyjątku oryginalnego, oraz zapamiętujący w rejestrze dodatkowym w dodatkowym pliku rejestrowym co najmniej jeden argument operacji, jeżeli występuje, związanej instrukcji wykonywanej spekulatywnie, i bitu wyjątku w dodatkowym pliku bitu wyjątku.
Zaletą rozwiązania według wynalazku jest to, że zamiast ponownego wykonywania wszystkich instrukcji spekulatywnych, tak jak postępuje się zgodnie ze stanem techniki, wykonuje się ponownie tylko te, które zależą od instrukcji powodującej wyjątek i są w obranej ścieżce. Oszczędza to czas przetwarzania przez procesor.
Przedmiot wynalazku przedstawiono w przykładzie wykonania przedstawionym na rysunku, na którym fig. la przedstawia schemat blokowy kompilatora bardzo długiego słowa (VLIW) mającego wyjście dostarczające słowa VLIW do jednostki przetwarzającej VLIW, fig. Ib - część linii kodu VLIW, fig. 2 - schemat blokowy urządzenia do obsługi instrukcji spekulatywnych, fig. 3 - sieć działań przedstawiająca technikę zaznaczania instrukcji spekulatywnych, a fig. 4 - schemat blokowy urządzenia do śledzenia wyjątku spekulatywnego.
Odnosząc się najpierw do figur la i Ib, działanie kompilatora bardzo długiego słowa instrukcji (VLIW) 108 ma na celu kompilowanie programów użytkowych 104 bezpośrednio na instrukcję VLIW 106, która jest zrealizowana jako wysoce równoległy, poziomy mikrokod o długości 500-2000 bitów. Jak pokazuje fig. Ib, instrukcja VLIW 106 składa się z pewnej liczby instrukcji z ograniczonego zestawu instrukcji, czyli RISC, określanych tu również jako paczki, z których każda steruje innym zasobem (na przykład jednostką arytmetyczno-logiczną (ALU) czy zespołem rozgałęziającym, w jednostce przetwarzającej danych VLIW 102. Tak więc w pojedynczym cyklu jednostka przetwarzająca VLIW 102 może wykonać równoważność wielu instrukcji RISC.
Każda instrukcja RISC może zawierać pole kodu operacji, pole pierwszego argumentu operacji, pole drugiego argumentu operacji i pole numeru rejestru docelowego. Dodatkowe pole jednobitowe, określane tu jako pole bitu spekulatywnego, albo prościej jako bit spekulatywny, stosuje się do rozróżniania spekulatywnych instrukcji RISC od instrukcji RISC innych niż spekulatywne, co bardziej szczegółowo opisano poniżej.
Podczas działania, kompilator 108 pobiera zwykły sekwencyjny kod asemblerowy (albo kod pośredni z kompilatora języka wysokiego poziomu) jako wejście, w razie potrzeby rozkłada wszystkie instrukcje złożone na prostsze instrukcje RISC, aby utworzyć wersję RISC kodu sekwencyjnego i przy użyciu zaawansowanych metod kompilacji wyznacza grupy 109 instrukcji RISC i rozgałęzień, które można wykonywać jednocześnie, przy czym w kodzie mogą one znajdować się daleko od siebie). Kompilator 108 umieszcza następnie każdą taką grupę 109 w instrukcji VLIW 106, które jednostka przetwarzająca VLIW 102 może wykonać w jednym cyklu. W rezultacie program użytkowy 104 wykonuje się szybciej bez potrzeby zmieniania kodu źródłowego, poprzez proces ponownej kompilacji przeprowadzany w kompilatorze 108.
Należy zauważyć, że kompilator 108 może być częścią, jednostki przetwarzającej VLIW 102, albo może być oddzielnym procesorem danych. Specyfikacja struktury i działania kompilatora VLIW 108 nie śtanowi części tego wynalazku, tak więc nie zostanie opisana bardziej szczegółowo.
W celu obsługi wyjątków spowodowanych przez instrukcje teoretyczne, jednostka przetwarzająca VLIW 102 posiada rejestry, pokazane ogólnie na fig. la jako rejestr 103 z dodatkowym bitem (33 bitem przy założeniu, że rejestry 103 mają zwykle długość 32 bitów).
Tak więc na fig. Ib każda instrukcja RISC stosowana w paczkach instrukcji VLIW 106 ma wersję spekulatywną i wersję nie będącą spekulatywną, czyli dodatkowy bit (bit spekulatywny) w paczce wskazuje, czy instrukcja RISC jest spekulatywną, czy nie.
Jeżeli instrukcja RISC ma włączony bit spekulatywny, instrukcję tę wykonuje się w jednostce przetwarzającej VLIW 102, przed poznaniem wyniku skoku warunkowego w instrukcji VLIW 106, który określa, czy instrukcja zostanie wykonana w oryginalnym kodzie
181 901 sekwencyjnym, czy też nie. Ponadto gdy bit wyjątku rejestru 103 jest ustawiony, instrukcja spekulatywna spowodowała błąd (na przykład nadmiar, ładowanie z nielegalnego adresu).
Figura 2 przedstawia schemat blokowy urządzenia do obsługi instrukcji spekulatywnych według wynalazku. Wymagana wielkość zasobów komputera jest minimalizowana poprzez śledzenie wyjątków spekulatywnych w układzie śledzenia wyjątków 202, w celu późniejszego przetwarzania podczas rozwiązywania wyjątku w układzie rozwiązywania wyjątku 204, wraz ze wskazywaniem na adresy tych instrukcji spekulatywnych, oraz rozwiązywanie tych wyjątków przez poprawienie w układzie 206 tego, co spowodowało wyjątek i ponowne wykonanie w układzie 208 instrukcji, o których wiadomo, że są w obranej ścieżce.
Śledzenie wyjątków spekulatywnych ma dwie części składowe, które wykorzystują bit wyjątku, ustawiany w odpowiedzi na warunek wyjątku 213. Warunek wyjątku może być generowany na pewną liczbę sposobów, wraz z warunkami wyjątku powstającymi w wyniku działania jednostki arytmetyczno-logicznej (ALU) 209.
Pierwszym jest śledzenie oryginalnego wyjątku spekulatywnego, który występuje gdy instrukcja spekulatywna, której argumenty operacyjne nie mają ustawionych bitów wyjątku, napotyka warunek wyjątku. Mówiąc krótko, śledzenie to obejmuje: ustawianie rejestru docelowego w pliku rejestrowym 210, aby wskazywał na adres instrukcji spekulatywnej dany przez adres instrukcji dostarczony poprzez multiplekser (MUX), ustawianie bitu wyjątku w pliku bitu wyjątku 212 związanego z rejestrem docelowym w odpowiedzi na warunek wyjątku 213 z jednostki ALU 209, przechowywanie w rejestrze dodatkowym w pliku dodatkowego rejestru 214 argumentu albo argumentów instrukcji spekulatywnej oraz przechowywanie bitu wyjątku (który nie jest ustawiony dla oryginalnych wyjątków spekulatywnych, ale jest ustawiony dla drugorzędnych wyjątków spekulatywnych, czyli wykorzystujących wyniki instrukcji spekulatywnych, które powodują wyjątki spekulatywne) w dodatkowym pliku bitu wyjątku 216. Linia wyboru argumentu 217 z układu dekodowania instrukcji 201 dostarcza sygnały do pliku rejestrowego 210 i dodatkowego pliku rejestrowego 214. Układ logiczny 218 umożliwia odróżnienie pomiędzy oryginalnymi i drugorzędnymi wyjątkami spekulatywnymi.
Po drugie, gdy instrukcja spekulatywna próbuje użyć rejestru o ustawionym bicie wyjątku, tak jak w oryginalnym wyjątku spekulatywnym powyżej, tworzy się, drugorzędny wyjątek spekulatywny i śledzenie wyjątku obejmuje: ustawianie rejestru docelowego w pliku rejestrowym 210, aby wskazywał na adres instrukcji spekulatywnej jak powyżej, ustawianie bitu wyjątku rejestru dodatkowego 212 w odpowiedzi na warunek wyjątku 213 oraz ustawianie zawartości rejestru dodatkowego pliku rejestrowego 214 na numer albo numery rejestrów argumentu albo operandów w instrukcji spekulatywnej zamiast zawartości rejestru poprzez linię wyboru rejestru 217 (i ustawienie bitu wyjątku dodatkowego pliku bitu wyjątku 216), aby umożliwić powrót do instrukcji spekulatywnej powodującej oryginalny wyjątek spekulatywny w celu jego rozwiązania w układzie rozwiązywania wyjątków 204.
Rozwiązywanie wyjątku spekulatywnego wywołuje się, gdy instrukcja nie będąca spekulatywną, która jest w obranej ścieżce, wykorzystuje argument z rejestru o ustawionym bicie wyjątku. Występowanie warunku wyjątku i instrukcji nie będącej spekulatywną generuje sygnał wyjątku 220 dla układu rozwiązywania wyjątku 204. Rozwiązywanie wyjątku spekulatywnego obejmuje odpowiadanie na sygnały wyjściowe z dodatkowego rejestru i dodatkowy bit wyjątku w celu poprawienia warunku wyjątku, który spowodował wyjątek oraz ponowne wykonanie w układzie 208 instrukcji, które zależały od wyników instrukcji powodujących wyjątek spekulatywny
Na figurze 3 przedstawiającej sieć działań kompilator 108 może wykorzystać bity spekulatywne i nie będące spekulatywnymi w następujący sposób. Na początku wszystkie instrukcje w programie użytkowym 104 (fig. 1) zaznacza się jako nie będące spekulatywnymi, etap 302. Podczas przetwarzania równoległego, gdy instrukcję przenosi się ponad skok warunkowy, który określa, czy instrukcję tę wykonuje się w oryginalnym kodzie, jest ona zaznaczana przez kompilator jako spekulatywna, etap 304. Jeżeli instrukcji nie wykonuje się ostatecznie w obu ścieżkach rozgałęzienia warunkowego, to rozgałęzienie warunkowe wyznacza w kodzie sekwencyjnym, czy instrukcja zostanie wykonana. Jest to wszystko, czego potrzeba
181 901 do wykorzystania mechanizmu bitu wyjątku w najprostszy możliwy sposób. Jeżeli jest pożądane, aby wszystkie wyjątki występujące w oryginalnym programie zostały wykryte w programie równoległym, kompilator 108 (fig. 1) musi zapewnić, że wynik każdej instrukcji spekulatywnej zostanie na końcu wykorzystany bezpośrednio albo pośrednio przez instrukcję nie będącą spekulatywną, wprowadzając w razie potrzeby nowe instrukcje nie będące spekulatywnymi, przy czym zwykle nie będzie to zawsze konieczne, ponieważ zapamiętywanie i rozgałęzienia warunkowe nie sąspekulatywne.
Zatem, zgodnie z wynalazkiem rozwiązuje się problem przetwarzania niepotrzebnych przerwań, gdyż wyjątek przetwarza się w kodzie VLIW 106 wtedy i tylko wtedy, gdy wystąpiłby w oryginalnym programie sekwencyjnym.
Jak wyjaśniono powyżej, wyjątek spekulatywny jest związany z rejestrem, który otrzymał wynik (tak zwany cel) instrukcji powodującej wyjątek. W tym kontekście słowo „rejestr” obejmuje więcej niż zwykłe rejestry „ogólnego przeznaczenia”. Oznacza ono dowolny rejestr z ustawionym bitem wyjątku. Tak więc zapamiętanie występowania wyjątku można związać z tym rejestrem, jeżeli kompilator zapewni, że ten sam rejestr nie może być celem dla więcej niż jednej instrukcji spekulatywnej naraz. Znaczy to, że rejestru nie można użyć ponownie, zanim jego wynik nie zostanie wykorzystany przez instrukcję nie będącą spekulatywną albo nie będzie potrzebny, ponieważ znajduje się poza obraną ścieżką.
Zakłada się, że rozmiar rejestru wynosi 32 bity, z dodatkowym bitem (bitem 33) służącym jako znacznik dla wyjątków spekulatywnych. Rozszerzenie na większe (albo mniejsze) rozmiary rejestrów jest z n+1 bitem służącym jako bit wyjątku, dla rejestru o n bitach.
W rozwiązaniu według wynalazku wyjątek spekulatywny jest związany ze swoim rejestrem docelowym przez zapamiętanie adresu instrukcji powodującej wyjątek w rejestrze docelowym i ustawienie jego bitu wyjątku. Alternatywą byłoby zapamiętanie samej instrukcji, być może po zdekodowaniu. Wymagałoby to dodatkowej pamięci na przechowanie instrukcji, ale przyspieszyłoby jej wykonanie, gdyby okazało się, że występuje ona w obranej ścieżce. W ten sposób można byłoby unikać chybień w odczytywaniu pamięci podręcznej, ponieważ nie jest potrzebny dostęp po raz drugi do linii zawierającej, instrukcję.
Reszta przetwarzania instrukcji spekulatywnej obejmuje dwa składniki: śledzenie wyjątków, które jest w całości zrealizowane sprzętowo, oraz rozwiązywanie wyjątków, które jest zazwyczaj sterowane programowo.
Siedzenie wyjątków dotyczy wyjątków spekulatywnych przy ich występowaniu i rozróżnia się dwa przypadki. Pierwszy przypadek odnosi się do oryginalnego wyjątku spekulatywnego, natomiast drugi przypadek do warunku gdy, instrukcja spekulatywna próbuje wykorzystać jako argument operacji wartość o ustawionym bicie wyjątku, co określa się tutaj jako drugorzędny wyjątek spekulatywny. Śledzenie wyjątków odpowiada również za odrzucanie informacji związanej z wyjątkiem spekulatywnym, o którym wiadomo, że jest poza obraną ścieżką
Składnik rozwiązywania wyjątku jest aktywowany gdy instrukcja nie będąca spekulatywną stosuje jako argument operacji rejestr o ustawionym bicie wyjątku. Mówimy, że w tym momencie wyjątek albo wyjątki spekulatywne, które ustawiły ten bit wyjątku się zmaterializowały. Materializacja wyjątku i rozwiązanie są przedmiotem dalszego opisu, ponieważ dotyczy ona głównie obsługi programowej. Reszta tej sekcji dotyczy obsługi sprzętowej dla śledzenia wyjątków.
Poniżej zostanie omówione śledzenie oryginalnego wyjątku spekulatywnego, to jest instrukcji spekulatywnej, która powoduje wyjątek regularny, czyli taki, który nie jest powodowany przez próbę użycia wartości rejestru o ustawionym bicie wyjątku. Jeżeli jakieś argumenty instrukcji są zawarte w pliku rejestrowym 210, ich wartości kopiuje się do odpowiedniego rejestru dodatkowego pliku rejestrowego 214 z wyzerowanym bitem wyjątku. Jeżeli dodatkowy rejestr nie jest używany (odpowiedni argument nie znajduje się w rejestrze albo instrukcja go nie wymaga), jego bit wyjątku jest zerowany, a wartość pozostaje nieokreślona. Kopiowanie wartości pliku rejestrowego 210 wykonuje się bezpośrednio z pliku rejestrowego 210 poprzez dodatkową ścieżkę danych z portów pliku rejestrowego do dodatkowego pliku rejestrowego 214.
181 901
W odniesieniu do figury 4, przedstawiającej schemat blokowy urządzenia do śledzenia wyjątku spekulatywnego, opisany jest bardziej szczegółowo oryginalny wyjątek spekulatywny (koła są wejściami z dekodera instrukcji 201, a kwadraty są wejściami/wyjściami układu rozwiązywania wyjątku 204 z fig. 2). Ten typ wyjątku występuje, gdy instrukcja spekulatywna, której argumenty nie mają ustawionego żadnego ze swoich bitów wyjątku, napotyka warunek wyjątku, taki jak nadmiar, błąd strony i tak dalej. Gdy to następuje, linia wyjątku 401 jest ustawiana, tak, że na wyjściu bramki OR 402 jest sygnał prawdy. Ponieważ instrukcja powodująca wyjątek jest spekulatywna, na dolnym wejściu 403 dla bramki AND 404 jest sygnał fałszu, tak więc nie ma wyjścia sygnału wyjątku 220 z bramki AND 404. Oznacza to, że w tym momencie nie następuje bezpośrednie przetwarzanie wyjątku.
Aby rejestrować wyjątek dla późniejszego przetwarzania, jeżeli jest to potrzebne, linia 405 przenosi sygnał wyjątku do portu „wejściowego” rejestru bitów wyjątku 406, natomiast port „wyboru zapisu” 406 i 417 wybiera bit odpowiadający rejestrowi docelowemu dla instrukcji spekulatywnej powodującej wyjątek, wyznaczony przez linię wyboru celu 407. W tym samym czasie linia 405 steruje multiplekserem 410, który wybiera swoje lewe wejście - linię adresu instrukcji 411 - zamiast linii wyniku 412. Powoduje to, że adres instrukcji 411 jest zapamiętywany w docelowym pliku rejestrowym 417, służąc jako wskaźnik do instrukcji powodującej wyjątek dla wykorzystania w rozwiązywaniu wyjątku.
Należy zauważyć, że porty „prawego wyjścia” i „lewego wyjścia” z rejestru bitów wyjątku 406 (plik z podwójnym odczytem i pojedynczym zapisem o szerokości jednego bitu) dostarczają bit wyjątku dla prawego i lewego argumentu instrukcji, wybranych odpowiednio przez linię 408 wyboru prawego rejestru i linię 409 wyboru lewego rejestru. Ponieważ zakłada się że argumenty nie mają ustawionych swoich bitów wyjątków oba te wyjścia mają wartość fałszywą, tak więc linia 415 ma wartość fałszu. Przez określenie pliku jako „podwójny odczyt i pojedynczy zapis” rozumie się to, że plik może jednocześnie wysyłać dane poprzez dwa porty odczytu wprowadzając również dane poprzez jeden port zapisu.
Linia 405 służy również jako sygnał włączania zapisu dla lewego dodatkowego pliku rejestrowego 413 i lewego pliku bitów wyjątku 414. Linia 405 wykonuje to samo dla równoważnych „prawych” plików rejestrowych (nie pokazanych). Przyjmuje się tutaj przynajmniej dwa argumenty na instrukcję, natomiast uogólnienie na więcej argumentów jest oczywiste. Porty „wyboru zapisu” obu plików pobierają swoje dane wejściowe z linii wyboru celu 407, służąc jako rozszerzenie dla informacji przechowywanych w rejestrze docelowym w pliku rejestrowym 417 dla instrukcji powodującej wyjątek spekulatywny. Lewy dodatkowy plik rejestrowy 413 (plik z pojedynczym odczytem i pojedynczym zapisem) o szerokości określonej przez długość argumentów w danej architekturze (na przykład 32 bity) przechowuje lewy argument instrukcji, wybrany przez multiplekser 417c sterowany przez linię 415 (linia 415 ma wartość fałszu, jak wyjaśniono powyżej) i uzyskany przez port „lewego wyjścia danych” pliku rejestrowego 417. Plik rejestrowy 417 jest plikiem o podwójnym odczycie i pojedynczym zapisie o szerokości wyznaczonej przez argumenty w danej architekturze (na przykład 32 bity). To wyjście jest wybierane przez linię 409 wyboru lewego rejestru. Równolegle zapamiętuje się stan linii 415 w pliku 414 lewych bitów wyjątku 414 (plik z pojedynczym odczytem i pojedynczym zapisem o szerokości 1 bitu).
Niektóre argumenty nie są integralną częścią instrukcji spekulatywnej, która spowodowała wyjątek. Funkcją dodatkowych plików rejestrowych 413 jest zapamiętywanie dostatecznej ilości informacji o argumentach, które nie są integralną częścią instrukcji spekulatywnej powodującej wyjątek, tak więc instrukcja może być ponownie wykonana, jeżeli okaże się, że jest w obranej ścieżce. Innymi słowy, argumenty będące częścią instrukcji mogą zostać wyciągnięte z instrukcji dla ponownego wykonania podczas rozwiązywania wyjątku (omówionego poniżej). Inne dane wejściowe są podawane na multipleksery 417a i 417b na dole pliku rejestrowego 417. Te dane wejściowe mogą pochodzić z dosłownych (natychmiastowych) pól w instrukcji. Instrukcja może więc mieć dwa argumenty, ale tylko jeden z nich (albo być może żaden) pochodzi z rejestru albo rejestrów. Inny może być pobrany z pewnego pola w instrukcji pod kontrolą dekodera instrukcji, poprzez linie wyboru lewego i prawego argumentu.
181 901
Inne możliwe źródła argumentów obejmują rejestry specjalnego przeznaczenia w procesorze danych, które są oddzielone od pliku rejestrowego.
Gdy instrukcja spekulatywna próbuje użyć jako argumentu rejestr w pliku rejestrowym 417, który ma ustawiony odnośny bit wyjątku w 406, tworzy się „drugorzędny wyjątek spekulatywny”. W poniższym opisie zakłada się, że lewy argument ma ustawiony co najmniej swój bit wyjątku. Bit wyjątku odpowiadający lewemu argumentowi w instrukcji spekulatywnej jest wybierany w pliku bitów wyjątku 406 przez linię 409 wyboru lewego rejestru. Bit wyjątku pojawia się w porcie „lewego wyjścia” pliku bitu wyjątku 406 i jest podawany na bramkę AND 418, która jest sterowana również przez sygnał nazwany „wykorzystywany lewy argument” 419, który ma wartość prawdziwą, gdy instrukcja rzeczywiście wykorzystuje lewy argument w rejestrze w pliku rejestrowym 417. Należy zauważyć, że w architekturach udostępniających instrukcje z dwoma argumentami operacji, niektóre instrukcje mogą mieć jeden argument albo go nie mieć. Wyjście bramki AND 418, o którym zakłada się w tym przypadku, że ma wartość prawdziwą, jest podawane do bramki OR 402, która wytwarza wartość prawdziwą na linii 405, sygnalizując przez to wyjątek spekulatywny.
Zapamiętanie adresu instrukcji w rejestrze docelowym w pliku 417 i zaznaczenie jego bitu wyjątku w pliku bitu -wyjątku 406 zachodzą tak samo, jak w przypadku wyjątku oryginalnego. W tym jednak przypadku zawartość plików 413, 414 jest inna od tej przy oryginalnym wyjątku spekulatywnym. Lewy dodatkowy plik rejestrowy 413 zamiast lewego argumentu jako takiego, otrzymuje numer rejestru, w którym miał być przechowywany argument. Ponieważ zakłada się, że kompilator gwarantuje, że istnieje najwyżej jedna instrukcja spekulatywna na rejestr docelowy, podanie numeru rejestru umożliwia po wrócenie, do instrukcji powodującej oryginalny wyjątek spekulatywny, w przypadku gdy wymagane jest rozwiązanie. Numer rejestru jest wyznaczany przez linię 409 wyboru lewego rejestru i dostarczany poprzez multiplekser 417c, jako sterowany przez linię 415 (która ma wartość prawdziwą). Linia 415 służy również do ustawiania bitu wyjątku w lewym pliku bitów wyjątku 414. Zapamiętywanie numeru rejestru zamiast jego zawartości wymaga multipleksera 417c przy porcie wejściowym każdego z dwóch dodatkowych plików rejestrowych. Multiplekser 417c jest zasilany z docelowego pliku rejestrowego (zawartością) i z układu dekodowania instrukcji (numerem rejestru).
Oczywiście adres instrukcji może zostać zablokowany i zachowany, wraz z jego położeniem wewnątrz instrukcji VLIW 106 (fig. 1), tak aby można go było skopiować do pliku rejestrowego 417 gdy wystąpi wyjątek spekulatywny. Po zakończeniu tego procesu wykonywanie instrukcji VLIW 106 jest kontynuowane tak jak zwykle.
Instrukcje spekulatywne, które okazały się być poza obraną ścieżką mogą pozostawić plik rejestrowy 417 z ustawionym bitem wyjątku 406, w rezultacie wyjątku podczas ich wykonywania. Dlatego przy każdym zapamiętywaniu wyniku w rejestrze, albo przez instrukcję nie będącą spekulatywną albo przez instrukcję spekulatywną która nie spowodowała wyjątku, zeruje się bit wyjątku dla tego rejestru. Zapamiętując aktywne rejestry kompilator 108 gwarantuje, że wartości spekulatywne i nie będące spekulatywnymi nie zostaną pomieszane ze sobą i w programie użytkowym 104 nie wystąpią uboczne wyjątki (fig. 1).
Należy zauważyć, że przy tej metodzie może występować następujący problem. Na przykład oryginalny (sekwencyjny) program może używać nie zainicjalizowanego rejestru (z powodu błędu). Jest możliwe, że instrukcja spekulatywna ustawi ten rejestr, tak więc albo zawiera on wartość, albo ma ustawiony bit wyjątku z powodu instrukcji spekulatywnej. W każdym z przypadków zachowanie programu nie byłoby zgodne z oryginalną wersją Aby się przed tym zabezpieczyć, można wstawić sprawdzenia inicjalizacji albo jawnego zerowania (przynajmniej bitu spekulatywnego) rejestru, który zawiera wartość spekulatywną na koniec segmentu programu, dla którego rejestr jest utrzymywany w aktywności.
W niżej przedstawionym przykładzie jest rozważana sekwencja instrukcji (głównie spekulatywny ch) pokazaną w tabeli 1. Dla uproszczenia instrukcje są -wymienione pojedynczo (jedna na wiersz), ale w środowisku VLIW zostałyby zgrupowane w kilka instrukcji tworząc instrukcję VLIW.
Tabela 1
100 LOAD 101 LOAD 102 LOAD 103 LOAD 104 ADD 105MULT 106 ADD 200 STORĘ R4,0 (R5) R6,0 (R3) Rl, 8 (R4) R2,12 (R6) R1,R2, R7 R1,R8, R9 R9, R9, RIO R7,8 (Rll) S S S S S S S N
Tabela 1 zawiera przykładową sekwencję instrukcji. Każda instrukcja jest oznaczona przez „S” dla instrukcji spekulatywnej, albo „N” dla instrukcji nie będącej spekulatywną (byłoby to reprezentowane przez wartość bitu spekulatywnego w instrukcji). LOAD używa adresu w prawym argumencie, aby uzyskać dostęp do pamięci i załadować zawartość do lewego (docelowego) rejestru, przy czym STORĘ wykonuje odwrotną funkcję. ADD/MULT używa pierwszego i drugiego (lewego i prawego) argumentu jako wejścia, z wynikami zapamiętanymi w trzecim rejestrze (docelowym).
Załóżmy, że rejestry R5 i R3 zawierają adresy stron, które nie są rezydentne w pamięci, na przykład 2000 i 30000 i ich zastosowanie w instrukcjach 100 i 101 spowoduje za każdym razem wyjątek błędu strony. Innymi odnośnymi rejestrami są rejestry R8 i RH, o których zakłada się, że mają wyzerowane swoje bity wyjątku (nie były celem instrukcji spekulatywnej, która spowodowała wyjątek) i zawierają odpowiednio 234 i 10000 (załóżmy, że strona zawierająca adres 10000 jest rezydentna w pamięci). Gdy wykonywanie osiągnie instrukcję 200, instrukcję nie będącą spekulatywną wyjątki spekulatywne zmaterializują się. Przed rozwiązaniem wyjątków, w tabeli 2 pokazane są zawartości odnośnych rejestrów. Każdy wiersz pokazuje zawartość „regularnego” rejestru 417, jak również odpowiadające („lewy” i „prawy”) rejestry dodatkowe 413, wraz z bitem wyjątku 406 i 414 dla każdego z nich. Pozycja I-nnn symbolizuje adres instrukcji nnn w sekwencji.
Tabela 2
Rejestr Regularny + f Dodatlewy + f Dodat_prawy + f Komentarz
1 2 3 4 5
Rl 1-102+1 ??? + 0 4+1 Prawy op wskazuje
R4
R2 1-103+1 ??? + 0 6+1 Prawy op wskazuje
R6
R3 30000 + 0 ??? + 0 ??? + 0 Dany
R4 1-100 + 1 ??? + 0 2000 + 0 Prawy op
toR5
R5 2000 + 0 ??? + 0 ??? + 0 Dany
R6 1-101 + 1 ??? + 0 30000 + 0 Prawy op
toR3
R7 1-104+1 1 + 1 2+1 Oba oznaczają
operandy wyjątki (Rl i R2)
R8 234 + 0 ??? + 0 ??? + 0 Dany
181 901 cd. tabeli 2
1 2 3 4 5
R9 1-105 + 1 14- 1 234 4-0 Lewy op wskazuje
Rl, (R8) RIO 1-106+1 9+ 1 9+1 prawy to Oba
operandy naR9 Rll 10000 + 0 ??? + 0 ??? + 0 wskazują Dany
Tabela 2 pokazuje zawartości i znaczniki rejestrów regularnych i dodatkowych. Trzy środkowe kolumny odpowiadają miejscom w pliku 417/406, 413/414 i równoważnikowi 413/414 dla prawego argumentu. Stan oddaje wyjątki spekulatywne dla regularnych rejestrów Rl, R2, R4, R6, R7, R9 i RIO. Wykonanie instrukcji 200 zmaterializuje wyjątek w rejestrze R7 i pośrednio wyjątki w rejestrach Rl, R2, R4 i R6.
Gdy instrukcja nie będąca spekulatywnąnapotka argument (rejestr) z ustawionym bitem wyjątku, mówi się, że wyjątek albo wyjątki spekulatywne, które ustawiły ten bit wyjątku, zmaterializowały się. Sterowanie przekazuje się do mechanizmu rozwiązywania wyjątku spekulatywnego, pokazanego w tabeli 3, który próbuje rozwiązać przyczynę albo przyczyny wyjątku i wykonać ponownie każdą instrukcję spekulatywną która zależała od wyjątku i ustalono, że występuje w obranej ścieżce. Rozwiązywanie przyczyn wyjątku oznacza nakazanie systemowi podjęcia pewnej czynności, aby można było poprawić to, co spowodowało wyjątek spekulatywny. Na przykład, jeżeli wyjątkiem był błąd strony, spowodowany przez zaadresowanie danej, która nie jest aktualnie rezydentna w pamięci, rozwiązanie przyczyny będzie polegało na wprowadzeniu do pamięci strony zawierającej daną aktualizację tabel i tak dalej. Drugi składnik, ponowne wykonanie, będzie polegało na powtórzeniu wykonania instrukcji, o których wiadomo teraz, że są w obranej ścieżce, które w jakiś sposób wykorzystywały wynik operacji powodującej wyjątek.
Tabela 3
Rozwiąż-wyjątek: FUNKCJA (indeks_rej estru) ZWRACA REKURENCYJNIE (wartość_rejestru) /* Wyjątek może już być rozwiązany. Jeżeli tak jest, pomiń przetwarzanie i zwróć zawartość
R[indeks_rej estru] */
JEŻELI f(R[indeks_rejestru]) TO /* sprawdź, czy lewy argument wymaga rozwiązania.
Jeżeli tak, wykonaj rekurencyjnie. */
JEŻELI f(XL[indeks_rejestru]) TO c(XL[indeks_rejestru]) = rozwiąż_wyjątek c(XL[indeks_rej estru])) f(XL[indeks_rejestru]) = 0 /* sprawdź, czy lewy argument wymaga rozwiązania. Jeżeli tak, wykonaj rekurencyjnie.*/ JEŻELI f(XR[indeks_rejestru]) TO c(XR[indeks_rejestru]) = rozwiąż_wyj ątek c(XR[indeks_rej estru]) f(XR[indeks_rejestru]) = 0 /* argumenty gotowe, WYKONAJ instrukcję i ustaw zawartość R[indeks_rejestru], zerując jego znacznik na 33-cim bicie */
181 901 /* Wszelkie wyjątki podczas wykonywania instrukcji są obsługiwane w locie, tak jakby pochodziły z regularnego (nie spekulatywnego) wykonania instrukcji */ WYKONAJ (c(R[indeks_rejestru]), /* wskaźnik instrukcji */ c(XL[indeks_rejestru)), /* rejestr lewego argumentu */ c(XR[indeks_rejestru]), /* rejestr prawego argumentu */ /* f(R[indeks_rejestru]) = 0 jest niejawne */ /* w tym momencie rejestr ma poprawną zawartość */ ZWRÓĆ (c(R[indeks_rejestru]))
KONIEC rozwiążwyjątek
Tabela 3 przedstawia zarys funkcji rekurencyjnej realizującej rozwiązywanie wyjątku. Załóżmy, że R[i] jest rejestrem, który spowodował zmaterializowanie wyjątku. Należy przypomnieć, że zawartość rejestru R[i] wskazuje na instrukcję spekulatywną która powinna zostać ponownie wykonana, aby rozwiązać wyjątek, oraz że rejestr dodatkowy XL[i] (lewy) i XR[i] (prawy) odpowiadające rejestrowi R[i] mogą zawierać argumenty wymagane do wykonania instrukcji. Zapis c(r) i f(r) stosuje się odpowiednio dla zawartości i bitu wyjątku rejestru r, gdzie r jest rejestrem regularnym (R), dodatkowym lewym (XL) albo dodatkowym prawym (XR). Tak więc funkcję rozwiąż wyjątek wykonuje się raz dla każdego rejestru argumentu w instrukcji nie będącej spekulatywną, która ma ustawiony swój bit spekulatywny.
Przykład
Rozważmy znowu sekwencję instrukcji pokazaną w tabeli 1, zawartości rejestrów podane w tabeli 2 i tabelę 4. Wykonanie instrukcji 1-200 spowodują sekwencję wywołań podaną w tabeli 4 (wcięcia oddają poziom rekurencji) z vw, www, xxx i yyy oznaczającymi odpowiednio wartości przypisane do rejestrów R4 (przez 1-100), R1 (przez 1-102), R6 (przez 1-101) oraz R2 (przez 1-103).
Tabela 4
LewyOp = rozwiążwyjątek (7) c(XL[7]) - rozwiąż_wyjątek (1) c(XR[l]) - rozwiążwyjątek (4)
WYKONAJ (1-100, ???, 2000) /* f(R[4] = 0 jest niejawne */
WYKONAJ (1-102, ???, wv) /* f(R[l)) = 0 jest niejawne */ c(XR[7]) = rozwiąż_wyjątek (2) c(XR[2]) = rozwiąż_wyjątek (6)
WYKONAJ (1-101, ???, 30000) /* f(R[6] = 0 jest niejawne */
WYKONAJ (1-103, ???, xxx) /* f(R[2) = 0 jest niejawne */
WYKONAJ (1-104, www, yyy) /* f(R[7] = 0 jest niejawne */
Jeżeli pewna instrukcja nie będąca spekulatywnąużywa teraz rejestru RIO jako swojego prawego argumentu operacji po zakończeniu instrukcji 1-200, sekwencja wywołań będzie taka, jak pokazuje fig. 5 (z zzz oznaczającym wartość przypisaną rejestrowi R9 przez instrukcję 1-105).
181 901
Tabela 5
Prawy_Op = rozwiążwyjątek (10) c(XL[10)) - rozwiążwyjątek (9) c (XL [ 9 ] ) = rozwiążwyjątek ( 1 ) /* ponieważ f(R[ 1)) = 0 jego wartość jest zwracana */ WYKONAJ (1-105, www, 234) /* f(R[9]) = 0 jest niejawne */ c(XR[10]) = rozwiąż wyjątek (9) /* ponieważ f(R[9]) = 0 jego wartość jest zwracana */ WYKONAJ (i-106, zzz, zzz) /* f (R[10] ) jest niejawne */
Oczywiście wymagany jest sprzęt, aby udostępnić odczyt i zapis zawartości rejestrów dodatkowych i ich znaczników (pokazanych częściowo na fig. 4), jak również aby (niejawnie) zerować bit wyjątku rejestru 417, albo przez układ rozwiązywania wyjątków spekulatywnych 204, albo przez zapisanie instrukcji nie będącej spekulatywną w rejestrze 417.
Jeżeli wystąpi fatalny wyjątek w trakcie rozwiązywania wyjątku spekulatywnego, pewne rejestry mogą nie być zgodne z ich stanem w wersji tego samego programu wykonywanej sekwencyjnie. Na przykład należy rozważyć fatalny wyjątek przy próbowaniu ponownego wykonania instrukcji 1-102 podczas rozwiązywania wyjątku spekulatywnego w rejestrze R7, jak pokazano wyżej. W tym przypadku instrukcja 1-100 (która ustawia rejestr R4) została zakończona, ale instrukcja 1-101 (która ustawia rejestr R6) pozostaje do rozwiązania. Tak więc zawartość rejestru R6 nie jest zgodna z faktem, że instrukcja 1-102 jest instrukcją powodującą fatalny wyjątek. Tym niemniej, ponieważ bit wyjątku w rejestrze R6 jest nadal ustawiony, może zostać wyznaczony jako zawierający adres instrukcji z wyjątkiem spekulatywnym w toku. Ponadto, można przedstawić listę wszystkich takich instrukcji jako część danych związanych z fatalnym wyjątkiem (dla celów diagnostycznych), po prostu spisując zawartość wszystkich rejestrów, które mają ustawiony swój bit wyjątku.
Jak wspomniano już poniżej, kompilator 108, albo dowolny program używany do tworzenia instrukcji spekulatywnych, musi zapamiętywać wartości rejestrów 413 albo 417 wykorzystywanych przez instrukcje spekulatywne, tak aby w żadnym momencie programu więcej niż jedna taka instrukcja nie miała tego samego rejestru 413 albo 417 jako docelowego dla swojego wyniku. Innymi słowy, rejestr 413 albo 417 ustawiony przez instrukcję spekulatywną nie powinien być używany ponownie przed wykorzystaniem jego wartości przez instrukcję nie będącą spekulatywną albo ustaleniem, że wartość ta nie jest potrzebna, ponieważ okazało się, że instrukcja spekulatywną jest poza obraną ścieżką. Pierwszy przypadek, gdy instrukcja nie będąca spekulatywną wykorzystuje jako swój argument zawartość rejestru 413 albo 417 ustawionego przez instrukcję spekulatywną, zmusza kompilator 108 do utrzymywania tego rejestru 413 albo 417 jako „aktywnego”, blokując przez to jego ustawienie przez inne instrukcje.
Aby uwzględnić drugi przypadek, kompilator 108 wprowadza instrukcję pozorną na końcu ścieżki spekulatywnej, która używa jako argumentów wszystkich rejestrów 413 albo 417, które są ustawione przez instrukcje spekulatywne i nie są używane jako argumenty przez instrukcje inne niż spekulatywne. Przyczyną, że te rejestry 413, 417 są utrzymywane jako aktywne do momentu, w którym można ustalić, że są poza obraną ścieżką, jest to, że służą jako argumenty dla instrukcji spekulatywnych i jako takie mogą zawierać wyjątek spekulatywny, który być może będzie musiał zostać rozwiązany, gdy zostanie ustalone, że są, one częścią obranej ścieżki.
Przy użyciu powyższej metody jest możliwe, że ponieważ rejestr 413, 417 nie jest używany przez oryginalny program, rejestr 413, 417 ustawiony przez instrukcję spekulatywną może być później użyty przez instrukcję nie będącą spekulatywną, zanim zostanie poprawnie zainicjalizowany. Może to spowodować uboczny wyjątek, jeżeli rejestr 413,417 miał ustawiony swój bit wyjątku, co jest w rzeczywistości wynikiem braku inicjalizacji rejestru 413, 417.
181 901
Aby uniknąć tej sytuacji, instrukcją która zeruje bit spekulatywny rejestru 413, 417, i opcjonalnie ustawia jego wartość na „nieokreśloną”, może być użyta zamiast instrukcji pozornej, która utrzymuje „w aktywności” rejestry 413, 417 ustawione przez instrukcję spekulatywną
Należy również rozważyć związek wyjątków spekulatywnych z włączaniem/wyłączaniem wyjątków dla określonego zadania albo segmentu zadania. Prosta metoda polegałaby na ignorowaniu pytanią czy określony wyjątek jest włączony czy wyłączony aż do materializacji wyjątku. W tym momencie sprawdza się, czy przetwarzanie powinno być takie, jak gdyby wyjątek został spowodowany przez instrukcję nie będącą spekulatywną W większości przypadków kompilator może pamiętać instrukcje włączające i wyłączające wyjątek, tak że otrzymane zachowanie jest zgodne z programem sekwencyjnym. W przypadkach, w których nie jest to możliwe, kompilator uniknąłby utworzenia instrukcji spekulatywnych dla sekwencji instrukcji. Podsumowując, wyjątki spekulatywne są rejestrowane, bez względu na to, czy są wyłączone. Wyłącznie w czasie rozwiązywania sprawdza się wyjątki spekulatywne względem wyjątków włączonych. Kompilator wprowadzający równoległość zapewnią że żaden wyjątek nie zostanie spowodowany, jeżeli powinien być wyłączony.
181 901
181 901
108
181 901
BITÓW WYJĄTKU
181 901
Fig.1B
Departament Wydawnictw UP RP. Nakład 70 egz.
Cena 4,00 zł.

Claims (10)

  1. Zastrzeżenia patentowe
    1. Sposób obsługi instrukcji spekulatywnych, w którym wykonuje się spekuiatywnie jedną albo więcej instrukcji, przez ustawienie bitu spekulatywnego, wyznacza się każdy wyjątek związany z instrukcjami wykonanymi spekuiatywnie, przez określenie, czy instrukcje wykonywane spekuiatywnie są w obranej ścieżce, oraz rozwiązuje się przyczynę każdego wyjątku spekulatywnego związanego z instrukcją wykonaną spekuiatywnie, która jest następnie wykonywana jako nie spekulatywna przez wyzerowanie bitu spekulatywnego, znamienny tym, że w trakcie wyznaczania każdego wyjątku związanego z instrukcjami wykonywanymi spekuiatywnie, wyznacza się oryginalne wyjątki spekulatywne, w trakcie którego ustawia się bit wyjątku w pliku bitu wyjątku związanym z pierwszym rejestrem docelowym w pliku rejestrowym w odpowiedzi na warunek wyjątku oryginalnego, ustawia się pierwszy rejestr docelowy, wskazujący na adres instrukcji wykonywanej spekuiatywnie, związanej z warunkiem wyjątku oryginalnego, oraz zapamiętuje się w rejestrze dodatkowym w dodatkowym pliku rejestrowym co najmniej jeden argument operacji, jeżeli występuje, instrukcji wykonywanej spekuiatywnie i zapamiętuje się bit wyjątku w dodatkowym pliku bitu wyjątku.
  2. 2. Sposób według zastrz. 1, znamienny tym, że wyznacza się każdy wyjątek drugorzędny przez określenie, czy bit wyjątku został ustawiony, przy czym wyznaczone wyjątki drugorzędne występują w odpowiedzi na napotkanie przez instrukcję wykonywaną spekulatywnie jednego z wyznaczonych wyjątków oryginalnych.
  3. 3. Sposób według zastrz. 1 albo 2, znamienny tym, że w trakcie wyznaczania każdego wyjątku z instrukcjami wykonywanymi spekuiatywnie wyznacza się zarówno wyjątki oryginalne, jak i drugorzędne, które występują, gdy instrukcja wykonywana spekuiatywnie próbuje użyć jako argumentu operacji wartości mającej ustawiony bit wyjątku wyznaczonego albo wyjątku mu odpowiadającego.
  4. 4. Sposób według zastrz. 1, znamienny tym, że w trakcie wyznaczania, każdego wyjątku z instrukcjami wykonywanymi spekuiatywnie wyznacza się oryginalne wyjątki spekulatywne, utrzymuje się zapis warunku wyjątku, utrzymuje się zapis adresu instrukcji wykonywanej spekuiatywnie powodującej warunek wyjątku oraz utrzymuje się zapis co najmniej jednego argumentu operacji dla instrukcji wykonywanej spekuiatywnie powodującej wyjątek w związku z zapisem warunku wyjątku.
  5. 5. Sposób według zastrz. 4, znamienny tym, że w trakcie wyznaczania każdego wyjątku z instrukcjami wykonywanymi spekuiatywnie wyznacza się drugorzędne wyjątki spekulatywne, gdy instrukcja wykonywana spekuiatywnie napotka zapis warunku wyjątku, w trakcie którego utrzymuje się zapis warunku wyjątku drugorzędnego, utrzymuje się zapis adresu instrukcji wykonywanej spekuiatywnie powodującej warunek wyjątku drugorzędnego, utrzymuje się zapis adresu co najmniej jednego argumentu operacji dla instrukcji wykonywanej spekuiatywnie powodującej wyjątek drugorzędny, oraz utrzymuje się zapis instrukcji wykonywanej spekuiatywnie powodującej oryginalny wyjątek spekulatywny dla jego rozwiązania.
  6. 6. Sposób według zastrz. 1, znamienny tym, że w trakcie wyznaczania każdego wyjątku z instrukcjami wykonywanymi spekuiatywnie wyznacza się drugorzędne wyjątki spekulatywne, gdy instrukcja wykonywana spekuiatywnie próbuje użyć rejestru, o ustawionym bicie wyjątku, w trakcie którego ustawia się bit wyjątku w pliku bitu wyjątku związanym z drugim rejestrem docelowym w pliku rejestrowym w odpowiedzi na wspomniany warunek wyjątku, ustawia się drugi rejestr docelowy, wskazujący na adres instrukcji wykonywanej spekuiatywnie, związanej z warunkiem wyjątku drugorzędnego, oraz ustawia się zawartości rejestru dodatkowego pliku rejestrowego na numer rejestru argumentu operacji w instrukcji wykonywanej spekuiatywnie zamiast zawartości rejestru i ustawiania bitu wyjątku dodatkowego pliku bitu wyjątku, z możliwością powrotu do instrukcji wykonywanej spekuiatywnie powodującej oryginalny wyjątek spekulatywny dla jego rozwiązania.
    181 901
  7. 7. Sposób według zastrz. 1, znamienny tym, że na wstępie zaznacza się wszystkie instrukcje jako instrukcje niespekulatywne, natomiast zaznacza się jako spekulatywne instrukcje, które przenosi się ponad rozgałęzienie warunkowe, które określa, czy instrukcja będzie wykonana w obranej ścieżce kodu sekwencyjnego.
  8. 8. Sposób według zastrz. 1, znamienny tym, że jako wyjątek spekulatywny stosuje się wyjątek błędu strony, nadmiar arytmetyczny albo nielegalny adres.
  9. 9. Sposób według zastrz. 8, znamienny tym, że w trakcie rozwiązywania wyjątku spekulatywnego ładuje się stronę zawierającą żądaną daną do pamięci.
  10. 10. Urządzenie do obsługi instrukcji spekulatywnych zbudowane z jednostki przetwarzającej do spekulatywnego wykonywania jednej albo więcej instrukcji przez ustawienie bitu spekulatywnego oraz układu śledzenia wyjątków wyznaczającego każdy wyjątek związany z instrukcjami wykonanymi spekulatywnie, przez wyznaczenie, czy instrukcje wykonywane spekulatywnie są w obranej ścieżce, połączonego z układem rozwiązywania każdego wyjątku spekulatywnego związanego z instrukcją wykonaną spekulatywnie, która jest następnie wykonywana jako nie spekulatywna przez wyzerowanie bitu spekulatywnego, znamienne tym, że układ śledzenia wyjątków (202) zawiera układ logiczny (218) wyznaczania oryginalnych wyjątków spekulatywnych, który jest dołączony do pliku bitu wyjątku (212), dodatkowego pliku bitu wyjątku (216), pliku rejestrowego (210) i dodatkowego pliku rejestrowego (214), ustawiający bit wyjątku w pliku bitu wyjątku (212) związanym z pierwszym rejestrem docelowym w pliku rejestrowym (210) w odpowiedzi na warunek wyjątku oryginalnego i pierwszy rejestr docelowy w pliku rejestrowym (210), wskazujący na adres (411) instrukcji wykonywanej spekulatywnie, związanej z warunkiem wyjątku oryginalnego, oraz zapamiętujący w rejestrze dodatkowym w dodatkowym pliku rejestrowym (214) co najmniej jeden argument operacji, jeżeli występuje, związanej instrukcji wykonywanej spekulatywnie, i bitu wyjątku w dodatkowym pliku bitu wyjątku (216).
    * * *
PL96321542A 1995-01-24 1996-01-09 Sposób i urzadzenie do obslugi instrukcji spekulatywnychPierwszenstwo: PL PL PL PL181901B1 (pl)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/377,563 US5799179A (en) 1995-01-24 1995-01-24 Handling of exceptions in speculative instructions
PCT/EP1996/000060 WO1996023254A1 (en) 1995-01-24 1996-01-09 Handling of exceptions in speculative instructions

Publications (2)

Publication Number Publication Date
PL321542A1 PL321542A1 (en) 1997-12-08
PL181901B1 true PL181901B1 (pl) 2001-10-31

Family

ID=23489627

Family Applications (1)

Application Number Title Priority Date Filing Date
PL96321542A PL181901B1 (pl) 1995-01-24 1996-01-09 Sposób i urzadzenie do obslugi instrukcji spekulatywnychPierwszenstwo: PL PL PL

Country Status (10)

Country Link
US (1) US5799179A (pl)
EP (1) EP0804759B1 (pl)
JP (1) JP3093624B2 (pl)
KR (1) KR100290269B1 (pl)
CN (1) CN1109966C (pl)
CA (1) CA2203124C (pl)
CZ (1) CZ293714B6 (pl)
DE (1) DE69600995T2 (pl)
PL (1) PL181901B1 (pl)
WO (1) WO1996023254A1 (pl)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778219A (en) * 1990-12-14 1998-07-07 Hewlett-Packard Company Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
US6185668B1 (en) * 1995-12-21 2001-02-06 Intergraph Corporation Method and apparatus for speculative execution of instructions
US5872990A (en) * 1997-01-07 1999-02-16 International Business Machines Corporation Reordering of memory reference operations and conflict resolution via rollback in a multiprocessing environment
WO1999019795A1 (en) * 1997-10-13 1999-04-22 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for optimizing execution of load and store instructions
US6505296B2 (en) 1997-10-13 2003-01-07 Hewlett-Packard Company Emulated branch effected by trampoline mechanism
US6044454A (en) * 1998-02-19 2000-03-28 International Business Machines Corporation IEEE compliant floating point unit
US6260190B1 (en) * 1998-08-11 2001-07-10 Hewlett-Packard Company Unified compiler framework for control and data speculation with recovery code
US6301705B1 (en) * 1998-10-01 2001-10-09 Institute For The Development Of Emerging Architectures, L.L.C. System and method for deferring exceptions generated during speculative execution
US6519694B2 (en) 1999-02-04 2003-02-11 Sun Microsystems, Inc. System for handling load errors having symbolic entity generator to generate symbolic entity and ALU to propagate the symbolic entity
US6453463B1 (en) 1999-06-07 2002-09-17 Sun Microsystems, Inc. Method and apparatus for providing finer marking granularity for fields within objects
US6513109B1 (en) 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6487716B1 (en) 1999-10-08 2002-11-26 International Business Machines Corporation Methods and apparatus for optimizing programs in the presence of exceptions
US6658555B1 (en) * 1999-11-04 2003-12-02 International Business Machines Corporation Determining successful completion of an instruction by comparing the number of pending instruction cycles with a number based on the number of stages in the pipeline
US6766447B1 (en) * 2000-01-25 2004-07-20 Dell Products L.P. System and method of preventing speculative reading during memory initialization
US6631460B1 (en) 2000-04-27 2003-10-07 Institute For The Development Of Emerging Architectures, L.L.C. Advanced load address table entry invalidation based on register address wraparound
US7240186B2 (en) * 2001-07-16 2007-07-03 Hewlett-Packard Development Company, L.P. System and method to avoid resource contention in the presence of exceptions
US7565658B2 (en) * 2001-10-08 2009-07-21 Telefonaktiebolaget L M Ericsson (Publ) Hidden job start preparation in an instruction-parallel processor system
US7114059B2 (en) * 2001-11-05 2006-09-26 Intel Corporation System and method to bypass execution of instructions involving unreliable data during speculative execution
JP3900485B2 (ja) * 2002-07-29 2007-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体
EP1573490A2 (en) * 2002-12-04 2005-09-14 Koninklijke Philips Electronics N.V. Software-based control of microprocessor power dissipation
US7263600B2 (en) * 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
US7934082B2 (en) * 2004-08-27 2011-04-26 Panasonic Corporation Information processing apparatus and exception control circuit
US8312297B2 (en) * 2005-04-21 2012-11-13 Panasonic Corporation Program illegiblizing device and method
US8010550B2 (en) 2006-11-17 2011-08-30 Microsoft Corporation Parallelizing sequential frameworks using transactions
US8024714B2 (en) 2006-11-17 2011-09-20 Microsoft Corporation Parallelizing sequential frameworks using transactions
US7860847B2 (en) * 2006-11-17 2010-12-28 Microsoft Corporation Exception ordering in contention management to support speculative sequential semantics
JP5154119B2 (ja) * 2007-03-26 2013-02-27 テレフオンアクチーボラゲット エル エム エリクソン(パブル) プロセッサ
US20110047358A1 (en) * 2009-08-19 2011-02-24 International Business Machines Corporation In-Data Path Tracking of Floating Point Exceptions and Store-Based Exception Indication
US8458684B2 (en) * 2009-08-19 2013-06-04 International Business Machines Corporation Insertion of operation-and-indicate instructions for optimized SIMD code
US8825982B2 (en) 2010-06-10 2014-09-02 Global Supercomputing Corporation Storage unsharing
US9996348B2 (en) * 2012-06-14 2018-06-12 Apple Inc. Zero cycle load
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
CN104598808B (zh) * 2015-01-08 2018-02-16 中国科学院信息工程研究所 基于寄存器架构的Android应用完整性验证方法
US10120656B1 (en) 2017-11-07 2018-11-06 Bank Of America Corporation Robotic process automation system for functional evaluation and improvement of back end instructional constructs
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group
US11436830B2 (en) 2020-03-11 2022-09-06 Bank Of America Corporation Cognitive robotic process automation architecture

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4539635A (en) * 1980-02-11 1985-09-03 At&T Bell Laboratories Pipelined digital processor arranged for conditional operation
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
FR2656442B1 (fr) * 1989-12-21 1994-07-29 Bull Sa Processeur a plusieurs unites microprogrammees avec mecanisme d'execution anticipee des instructions.
US5303355A (en) * 1991-03-27 1994-04-12 Motorola, Inc. Pipelined data processor which conditionally executes a predetermined looping instruction in hardware
US5479616A (en) * 1992-04-03 1995-12-26 Cyrix Corporation Exception handling for prefetched instruction bytes using valid bits to identify instructions that will cause an exception
KR100310581B1 (ko) * 1993-05-14 2001-12-17 피터 엔. 데트킨 분기목표버퍼의추측기록메카니즘
US5428807A (en) * 1993-06-17 1995-06-27 Digital Equipment Corporation Method and apparatus for propagating exception conditions of a computer system
US5421022A (en) * 1993-06-17 1995-05-30 Digital Equipment Corporation Apparatus and method for speculatively executing instructions in a computer system
US5537559A (en) * 1994-02-08 1996-07-16 Meridian Semiconductor, Inc. Exception handling circuit and method
US5634023A (en) * 1994-07-01 1997-05-27 Digital Equipment Corporation Software mechanism for accurately handling exceptions generated by speculatively scheduled instructions
US5644742A (en) * 1995-02-14 1997-07-01 Hal Computer Systems, Inc. Processor structure and method for a time-out checkpoint

Also Published As

Publication number Publication date
JPH08263287A (ja) 1996-10-11
US5799179A (en) 1998-08-25
EP0804759B1 (en) 1998-11-18
CA2203124C (en) 2002-11-19
CN1109966C (zh) 2003-05-28
CZ208497A3 (en) 1997-12-17
CA2203124A1 (en) 1996-08-01
JP3093624B2 (ja) 2000-10-03
DE69600995T2 (de) 1999-07-08
EP0804759A1 (en) 1997-11-05
DE69600995D1 (de) 1998-12-24
KR19980701774A (ko) 1998-06-25
PL321542A1 (en) 1997-12-08
CZ293714B6 (cs) 2004-07-14
CN1136182A (zh) 1996-11-20
WO1996023254A1 (en) 1996-08-01
KR100290269B1 (ko) 2001-05-15

Similar Documents

Publication Publication Date Title
PL181901B1 (pl) Sposób i urzadzenie do obslugi instrukcji spekulatywnychPierwszenstwo: PL PL PL
US5974538A (en) Method and apparatus for annotating operands in a computer system with source instruction identifiers
US7437542B2 (en) Identifying and processing essential and non-essential code separately
KR950006616B1 (ko) 변환된 프로그램 코드에서 소스 명령 분자를 보전하기 위한 시스템 및 방법
US6505296B2 (en) Emulated branch effected by trampoline mechanism
US6631460B1 (en) Advanced load address table entry invalidation based on register address wraparound
US6721875B1 (en) Method and apparatus for implementing a single-syllable IP-relative branch instruction and a long IP-relative branch instruction in a processor which fetches instructions in bundle form
US7269718B2 (en) Method and apparatus for verifying data types to be used for instructions and casting data types if needed
US7895473B2 (en) Method and apparatus for identifying access states for variables
KR102484125B1 (ko) 벡터 처리회로를 사용한 에러 검출
US7386690B2 (en) Method and apparatus for hardware awareness of data types
US11221951B1 (en) Skipping tag check for tag-checked load operation
JP2001519953A (ja) マイクロプロセッサの改良
US20240061682A1 (en) Load chunk instruction and store chunk instruction
US7328374B2 (en) Method and apparatus for implementing assertions in hardware
US6704861B1 (en) Mechanism for executing computer instructions in parallel
US7653527B2 (en) Runtime selection of code variants in a multiprogram computer hardware emulation system
JP6882320B2 (ja) ベクトル命令の処理

Legal Events

Date Code Title Description
LAPS Decisions on the lapse of the protection rights

Effective date: 20060109