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 PDFInfo
- 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
Links
- 238000012545 processing Methods 0.000 claims abstract description 17
- 230000004044 response Effects 0.000 claims abstract description 11
- 238000000034 method Methods 0.000 claims description 20
- 230000001960 triggered effect Effects 0.000 abstract description 6
- 230000007246 mechanism Effects 0.000 description 11
- 238000013459 approach Methods 0.000 description 7
- 230000006399 behavior Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 208000024891 symptom Diseases 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000005056 compaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- OVBPIULPVIDEAO-LBPRGKRZSA-N folic acid Chemical compound C=1N=C2NC(N)=NC(=O)C2=NC=1CNC1=CC=C(C(=O)N[C@@H](CCC(O)=O)C(O)=O)C=C1 OVBPIULPVIDEAO-LBPRGKRZSA-N 0.000 description 1
- 229960000304 folic acid Drugs 0.000 description 1
- 238000007373 indentation Methods 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000012536 storage buffer Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, 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)
- PATENTOVÉ NÁROKY1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.
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)
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)
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 |
-
1995
- 1995-01-24 US US08/377,563 patent/US5799179A/en not_active Expired - Fee Related
-
1996
- 1996-01-09 KR KR1019970705171A patent/KR100290269B1/ko not_active IP Right Cessation
- 1996-01-09 DE DE69600995T patent/DE69600995T2/de not_active Expired - Lifetime
- 1996-01-09 EP EP96900925A patent/EP0804759B1/en not_active Expired - Lifetime
- 1996-01-09 WO PCT/EP1996/000060 patent/WO1996023254A1/en active IP Right Grant
- 1996-01-09 CZ CZ19972084A patent/CZ293714B6/cs not_active IP Right Cessation
- 1996-01-09 CA CA002203124A patent/CA2203124C/en not_active Expired - Fee Related
- 1996-01-09 PL PL96321542A patent/PL181901B1/pl not_active IP Right Cessation
- 1996-01-12 CN CN96100643A patent/CN1109966C/zh not_active Expired - Fee Related
- 1996-01-18 JP JP08006386A patent/JP3093624B2/ja not_active Expired - Fee Related
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 |