CZ293714B6 - Způsob pro ošetřování výjimek u spekulativních instrukcí a zařízení k provádění tohoto způsobu - Google Patents

Způsob pro ošetřování výjimek u spekulativních instrukcí a zařízení k provádění tohoto způsobu Download PDF

Info

Publication number
CZ293714B6
CZ293714B6 CZ19972084A CZ208497A CZ293714B6 CZ 293714 B6 CZ293714 B6 CZ 293714B6 CZ 19972084 A CZ19972084 A CZ 19972084A CZ 208497 A CZ208497 A CZ 208497A CZ 293714 B6 CZ293714 B6 CZ 293714B6
Authority
CZ
Czechia
Prior art keywords
exception
speculative
instruction
register
bit
Prior art date
Application number
CZ19972084A
Other languages
English (en)
Other versions
CZ208497A3 (en
Inventor
Kemal Ebcioglu
Gabriel Mauricio Silberman
Original Assignee
International Business Machines Corporation
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 International Business Machines Corporation filed Critical International Business Machines Corporation
Publication of CZ208497A3 publication Critical patent/CZ208497A3/cs
Publication of CZ293714B6 publication Critical patent/CZ293714B6/cs

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 or 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 or 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 or 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 or 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

Režie CPU je minimalizována sledováním spekulativních výjimek (202) pro pozdější zpracování během rozřešování (204) výjimky, včetně odkazování na adresy těchto spekulativních instrukcí a rozřešování (204) těchto výjimek opravou (206) toho, co vyvolalo výjimku, a opětovným provedením (208) instrukcí o nichž je známo, že jsou v cílové cestě. Sledování spekulativních výjimek má dvě komponenty, které používají bit výjimky, který je nastaven odezvou na stav (213) výjimky. Vynález sleduje původní spekulativní výjimku, která nastává, když se nějaká spekulativní instrukce, jejíž operandy nemají žádné bity výjimky nastaveny, octne ve stavu výjimky. Rozřešení spekulativní výjimky se spustí, když nějaká nespekulativní instrukce, která je v cílové cestě podmínkové větve, použije operand z registru, který má nastaven svůj bit výjimky. Z přítomnosti stavu výjimky a nespekulativní instrukce vzniká signál (220) výjimky pro rozřešení (204) výjimky. Rozřešení (204) spekulativní výjimky zahrnuje odpověď na výstupní signály ze zvláštního registru a bitu zvláštní výjimky pro rozřešení (204) stavu výjimky, který způsobil výjimku, a opětovné provedení (208) těch instrukcí, které závisely na výsledcích instrukcí, které vyvolaly spekulativní výjimku.ŕ

Description

Způsob pro ošetřování výjimek u spekulativních instrukcí a zařízení k provádění tohoto způsobu
Oblast techniky
Vynález se týká paralelního zpracování počítačových programů a podrobněji se týká zpracování spekulativních instrukcí.
Dosavadní stav techniky
Jeden způsob zlepšení chování procesoru (dále označen jako CPU) je zlepšení času cyklů. Jedna obtíž zlepšení času cyklů je instrukce větvení. Instrukce větvení obvykle musí čekat na výsledek určité instrukce před tím než může rozhodnout, kterou cestu má zvolit, buďto cestu s odskokem (cílovou) nebo cestu bez odskoku (sekvenční). Cílová cesta je tvořena posloupností instrukcí případně obsahující větvení, z nichž některá jsou cílová, zatímco jiná nejsou cílová. Některé architektury, které provádějí paralelismus zřetězeným zpracováním (pipelining) a/nebo použitím více funkčních jednotek, umožňují podmíněné provádění instrukcí pro zvětšení rozsahu přípustného paralelismu v aplikaci. Tyto spekulativní instrukce se objevují za instrukcemi podmíněného větvení, pro které nebyly podmínky dosud určeny, a tedy mohou nebo nemusí být ve skutečné cestě, kterou bude program prováděn (tak zvaná cílová cesta). CPU odhadne, po které cestě bude program prováděn. Po provedení odhadu CPU zahájí provádění cesty. Je-li odhad správný, nenastávají žádná zpoždění a provádění pokračuje plnou rychlostí. Je-li odhad nesprávný, začne CPU provádět cestu, kterou se měl vydat a nenastává horší zpoždění, než kdyby odhad nebyl proveden vůbec. Protože provádění spekulativních instrukcí nemusí být programem požadováno, jejich výsledek by neměl být potvrzován dokud se neurčí, zda jsou v cílové cestě. Nespekulativní instrukce jsou v cílové cestě.
Plánování spekulativních instrukcí se považuje za významný nástroj pro pohyb instrukcí v globálním kontextu mimo hranice základních bloků.
Tak jako v případě nespekulativních instrukcí jsou během provádění spekulativních instrukcí také možné výjimky, jako jsou chyby stránky, aritmetické přetečení a nesprávné adresování. V tomto případě je však žádoucí, aby ztrátový čas spojený s režií byl co nejmenší při ošetřování každé výjimky při jejím výskytu, protože se může později ukázat, že spekulativní instrukce je mimo cílovou cestu.
Na druhé straně, když se ukáže, že spekulativní instrukce, která vyvolala výjimku, je v cílové cestě, požaduje se správné ošetření výjimek a opětovné provedení pouze těch instrukcí, které závisí na jejich výsledcích. Dále v případě, že samotná výjimka je závažná (například při zastavení provádění programu), měl by být obsah CPU a paměti přesný. Přerušení je přesné například když uchovaný stav procesu odpovídá sekvenčnímu modelu provádění programu, kde jedna instrukce skončí před tím, než začne provádění další instrukce, a tudíž obsahy CPU a paměti musí být identické se stavem dosaženým sériovým prováděním stejného programu.
V časopise ACM SIGPLAN NOTICES, ročník 27, č. 9 z l.září 1992, str. 238-247 v pojednání o názvu Sentinel Scheduling for VLIW and Superscalar Processors popisují autoři S. A. Mahlke a spol, soubor architektonických znaků a doplněk plánování kompilačního času označený jako příznakové plánování. Příznakové plánování poskytuje účinný rámec pro kompilátorem řízené spekulativní provádění, které přesně detekuje a hlásí všechny výjimky. Příznakové plánování také podporuje spekulativní provádění ukládacích instrukcí tím, že poskytuje ukládací vyrovnávací paměť, která připouští pravděpodobnostní záznamy. Také je do jisté míry možné s příznakovým plánováním provést nový pokus výjimky. Vlivem nevratných vedlejších účinků
-1 CZ 293714 B6 by opětovnému provedení mohlo být předem zamezeno, zatímco v jiných případech všechny instrukce za příznakem by měly být opětovně provedeny.
Architektura, kterou navrhli M. D.Smith. M. S.Lam aM. A.Horowitz v publikaci Boosting Beyond Static Scheduling in a Superscalar Processor, Proc.l7th Inťl Symposium on Computer Architecture. Seattle. WA, květen 1990, str. 344354, podporuje spekulativní instrukce (nazvané urychlené instrukce) uložením jejich vedlejších účinků do vyrovnávací paměti pomocí stínových kopií souboru registrů a vyrovnávací paměti (je požadována jedna taková stínová kopie pro každé podmíněné větvení, na kterém mohou být aktuální spekulativní instrukce závislé). Mechanismus pro ošetřování výjimek není explicitně stanoven jinak než uvedením, že se vyskytují pouze když ... se urychlená instrukce pokusí o potvrzení.
V tomto momentě se stínové struktury znehodnotí a všechny urychlené instrukce se provedou znovu, nyní jako nespekulativní instrukce. Případně se provede znovu instrukce způsobující výjimku a v této době se výjimka ošetří. Není uveden žádný popis skutečného hardwaru, který sleduje urychlené instrukce, které vyžadují opětovné provedení, ani který sleduje existenci nějaké výjimky sdružené s nějakou urychlenou instrukcí. Dále, opětovné provedení všech urychlených instrukcí bez ohledu na to, která z nich vyvolala výjimku, je jasně neúčinné. Například uvažme případ, kde hodně instrukcí jsou urychlené instrukce a výjimka nastane v poslední urychlené instrukci. Mechanismus, který popisují M. D.Smith aspol, by znovu provedl všechny tyto instrukce, i když by stačilo znovu provést jedinou instrukci.
Druhé řešení navrhuje softwarový mechanismus pro ošetřování omezeného počtu speciálních případů spekulativních instrukcí, zejména pouze spekulativní instrukce LOAD z globálních adres (identifikovaných tím, že používají bázový registr, který ukazuje na známou globální tabulku), podobné adresy (stejný bázový registr a podobné přemístění k uzavřenému nespekulativnímu zavedení) a adresy NIL ukazatele (které mohou být vyzkoušeny zda obsahují hodnotu nula adresující první stranu v paměti). Viz. D. Bemstein a M. Sagiv, Proving Safety of Speculative Load Instructions at Compile Time, v Lecture Notes in Computer Science, ročník 582, B. KriegBrueckner (Ed.), Proc.4th European Sumposium on Programming. Rennes. Francie, únor 1992, vydal Springer-Verlag. Navrhovaný mechanismus Bemsteina a spol, spoléhá na tyto speciální případy pro vytvoření spekulativního zavádění analýzou buďto objektu nebo zdrojového kódu s podporou spojovacího programu (linkeru) a operačního systému pro zamezení výjimek v těch případech, kde spekulativní instrukce nejsou v cílové cestě.
V tomto přístupu se vyskytují tři problémy, zejména možnost, že spekulativní instrukce v cílové cestě způsobí výjimku, (nebezpečné) maskování některé výjimky, která by nastala v sekvenčním programu následkem změn zavedených ve spojovacím programu, a možnost zavedení výjimky, která by se v původním programu nevyskytovala. Ve všech třech případech je chování programu se spekulativními instrukcemi z pohledu programátora odlišné od chování původního (sekvenčního) kódu.
Pro osvětlení těchto tří případů je uvedena následující posloupnost instrukcí:
#1 LOADR3, 0 (R5) #2 LOAD R4, 8 (R5) #3 COMPARER4, 0 #4 BEO OUT #5 COMPARE R3,1000 #6 BEO OUT #7LOADR5,16 (R4)
OUT:
Podle přístupu Bemsteina a spol, může být instrukce #7 bezpečně přemístěna nad instrukci #3 a uvedena do spekulativního zavedení. V prvním případě a za předpokladu, že v programu je
-2CZ 293714 B6 chyba taková že programátor například uvede přemístění 8 místo 4 v instrukci #2, adresa vytvořená přičtením 16 k (nenulovému) obsahu R4, bude mít za následek odkazování na nesprávnou adresu. Provedení instrukce #7 vyvolá výjimku, ať už je přemístěna či nikoliv, její přemístění by však vedlo k nepřesné výjimce (stav stroje by byl v obou případech odlišný).
Mnohem závažnější je druhý případ, kde výjimka přítomná v sekvenčním kódu, která představuje chybu v programu, je maskována přidáním neúčinných stran navíc na hranicích datového segmentu (jak doporučuje Bemstein a spol.) pro ochranu před překročením hranic podobným zaváděním. Ve výše uvedeném segmentu kódu předpokládejme, že do R3 je instrukcí #1 zavedena určitá hodnota odlišná od 1000 (například 2000). Dále předpokládejme, že efektivní adresa pro instrukci #7 je mimo datový segment programu (například by přemístění bylo 0 místo 16). Následkem neúčinné strany vložené spojovacím programem nevyvolá zaváděcí instrukce výjimku (bez ohledu na to, zda je přemístěna či nikoliv) což může mít za následek nesprávné výsledky, přičemž příčina tohoto nemusí být programátorovi ihned zřejmá.
Třetí případ pracuje se zavedením výjimky způsobené spekulativním zavedením, které by nebylo přítomno v původním kódu. Pro osvětlení tohoto případu předpokládejme nyní, že do R3 se zavádí hodnota 1000 instrukcí #1. Také předpokládejme, že adresa vytvořená přičtením 16 k (nenulovému) obsahu R4, je nesprávná adresa. Protože porovnání v instrukci #5 dává stejný výsledek, provede se větvení instrukce #6. Instrukce #7 by tudíž v původním kódu nebyla provedena. Když se však přesune nad instrukci #3, nejen že bude provedena, ale také vyvolá výjimku.
Podstata vynálezu
Předměty tohoto vynálezu zahrnují minimalizaci režie CPU způsobené výjimkami ze spekulativních instrukcí a také účinné ošetřování výjimky pro spekulativní instrukci, o které se ukáže že je v cílové cestě. Podle tohoto vynálezu výjimka ze spekulativní instrukce se zpracuje pouze tehdy, když by nastala v původním sekvenčním programu.
Tento vynález obsahuje hardwarové mechanismy pro ošetřování výjimek vyvolaných spekulativními instrukcemi. Spekulativní instrukce mají bit navíc, označený jako spekulativní bit, který je nastaven. Spekulativní instrukce je instrukce přemístěná nad podmíněný skok, který určuje, zda spekulativní instrukce je nebo není v cílové cestě. Nespekulativní instrukce mají spekulativní bit vynulovaný.
Vynález je popsán v kontextu architektury procesoru VLIW (z angl. Věry Large Instruction Word = velmi dlouhé instrukční slovo), podobný přístup však lze použít u superskalámí anebo zřetězené architektury. V kontextu VLIW jedna instrukce obsahuje několik instrukcí, které jsou všechny vyvolány současně, a některé z nich mohou být spekulativní. Ze spekulativních operací se tudíž stanou spekulativní instrukce, principy však zůstanou stejné. Proto používáme výraz spekulativní instrukce v zájmu obecnosti. Tento mechanismus je podporován paralelizujícím kompilátorem, který sleduje používání registrů spekulativními instrukcemi, aby umožnil jejich opětovné provedení, když jsou ovlivněny nějakou výjimkou. Technika tohoto vynálezu významně snižuje režii způsobenou výjimkami způsobenými spekulativními instrukcemi.
Podle tohoto vynálezu je režie CPU minimalizována: a) sledováním spekulativních výjimek pro další zpracování během rozřešování, včetně odkazování na adresy těchto spekulativních instrukcí; ab) rozřešováním těchto výjimek opravou příčiny výjimky a opětovným provedením instrukce (instrukcí), o kterých je známé, že jsou v cílové cestě. Sledování spekulativních instrukcí má dvě komponenty, které používají bit výjimky.
-3 CZ 293714 B6
První komponenta je sledování původní spekulativní výjimky, která nastává, když se nějaká spekulativní instrukce, jejíž operandy nemají nastaveny bity výjimky, octne ve stavu výjimky. Stručně řečeno, toto sledování zahrnuje: (i) nastavení cílového registru v souboru registrů tak, aby odkazoval na adresu spekulativní instrukce, (ii) nastavení bitu výjimky v souboru bitů výjimky; (iii) uložení do zvláštního registru operandu (operandů) spekulativní instrukce; a (iv) uložení bitu výjimky do souboru zvláštních bitů výjimky. Druhá komponenta se použije tam,, kde se spekulativní instrukce pokusí použít registr, který má svůj bit výjimky nastaven jako je uvedeno výše. V tomto případě se vytvoří sekundární spekulativní výjimka a sledování výjimky zahrnuje: (i) nastavení cílového registru tak, aby odkazoval na adresu spekulativní instrukce jako výše; (ii) nastavení bitu výjimky cílového registru; a (iii) nastavení obsahu zvláštního registru na číslo registru operandu ve spekulativní instrukci spíše než obsah registru (a nastavení bitu výjimky souboru zvláštních výjimek). To umožňuje zpětné sledování ke spekulativní instrukci, což vyvolá původní spekulativní výjimku pro její rozřešení. Sledování výjimky také zruší informaci pro spekulativní výjimky, o kterých se ukáže, že jsou mimo cílovou cestu. Rozřešování spekulativní výjimky se spustí, když některá nespekulativní instrukce, která je v cílové cestě, použije operand z registru, majícího svůj bit výjimky nastaven. Rozřešování spekulativní výjimky zahrnuje opravu stavu výjimky, který vyvolal výjimku, a opětovné provedení instrukcí, které závisely na výsledcích instrukcí, které vyvolaly spekulativní výjimku.
Výhoda tohoto přistupuje, že místo nového provádění všech spekulativních instrukcí, jako tomu bylo v dosavadním stavu techniky, se znovu provádějí pouze ty, které a) závisí na instrukci způsobující výjimku a b) jsou v cílové cestě. Tento přístup šetří výpočetní čas CPU.
Přehled obrázků na výkresech
Vynález bude blíže vysvětlen prostřednictvím konkrétních příkladů provedení znázorněných na výkresech, na kterých představuje obr. la blokový diagram VLIW kompilátoru majícího výstup pro poskytování VLIW do VLIW datového procesoru, obr. lb část linky VLIW kódu, obr. 2 blokový diagram mechanismu ošetřování spekulativních instrukcí podle tohoto vynálezu, obr. 3 vývojový diagram znázorňující techniku pro označování spekulativních instrukcí, obr. 4 blokový diagram hardwaru použitého pro sledování spekulativních výjimek podle tohoto vynálezu.
Příklady provedení vynálezu
Architektura VLIW a úvod k vynálezu
Podle obr. la a lb VLIW kompilátor 108 velmi dlouhého instrukčního slova (dále VLIW) provádí kompilaci uživatelských programů 104 přímo do velmi dlouhých instrukčních slov 106 (VLIW), která jsou uložena jako vysoce paralelní, horizontální, mikrokód, jak naznačuje jeho název (o délce 500 až 2000 bitů). Jak je znázorněno na obr. lb. VLIW 106 je tvořen několika instrukcemi z redukované instrukční sady (RISC sady), které jsou zde také označovány jako balíky, z nichž každý řídí jiný zdroj (například aritmetickou logickou jednotku (ALU), větvící jednotku) v datovém procesoru VLIW nebo stroji 102. V jednom cyklu může tedy VLIW stroj 102 provést ekvivalent mnoha RISC instrukcí.
-4CZ 293714 B6
Každá RISC instrukce může obsahovat pole operačního kódu (opcode), pole prvního operandu a pole druhého operandu a číselné pole cílového registru. Jednobitové pole navíc označené jako pole spekulativního bitu, nebo jednodušeji jako spekulativní bit, je přítomno pro rozlišování spekulativních RISC instrukcí od nespekulativních RISC instrukcí, jak je podrobněji popsáno níže.
Během činnosti paralelizační kompilátor 108 přebírá na vstupu obvyklý sekvenční kód v asembleru (nebo předkompilovaný kód od kompilátoru z vyššího programovacího jazyka), rozšiřuje v případě potřeby všechny složité instrukce na jednodušší RISC instrukce, pro vytvoření RISC verze sekvenčního kódu, a pomocí pokročilých kompilačních technik (například jedna vhodná kompilační technika je popsána autory T. Nakatani aK. Ebcioglu, Using a Lookhead Window in a Compaction Based Parallelizing Compiler, Proč. 23rd Workshop on Microprogramming and Microarchitecture. IEEE Computer Society Press, listopad 1990, str.5768) určuje skupiny 109 RISC instrukcí a větve, které mohou být provedeny současně (mohou být v kódu od sebe značně daleko). Paralelizační kompilátor 108 pak umístí každou takovou skupinu 109 do VLIW 106. kterou může VLIW stroj 102 provést v jediném cyklu. Následkem toho se uživatelský program 104 provádí rychleji a nevyžaduje změny ve zdrojovém kódu, rekompilačním procesem prováděným v paralelizačním kompilátoru 108.
Je třeba poznamenat, že VLIW kompilátor 108 může být součástí VLIW stroje 102 nebo se může jednat o samostatný datový procesor. Specifika struktury a činnosti VLIW kompilátoru 108 netvoří součást tohoto vynálezu a není tudíž třeba je popisovat podrobněji.
Pro účely ošetřování výjimek vyvolaných spekulativními instrukcemi má VLIW stroj 102 registry, znázorněné obecně na obr. la, jako je registr 103, se zvláštním bitem (33. bit, za předpokladu, že registry 103 jsou normálně dlouhé 32 bitů). Zde se lze odvolat lat na publikaci autora K. Ebcioglu: Some Design Ideas for a VLIW Architecture for Sequential-Natured Software, Proč. IFIPWGIO.3 Working Conf, on parallel Processing. N. Holland, 1990, str.321)·
Na obr. Ib má tudíž každá RISC instrukce použitá v balících VLIW instrukce 106 spekulativní a nespekulativní verzi, to znamená, že zvláštní bit (spekulativní bit) v balíku označuje, zdaje tato RISC instrukce spekulativní nebo nespekulativní.
Má-li RISC instrukce nastaven spekulativní bit, tato instrukce se provádí ve VLIW 102. před znalostí výsledku podmíněného skoku ve VLIW 106, který určuje, zda tato instrukce bude či nebude provedena v původním sekvenčním kódu. Také když je nastaven bit výjimky registru 103. spekulativní instrukce vyvolala chybu (například přetečení nebo zavedení z neplatné adresy).
Ošetřování spekulativních výjimek
Obr. 2 je blokový diagram systému pro zpracování dat podle tohoto vynálezu. Režie CPU je minimalizována (a) sledováním 202 spekulativních výjimek pro další zpracování během rozřešování 204 výjimky, včetně odkazování na adresy těchto spekulativních instrukcí a(b) rozřešování výjimek opravou 206 toho, co vyvolalo výjimku, a opětovné provedení 208 instrukcí, o kterých je známo, že jsou v cílové cestě.
Sledování spekulativních výjimek má dvě komponentové části, které používají bit výjimky, který je nastaven odezvou na stav 213 výjimky. Stav výjimky může být generován různými způsoby, včetně stavů výjimky vznikajících funkcí aritmetické logické jednotky (ALU) 209.
Nejdříve se provádí sledování původní spekulativní výjimky, která nastává, když se spekulativní instrukce, jejíž operandy nemají nastavené žádné bity výjimky, octne ve stavu výjimky. Stručně
-5CZ 293714 B6 řečeno, toto sledování zahrnuje: (i) nastavení cílového registru v souboru 210 registrů tak, aby odkazoval na adresu spekulativní instrukce, danou adresou instrukce poskytnutou multiplexorem (MUX), (ii) nastavení bitu výjimky v souboru 212 bitů výjimky sdruženém s cílovým registrem odezvou na stav 213 výjimky od ALU 209, (iii) uložení ve zvláštním registru v souboru 214 zvláštních registrů operandu (operandů) spekulativní instrukce a uložení do souboru 216 zvláštních bitů výjimky bitu výjimky (který není nastaven pro původní spekulativní výjimky, nýbrž je nastaven pro sekundární spekulativní výjimky, tj. který používá výsledky spekulativních instrukcí, které vyvolávají spekulativní výjimky). Linka 217 volby operandu z dekodéru 201 instrukcí přivádí signály do souboru 210 registrů a do souboru 214 zvláštních registrů. Logický obvod 218 zajišťuje rozlišení mezi původními a sekundárními spekulativními výjimkami.
Za druhé, když spekulativní instrukce zkusí použít registr mající nastavený bit výjimky, jako u výše uvedené původní spekulativní výjimky, je vytvořena sekundární spekulativní výjimka a sledování výjimky zahrnuje: (i) nastavení cílového registru v souboru 210 registrů pro odkázání na adresu spekulativní instrukce jako výše, (ii) nastavení bitu výjimky zvláštního registru 212 odezvou na stav 213 výjimky, a (iii) nastavení obsahu zvláštního registru souboru 214 zvláštních registrů na číslo (čísla) registrů operandů ve spekulativní instrukci spíše než obsahu registru linkou 217 volby operandu (a nastavení bitu výjimky souboru 216 zvláštních bitů výjimky) pro umožnění sledování zpět ke spekulativní instrukci, která vyvolala původní spekulativní výjimku pro její rozřešení (rozřešování 204 výjimky).
Rozřešení spekulativní výjimky se spustí když nespekulativní instrukce, která je v cílové cestě, používá operand z registru, majícího nastavený bit výjimky. Přítomnost stavu výjimky a nespekulativní instrukce generuje signál 220 výjimky do bloku rozřešování 204 výjimky. Rozřešení 204 spekulativní výjimky zahrnuje poslání odezvy na výstupní signály ze zvláštního registru a zvláštního bitu výjimky pro rozřešení 206 (opravu) stavu výjimky, který vyvolal výjimku, a opětovné provedení 208 instrukcí, které závisí na výsledcích instrukcí, které vyvolaly spekulativní výjimku.
Podpora kompilátoru
Paralelizační kompilátor 108 znázorněný na obr. 3 může využívat spekulativní/nespekulativní bity následujícím způsobem. Za prvé, všechny instrukce v uživatelském programu 104 (obr. 1) jsou označeny jako nespekulativní v bloku 302. Během paralelizace když je některá instrukce přenesena před podmíněný skok, který určuje zda se tato instrukce v původním kódu provede, je kompilátorem v bloku 304 označena jako spekulativní. (Když některá instrukce není s určitostí provedena na obou cestách podmínkové větve, potom tato podmínková větev určí v sekvenčním kódu, zda se instrukce provede.) To je vše co je třeba pro co nejjednodušší použití mechanismu bitu výjimky. Požaduje-li se, aby všechny výjimky, které nastávají v původním programu, byly zjišťovány v paralelním programu, paralelizační kompilátor 108 (obr. 1) musí zajistit, aby výsledek každé spekulativní instrukce byl případně použit přímo nebo nepřímo nespekulativní instrukcí zavedením nových nespekulativních instrukcí v případě potřeby (typicky to vždy nebude nutné, protože ukládající podmínkové větve nejsou spekulativní).
Zde popsaný vynález řeší rovněž problém nevyžadovaných přerušení. Podle tohoto vynálezu se výjimka zpracuje ve VLIW 106 pouze pokud by nastala v původním sekvenčním programu.
Hardwarový mechanismus spekulativních výjimek sledování
Jak bylo vysvětleno v předchozí části, spekulativní výjimka je sdružena s registrem, který dostal výsledek (takzvaný cíl) instrukce způsobující výjimku. V této souvislosti výraz registr obsahuje více než obvyklé obecné registry. Tento termín znamená jakýkoli registr s nastaveným bitem výjimky. Záznam výskytu výjimky může tudíž být sdružen s tímto registrem, pokud kompilátor po celou dobu zajišťuje, že stejný registr nemůže být cílem pro více než jednu
-6CZ 293714 B6 spekulativní instrukci. To znamená, že registr nemůže být znovu použit, dokud jeho výsledek není spotřebován nespekulativní instrukcí nebo není potřeba, protože je mimo cílovou cestu.
Předpokládá se, že velikost registruje 32 bitů se zvláštním bitem (33. bit) sloužícím jako příznak pro spekulativní výjimky. Rozšíření na větší (nebo menší) velikost registru je v rozsahu vynálezu, přičemž bit n+1 slouží jako bit výjimky pro registr o n bitech.
V tomto vynálezu je spekulativní výjimka sdružena se svým cílovým registrem uložením adresy instrukce, která vyvolala výjimku, do cílového registru a nastavením jejího bitu výjimky. Alternativa by mohla být uložení samotné instrukce eventuálně po dekódování. To by vyžadovalo paměť navíc pro uložení instrukce, zrychlilo by to však její provedení pokud se ukáže, že je v cílové cestě. Také by to mohlo zabránit neúspěšným pokusům přístupu do mezipaměti typy cache, protože k lince obsahující instrukci není nutno přistupovat znovu.
Zbytek zpracování spekulativní instrukce obsahuje dvě komponenty: a) sledování výjimky, které je implementováno plně hardwarově a b) rozřešení výjimky, které je většinou řízeno softwarem.
Sledování výjimek pracuje se spekulativními výjimkami tak jak se objevují a rozlišuje mezi dvěma případy. První případ se týká původní spekulativní výjimky, zatímco druhý případ se týká podmínky, kde se spekulativní instrukce pokouší použít jako operand hodnotu, která má nastavený bit výjimky, která je zde označena jako sekundární spekulativní výjimka. Sledování výjimek je také zodpovědné za zapomenutí informace sdružené se spekulativní výjimkou, o které se zjistilo, že je mimo cílovou cestu.
Komponenta rozřešování výjimek se spustí když nespekulativní instrukce použije jako operand registr s nastaveným bitem výjimky. Říkáme, že v tomto okamžiku se spekulativní výjimka popř. výjimky, které nastavují bit výjimky, materializovaly. Materializace výjimky a rozřešování jsou předmětem dalšího oddílu, protože se z velké části týká softwarové podpory. Zbývající část tohoto oddílu pojednává o hardwarové podpoře pro sledování výjimek.
1) Sledování původních spekulativních výjimek
Tato část se týká spekulativní instrukce, která způsobuje normální výjimku, tj. takovou, která není způsobena snahou o použití hodnoty registru, který má nastaven bit výjimky. Jestliže jsou nějaké operandy instrukce obsaženy v souboru 210 registrů, jejich hodnoty se zkopírují do odpovídajícího zvláštního registru souboru 214 zvláštních registrů s vynulovaným bitem výjimky. Není-li použit zvláštní registr (odpovídající operand není v registru nebo to instrukce nevyžaduje), jeho bit výjimky se vynuluje a jeho hodnota se ponechá nedefinovaná. Kopírování hodnot souboru 210 registrů se provádí přímo ze souboru 210 registrů přídavnou datovou cestou z portů souboru registrů do souboru 214 zvláštních registrů.
Podle obr. 4 je původní spekulativní výjimka popsána podrobněji (tmavé kruhy jsou vstupy z dekodéru 201 instrukcí a tmavé čtverce jsou vstupy/výstupy z bloku rozřešování 204 výjimek z obr. 2). Tento typ výjimky nastává, když se spekulativní instrukce, jejíž operandy nemají nastaveny žádné své bity výjimky, dostane do stavu výjimky, jako je přetečení, chyba stránky atd. Když se toto stane, nastaví se linka 401 výjimky, což způsobí, že výstup OR hradla 402 má hodnotu TR.UE (pravdivý). Protože instrukce způsobující výjimku je spekulativní, spodní výstup 403 AND hradla 404 má hodnotu FALŠE (nepravdivý) a na výstupu AND hradla 404 není žádný signál 220 výjimky. To znamená, že v tomto okamžiku nenastává žádné přímé zpracování výjimky.
Pro další sledování výjimky z důvodu dalšího zpracování linka 405 dopraví v případě potřeby signál výjimky do vstupního portu souboru 406 bitů výjimky, zatímco port volba zápisu bloků souboru 406 bitů výjimky a souboru 417 registrů zvolí bit odpovídající cílovému registru
-7CZ 293714 B6 pro spekulativní instrukci způsobující výjimku, jak je určeno linkou 407 volby cíle. Současně linka 405 řídí MUX 410, který zvolí svůj levý vstup - linku 411 adresy instrukce - spíše než linku 412 výsledku. To způsobí, že adresa instrukce (linka 411) se uloží do cílového souboru 417 registrů a slouží tudíž jako ukazatel na instrukci způsobující výjimku pro užití během rozřešování výjimky.
Budiž uvedeno, že pravý výstupní a levý výstupní port ze souboru 406 bitů výjimky (souboru o šířce 1 bit s hodnotami 2-čtení,J-zápis) dodávají bit výjimky pro pravý a levý operand pro instrukci, když jsou zvoleny linkou 408 volby pravého registru resp. linkou 409 volby levého registru. Protože se předpokládá, že operandy nemají své bity výjimky nastavený, oba tyto výstupy mají hodnotu FALŠE a linka 415 má tudíž hodnotu FALŠE. Soubor označený jako 2čtení, 1-zápis znamená, že soubor je schopen současně provádět výstup dat dvěma čtecími porty a současně provádět vstup dat jedním zápisovým portem.
Linka 405 slouží rovněž jako signál zápis-povolen pro levý soubor zvláštních registrů 413 a levý soubor 414 bitů výjimky. Linka 405 dělá totéž pro pravé soubory registrů (nejsou znázorněny). To předpokládá nejvýše dva operandy na jednu instrukci, i když je možné zobecnění na více operandů. Porty volba zápisu obou souborů přijímají vstup z linky 407 volby cíle, sloužící jako rozšíření informace uložené v cílovém registru v souboru 417 registrů pro instrukci způsobující spekulativní výjimku. Levý soubor zvláštních registrů 413 (soubor 1-čtení, 2-zápis) o šířce určené délkou operandů v dané architektuře (například 32bitů) uloží levý operand instrukce zvolený MUX 417c řízeným linkou 415 (jak bylo uvedeno výše, linka 415 má hodnotu FALŠE) a vytvořený portem levého datového výstupu souboru 417 registrů. Soubor 417 registrů je soubor 2-čtení/1-zápis o šířce určené operandy vdané architektuře (například 32 bitů). Tento výstup je zvolen linkou 409 volby levého registru. Paralelně se stav linky 415 uloží do levého souboru 414 bitů výjimky (soubor l=čtení, l=zápis o šířce 1 bitu).
Některé operandy nejsou nedílnou součástí spekulativní instrukce, která způsobuje výjimku. Funkcí souborů zvláštních registrů 413 je uložení dostatečných informací o operandech, které nejsou nedílnou součástí spekulativní instrukce, která způsobuje výjimku, aby instrukce mohla být provedena znovu, pokud se zjistí, že je v cílové cestě. Jinými slovy, operandy, které jsou součástí instrukce literály obsažené v instrukci - mohou být z instrukce získány, aby byly znovu provedeny během rozřešování výjimky (vysvětleno níže). Jiné vstupy zásobují MUX 417a a 417b u dna souboru 417 registrů. Tyto vstupy mohou přicházet z polí literálů (bezprostředně) v instrukci. Instrukce může proto mít dva operandy, avšak pouze jeden z nich (nebo možná žádný) přichází z registru (registrů). Ostatní mohou být přivedeny z některého pole v instrukci pod řízením dekodéru instrukce, linkou volby levého a pravého operandu. Další možné zdroje operandů obsahují speciální registiy v datovém procesoru, které jsou odděleny od souboru registrů.
2) Sekundární spekulativní výjimky
Když se spekulativní instrukce pokusí použít jako operand registr v souboru 417 registrů, který má odpovídající bit výjimky v souboru 406 bitů výjimky nastaven, vytvoří se tak sekundární spekulativní výjimka. V následujícím popise se předpokládá, že levý operand (alespoň) má nastaven svůj bit výjimky. Bit výjimky odpovídající levému operandu ve spekulativní instrukci se zvolí v souboru 406 bitů výjimky linkou 409 volby levého registru. Tento bit výjimky se objeví na portu levý výstup souboru 406 bitů výjimky a zásobuje AND hradlo 418, které je také řízeno signálem 419 nazvaným levý operand použit, který má hodnotu TRUE když instrukce skutečně používá levý operand v registru souboru 417 registrů. Je třeba poznamenat, že v architekturách, které podporují instrukce se dvěma operandy, může některá instrukce mít jeden nebo nemusí mít žádný operand. Výstup AND hradla 418. o kterém se v tomto případě předpokládá, že bude mít hodnotu TRUE, napájí OR hradlo 402. jehož výsledkem je hodnota TRUE na lince 405. což signalizuje spekulativní výjimku.
-8CZ 293714 B6
Uložení adresy instrukce do cílového registru v souboru 417 registrů a označení jejího bitu výjimky v souboru 406 bitů výjimky probíhají jako v případě původní výjimky. V tomto případě je yšak jiný obsah souborů zvláštních registrů 413, 414 oproti stavu při původní spekulativní 5 výjimce. Levý soubor zvláštních registrů 413 přijímá místo samotného levého operandu číslo registru který měl operand uchovávat. Protože se předpokládá, že kompilátor zaručuje nejvýše jednu spekulativní výjimku najeden cílový registr, specifikace čísla registru umožňuje sledování zpět k instrukci, která způsobila původní spekulativní výjimku, v případě, že se požaduje rozřešení. Číslo registruje určeno linkou 409 volby levého registru a přiváděno přes MUX 417c. 10 který je řízen linkou 415 (která má hodnotu TRUE). Linka 415 slouží také pro nastavení bitu výjimky v levém souboru 414 bitů výjimky. Záznam čísla registru spíše než jeho obsahu vyžaduje multiplexor 417c u vstupního portu každého ze dvou souborů zvláštních registrů. Multiplexor 417c je napájen ze souboru cílových registrů (kvůli obsahům) a z dekodéru instrukcí (kvůli číslu registru).
Instrukce může být zachycena a uschována včetně její polohy ve VLIW instrukci 106 (obr. 1), takže může být zkopírována do souboru 417 registrů když nastane spekulativní výjimka. Po dokončení tohoto procesu se obnoví provádění VLIW 106 jako obvykle.
3) Zrušení spekulativních výjimek
Spekulativní instrukce, o které se ukáže, že je mimo cílovou cestu, může ponechat soubor 417 registrů s nastaveným bitem souboru 406 bitů výjimky jako výsledek výjimky během jejího provádění. Proto pokaždé když se uschová výsledek do registru, ať už nespekulativní instrukcí 25 nebo spekulativní instrukcí, která nezpůsobuje výjimku, vynuluje se bit výjimky pro tento registr.
Sledováním živých registrů paralelizační kompilátor 108 (obr. 1) zaručuje, že spekulativní a nespekulativní hodnoty nejsou smíchány, takže nenastávají zvláštní výjimky v uživatelském programu 104 (obr. 1).
Je třeba uvést, že u této techniky může nastávat následující problém. Například původní (sekvenční) program může použít registr, který není inicializován (kvůli chybě v programu). Je možné, že spekulativní instrukce nastavila tento registr a ten tudíž buďto obsahuje hodnotu, nebo má nastavený svůj bit výjimky následkem nějaké spekulativní výjimky. V obou případech by chování programu nebylo konzistentní s původní verzí. Aby se tomuto zabránilo, může být 35 vloženo ověření inicializace nebo explicitní vynulování (alespoň spekulativního bitu) registru, který obsahuje spekulativní hodnotu, na konec úseku programu pro který se registr udržoval živý (viz následující oddíl).
Příklad
Uvažujme (většinou spekulativní) posloupnost instrukcí znázorněnou v tabulce 1. Pro jednoduchost jsou instrukce vypsány jednotlivě (jedna instrukce na řádek), v prostředí VLIW by však byly seskupeny do několika na jednu VLIW instrukci.
Tabulka 1
100 LOAD R4, 0 (R5) S
101 LOAD R6, 0 (R3) s
102 LOAD Rl, 8 (R4) s
103 LOAD R2,12 (R6) s
104 ADDR1,R2, R7 s
-9CZ 293714 B6
105 MULTR1,R8, R9 S
106 ADDR9, R9, R10 S
200 STORE R7, 8 (Rll) N
Tabulka 1 obsahuje vzorovou posloupnost instrukcí. Každá instrukce má příznak S jako spekulativní nebo N jako nespekulatívní (to by bylo vyjádřeno nějakou hodnotou pro spekulativní bit v instrukci). LOAD používá adresu v pravém operandu pro přístup do paměti a zavedení obsahu do levého (cílového) registru. (STORE provádí opačnou funkci.) ADD/MULT používá první a druhý (levý a pravý) operand jako vstup s uložením výsledků do třetího (cílového) registru.
Předpokládejme, že registry R5 a R3 obsahují adresy stránek, které nejsou v paměti přítomny, například 2000a 3000, a jejich použití v instrukcích 100 a 101 způsobí výskyt chyby stránky. Jiné relevantní registry jsou R8 aRll, o kterých se předpokládá, že mají své bity výjimky vynulovány (nebyly cílem spekulativní instrukce, která vyvolala výjimku) a obsahují čísla 234 popřípadě 10 000 (předpokládejme, že stránka obsahující adresu 10 000 je v paměti přítomna). Když provádění dosáhne instrukce 200, nespekulatívní instrukce, materializují se spekulativní výjimky. Předtím než jsou výjimky rozřešeny, obsah relevantních registrů je uveden v tabulce 2. Každý řádek ukazuje obsah běžného registru ze souboru 417 registrů a také odpovídajícího (levého a pravého) zvláštního registru ze souboru zvláštních registrů 413. společně s bitem souboru 406 bitů výjimky a souboru 414 bitů výjimky pro každý registr. Záznam I-nnn symbolizuje adresu instrukce nnn v posloupnosti.
Tabulka 2
Registr Regul.+f Zvláštní Levý+f Zvláštní Pravý+f Poznámka
R1 1-102+1 ???+0 4+1 Pravý op ukazuje na R4
R2 1-103+1 ???+0 6+1 Pravý op ukazuje na R6
R3 30000+0 ???+0 ???+0 Dáno
R4 1-100+1 ???+0 2000+0 Pravý op je (R5)
R5 2000+0 ???+0 ???+0 Dáno
R6 1-101+1 ???+0 30000+0 Pravý op je (R3)
R7 1-104+1 1+1 2+1 Oba op udávají výjimky (R1 & R2)
R8 234+0 ???+0 ???+0 Dáno
R9 1-105+1 1+1 234+0 Levý op ukazuje na Rl, pravý op je (R8)
R10 1-106+1 9+1 9+1 Oba op ukazují naR9
Rll 10000+0 ???+0 ???+0 Dáno
-10CZ 293714 B6
Tabulka 2 ukazuje obsahy běžných a zvláštních registrů a příznaky. Tři střední sloupce odpovídají místům v souborech zvláštních registrů 417/406, 413/414 a ekvivalentu 413/414 pro pravý operand. Stav odráží spekulativní výjimky pro (běžné) registry Rl, R2, R4, R6, R7,. R9 a R10. Provedení instrukce 200 materializuje výjimku na R7 a nepřímo na Rl, R2, R4 a R6. Materializace a rozřešování spekulativních výjimek
Když nespekulativní instrukce narazí na operand (registr) s nastaveným bitem výjimky, říkáme, že spekulativní výjimka (výjimky), které nastavují tento bit výjimky, jsou materializovány. Řízení se předá mechanismu rozřešování spekulativních výjimek znázorněnému v tabulce 3, kteiý se pokusí a) rozřešit příčinu (příčiny) výjimky a b) znovu provést všechny spekulativní instrukce, které závisí na výjimce a bylo u nich určeno, že leží na cílové cestě. Rozřešení příčin výjimky znamená řídit systém tak, aby provedl nějakou akci a pokusil se pomocí ní pokud možno opravit to, co vyvolalo spekulativní výjimku. Například když výjimka byla chyba stránky způsobená adresováním dat, která nejsou právě přítomna v paměti, rozřešení případu by znamenalo zavést do paměti stránku, která zmíněná data obsahuje, aktualizovat tabulky, atd. Druhá komponenta, opětovné provedení, by zahrnovala opakování provedení instrukcí, o kterých je nyní známo, že jsou v cílové cestě, které nějak použily výsledek operace, která způsobila výjimku.
Tabulka 3 rozřešit-Výjimku: FUNCTION (index_registru) RECURATVE RETURNS (hodnota_registru) /* výjimka mohla být již rozřešena. Pokud ano, přeskoč ♦/ /♦ zpracování a vrať obsah R[index registru] ♦/
IF f(R[index registru]) ΊΉΕΝ /* zkus zda levý operand vyžaduje rozřešeni. Pokud ano, rekurze */
IF f(XL[index_registru]) ΤΉΕΝ c(XL(index_registru)) - rozřešení výjimky c(XL[index_registru])) f (XL[index_registru]) = 0 /* zkus zda pravý operand vyžaduje rozřešení. Pokud ano, rekurze*/
IF f(XR[index_registru]) THEN c(XR[index registru]) = rozřešení výjimky (c(XR[index_registru])) f(XR[index_registru]) = 0 /* Operandy připraveny. PROVÉST instrukci a nastavení obsahu */ /* R(index-registru) a současně vynulovat jeho 33. bit příznaku.*/ /* Všechny výjimky během provádění instrukce se ošetří */ /* za běhu, jako kdyby přišly z běžného (nespekulativního */ /* zpracování instrukce. ♦/
EXECUTE (c[R(index-registru]), /* ukazatel na instrukci */ c(XL[index-registru]) /* registr levého operandu */ c(XR[index registru]) /* registr pravého operandu */ /* f(R[index registru]) = 0 je implicitní */ /* v tomto okamžiku má registr správný obsah. */
RETURN (c (R[index_registru]))
END rozřešit_výjimku
-11 CZ 293714 B6
Tabulka 3 ukazuje návrh rekurzivní funkce pro implementaci rozřešování výjimky. Předpokládejme, že R(i) je registr, který způsobil materializaci výjimky. Je třeba vzít v úvahu, že obsah R (i) ukazuje na (spekulativní) instrukci, která by měla být znovu provedena pro rozřešení výjimky a že zvláštní registr XL (i) (levý) a XR (i) (pravý) odpovídající
R[i] mohou obsahovat operandy požadované k provedení instrukce. Notace c (r) a f (r) je použita pro obsahy resp. bit výjimky registru r, kde r je běžný (R), zvláštní levý (XL), nebo zvláštní pravý (XR) registr. Funkce rozřešit výjimku se tudíž volá jednou pro každý registr operandu v nespekulativní instrukci, která má nastaven svůj spekulativní bit.
Příklad
Mějme opět posloupnost instrukcí znázorněnou v tabulce 1 a obsah registrů daný v tabulce 2 a dále tabulku 4. Provedení instrukce 200 by způsobilo posloupnost volání daných v tabulce 4 (odsazení zohledňuje úroveň rekurze), kde vw, www, xxx a yyy představují hodnoty přiřazené k R4 (pomocí 1-100), k R1 (pomocí 1-102), k R6 (pomocí 1-101) a k R2 (pomocí 1-103).
Tabulka 4
LevýOp = rozřešitvýjimku (7) c(XL[7]) = rozřešit_výjimku (1) c(XR[l]) = rozřešit_výjimku (4)
EXECUTE (1-100, ???, 20000) /* f(R[4]) = Oje implicitní*/
EXECUTE (1-102, ???, vw) /* f(R[ 1 ]) = 0 je implicitní*/ c(XR[7]) = (2) c(XR[2J) = rozřešit-výjimku (6)
EXECUTE (1=101, ???, 30000) /* f(R[6]) = 0 je implicitní*/
EXECUTE (1-103, ???, xxx) /* f(R[2J) = 0 je implicitní*/
EXECUTE (1-104, www, yyy) /* f (R[7j) = 0 je implicitní*/
Nyní, když některá nespekulativní instrukce použije R10 jako svůj pravý operand po dokončení instrukce 200, posloupnost volání by byla podobná posloupnosti v tabulce 5 (kde zzz představuje hodnotu přiřazenou k R9 instrukcí 1-105).
Tabulka 5
Pravý_Op = rozřešit výjimku (10) c(XL[10]) = rozřešit_výjimku (9) c(XL[9J) = rozřešit_výjimku (1) /* když f(R[l]) = 0 jejich obsah se vrátí */
EXECUTE (1-105, www, 234) /* f(R[9]) = 0 je imPlicitní* c(XR[10])= rozřešitvýjimku (9) /* když f(R[9J) = 0 jejich obsah se vrátí */
EXECUTE (1-106, zzz, zzz) /* f(R[10]) = 0 je implicitní*/
Je jasné, že po hardwaru se požaduje, aby podporoval přístup pro čtení a zápis obsahu zvláštních registrů a jejich příznaků (částečně znázorněno na obr. 4), a také (implicitně) nulovat bit výjimky registru ze souboru 417 registrů buďto mechanismem rozřešování 204 spekulativních výjimek, nebo tím, že nespekulativní instrukce zapisuje do registru v souboru 417 registrů.
- 12CZ 293714 B6
Nastáne-li závažná výjimka, zatímco se rozřešuje spekulativní výjimka, některé registry nemusí být konzistentní s jejich stavem v sekvenčně prováděné verzi téhož programu. Například uvažujme závažnou výjimku, zatímco je snaha znovu provést instrukci 102, zatímco se řeší spekulativní výjimka v R7, jak je znázorněno výše. V tom případě byla instrukce 100, která nastavuje R4, dokončena, avšak instrukce 101, která nastavuje R6, zůstává k rozřešení. Obsah R6 tudíž není konzistentní se skutečností, že instrukce 102 je instrukce způsobující závažnou výjimku. Nicméně, protože bit výjimky R6 je stále nastaven, je identifikován tak, že obsahuje adresu instrukce s nerozřešenou spekulativní výjimkou. Dále může být opatřen seznam všech takových instrukcí jako část dat spojených se závažnou výjimkou (pro diagnostické účely), jednoduchým výpisem obsahů všech registrů, které mají nastaven svůj bit výjimky.
Podpora kompilátoru
Jak již bylo uvedeno v předchozích oddílech, paralelizační kompilátor 108 (nebo jakýkoli program, který je použit pro vytváření spekulativních instrukcí) musí provádět sledování zvláštních registrů 413 nebo 417 použitých spekulativními instrukcemi tak, aby v žádném okamžiku v programu neměla více než jedna taková instrukce stejný zvláštní registr 413 nebo 417 jako cíl svého výsledku. Jinak řečeno, zvláštní registr 413 nebo 417 nastavený spekulativní instrukcí by neměl být znovu použit před tím, než se jeho hodnota spotřebuje nějakou nespekulativní instrukcí, nebo až když se určí, že tato hodnota není potřebná, protože o spekulativní instrukci se zjistí, že je mimo cílovou cestu. První případ, kde nespekulativní instrukce používá jako operand obsah zvláštního registru 413 nebo 417, nastaveného spekulativní instrukcí, vynutí kompilátor 108 udržování tohoto zvláštního registru 413 nebo 417 jako živého, a tudíž blokuje jeho nastavení jinými instrukcemi.
Pro vyřešení druhého případu paralelizační kompilátor 108 zavede prázdnou instrukci na konec spekulativní cesty, která používá jako operandy všechny zvláštní registry 413 nebo 417. které jsou nastaveny spekulativními instrukcemi a nejsou použity jako operandy nespekulativními instrukcemi. Důvod proč jsou tyto zvláštní registry 413. 417 udržovány živé až do bodu, ve kterém lze určit, zda jsou mimo cílovou cestu, spočívá v tom, že slouží jako operandy pro spekulativní instrukce ajako takové mohou obsahovat spekulativní výjimku, která může vyžadovat rozřešení když se zjistí, že jsou součástí cílové cesty.
Pomocí výše uvedeného přístupu může nastat situace, kdy v důsledku toho, že zvláštní registr 413. 417 není inicializován v původním programu, když je nastaven spekulativní instrukcí, může být následně použit nespekulativní instrukcí před tím, než je správně inicializován. To může vyvolat zvláštní výjimku (když má zvláštní registr 413, 417 nastaven bit výjimky), což je ve skutečnosti výsledek chyby při inicializaci zvláštního registru 413, 417. Aby se předešlo této situaci, může být místo prázdné instrukce, která udržuje živé zvláštní registry 413, 417, nastavené spekulativními instrukcemi, použita instrukce, která nuluje spekulativní bit zvláštního registru 413.417 (a případně nastaví jeho hodnotu na nedefinovanou).
Dále je třeba vzít v úvahu vztah spekulativních výjimek k povolení/zakázání výjimek pro zvláštní úkol nebo úsek úkolu. Jednoduchý přístup by bylo ignorovat otázku, zda je zvláštní výjimka povolena nebo zakázána, dokud se výjimka nematerializuje. V tomto okamžiku se provede kontrola, aby se zjistilo jaké by mělo být zpracování jako kdyby výjimka byla způsobena nespekulativní instrukcí. Ve většině případů kompilátor může sledovat instrukce povolující a zakazující výjimky, takže výsledné chování je konzistentní se sekvenčním programem. V těch případech, kde toto není možné, by kompilátor 108 zamezil vytváření spekulativních instrukcí pro posloupnost instrukcí. Stručně řečeno, spekulativní výjimky se zaznamenají bez ohledu na to, zda jsou zakázány. Pouze v době rozřešování je u spekulativních výjimek prováděna kontrola na to, zda se jedná o povolené výjimky. Paralelizační kompilátor zajišťuje, že žádná výjimka není přijata pokud má být zakázána.
-13CZ 293714 B6
Vynález byl znázorněn a popsán na základě jeho upřednostňovaného provedení a běžným odborníkům je zřejmé, že lze provádět změny ve formě a podrobnostech bez vybočení z rozsahu a podstaty vynálezu.

Claims (17)

  1. PATENTOVÉ NÁROKY
    1. Způsob ošetřování výjimek u spekulativních instrukcí, obsahující kroky: spekulativního provedení jedné nebo více instrukcí nastavením spekulativního bitu, identifikace každé výjimky sdružené se spekulativně prováděnými instrukcemi, určením toho, zda spekulativně provedené instrukce jsou v cílové cestě, rozřešení (204) příčin každé spekulativní výjimky sdružené se spekulativně provedenou instrukcí, která je následně nespekulativně opětovně provedena (208) vynulováním spekulativního bitu, vyznačující se tím, že krok identifikace zahrnuje kroky:
    identifikace původních spekulativních výjimek zahrnující:
    1. nastavení bitu výjimky v souboru bitů výjimky sdruženém s prvním cílovým registrem v souboru registrů odezvou na stav původní výjimky, ii. nastavení prvního cílového registru tak, aby odkazoval na adresu spekulativně provedené instrukce sdružené se stavem původní výjimky, iii. uložení do zvláštního registru v souboru zvláštních registrů alespoň jednoho operandu, je-li nějaký, spekulativně provedené instrukce a uložení bitu výjimky do souboru bitů zvláštních výjimek.
  2. 2. Způsob podle nároku 1, vyznačující se tím, že dále zahrnuje krok identifikace každé sekundární výjimky určením toho, zda byl nastaven (212) bit výjimky, přičemž sekundární výjimky nastávají odezvou na spekulativně provedenou instrukci, která narazí na jednu z identifikovaných původních výjimek.
  3. 3. Způsob podle nároku 1 nebo 2, vyznačující se tím,že krok identifikace zahrnuje identifikaci obou původních výjimek a také sekundárních výjimek, které nastanou když se spekulativně prováděná instrukce pokouší použít jako operand hodnotu mající identifikovanou výjimku nebo nastavený přidružený bit výjimky.
  4. 4. Způsob podle nároku 1, vyznačující se tím, že krok identifikace zahrnuje kroky: identifikaci původních spekulativních výjimek zahrnující:
    udržení záznamu stavu výjimky, udržení záznamu adresy spekulativně provedené instrukce způsobující stav výjimky, udržení záznamu alespoň jednoho operandu pro spekulativně provedenou instrukci způsobující výjimku ve sdružení se záznamem stavu výjimky.
  5. 5. Způsob podle nároku 4, vyznačující se tím, že krok identifikace zahrnuje kroky: identifikace sekundárních spekulativních výjimek, když se nějaká spekulativně provedená instrukce octne ve stavu výjimky, kroky:
    udržení záznamu o stavu sekundární výjimky, udržení záznamu o adrese spekulativně provedené instrukce způsobující stav sekundární výjimky, udržení operandu pro způsobení udržování výjimky instrukce pro její rozřešení.
    - 14CZ 293714 B6
  6. 6. Způsob podle nároku 1, vyznačující se tím,že krok identifikace zahrnuje kroky: identifikaci sekundárních spekulativních výjimek, když se nějaká spekulativně prováděná instrukce pokouší použít registr mající svůj bit výjimky nastaven, kroky:
    i. nastavení bitu výjimky v souboru bitů výjimky sdruženého s druhým cílovým registrem v souboru registrů odezvou na uvedený stav výjimky, ii. nastavení druhého cílového registru, aby odkazoval na adresu spekulativně prováděné instrukce sdružené se stavem sekundární výjimky, a iii. nastavení obsahu zvláštního registru souboru zvláštních registrů na číslo registru operandu ve spekulativně prováděné instrukci spíše než obsah registru, a nastavení bitu výjimky souboru bitů zvláštní výjimky pro umožnění zpětného sledování ke spekulativně provedené instrukci, která způsobila původní spekulativní výjimku, pro její rozřešení.
  7. 7. Způsob podle některého z nároků laž6, vyznačující se tím, že počáteční stav pro provádění způsobu zahrnuje označení všech instrukcí jako nespekulativních, avšak označení jako spekulativních všech instrukcí, které jsou přesunuty nad podmínkovou větev, která určuje, zda se instrukce bude provádět v cílové cestě sekvenčního kódu.
  8. 8. Způsob podle nároku 1, vyznačující se tím, že spekulativní výjimka je výjimka chyby strany, aritmetické přetečení nebo neplatná adresa.
  9. 9. Způsob podle nároku 8, vyznačující se tím, že krok rozřešení spekulativní výjimky zahrnuje zavedení do paměti strany, která obsahuje požadovaná data.
  10. 10. Zařízení pro ošetřování výjimek u spekulativních instrukcí, obsahující:
    prostředek (102) zpracování pro spekulativní provádění jedné nebo více instrukcí nastavením spekulativního bitu, prostředek (202) sledování výjimek pro identifikaci každé výjimky sdružené se spekulativně provedenými instrukcemi určením toho, zda jsou spekulativně prováděné instrukce v cílové cestě, prostředek rozřešování výjimek pro rozřešení (204) každé spekulativní výjimky sdružené s nějakou spekulativně prováděnou instrukcí, která se potom provede nespekulativně vynulováním spekulativního bitu, vyznačující se tím, že uvedený prostředek (202) sledování výjimek pro identifikaci zahrnuje:
    prostředek (218) zpracování pro identifikaci původních spekulativních výjimek, obsahující:
    i. prostředek zpracování pro nastavení bitu výjimky v souboru (212) bitů výjimky sdruženém s prvním cílovým registrem v souboru (210) registrů odezvou na stav původní výjimky,
  11. 11. prostředek zpracování pro nastavení prvního cílového registru v souboru (210) registrů tak, aby odkazoval na adresu (411) spekulativně prováděné instrukce sdružené se stavem původní výjimky a iii. prostředek zpracování pro uložení do zvláštního registru v souboru (214) zvláštních registrů alespoň jednoho operandu, je-li nějaký, přidružené spekulativně provedené instrukce a pro uložení bitu výjimky do souboru (216) bitů zvláštní výjimky.
    11. Zařízení podle nároku 10, vyznačující se t í m, že dále obsahuje prostředek pro identifikaci každé sekundární výjimky nastávající odezvou na spekulativní provedení instrukce, která narazí na jednu z identifikovaných původních výjimek, prostředek pro rozřešování každé původní spekulativní výjimky a každé sekundární spekulativní výjimky, sdružené se spekulativně prováděnou instrukcí, která je potom prováděna nespekulativně.
    - 15 CZ 293714 B6
  12. 12. Zařízení podle nároku 10 nebo 11,vyznačující se tím,že prostředek pro identifikaci zahrnuje prostředek pro identifikaci původních výjimek a také sekundárních výjimek, které nastávají, když se spekulativně provedená instrukce pokusí použít jako operand hodnotu mající
  13. 13. Zařízení podle nároku 10, vyznačující se tím, že prostředek pro identifikaci zahrnuje:
    prostředek pro identifikaci původních spekulativních výjimek, obsahující:
    prostředek pro udržení záznamu stavu výjimky, prostředek pro udržení záznamu adresy spekulativně prováděné instrukce způsobující stav výjimky, prostředek pro udržení záznamu alespoň jednoho operandu pro spekulativně prováděnou instrukci způsobující výjimku ve spojení se záznamem stavu výjimky.
  14. 14. Zařízení podle nároku 13, vyznačující se t í m, že prostředek pro identifikaci zahrnuje:
    prostředek pro identifikaci sekundárních spekulativních výjimek když spekulativně provedená instrukce narazí na záznam stavu výjimky, dále obsahující:
    prostředek pro udržení záznamu stavu sekundární výjimky, prostředek pro udržení záznamu adresy spekulativně prováděné instrukce způsobující stav sekundární výjimky, prostředek pro udržení záznamu adresy alespoň jednoho operandu pro spekulativně prováděnou instrukci způsobující stav sekundární výjimky, a pro udržení záznamu spekulativně prováděné instrukce způsobující původní spekulativní výjimku pro její rozřešení.
  15. 15. Zařízení podle nároku 10, vyznačující se tím, že prostředek pro identifikaci obsahuje:
    prostředek pro identifikaci sekundárních spekulativních výjimek, když se spekulativně prováděná instrukce pokusí použít registr, mající nastaven svůj bit výjimky, dále obsahující:
    i. prostředek pro nastavení bitu výjimky v souboru bitů výjimky sdruženém s druhým cílovým registrem v souboru registrů odezvou na stav uvedené výjimky, ii. prostředek pro nastavení druhého cílového registru tak, aby odkazoval na adresu spekulativně provedené instrukce sdružené se stavem sekundární výjimky, a iii. prostředek pro nastavení obsahu zvláštního registru souboru zvláštních registrů na číslo registru operandu ve spekulativně prováděné instrukci sdružené se stavem sekundární výjimky spíše než obsah registru, a pro nastavení bitu výjimky souboru bitů zvláštní výjimky pro umožnění sledování zpět ke spekulativně prováděné instrukci, která způsobila původní spekulativní výjimku, pro její rozřešení.
  16. 16. Zařízení podle nároku 11, vyznačující se tím, že dále obsahuje prostředek pro označení, jako počáteční podmínky, jako spekulativních všech instrukcí, které jsou přesunuty nad podmínkové větvení, které určuje, zda instrukce bude provedena v cílové cestě sekvenčního kódu.
  17. 17. Zařízení podle nároku 11, vyznačující se tím, že prostředek pro rozřešování spekulativní výjimky obsahuje prostředek pro zavedení do paměti strany, která obsahuje požadovaná data.
CZ19972084A 1995-01-24 1996-01-09 Způsob pro ošetřování výjimek u spekulativních instrukcí a zařízení k provádění tohoto způsobu CZ293714B6 (cs)

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
CZ208497A3 CZ208497A3 (en) 1997-12-17
CZ293714B6 true CZ293714B6 (cs) 2004-07-14

Family

ID=23489627

Family Applications (1)

Application Number Title Priority Date Filing Date
CZ19972084A CZ293714B6 (cs) 1995-01-24 1996-01-09 Způsob pro ošetřování výjimek u spekulativních instrukcí a zařízení k provádění tohoto způsobu

Country Status (10)

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

Families Citing this family (37)

* 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
AU1078099A (en) * 1997-10-13 1999-05-03 Institute For The Development Of Emerging Architectures, Llc Method and apparatus for optimizing instruction execution
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
EP1444571B1 (en) * 2001-10-08 2007-12-12 Telefonaktiebolaget LM 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 インターナショナル・ビジネス・マシーンズ・コーポレーション 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体
US7500126B2 (en) * 2002-12-04 2009-03-03 Nxp B.V. Arrangement and method for controlling power modes of hardware resources
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
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
US8010550B2 (en) 2006-11-17 2011-08-30 Microsoft Corporation Parallelizing sequential frameworks using transactions
JP5154119B2 (ja) * 2007-03-26 2013-02-27 テレフオンアクチーボラゲット エル エム エリクソン(パブル) プロセッサ
US8458684B2 (en) * 2009-08-19 2013-06-04 International Business Machines Corporation Insertion of operation-and-indicate instructions for optimized SIMD code
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
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
WO2022094964A1 (zh) * 2020-11-06 2022-05-12 华为技术有限公司 处理指令的方法以及图计算装置

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 피터 엔. 데트킨 분기목표버퍼의추측기록메카니즘
US5421022A (en) * 1993-06-17 1995-05-30 Digital Equipment Corporation Apparatus and method for speculatively executing instructions in a computer system
US5428807A (en) * 1993-06-17 1995-06-27 Digital Equipment Corporation Method and apparatus for propagating exception conditions of 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
US5655115A (en) * 1995-02-14 1997-08-05 Hal Computer Systems, Inc. Processor structure and method for watchpoint of plural simultaneous unresolved branch evaluation

Also Published As

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

Similar Documents

Publication Publication Date Title
CZ293714B6 (cs) Způsob pro ošetřování výjimek u spekulativních instrukcí a zařízení k provádění tohoto způsobu
US5974538A (en) Method and apparatus for annotating operands in a computer system with source instruction identifiers
US5692169A (en) Method and system for deferring exceptions generated during speculative execution
US10061582B2 (en) Method for increasing the speed of speculative execution
US5778219A (en) Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
US6631514B1 (en) Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
US5421022A (en) Apparatus and method for speculatively executing instructions in a computer system
US5901308A (en) Software mechanism for reducing exceptions generated by speculatively scheduled instructions
KR950006616B1 (ko) 변환된 프로그램 코드에서 소스 명령 분자를 보전하기 위한 시스템 및 방법
US5627981A (en) Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination
US5881280A (en) Method and system for selecting instructions for re-execution for in-line exception recovery in a speculative execution processor
US5949995A (en) Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
US5428807A (en) Method and apparatus for propagating exception conditions of a computer system
US5903749A (en) Method and apparatus for implementing check instructions that allow for the reuse of memory conflict information if no memory conflict occurs
US6505296B2 (en) Emulated branch effected by trampoline mechanism
US20020199179A1 (en) Method and apparatus for compiler-generated triggering of auxiliary codes
US5420990A (en) Mechanism for enforcing the correct order of instruction execution
US20100058034A1 (en) Creating register dependencies to model hazardous memory dependencies
US6640315B1 (en) Method and apparatus for enhancing instruction level parallelism
US20170010973A1 (en) Processor with efficient processing of load-store instruction pairs
Abdulla et al. On the state reachability problem for concurrent programs under power
US6704861B1 (en) Mechanism for executing computer instructions in parallel
US20170010892A1 (en) Processor with efficient memory access
US7496734B1 (en) System and method for handling register dependency in a stack-based pipelined processor
US20100281465A1 (en) Load-checking atomic section

Legal Events

Date Code Title Description
PD00 Pending as of 2000-06-30 in czech republic
MM4A Patent lapsed due to non-payment of fee

Effective date: 20060109