CZ20001437A3 - Způsob a zařízení pro výběr událostí přepínání vláken ve vícevláknovém procesoru - Google Patents

Způsob a zařízení pro výběr událostí přepínání vláken ve vícevláknovém procesoru Download PDF

Info

Publication number
CZ20001437A3
CZ20001437A3 CZ20001437A CZ20001437A CZ20001437A3 CZ 20001437 A3 CZ20001437 A3 CZ 20001437A3 CZ 20001437 A CZ20001437 A CZ 20001437A CZ 20001437 A CZ20001437 A CZ 20001437A CZ 20001437 A3 CZ20001437 A3 CZ 20001437A3
Authority
CZ
Czechia
Prior art keywords
obsahuje
thread
processor
fiber
cache
Prior art date
Application number
CZ20001437A
Other languages
English (en)
Inventor
John Michael Borkenhagen
Richard James Eickemeyer
William Thomas Flynn
Sheldon Bernard Levenstein
Andrew Henry Wottreng
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
Priority to CZ20001437A priority Critical patent/CZ20001437A3/cs
Publication of CZ20001437A3 publication Critical patent/CZ20001437A3/cs

Links

Landscapes

  • Advance Control (AREA)

Abstract

Systém a způsob k provádění operací počítačového zpracování v systému (10) pro zpracování dat obsahuje vícekanálový procesor (100) a logiku (400) přepínání vláken. Vícevláknový procesor (100)je schopný přepínat mezi dvěma nebo více vlákny instrukcí, které mohou být nezávisle prováděny. Každé vlákno má odpovídající stav ve stavovém registru (440) vláken v závislosti na stavu jeho spuštění. Logika (400) přepínání vláken obsahuje řídící registr (410) přepínání vláken k uložení podmínek po kterých nastane přepnutí vláken, logika (400) přepínání vláken má časovaný registr (430), který vynutí přepnutí vláken pokud běh aktivního vlákna ve vícekanálovém procesoru (100) překročí programovatelný časový interval, logika (400) přepínání vláken má také čítači registr (420) postupu vpřed, který zabraňuje opakovanému přepínání vláken mezi vlákny ve vícevláknovém procesoru (100). Logika (400) přepínání vláken také reaguje na softwarového správce (460), schopného změnit prioritu různých vláken a tak převzít úlohu událostí přepínání vláken.

Description

Vynález se obecně týká vylepšeného způsobu pro zařízení počítačového systému pro zpracování dat; a podrobně vylepšeného vysoce výkonného vícevláknového počítače pro zpracování dat a způsobu ztělesněného v hardwaru procesoru.
Dosavadní stav techniky
Vynález se týká následujících U.S. patentových přihlášek, jejichž podstata je zde zahrnuta odkazem: (1) U.S. přihláška nazvaná Thread Switch Control in a Multithreaded Processor System, sériové číslo 08/957 002 podaná 23. října 1997 společně s touto; (2) U.S. přihláška nazvaná An Apparatus and Method to Guarantee Forward Progress in a Multithreaded Processor, sériové číslo 08/956 875 podaná 23. října 1997 společně s touto; (3) U.S. přihláška nazvaná Altering Thread Priorities in a Multithreaded Processor, sériové číslo 08/958 718, podaná 23. října 1997 společně s touto; (4) U.S. přihláška nazvaná Method and Apparatus to Force a Thread Switch in a Multithreaded Processor, sériové číslo 08/956 577 podaná 23. října 1997 společně s touto;. (5) U.S. přihláška nazvaná Background Completion of Instruction and Associated Fetch Request in a Multithread Processor, sériové číslo 773 572 podaná 27. prosince 1996; (6) U.S. přihláška nazvaná Multi27 79 451 « « « v ·· ♦
Entry Fully Associative Transition Cache, sériové číslo 761 378 podaná 9. prosince 1996; (7) U.S. přihláška nazvaná Method and Apparatus for Prioritizing and Routing Commands from. a Command Source to a Command Sink, sériové číslo 761 380 podaná 9. prosince 1996; (8) U.S. přihláška nazvaná Method and Apparatus for Tracking Processing of a Command, sériové číslo 761 379 podaná 9. prosince 1996; (9) U.S. přihláška nazvaná Method and System for Enhanced Multithread Operation in a Data Processing System by Reducing Memory Access Latency Delays, sériové číslo 473 692 podaná 7. června 1995 a (10) U.S. Patent 5 778 243 nazvaná Multithreaded Cell for a Memory, vydaná 7. července 1998.
Základní struktura moderního počítače obsahuje periferní zařízení pro komunikaci informací s vnějším světem; taková periferní zařízení mohou být klávesnice, monitory páskové mechaniky, komunikační linky připojené k síti, atd. V základní struktuře počítače je také obsažen hardware nezbytný k přijímání, zpracování a doručování těchto informací z a do vnějšího světa, obsahující sběrnice, paměťové jednotky, vstupní/výstupní (1/0) řadiče, úložná zařízení a alespoň jednu centrální procesorovou jednotku (CPU), atd. CPU je mozek systému. Provádí instrukce, které obsahuje počítačový program a řídí činnost jiných komponent systému.
Z hlediska hardwaru počítače pracuje většina systémů v podstatě stejným způsobem. Procesory vlastně provádějí rychle velmi jednoduché operace, jako například matematické, logická porovnání a přesuny dat z jednoho místa na jiné. Programy, které řídí počítač při provádění mohutného počtu těchto jednoduchých operací vytváří iluzi, že počítač provádí něco důmyslného. Situace, kdy uživatel sleduje novou • · · · φφφ φ φ φ · • · · φφφφ φφφφ • ··· 9 9 9 9999 49 Φ Φ φ • · φφφ · e φ ·
999 9 9 91 9 9 9 99 nebo vylepšenou funkci počítačového systému, však může být vlastně pouze případem, kdy stroj provádí stejné jednoduché operace, avšak mnohem rychleji. Pokračující vylepšování počítačových systémů vyžaduje neustálé zrychlování těchto systémů.
Jedno měřítko celkové rychlosti počítačového systému, také nazývané propustnost, se měří jako počet operací provedených za jednotku času. Koncepčně je nej jednodušší ze všech možných vylepšení rychlosti systému zvýšit rychlosti hodin různých komponent, zejména rychlost hodin procesoru. Takže pokud vše běží dvakrát rychle, ale jinak pracuje stejným způsobem, provede systém danou úlohu za poloviční dobu. Počítačové procesory, které byly sestrojeny z diskrétních komponent před několika lety, pracovaly značně rychleji zmenšením velikosti a omezením počtu komponent; eventuálně byl celý procesor zapouzdřen jako integrovaný obvod na jednom čipu. Menší velikost umožnila zvýšit rychlost hodin procesoru a podle toho zvýšit rychlost systému.
Navzdory obrovskému vylepšení v rychlosti získanému z integrovaných obvodů stále existuje poptávka po stále rychlejších počítačových systémech. Návrháři hardwaru mohli získat ještě další vylepšení v rychlosti větší integrací, dalším zmenšením velikosti obvodů a jinými technikami. Konstruktéři však myslí, že zmenšení fyzické velikosti nemohou pokračovat donekonečna a že existují omezení ve stálém růstu rychlostí hodin procesoru. Pozornost byla tudíž nasměrována na jiné přístupy pro další vylepšení v celkové rychlosti počítačového systému.
Beze změny rychlosti hodin je stále možné vylepšit
• · · • 9 • · • * 9 99 9 9
9 · 9 • · • · · · 9 9 9 9
9 9 9 9
• « 9 · • · • 9
rychlost systému použitím více procesorů. Nízké náklady jednotlivých procesorů zapouzdřených na čipech s integrovanými obvody pomohly toto uskutečnit. Použití vedlejších procesorů značně vylepšuje rychlost systému odlehčením zátěže z CPU na vedlejší procesor. Například vedlejší procesory rutinně provádí opakující se a jednoúčelové programy, jako například komunikaci a řízení vstupně/výstupních zařízení. Je také možné umístit více CPU do jednoho počítačového systému, typicky hostitelského systému, který obsluhuje více uživatelů současně. Každý z různých CPU může zvlášť provádět jinou úlohu v zastoupení jiného uživatele a tím se zvýší celková rychlost systému při provádění více úloh současně. Je však mnohem obtížnější vylepšit rychlost, jakou běží jedna úloha, jako například aplikační program. Sladění běhu a předávání výsledků různých funkcí mezi více CPU je složitý úkol. Pro podřazené 1/0 procesory to není tak obtížné, protože funkce jsou předem definované a omezené, ale pro více CPU, provádějících obecné aplikační programy, je daleko obtížnější sladit funkce, protože konstruktéři systému předem zčásti neznají podrobnosti o programech. Většina aplikačních programů sleduje jednoduchou cestu nebo tok kroků prováděných procesorem. Zatímco je někdy možné rozdělit tuto jednoduchou cestu na více paralelních cest, je univerzální použitelnost tohoto způsobu stále prozkoumávána. Obecně rozdělení dlouhé úlohy na menší úlohy pro paralelní zpracování více procesory provádí softwarový inženýr, který píše kód takovým způsobem, jak vyžaduje konkrétní situace. Tento přístup ad hoc je zvláště problematický pro spouštění komerčních transakcí, které se nutně neopakují nebo nejsou nutně předvídatelné.
Tudíž, i když více procesorů vylepšuje celkový výkon systému, existuje stále mnoho důvodů zlepšovat rychlost • · • · · · · · * • · · 9 · · · · » ······· · · · • Φ · ΦΦΦΦ «· · · · · Φ jednotlivého CPU. Pokud je dána rychlost hodin CPU, je možné dále zvýšit rychlost CPU, tj. počet operací zpracovaných za vteřinu, zvýšením průměrného počtu operací zpracovaných na hodinový cyklus. Běžná architektura pro jednočipové mikroprocesory s velkým výkonem, je počítač architektury s omezenou instrukční sadou (RISC) vyznačující se malou zjednodušenou sadou často používaných instrukcí pro rychlý běh, přičemž rychle prováděné operace jsou stručně uvedeny výše. Tak jak se vyvíjela polovodičová technologie, bylo cílem architektury RISC vyvinout procesory schopné provádět jednu nebo více instrukcí při každém hodinovém cyklu stroje. Jiný přístup jak zvýšit průměrný počet operací, prováděných za hodinový cyklus, je upravit hardware v CPU. Toto měřítko propustnosti, hodinových cyklů na instrukci, se běžně používá k charakterizaci architektur pro procesory s vysokým výkonem. Řetězení instrukcí a mezipaměti typu cache jsou znaky počítačové architektury, které toho umožnily dosáhnout. Provádění zřetězených instrukcí umožňuje, aby se následující instrukce začaly provádět předtím, než se dokončí předtím vyvolané instrukce. Mezipaměti ukládají často používaná a jiná data blíže procesoru a umožňují ve většině případů pokračování běhu instrukcí, bez čekání po celou přístupovou dobu hlavní paměti. Bylo také předvedeno jisté vylepšení s více prováděcími jednotkami s hardwarem pro sledování budoucích instrukcí pro hledání instrukcí, které lze provést paralelně.
Výkon běžného procesoru RISC může být dále zvýšen ve superskalárním počítači a v počítači s velmi dlouhými instrukčními slovy (VLIW), kdy oba provádí více než jednou instrukci paralelně za cyklus procesoru. V těchto architekturách je opatřeno více funkčních nebo prováděcích jednotek, které provádějí více řetězů instrukcí paralelně.
···· · · · ····
9 4 9 4 4 9 4 9 4 ·
444 44 · 4444 4 4 94 · • · · 4 4 4 4 4 9
4 44 94 · 9 4 44
V superskalární architektuře mohou být instrukce dokončovány v pořadí a mimo pořadí. Dokončování v pořadí znamená, že žádná instrukce nesmí skončit předtím, než skončí všechny instrukce odeslané před ní. Dokončování mimo pořadí znamená, že je dovoleno, aby instrukce skončila předtím, než se dokončí všechny instrukce před ní, pokud jsou splněna předem definovaná pravidla.
Jak u provádění v pořadí, tak u provádění mimo pořadí v superskalárních systémech, řetězy instrukcí se za jistých okolností pozastaví. Instrukce, která je závislá na výsledcích předtím odeslané instrukce, která se ještě nedokončila, může způsobit pozastavení řetězu instrukcí. Například instrukce závislé na instrukci load/store, ve kterých nejsou nezbytná data v mezipaměti, tj . nenalezení v mezipaměti, nelze provést, dokud se data nezpřístupní v mezipaměti. Údržba potřebných dat v mezipaměti pro nepřetržitý běh a pro udržení vysokého poměru úspěšnosti, tj . počtu požadavků na data v porovnání s počtem, kolikrát byla data okamžitě dostupná v mezipaměti, není jednoduché, zvláště u výpočtů obsahujících velké datové struktury. Nenalezení položky v mezipaměti může způsobit pozastavení řetězu instrukcí po několik cyklů a celková doba latence paměti bude nepříjemně dlouhá pokud data nejsou po většinu času k dispozici. Přestože paměťová zařízení používaná pro hlavní paměť jsou stále rychlejší, stále se zvětšuje rozdíl v rychlostech mezi takovými paměťovými čipy a výkonnými procesory. Proto se spotřebuje značná doba běhu v současných konstrukčních typech výkonových procesorů při čekání na vyřešení nenalezení položky v mezipaměti a tyto latence v přístupech k paměti používají rostoucí podíl doby běhu procesoru.
Další technika vylepšení účinnosti hardwaru v CPU je rozdělení zpracovávané úlohy na nezávisle spustitelné posloupnosti instrukcí nazvané vlákna. Tato technika se týká rozložení větší úlohy na menší úlohy pro nezávislé provedení různými procesory kromě toho, že zde vlákna běží na stejném procesoru. Pokud pak CPU z jakéhokoli z více důvodů nemůže pokračovat ve zpracovávání nebo provádění jednoho z těchto vláken, přepne se CPU na jiné vlákno a provádí jiné vlákno. To je předmětem tohoto zde popsaného vynálezu, který začleňuje hardwarový multithreading kvůli tolerování latence paměti. Termín multithreading tak jak je definován v komunitě počítačové architektury, není stejný jako použití termínu v oblasti softwaru, který znamená souvisejících vláken, být vlákna nezávislá rozlišení těchto dvou použití termínu hardwarový multithreading. Tento vynález obsahuje termín multithreading, který znamená hardwarový multithreading.
jednu úlohu V definici u Proto se k často používá rozdělenou do více architektury mohou
Multithreading umožňuje, aby řetěz(y) instrukcí procesoru prováděly užitečnou práci v jiných vláknech jakmile se u aktuálního vlákna zjistí stav pozastavení řetězu instrukcí. Multithreading také umožňuje implementaci jiných než řetězených architektur u procesorů k provedení užitečné práce pro samostatné vlákno jakmile se zjistí stav pozastavení pro aktuální vlákno. Existují dvě základní formy multithreadingu. Tradiční forma je udržení N vláken nebo stavů v procesoru a prokládání vláken cyklus po cyklu. To vylučuje všechny závislosti řetězu instrukcí, protože instrukce v jednom vláknu jsou odděleny. Druhá forma multithreadingu a forma uvažovaná tímto vynálezem, je prokládat vlákna při nějaké události s dlouhou latencí.
Tradiční formy multithreadingu obsahují replikaci registrů procesoru pro každé vlákno. Například pro procesor implementující architekturu prodávanou pod obchodním názvem PowerPC™ k provádění multithreadingu, musí procesor udržovat N stavů, aby na něm mohlo běžet N vláken. Proto se následující musí replikovat N krát: obecné registry, registry s plovoucí desetinnou tečkou, podmínkové registry, řídící a stavový řídící registr desetinné tečky, čítači registr, spojovací registr, registr výjimek, registry ukládání/obnovy a speciální registry. Navíc mohou být replikovány speciální mezipaměti jako například mezipaměť segment lookaside buffer, nebo může být každý záznam označen číslem vlákna a pokud není, musí být vyprázdněn při každém přepnutí vláken. Také by se měly zreplikovat některé mechanismy predikce větvení, např. korelační registr a návratový zásobník. Naštěstí není potřeba replikovat některé z větších funkcí procesoru jako je: instrukční mezipaměť úrovně jedna (Ll I-cache), datová mezipaměť úrovně jedna (LI D-cache), instrukční mezipaměť, úložná fronta, odesílač instrukcí, funkční nebo . prováděcí jednotky, řetězy instrukcí, překladová mezipaměť TLB a tabulka s historií větvení. Pokud jedno vlákno narazí na prodlevu, procesor se rychle přepne na jiné vlákno. Běh tohoto vlákna se překrývá s prodlevou paměti prvního vlákna.
Existující techniky multithreadingu popisují přepínání vláken při nenalezení položky v mezipaměti nebo odkazu do paměti. Hlavní příklad této techniky může být posouzen v publikací Sparcle: An Evolutionary Design for Large-Scale Multiprocessors, od Agarwal a kol., IEEE Micro Volume 13, č. 3, str. 48-60, z června 1993. Jak je použito v architektuře RISC, více sad registrů normálně použitých k podpoře funkčních volání je upraveno k údržbě více vláken.
·· · • · · · tttttt · • · · tttt·· · · · · • ··· tt · · ···· tt · tttt · • · · · · · · · · tttt· tttt tttt tt tttt ··
Osm překrývajících se oken registrů je upraveno na čtyři nepřekrývající se skupiny registrů, kde každá skupina registrů je rezerva pro ošetřování zádrží a zpráv. Tento systém zveřejňuje přepínání vláken, které nastává pří každém prvním nenalezení položky v mezipamšti na první úrovni, které má za následek požadavek do vzdálené paměti. Ačkoli tento systém představuje v oboru pokrok, konstrukce moderních procesorů často využívají víceúrovňovou mezipaměť nebo vysokorychlostní paměť, která je připojena k procesoru. Systém procesoru využívá některý dobře známý algoritmus k rozhodování o tom, jaká část jeho hlavního paměťového prostoru bude zavedena do každé úrovně mezipaměti a proto pokaždé kdy nastane odkaz do paměti, který není přítomen v mezipaměti na první úrovni, musí se procesor pokusit získat tento odkaz do paměti z mezipaměti druhé nebo vyšší úrovně.
U.S. patent č. 5 524 250 udělený Chesson a kol. nazvaný Central Processing Unit for Processing a Plurality of Threads Using Dedicated General Purpose Registers and Masque Register for Providing Access to the Registers, se věnuje problémům zpracování datových proudů a protokolu. Chesson a kol. opatřuje více skupin obecných a speciálních registrů ke zlepšení rychlosti CPU při přepínání mezi prostředími. Chesson a kol. také opatřuje řadič řetězu instrukcí, plánovač, událostní systém a maskovací registry, které usnadňují účinné plánování vláken, zpoždění smyček a vyloučení zpožďovacích mezer po ukládání, což poskytuje zvýšení výkonu a šířky pásma.
Je tudíž předmětem vynálezu zajistit vylepšený systém pro zpracování dat, který může zmenšit prodlevy kvůli latenci paměti v systému více úrovní mezipaměti s využitím hardwarové logiky a registrů včleněných do vícevláknového
- 10 • · · «♦ · · - · · · • · · 9 · • · *·· 99 99 9 99 99 9 9 9 1 9 9 1 • 9 · 9 9 9 9 9 9 9 9911 1 1 ii i 9 9 9 9 9 9 9 99 9 9999
systému pro zpracování dat.
Podstata vynálezu
Vynález řeší tento cíl zajištěním: vícevláknového
procesoru schopného přepínat běh mezi dvěma vlákny instrukcí
a logiky přepínání vláken včleněné do hardwarových registrů s volitelným softwarovým převážením podmínek přepínání vláken.
Zpracování různých stavů různých vláken instrukcí umožňuje optimalizaci využití procesoru mezi vlákny. Povolení procesoru spustit druhé vlákno instrukcí zvyšuje využití procesoru, který je jinak nečinný pokud přijímá nezbytná data a/nebo instrukce z různých paměťových prvků, jako jsou mezipaměti, paměti, externí 1/0 zařízení s přímým přístupem pro první vlákno. Podmínky přepínání vláken mohou být různé u jednotlivých vláken nebo mohou být změněny během zpracování použitím softwarového řídícího správce vláken.
Vynález zajišťuje hardwarový řídící registr pro přepínání vláken obsahující bity, které mohou být povoleny k začlenění událostí a způsobení toho, aby vícevláknový procesor přepnul vlákna. Tento hardwarový registr má další výhodu zlepšení výkonu procesoru, protože je mnohem rychlejší, než softwarové řízení přepínání vláken.
Jiné hledisko vynálezu je počítačový systém, který má vícevláknový procesor schopný přepínat zpracování mezi alespoň dvěma vlákny instrukcí jakmile vícevláknový procesor uvidí jednu z více událostí latence procesoru. Počítačový systém má také alespoň jeden registr stavu vlákna operativně • Φ ·Φ * ·· φφ ♦ · · · · φφφφ • · ···· φφφφ φφφφφ φφφφφφφ φφ φ • φφ φ φφφφ φ φφ φφ φ φφφφ připojený k vícevláknovému procesoru k uložení stavu vláken instrukcí, kde se stav každého vlákna instrukcí mění jakmile procesor přepne zpracování na každé vlákno. Systém také má alespoň jeden registr řízení přepínání vláken operativně připojený ke stavovému registru (registrům) vláken a k vícevláknovému procesoru kvůli uložení více řídících událostí přepínání vláken, přičemž řídící události přepínání vláken jsou povoleny nastavením odpovídajících více povolovacích bitů. Počítačový systém dále obsahuje více vnitřních spojení spojujících vícevláknový procesor s více paměťovými prvky. Přístup k libovolnému z paměťových prvků vícevláknovým procesorem způsobuje událost zpoždění procesoru a vynález také má alespoň jeden vnější spoj spojující vícevláknový procesor s vnějším paměťovým zařízením, komunikačním zařízením, počítačovou sítí nebo vstupním/výstupním zařízením, kde přístup ke kterémukoli ze zařízení nebo síti vícevláknovým procesorem také způsobí více událostí latence procesoru. Jakmile jedno z vláken běžících ve vícevláknovém procesoru není schopné pokračovat v běhu kvůli událostem latence procesoru a pokud je událost latence procesoru řídící událost přepínání vláken, jejíž bit je povolen, přepne vícevláknový procesor provádění na jiné z vláken.
Řídící registr pro přepínání vláken má více bitů, přičemž každý je přidružen jednoznačně k jedné z více řídících událostí přepínání vláken a pokud je jeden z bitů povolen, řídící událost přepínání vláken přidružená k tomuto bitu způsobí, že se vícevláknový procesor (procesory) přepne z jednoho vlákna instrukcí na jiné vlákno instrukcí. Řídící registr přepínání vláken je programovatelný. Navíc povolení určitého bitu může být dynamicky změněno buďto operačním softwarem nebo instrukcí v jednom z vláken.
φ φ φ φ φφφ φ φ φφφφφ φφφ φ φ φ φ φ φ φ φ φ φ φ φ φ φ φ φ φ φ φ φφ φφ
ΦΦΦ
Počítačový .systém pro zpracování může mít více než jeden řídící registr přepínání vláken, kde se bitové hodnoty jednoho řídícího registru přepínání vláken liší od bitových hodnot jiného z uvedených řídících registrů přepínání vláken.
Typicky může existovat mnoho řídících událostí přepínání vláken, například nenalezení dat v alespoň jedné z následujících: datová mezipaměť LI cache, mezipaměť L2 cache, ukládání dat překračující hranici double word, nebo nenalezení instrukce v alespoň jednom z následujících: instrukční mezipaměť LI cache, překladová mezipaměť TLB nebo nenalezení dat a/nebo instrukce v hlavní paměti nebo chyba v překladu adresy dat a/nebo instrukce. Přístup k 1/0 zařízení vně procesoru nebo k jinému procesoru mohou být také řídící události přepínání vláken. Jiné řídící události přepínání vláken obsahují počet postupu vpřed udávající, kolikrát bylo uvedené jedno z více vláken přepnuto z jednoho vícevláknového procesoru bez instrukce jednoho z více běžících vláken, a dobu prodlevy, ve které se neprovedla žádná užitečná práce alespoň jedním procesorem.
Počítačový systém pro zpracování podle vynálezu obsahuje prostředky pro zpracování více vláken instrukcí; prostředky pro signalizaci toho, kdy se prostředky pro zpracování pozastaví kvůli tomu, že jedno z vláknen uvidí událost latence procesoru; prostředky pro registrování více řídících událostí přepínání vláken; a prostředky pro zjištění toho, zda událost latence procesoru je jedna z více z řídících událostí přepínání vláken. Systém pro zpracování může také obsahovat prostředky pro povolení prostředkům pro ·· ·· · ·· ·· * · · · · · · · · • · · · · · » · · · ··· · · · ···· · · · · · • · · · ···· ·· ·· · ·· ·· zpracování, aby přepnuly zpracování na jiné vlákno pokud je událost latence procesoru řídící událost přepínání vláken.
Vynález je také způsob zjištění obsahu řídícího registru přepínání vláken, obsahující kroky spočtení prvního počtu cyklů procesoru, ve kterých je vícevláknový procesor pozastavený kvůli události latence procesoru, a spočtení druhého počtu cyklů procesoru požadovaného k tomu, aby mohl vícevláknový procesor přepnout zpracování z prvního vlákna instrukcí na druhé vlákno instrukcí, pak přiřazení události latence procesoru řídící události přepínání vláken nastavením povolovacího bitu v řídícím registru přepínání vláken pokud je první počet větší než druhý počet. Pak, pokud je povolovací bit povolen, obsahuje způsob poslání na výstup signálu k přepnutí vláken, pokud vícevláknový procesor uvidí řídící událost přepínání vláken pokud je povolovací bit povolen.
Způsob počítačového zpracování podle vynálezu také obsahuje kroky uložení stavu vlákna do stavového registru vláken a uložení více řídících událostí přepínání vláken do řídícího registru přepínání vláken. Pak jakmile se změní stav vlákna, pošle se signál na výstup do stavového registru vláken a změněný stav vlákna se porovná s více řídícími událostmi přepínání vláken. Pokud je změněný stav výsledkem řídící události přepínání vláken, pošle se signál na výstup vícevláknovému procesoru, aby se přepnul běh z vlákna.
Jiné předměty, znaky a vlastnosti tohoto vynálezu; způsoby, činnost a funkce souvisejících členů struktury; kombinace částí; a ekonomie výroby se ozřejmí z následujícího podrobného popisu upřednostňovaných provedení a doprovodných výkresů, přičemž vše tvoří část této • ·· ·· · φφ ·· • · · ♦ · φ · φφφφ • · · · · * · φφφφ • ··· φ * · φφφφ φ φ φ φ φ • · φφφ φφφφ φφφ φφ φφ φ φφφφ specifikace, kde shodné vztahové číslice označují odpovídající části na různých obrázcích.
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. 1 blokové schéma počítačového systému schopného implementovat zde popsaný vynález obr. 2 vysokoúrovňové blokové schéma vícevláknového systému pro zpracování dat podle tohoto vynálezu.
obr. 3 znázorňuje blokové schéma řídící jednotky úložného prostoru z obrázku 2.
obr. 4 blokové schéma logiky přepínání vláken, řídící jednotky úložného prostoru a instrukční jednotky z obrázku 2.
obr. 5 změny stavu vlákna jakmile vlákno uvidí různé události přepínání vláken ukázané na obrázku 4.
obr. 6 blokové schéma čítače postupu vpřed podle vynálezu
Příklady provedení vynálezu tt · tttt· • tttt tttt • tt • tt tttt • tttt · • · · · • · · · • tttt · tttt »·
Nyní s odkazem na obrázky a zejména s odkazem na obrázek 1, je zobrazeno vysokoúrovňové blokové schéma počítačového systému 10 pro zpracování dat, který může být použit k implementaci způsobu a systému podle tohoto vynálezu. Primární hardwarové komponenty a propojení počítačového systému 10 pro zpracování dat schopného využít tento vynález, jsou ukázány na obrázku 1. Centrální procesorová jednotka (CPU) 100 pro zpracovávání instrukcí je připojena k mezipamětem 120, 130, a 150. Instrukční mezipaměť 150 ukládá instrukce, aby je CPU 100 prováděl. Datové mezipaměti 120, 130 ukládají data, která má použít CPU 100. Mezipaměti komunikují s pamětí s přímým přístupem v hlavní paměti 140. CPU 100 a hlavní paměť 140 také komunikují prostřednictvím rozhraní 152 sběrnice se systémovou sběrnicí 155. Různé vstupní/výstupní procesory (IOPy) 160-168 jsou připojeny k systémové sběrnici 155 a podporují komunikaci s mnoha úložnými a vstupními/výstupními (I/O) zařízeními, jako například paměťovými zařízeními s přímým přístupem (DASD) 170, páskovými mechanikami 172, vzdálenými komunikačními linkami 174, pracovními stanicemi 176 a tiskárnami 178. Je třeba chápat, že obrázek 1 je určen ke znázornění reprezentativních komponent počítačového systému 10 pro zpracování dat na vysoké úrovni a že počet a typy takových komponent se mohou lišit.
V CPU 100 obsahuje jádro 110 procesoru specializované funkční jednotky, přičemž každá z nich provádí primitivní operace, jako například řazení instrukcí, provádění operací s celými čísly, provádění operací s reálnými čísly, přenos hodnot mezi adresovatelným úložným prostorem a poli logických registrů. Obrázek 2 znázorňuje jádro 100 procesoru. V upřednostňovaném provedení je jádro 100 procesoru systému 10 pro zpracování dat jeden integrovaný
4 4
4 t
4 4 • 4 4 ··· »
··· • · * • · * • · · · • · ·♦<»>
* · 4» ·· · «» obvod, proudový, superskalární mikroprocesor, který může být implementován s použitím libovolné architektury počítače jako je rodina procesorů RISC prodávaná pod obchodní značkou PowerPC™; například čip mikroprocesoru PowerPC™ 604 prodávaný IBM.
Jak bude popsáno níže, systém 10 pro zpracování dat přednostně obsahuje různé jednotky, registry, mezipaměti, paměti a jiné oddíly, které jsou všechny přednostně tvořeny integrovanými obvody. Rozumí se, že na obrázcích byly různé datové cesty zjednodušeny; ve skutečnosti existuje mnoho oddělených a paralelních datových cest do a z různých komponent. Navíc různé pro zde popsaný vynález nepodstatné komponenty byly vynechány, ale rozumí se, že procesory obsahují další jednotky pro další funkce. Systém 10 pro zpracování dat může pracovat technikou výpočtů omezené sady instrukcí, RISC, nebo jinými výpočetními technikami.
Jak je znázorněno na obrázku 2, jádro 100 procesoru systému 10 pro zpracování dat přednostně obsahuje datovou mezipaměť úrovně jedna, mezipaměť 120 LI D-cache, a mezipaměť 130 úrovně dva L2 cache, hlavní paměť 140 a instrukční mezipaměť úrovně jedna, mezipaměť 150 LI I-cache, přičemž všechny z nich jsou operativně propojeny s použitím různých spojení sběrnice k řídící jednotce 200 úložného prostoru. Jak ji vidět na obrázku 1, obsahuje řídící jednotka 200 úložného prostoru tranzitní mezipaměť 210 k propojení mezipaměti 120 LI D-cache a mezipaměti 130 L2 cache, hlavní paměti 140 a více prováděcích jednotek. Mezipaměti LI D-cache 120 a Ll I-cache 150 jsou přednostně opatřeny na čipu jako část procesoru 100, zatímco hlavní paměť 140 a mezipaměť L2 cache 130 jsou opatřeny mimo čip.
Paměťový systém 140 je určen k tomu, aby představoval hlavní • · *· · • · paměť s přímým přístupem, která může ale nemusí být v jádru 100 procesoru a jiné datové mezipaměti a mezipaměti typu cache, pokud nějaké existují, vně jádra 100 procesoru, a jinou vnější paměť, například DASD 170, páskové mechaniky 172 a pracovní stanice 176, ukázané na obrázku 1. Mezipaměť L2 cache 130 je přednostně rychlejší paměťový systém, nežli hlavní paměť 140, a uložením zvolených dat do mezipaměti L2 cache 130, lze minimalizovat latenci paměti, která nastává následkem odkazu do hlavní paměti 140. Jak je ukázáno na obrázku 1, jsou mezipaměť L2 cache 130 a hlavní paměť 140 přímo připojeny jak k mezipaměti Ll I-cache 150, tak k instrukční jednotce 220 prostřednictvím řídící jednotky 200 úložného prostoru.
Instrukce z mezipaměti Ll I-cache 150 jsou přednostně posílány na výstup do instrukční jednotky 220, která podle způsobu a systému podle tohoto vynálezu, řídí provádění více vláken různými jednotkami podprocesoru, např. jednotkou 260 větvení, jednotkou 270 pevné tečky, řídící jednotkou 200 úložného prostoru a jednotkou 280 plovoucí desetinné tečky a jinými jak je dáno architekturou systému 10 pro zpracování dat. Navíc kromě různých prováděcích jednotek označených na obrázku 1 odborníci ocení, že moderní superskalární mikroprocesorové systémy často obsahují více verzí každé takové prováděcí jednotky, která může být přidána bez odchýlení od ducha a rozsahu tohoto vynálezu. Většina těchto jednotek bude mít jako vstupní zdroj informace o operandech z různých registrů jako například obecných registrů GPR 272, a registrů s desetinnou tečkou FPR 282. Navíc lze použít více speciálních registrů SPR 274. Jak je ukázáno na obrázku 2, řídící jednotka 200 úložného prostoru a tranzitní mezipaměť 210 typu cache jsou přímo připojeny k obecným registrům 272 a registrům 282 s plovoucí desetinnou tečkou.
• · φφφ ·· φ ·· • · φ · · · » · φφφ φφφφ φ • φφφ φ φ φ φφφφ φ φ φ φφφ* φ φφφ * φ φφ * φφ
Obecné registry 272 jsou připojeny ke speciálním registrům 274.
Mezi funkčními hardwarovými jednotkami jedinečnými pro tento vícevláknový procesor 100 je logika 400 přepínání vláken a tranzitní mezipaměť 210 typu cache. Logika 400 přepínání vláken obsahuje různé registry, které určují, které vlákno bude aktivní nebo běžící vlákno. Logika 400 přepínání vláken je operativně připojena k řídící jednotce 200 úložného prostoru, prováděcím jednotkám 260, 270 a 280 a k instrukční jednotce 220. Tranzitní mezipaměť typu cache 210 v řídící jednotce 200 úložného prostoru musí být schopna implementovat multithreading.
Přednostně řídící jednotka 200 úložného prostoru a tranzitní mezipaměť 210 typu cache povoluje alespoň jeden nevyřízený požadavek na data na vlákno. Pokud je tudíž první vlákno pozastaveno odezvou na například výskyt nenalezení položky v mezipaměti LI D-cache, druhé vlákno by bylo schopno přistoupit k mezipaměti LI D-cache 120 pro data, která jsou v ní přítomná. Pokud má druhé vlákno také za následek nenalezení položky v mezipaměti LI D-cache, vyvolá se jiný požadavek na data a tudíž se musí udržovat více požadavků na data v řídící jednotce 200 úložného prostoru a v tranzitní mezipaměti 210. Přednostně tranzitní mezipaměť 210 je transitní mezipaměť podle U.S. přihlášky sériové číslo 08/761 378 podané 9. prosince 1996 nazvané Multi-Entry Fully Associative Transition Cache, zde začleněné odkazem. Řídící jednotka 200 úložného prostoru, prováděcí jednotky 260, 27 0 a 280 a instrukční jednotka 220 jsou všechny operativně připojeny k logice 400 přepínání vláken, která určuje, které vlákno se má provádět.
* · · φφ ··. I
Jak je znázorněno na obrázku 2, je opatřena sběrnice 205 mezi řídící jednotkou 200 úložného prostoru a instrukční jednotkou 220 pro komunikaci např. požadavku na data řídící jednotce 200 úložného prostoru a nenalezení položky v mezipaměti L2 cache 130 instrukční jednotce 220. Dále je opatřena překladová mezipaměť TLB 250, která obsahuje mapování virtuálních adres na skutečné. Přestože nejsou znázorněny v tomto vynálezu, mohou být opatřeny různé další vysokoúrovňové mezipaměti s mapováním paměti jako například segmentová mezipaměť lookaside, která bude pracovat podobným způsobem jako mezipaměť TLB 250.
Obrázek 3 znázorňuje podrobněji řídící jednotku 200 úložného prostoru a jak naznačuje název, řídí tato jednotka vstup a výstup dat a instrukcí z různých úložných jednotek, které obsahují různé mezipaměti typu cache, mezipaměti a hlavní paměť. Jak je ukázáno na obrázku 3, obsahuje řídící jednotka 200 úložného prostoru tranzitní mezipaměť 210 funkčně připojenou k mezipaměti Ll D-cache 120, multiplexor 360, mezipaměť L2 cache 130 a hlavní paměť 140. Dále tranzitní mezipaměť 210 přijímá řídící signály od sekvencerů 350. Sekvencery 350 obsahují více sekvencerů, přednostně tři, pro manipulaci s požadavky na vyzvednutí instrukcí a/nebo dat. Sekvencery 350 také posílají na výstup řídící signály do tranzitní mezipaměti 210, mezipaměti L2 cache 130 a také přijímají a vysílají řídící signály do a z hlavní paměti 140.
Multiplexor 360 v řídící jednotce 200 úložného prostoru ukázaný na obrázku 3 přijímá data z mezipaměti Ll Dcache 120, tranzitní mezipaměti 210, mezipaměti L2 cache 130, hlavní paměti 140, a pokud se mají data uložit do paměti, prováděcích jednotek 270 a 280. Data z jednoho z f ·« ·β * »· ·· • φ · · »·· · · · * • · · · · · · · · · · • «··»· ·····«< · · 4 • · · « · ···« ·»··· · · · ·· 4 4 těchto zdrojů jsou zvolena multiplexorem 360 a poslána na výstup do mezipaměti LI D-cache 120 nebo prováděcích jednotek odezvou na řídící výběrový signál přijatý od sekvencerů 350. Dále jak je ukázáno na obrázku 3, sekvencery 350 posílají na výstup výběrový signál kvůli řízení druhého multiplexoru 370. Na základě tohoto výběrového signálu od sekvencerů 350, posílá multiplexor 370 data z mezipaměti L2 cache 130 nebo hlavní paměti 140 do mezipaměti LI Icache 150 nebo instrukční jednotky 220. Při vytváření výše uvedených řídících a výběrových signálů, přistupují sekvencery 350 k adresáři a aktualizují adresář Ll 320 pro mezipaměť Ll D-cache 120 a k adresáři L2 330 pro mezipaměť L2 130.
S ohledem na schopnost multithreadingu zde popsaného procesoru posílají také sekvencery 350 řídící jednotky 200 úložného prostoru na výstup signály logice 400 přepínání vláken, které udávají stav požadavků na data a instrukce. Tak je zpětná vazba z mezipaměti 120, 130 a 150, hlavní paměti 140 a překladové mezipaměti TLB 250 směrován na sekvencery 350 a pak je sdělen logice 400 přepínání vláken, což může mít za následek přepínání vláken, jak je popsáno níže. Povšimněte si, že libovolné zařízení, kde nastane událost, která je navržena tak, aby způsobila přepnutí vláken ve vícevláknovém procesoru, bude operativně připojeno k sekvencerům 350.
Obrázek 4 je logická reprezentace a blokové schéma hardwaru 400 logiky pro přepínání vláken, který zjišťuje, zda bude vlákno přepnuto a pokud ano, které vlákno. Řídící jednotka 200 úložného prostoru a instrukční jednotka 220 jsou propojeny logikou 400 přepínání vláken. Logika 400 přepínání vláken je přednostně začleněna do instrukční
- 21 • · · · »» · · * • · · · » «I jednotky 220, ale pokud existuje mnoho vláken, může složitost logiky 400 přepínáni vláken narůst, takže logika je vně instrukční jednotky 220. Kvůli snadnosti vysvětlení je logika 400 přepínání vláken znázorněna vně instrukční jednotky 220.
··· t
9
9 99
Některé události, které mají za následek přepnutí vláken v tomto provedení jsou sděleny na linkách 470, 472, 47 4, 47 6, 478, 480, 482, 484 a 486 od sekvencerů 350 řídící jednotky 200 úložného prostoru logice 400 přepínání vláken. Jiné události latence mohou způsobit přepnutí vláken; tento seznam nemá být vyčerpávající; spíše je to vzor toho, jak lze implementovat přepínání vláken. Požadavek na instrukci buďto prvním vláknem TO nebo druhým vláknem Tl, který není v instrukční jednotce 220, je událost, která může mít za následek přepnutí vláken, označená jako 470 a 472 na obrázku 4, v uvedeném pořadí. Linka 474 udává, kdy aktivní vlákno, ať už TO nebo Tl, narazí na nenalezení položky v mezipaměti LI cache 120. Nenalezení položky v mezipaměti L2 cache 130 buďto pro vlákno TO nebo Tl se zaznamená na linkách 47 6 a 478, v uvedeném pořadí. Linky 480 a 482 jsou aktivovány jakmile jsou data vrácena pro pokračující běh vlákna TO nebo vlákna Tl v uvedeném pořadí. Nenalezení položek v mezipaměti TLB a dokončení průchodu tabulkou je vyznačeno na linkách 484 a 486, v uvedeném pořadí.
Tyto události jsou všechny přivedeny do logiky 400 přepínání vláken a podrobněji do stavových registrů 440 vláken a řadiče 450 přepínání vláken. Logika 400 přepínání vláken má jeden stavový registr vláken pro každé vlákno. Ve zde popsaném provedení jsou znázorněna dvě vlákna, takže existuje stavový registr 442 TO pro první vlákno TO a stavový registr 444 Tl pro druhé vlákno Tl, které zde budou
- 22 »·· * • *·
I · · · popsány. Logika 400 přepínání vláken obsahuje řídící registr 410 přepínání vláken, který řídí, která událost bude mít za následek přepnutí vláken. Například řídící registr 410 přepínání vláken může blokovat události, které způsobují, že jsou změny stavů viděny řadičem 450 přepínání vláken, aby vlákno nemohlo být přepnuto následkem zablokované události. Stavové registry vláken a logika změny vláken jsou předmětem U.S. přihlášky nazvané Thread Switch Control in a Multithreaded Processor System, sériové číslo 08/957 002 podané 23. října 1997 společně s touto a zde začleněné odkazem. Čítači registr 420 postupu vpřed se používá k zamezení zahlcení paměti a může být obsažen v řídícím registru 410 přepínání vláken. Čítači registr 420 postupu vpřed je předmětem U.S. přihlášky nazvané An Apparatus and Method to Guarantee Forward Progress in a Multithreaded Processor, sériové číslo 08/956 875 podané 23. října 1997 společně s touto a zde začleněné odkazem, RO997-105. Časovaný registr 430 přepínání vláken, předmět U.S. přihlášky nazvané Method and Apparatus to Force a Thread Switch in a Multithreaded Processor, sériové číslo 08/956 577 podané 23. října 1997 současně s touto a zde začleněné odkazem, RO997-107, vymezuje problematiku nestrannosti a zaseknutí nekonečného běhu. Priority vláken lze také měnit pomocí softwaru 460, který je předmětem U.S. přihlášky nazvané Altering Thread Priorities in a Multithreaded Processor, sériové číslo 08/958 718, podané 23. října 1997 současně s touto a zde zahrnuté odkazem, RO997-106. Nakonec, ale nikoli omezujícím způsobem, obsahuje řadič 450 přepínání vláken nesčetně logických hradel, která představují kulminaci veškeré logiky, která vlastně zjišťuje, zda je vlákno přepnuto, které vlákno a za jakých okolností. Každá z těchto komponent logiky a jejich funkce jsou dále popsány podrobněji.
* · · φ · a a a a a a a β » a a a · · · a a a a « • »·· · · a aaaa » · * · · • a a a a a··· r a a a a a a f »9 a a
Stavové registry vláken
Stavové registry 440 vláken obsahují stavový registr pro každé vlákno a jak název napovídá, ukládají stav odpovídajícího vlákna; v tomto případě stavový registr 442 TO vláken a stavový registr 444 Tl vláken. Počet bitů a přidělení konkrétních bitů popisu stavu každého vlákna může být přizpůsobeno pro konkrétní architekturu a prioritní schéma přepínání vláken. Příklad přidělení bitů ve stavových registrech 442, 444 vláken pro vícevláknový procesor, který má dvě vlákna je popsán v níže uvedené tabulce.
Přidělení bitů ve stavovém registru vláken (0) Instrukce/Data = Instrukce
I = Data (1:2) Sekvencer typu nenalezení položky = Žádné
- Nenalezení v TLB (kontrolní bit 0 pro I/D) = nenalezení položky v mezipaměti Ll cache
II = nenalezení položky v mezipaměti L2 cache (3) Přechod = Přechod do aktuálního stavu nemá za následek přepnutí vláken = Přechod do aktuálního stavu má za následek přepnutí vláken (4:7) Vyhrazeno (8) 0 = Načíst = Uložit (9:14) Vyhrazeno (15:17) Čítač postupu vpřed
III = Reset (instrukce se dokončila během tohoto vlákna)
000 = První provádění tohoto vlákna bez dokončení instrukce
001 = Druhé provádění tohoto vlákna bez dokončení instrukce
010 = Třetí provádění tohoto vlákna bez dokončení instrukce
011 = Čtvrté provádění tohoto vlákna bez dokončení instrukce 100 = Páté provádění tohoto vlákna bez dokončení instrukce (18:19) Priorita (může být nastavena softwarově) • · · * · · ·» · · • · · · · · · tttt·· • · · · · · · · tt tt · • tt·· · tt tttttt···· tttt · • · · · ♦ tttttttt «···· tttt tt tttt tttt = Střední Ol = Nízká = Vysoká = <Neplatné>
(20:31) Vyhrazeno (32:63) V případě 64 bitové implementace vyhrazeno
Ve zde popsaném provedení určuje bit 0, zda je nenalezení položky nebo příčina pozastaveného běhu procesoru následkem požadavku na instrukci nebo na data. Bity 1 a 2 udávají, zda nebyly požadované informace dostupné a pokud nebyly, ze kterého hardwaru, tj . zda přeložená adresa dat nebo instrukcí nebyla v TLB mezipaměti 250, nebo data nebo samotná instrukce nebyla v mezipaměti Ll D-cache 120 nebo mezipaměti L2 cache 130, jak bude dále vysvětleno v popisu obrázku 5. Bit 3 udává, zda má změna stavu vlákna za následek přepnutí vláken. Vlákno může změnit stav, aniž by to mělo za následek přepnutí vláken. Pokud například nastane přepnutí vláken jakmile vlákno TI uvidí nenalezení položky v mezipaměti Ll cache, pak pokud vlákno TI uvidí nenalezení položky v mezipaměti L2 cache, nenastane žádné přepnutí vláken, protože vlákno se již zapnulo při nenalezení položky v mezipaměti Ll cache. Stav TI se však stále mění. Eventuálně, pokud je náhodou logika 400 přepínání vláken nastavena nebo naprogramována tak, aby se nepřepnula při nenalezení položky v mezipaměti Ll cache, pak jakmile vlákno nevidí nenalezení položky v mezipaměti Ll cache, nenastane žádné přepnutí vláken i když vlákno změní stav. Bit 8 stavových registrů 442 a 444 vláken je přidělen, ať už se mají informace požadované konkrétním vláknem zavést do jádra procesoru, nebo se mají uložit z jádra procesoru do mezipaměti nebo hlavní paměti. Bity 15 až 17 jsou přiděleny, aby se zabránilo zahlcení paměti, jak bude uvedeno později s odkazem na čítači registr 420 postupu vpřed. Bity 18 a 19
- 25 Φ Φ Φ ι ♦
ΦΦΦ φ
φφ mohou být nastaveny v hardwaru nebo mohou být nastaveny softwarově a ukazují prioritu vlákna.
Obrázek 5 představuje čtyři stavy v tomto provedení vlákna zpracovávaného systémem 10 pro zpracování dat a tyto stavy jsou ukládány do stavových registrů 440 vláken, bitových pozic 1:2. Stav 00 představuje stav připraven, tj. vlákno je připraveno ke zpracování protože všechna požadovaná data a instrukce jsou dostupné; stav 10 znázorňuje stav vlákna, kdy je provádění vlákna v procesoru pozastaven, protože vlákno čeká na návrat dat buďto do mezipaměti Ll D-cache 120, nebo návrat instrukce do mezipaměti Ll I-cache 150; stav 11 znázorňuje, že vlákno čeká na návrat dat do mezipaměti L2 cache 130; a stav 01 znázorňuje, že nastalo nenalezení v mezipaměti TLB 250, tj. virtuální adresa byla chybná nebo nebyla dostupná, nazvané průchod tabulkou. Na obrázku 5 je také ukázána hierarchie stavů vláken, kde stav 00, který udává, že je vlákno připraveno ke spuštění, má nejvyšší prioritu. Událostem krátké latence jsou přednostně přiřazovány vyšší priority.
Obrázek 5 také znázorňuje změnu stavů pokud jsou získána data z různých zdrojů. Normální nepřerušovaný běh vlákna TO je znázorněn v bloku 510 jako stav 00. Pokud nastane nenalezení položky v mezipaměti Ll D-cache nebo Icache, změní se stav vlákna na stav 10, jak je znázorněno v bloku 512, podle signálu poslaného na lince 474 (obrázek 4) z řídící jednotky 200 úložného prostoru nebo lince 470 (obrázek 4) od instrukční jednotky 220, v uvedeném pořadí. Pokud jsou požadovaná data nebo instrukce v mezipaměti L2 cache 130 a jsou získána, pak pokračuje normální běh TO v bloku 510. Podobně blok 514 z obrázku 5 představuje nenalezení položky v mezipaměti L2 cache, které změní stav • ♦ · » · · • · · · · · · · · w ··· « · ····»?» · · Φ • · · · · · · t • «e · · · ·» ··
- 26 vlákna buďto TO nebo Tl na stav 11 jakmile řídící jednotka 200 úložného prostoru signalizuje nenalezení na linkách 476 nebo 478 (obrázek 4). Jakmile jsou získány instrukce nebo data v mezipaměti L2 cache z hlavní paměti 140 a zavedeny do jádra 100 procesoru jak je ukázáno na linkách 480 a 482 (obrázek 4), změní se stav opět na stav 00 v bloku 510. Řídící jednotka 200 úložného prostoru sdělí registrům 440 vláken na lince 484 (obrázek 4) jakmile není virtuální adresa pro požadované informace dostupná v mezipaměti TLB 250, označeno jako blok 516, jako nenalezení položky v mezipaměti TLB nebo stavu 01. Pokud se adresa nezpřístupní nebo pokud existuje instrukce přerušení datového úložného prostoru a je signalizováno řídící jednotkou 200 úložného prostoru na lince 486 (obrázek 4), stav vlákna se pak vrátí do stavu 00, což znamená připraveno na provádění.
Počet stavů a to, co jednotlivé stavy znamenají, je volně volitelné tvůrcem počítače. Například pokud má vlákno více nenalezení položek v mezipaměti LI cache, jako například nenalezení položky v mezipaměti Ll-I cache i nenalezení položky v mezipaměti LI D-cache, může být oddělený stav přiřazen každému typu nenalezení položky. Eventuálně by mohl být jeden stav vlákna přiřazen tak, aby představoval více než jeden výskyt nebo událost. Je uveden příklad algoritmu přepínání vláken pro dvě vlákna stejné priority, který určuje, zda přepnout vlákna. Algoritmus může být příslušným způsobem rozšířen a upraven pro více vláken a podmínek přepnutí vláken podle popisu vynálezu. Interakce mezi stavem každého vlákna uloženého ve stavových registrech 440 vláken (obrázek 4) a prioritou každého vlákna podle algoritmu přepínání vláken jsou každý cyklus dynamicky prozkoumávány. Pokud aktivní vlákno TO nevykazuje nenalezení položky v mezipaměti Ll, způsobí algoritmus přepnutí vláken
φφφ
9
9 9
9 9 9
9 9 9 ·
Φ ΦΦΦΦΦ Φ φ • · Φ Φ
ΦΦ * na nečinné vlákno ΤΙ, pokud nečinné vlákno TI nečeká na rozřešeni po nenalezeni položky v mezipaměti L2. Pokud přepnuti nenastalo a pokud nenalezeni položky v mezipaměti LI aktivního vlákna TO nepřejde do nenalezení položky v mezipaměti L2, algoritmus pak nasměruje procesor k přepnutí na nečinné vlákno TI bez ohledu na stav TI. Pokud obě vlákna čekají na rozřešení po nenalezení položky v mezipaměti L2, vlákno, které má první rozřešeno nenalezení položky v mezipaměti L2 se stává aktivním vláknem. V každé době rozhodování o přepnutí je provedená akce optimalizována pro nejpravděpodobnější případ, což má za následek nej lepší výkon. Poznamenejme, že přepnutí vláken, která mají za následek nenalezení položky v mezipaměti L2 cache jsou podmíněna stavem jiného vlákna, pokud by nenastala další přepnutí vláken s následkem ztráty výkonu.
Řídící registr přepínání vláken
V libovolném vícevláknovém procesoru, jsou latenční a výkonové penalty spojené s přepínáním vláken. Ve vícevláknovém procesoru ve zde popsaném upřednostňovaném provedení tato latence obsahuje dobu potřebnou k dokončení běhu aktuálního vlákna do bodu, kde je lze přerušit a korektně znovu spustit jakmile se příště vyvolá, dobu požadovanou k přepnutí hardwarových funkcí specifických pro vlákno ze stavu aktuálního vlákna do stavu nového vlákna, a dobu vyžadovanou k novému provádění nového vlákna a začátku jeho provádění. Přednostně hardwarové funkce specifické pro vlákna použitelné s vynálezem obsahují stavové registry vláken popsané výše a paměťové buňky popsané v U. S patentu 5 778 243 nazvaném Multithreaded Cell for a Memory, který je zde zahrnutý odkazem. Kvůli dosažení optimálního výkonu v hrubém vícecláknovém datovém systému pro zpracování, musí být latence události, kterou generuje »» · • · « · « ··· · * • ···# 9 9 · 9 • ♦ · · · 9 přepnutí vláken, větší, než náklady na výkon spojené s přepínáním vláken ve vícevláknovém režimu, v porovnání s normálním jednovláknovým režimem.
definována jako hardwaru, který
Latence události použité ke generování přepnutí vláken je závislá jak na hardwaru, tak na softwaru. Například určité okolnosti hardwaru ve vícevláknovém procesoru obsahují rychlost externích SRAMů použitých k implementaci mezipaměti L2 cache vně čipu procesoru. Rychlé SRAMy v mezipaměti L2 cache snižují průměrnou latenci nenalezení položky v mezipaměti LI zatímco pomalejší SRAMy zvyšují průměrnou latenci nenalezení položky v mezipaměti LI. Výkon je tudíž získán pokud je jedna událost přepnutí vláken nenalezení položky v mezipaměti LI v má latenci přístupu k datům externí mezipaměti L2 cache větší, než penaltu přepnutí vláken. Jako příklad toho, jak specifické vlastnosti softwarového kódu ovlivňují latenci událostí přepnutí vláken, se zvažuje poměr nalezení k nenalezení mezipaměti L2 cache kódu, tj. počet, kolikrát jsou data skutečně dostupná v mezipaměti L2 cache v porovnání s počtem, kolikrát musí být data získána z hlavní paměti protože data nejsou v mezipaměti L2 cache. Vysoký poměr nalezení k nenalezení L2 snižuje průměrnou latenci nenalezení položek v mezipaměti LI, protože nenalezení položek v mezipaměti LI má zřídka za následek delší latenci nenalezení položky v mezipaměti L2. Nízký poměr nalezení k nenalezení položek v mezipaměti L2 zvyšuje průměrnou latenci nenalezení položek v mezipaměti LI, protože více nenalezení položek v LI má za následek delší latenci nenalezení položek v mezipaměti L2. Nenalezení položky v mezipaměti LI by tudíž mohlo být zablokováno jako událost přepnutí vláken pokud má běžící kód vysoký poměr nalezení k nenalezení v mezipaměti L2, protože latence přístupu k datům v mezipaměti L2 je
99 9 9 9 99
9 9 9 9 ·999
9 9 9 9 9 9 9 9 9
99999 9 9999 9 9 99 9
9 9 9 9 9 9 9
99 9· 9 99 99 menší, než penalta přepnutí vláken. Nenalezení položky v mezipaměti Ll by bylo povoleno jako událost přepínání vláken při provádění softwarového kódu s nízkým poměrem nalezení k nenalezení v mezipaměti L2, protože nenalezení položky v mezipaměti Ll pravděpodobně přejde do delší latence nenalezení položky v mezipaměti L2.
Některé typy událostí latence nejsou snadno zjistitelné. Například v některých systémech mezipaměť L2 posílá na výstup signál do instrukční jednotky jakmile nastane nenalezení položky v mezipaměti. Jiné mezipaměti L2 však neposílají na výstup takový signál, jako například v případě, že je řadič mezipaměti L2 cache na odděleném čipu vzhledem k procesoru a procesor tudíž nemůže snadno určit změnu stavu. V těchto architekturách může procesor obsahovat čítač cyklů pro každé nevyřešené nenalezení v mezipaměti Ll cache. Pokud nenalezená data nebyla vrácena z mezipaměti L2 cache po předem určeném počtu cyklů, procesor se chová, jako kdyby nastalo nenalezení položky v mezipaměti L2 a změní podle toho stav vlákna. Tento algoritmus je také použitelný na jiné případy, kde je více než jeden odlišný typ latence. Pouze jako příklad pro nenalezení položky v mezipaměti L2 multiprocesoru, může být latence dat z hlavní paměti značně jiná, nežli latence dat z jiného procesoru. Těmto dvěma událostem mohou být přiřazeny různé stavy ve stavovém registru vláken. Pokud neexistuje žádný signál k rozlišení stavů, může být použit čítač k odhadu toho, ve kterém stavu by vlákno mělo být poté co narazí na nenalezení položky v mezipaměti L2 cache.
Řídící registr 410 přepínání vláken je softwarově programovatelný registr, který volí události ke generování přepínání vláken a má oddělený povolující bit pro každou ··· • · · · · · · * • · ······· »· · * ·· · · · · · «••4« ♦ · · ♦· ·· definovanou řídící událost přepínání vláken. Přestože zde popsané provedení neimplementuje oddělený řídící registr 410 přepínání vláken pro každé vlákno, oddělené řídící registry 410 přepínání vláken pro každé vlákno by mohly být implementovány k poskytnutí větší flexibility a výkonu za cenu více hardwaru a větší složitosti. Dále řídící události přepínání vláken v jednom řídícím registru přepínání vláken nemusí být stejné jako řídící události přepínání vláken v jakémkoli jiném řídícím registru přepínání vláken.
Do řídícího registru 410 přepínání vláken může být zapisováno obslužným procesorem softwarem jako například rozhraním komunikace dynamického snímání zveřejněného v U.S. patentu č. 5 079 725 nazvaného Chip Identification Method for Use with Scan Design Systems and Scan Testing Techniques nebo samotným procesorem se softwarovým systémovým kódem. Obsah řídícího registru 410 přepínání vláken je používán řadičem 450 přepínání vláken k povolování nebo blokování generování přepnutí vláken. Hodnota jedna v registru 410 povoluje řídící událost přepínání vlákna spojenou s tímto bitem ke generování přepnutí vláken. Hodnota nula v řídícím registru 410 přepínání vláken zablokuje, aby řídící událost přepínání vláken spojená s tímto bitem generovala přepnutí vláken. Samozřejmě instrukce v běžícím vláknu by mohla zablokovat kteroukoli nebo všechny z podmínek přepínání vláken pro toto konkrétní nebo pro jiná vlákna. Následující tabulka ukazuje spojení mezi událostmi přepínání vláken a jejich povolovací bity v registru 410.
Přiřazení bitům v řídícím registru přepínání vláken
(0) Přepnout při nenalezení položky při vyzvedávání z datové
mezipaměti Ll cache
(1) Přepnout při nenalezení položky při ukládání do datové
mezipaměti Ll cache
· • · · • * · · • 4 9949
9 4
4 4 φ· · · • · · • ··· · • · * · « « «
44
4 9 4
9 4 4
4 9 9 4
4 4 9
4 4 9 (2) Přepnout při nenalezení položky v instrukční mezipaměti Ll cache (3) Přepnout při nenalezení položky v instrukční mezipaměti TLB (4) Přepnout při nenalezení položky při vyzvedávání z mezipaměti L2 cache (5) Přepnout při nenalezení položky při ukládání do mezipaměti L2 cache (6) Přepnout při nenalezení položky v instrukční mezipaměti L2 cache (7) Přepnout při nenalezení položky dat v překladové mezipaměti TLB (8) Přepnout při nenalezení položky v mezipaměti L2 a pokud nenastane nenalezení položky v mezipaměti L2 cache nečinného vlákna (9) Přepnout jakmile dosažena hodnota vypršení přepnutí vláken (10) Přepnout jakmile jsou vrácena data z mezipaměti L2 cache (11) Přepnout při vnějším přístupu 10 (12) Přepnout při ukládání double-X: nenalezení při prvním ze dvou* (13) Přepnout při ukládání double-X: nenalezení při druhém ze dvou *
(14) Přepnout při ukládání více/řetězce: nenalezení při j akémkoli
(15) přístupu Přepnout při zavedení více/řetězce: nenalezení při jakémkoli
(16) (17) přístupu Vyhrazeno Přepnout 1 při zavedení double-X: nenalezení při prvním ze dvou*
(18) Přepnout při zavedení double-X: nenalezení při druhém ze dvou*
(19) Přepnout instrukci or 1,1,1 pokud je bit stavového registru stroje (problémový stav) msr(pr)=l. Umožňuje změnu softwarové priority nezávisle na msr(pr). Pokud je bit 19 jednička, nastaví instrukce or 1,1,1 nízkou prioritu. Pokud je bit 19 nula, bude priorita nastavena na nízkou pouze pokud msr(pr)=0 jakmile se spustí instrukce or 1,1,1. Viz. změna priorit softwarově, bude popsáno později.
(20) Vyhrazeno (21) Priorita přepínání vláken povolena (22:29) Vyhrazeno (30:31) Čítač postupu vpřed (32:63) Vyhrazeno v 64 bitové implementaci registru * uložení/zavedení double-X se týká zavedení nebo ukládání jednoduchého typu halfword, word nebo doubleword, které překračuje hranici doubleword. Zavedení/uložení double-X v tomto kontextu není zavedení nebo uložení více typů word nebo řetězců • »· · ·· ·· ·· · « ♦ · 9 9 9 9 9
9 9 9 9 9 9 9 9 9 9
999 99 9 9999 99 9 9 9
9 9 9 9 9 9 9 9
999 99 99 9 99 99 typů word.
Časovači registr přepínání vláken
Jak je popsáno výše, hrubé vícevláknové procesory spoléhají na to, že události dlouhých latencí spustí přepínání vláken. Někdy má procesor ve víceprocesorovém prostředí nebo vlákno na pozadí ve vícevláknové architektuře za běhu vlastnictví prostředku, který může mít pouze jednoho vlastníka a jiný procesor nebo aktivní vlákno vyžaduje přístup k prostředku předtím, než může postoupit dále. Jako příklad je možné uvést aktualizaci tabulky stránek paměti nebo získání úlohy od rozvrhovače úloh. Neschopnost aktivního vlákna získat vlastnictví prostředku nemá za následek událost přepínání vláken, nicméně vlákno se točí ve smyčce a není schopné provádět užitečnou práci. V tom případě vlákno na pozadí, které drží prostředek, nezíská přístup k procesoru, aby mohlo uvolnit prostředek, protože nikdy nenarazilo na událost přepínání vláken a nestalo se aktivním vláknem.
Přidělování procesorových cyklů mezi vlákna je jiným zájmem; pokud softwarový kód běžící na vlákně zřídka narazí na událostí přepnutí kvůli dlouhé latenci v porovnání se softwarovým kódem běžícím na jiných vláknech ve stejném procesoru, získá toto vlákno více nežli svůj spravedlivý podíl procesorových cyklů. Další nadměrné zpoždění, které může překročit maximální přípustnou dobu, je latence neaktivního vlákna, při čekání na obsloužení externího přerušení v omezené době nebo některá jiná událost vně procesoru. Upřednostňuje se tudíž vynutit přepnutí vláken na nečinné vlákno po určité době pokud se neprovádí žádné užitečné zpracování, aby se zabránilo zaseknutí systému.
Logika vynucení přepínání vláken po časovém intervalu • 9 9 tt tttttt tt ·· tttt · • tttt ·· · ·· tttt • · · • · tt • tt · • tttt tt • · tttt je časovaný registr 430 přepínání vláken (obrázek 4), dekrementovač a registr dekrementovače, který obsahuje dekrementovanou hodnotu. Časovaný registr 430 přepínání vláken obsahuje hodnotu časové prodlevy přepnutí vláken. Implementace časovaného registru 430 přepínání vláken použitá v tomto provedení je ukázána v následující tabulce:
Bity časovaného registru přepínání vláken (0:21) Vyhrazeno (22:31) Hodnota časové prodlevy přepínání vláken
Zde popsané provedení vynálezu neimplementuje oddělený časovaný registr 430 přepínání vláken pro každé vlákno, přestože by to bylo možné provést kvůli zajištění větší flexibility. Podobně pokud existuje více vláken, každé vlákno nemusí mít stejnou hodnotu časové prodlevy přepnutí vláken. Pokaždé když nastane přepnutí vláken, zavede se hodnota časové prodlevy přepnutí vláken z časovaného registru 430 přepnutí vláken hardwarově do dekrementačního registru. Dekrementační registr je zmenšen o jedničku při každém cyklu, dokud se hodnota dekrementačního registru nerovná nule, pak se signál pošle řadiči 450 přepínání vláken, který vynutí přepnutí vláken, dokud není nějaké jiné vlákno připraveno ke zpracovávání instrukcí. Například pokud všechna ostatní vlákna v systému čekají při nenalezení položky v mezipaměti a nejsou připravena provádět instrukce, nevynutí řadič 450 přepínání vláken přepnutí vláken. Pokud žádné jiné vlákno není připraveno zpracovávat instrukce jakmile hodnota v dekrementačním registru dosáhne nuly, zamrzne dekrementovaná hodnota na nule, dokud nebude jiné vlákno připraveno zpracovávat instrukce, přičemž v tom okamžiku nastane přepnutí vláken a dekrementační registr se znovu zavede s hodnotou časové prodlevy přepnutí vláken pro dané vlákno. Podobně by mohl být dekrementační registr
- 34 • φ φφφφ φφφφ φφφφφ ·····♦· φ φ * • φ φ · φφφφ φ φφ φφ φ φφ φφ stejně tak jednoduše pojmenován jako inkrementační registr a při spuštění vlákna by se registr mohl inkrementovat o jedničku na některou předem určenou hodnotu, kdy by se vynutilo přepnutí vláken.
Do časovaného registru 430 přepínání vláken může zapisovat obslužný procesor, jak bylo popsáno výše, nebo samotný procesor softwarovým kódem. Hodnota časové prodlevy přepnutí vláken zavedená do časovaného registru 430 přepínání vláken může být přizpůsobena podle konkrétní hardwarové konfigurace a/nebo konkrétního softwarového kódu kvůli minimalizaci zbytečných cyklů, které jsou následkem zbytečného přepínání vláken. Příliš vysoká hodnota v časovaném registru 430 přepínání vláken může mít za následek snížený výkon jakmile aktivní vlákno čeká na prostředek držený jiným vláknem nebo pokud je latence odezvy na vnější přerušení nebo některou jinou událost vně procesoru příliš dlouhá. Příliš vysoká hodnota může také zabraňovat spravedlnosti pokud jedno vlákno uvidí větší počet událostí přepínání vláken a jiné nikoli. Doporučuje se hodnota časové prodlevy přepínání vláken dvakrát větší než o něco více, nežli nejčastější nejdelší událost latence, která způsobuje přepnutí vláken, např. přístup do hlavní paměti. Vynucení přepnutí vláken po čekání počet cyklů, který je určený v časovaném registru 430 přepínání vláken, zabraňuje zablokování systému v důsledku soupeření o sdílené zdroje, vynucuje spravedlivost přidělování procesorových cyklů mezi vlákna a omezuje maximální latenci odezvy na vnější přerušení a jiné události vně procesoru.
Zaručení postupu vpřed
To, že alespoň jedna instrukce musí být provedena pokaždé, když nastane událost přepínání vláken a nové vlákno ·· a a a a a • a a a · a · a a a • a a aa aa a a a a • a a a • · a · a a a a a a a a se stane aktivní, je za jistých okolností příliš omezující, jako například když jedna instrukce generuje více přístupů do mezipaměti a/nebo více nenalezení položek v mezipaměti. Například instrukce fetch může způsobit nenalezení položky v mezipaměti Ll I-cache 150 pokud požadovaná instrukce v mezipaměti není; ale jakmile se instrukce vrátí, požadovaná data nemusí být dostupná v mezipaměti Ll D-cache 120. Podobně může nenalezení položky v mezipaměti TLB 250 mít také za následek nenalezení v datové mezipaměti. Takže pokud je přísně vynucován postup vpřed, nemají za sebou následující nenalezení položek v mezipaměti za následek přepínání vláken. Druhý problém je, že některá nenalezení položky v mezipaměti mohou vyžadovat dokončení velkého počtu cyklů, přičemž během této doby může jiné vlákno vykazovat nenalezení položky v mezipaměti na stejné úrovni mezipaměti, kterou lze dokončit za mnohem kratší dobu. Pokud je při návratu k prvnímu vláknu, vynucován přísný postup vpřed, není procesor schopen přepnout na vlákno s kratším nenalezením položky v mezipaměti. Aby se odstranil problém prokluzování, kde každé vlákno je zablokováno v opakujícím se cyklu přepínání vláken bez provádění jakýchkoli instrukcí, existuje čítači registr 420 postupu vpřed (obrázek 4), který umožňuje až programovatelný maximální počet přepínání vláken nazvaný prahová hodnota postupu vpřed. Po tomto maximálním počtu přepnutí vláken musí být instrukce dokončena předtím, nežli může znovu nastat přepnutí. Takto je zabráněno prokluzování. Čítači registr 420 postupu vpřed mohou být vlastně bity 30:31 v řídícím registru 410 přepínání vláken nebo softwarem programovatelný prahový registr postupu vpřed pro procesor. Čítači logika postupu vpřed používá bity 15:17 stavových registrů 442, 444 vláken, které udávají stav vláken a jsou přiděleny pro počet přepnutí vláken, které vlákno vykázalo bez provedení bity obsahují čítač postupu
ΦΦ φφ φ φ φφφ φφφφ φ φφφφ φφφφ φφφ φ φ φ φφφφ « φ φφ φ φ φφ φ φφφφ φφ φφ φ φφφφ instrukce. Přednostně pak tyto vpřed.
Jakmile vlákno změní stav a vyvolá algoritmus přepnutí vláken, pokud se alespoň jedna instrukce v aktivním vláknu dokončila, bude čítač postupu vpřed pro aktivní vlákno resetován a algoritmus přepínání vláken pokračuje porovnáváním stavů vláken mezi vlákny v procesoru. Pokud nebyla dokončena žádná instrukce, porovná se hodnota čítače postupu vpřed ve stavovém registru vlákna aktivního vlákna s prahovou hodnotou postupu vpřed. Pokud hodnota čítače není rovna prahové hodnotě, pokračuje algoritmus přepínání vláken ve vyhodnocování stavů vláken v procesoru. Pokud pak nastane přepnutí vláken, inkrementuje se čítač postupu vpřed. Pokud je však hodnota čítače rovna prahové hodnotě, nenastane žádné přepnutí vláken dokud se instrukce nebude moci provést, tj. dokud nenastane postup vpřed. Povšimněte si, že pokud má prahový registr hodnotu nula, alespoň jedna instrukce se musí dokončit v aktivním vlákně před přepnutím na jiné vlákno. Pokud každé přepnutí vláken vyžaduje tři procesorové cykly a pokud existují dvě vlákna a pokud je logika přepínání vláken naprogramována, aby přestala zkoušet přepnout vlákna po pěti pokusech; pak je maximální počet cyklů, po které se procesor zahltí, třicet cyklů. Odborník může ocenit, že existují možné konflikty mezi zákazem přepnutí vláken, protože na jedné straně nemůže být proveden žádný postup vpřed a na druhé straně bylo překročeno vynucení přepnutí vláken kvůli vypršení čítače. Takový konflikt může být rozřešen snadno podle architektury a softwaru. Obrázek 6 je blokové schéma funkce čítače postupu vpřed logiky 400 přepínání vláken, která zabraňuje prokluzování. V bloku 610 jsou bity 15:17 ve stavovém registru 442 vláken náležícím vláknu TO resetovány do • φ* φφ φ φ* φφ • φ · φ · · · · φ φ φ φφφ φφφ» φφφφ φ φφφ φ φ φ φφφφ φ φ φ φ φ φ φ φφφ φφφφ φφφ φφ φφ φ φφφφ stavu 111. Je proveden pokud o spuštění tohoto vlákna v bloku 620 a stav se změní na 000. Pokud se instrukce úspěšně spustí ve vláknu TO, stav vlákna TO se vrátí na 111 a zůstane tak. Pokud však vlákno TO nemůže provést instrukci, nastane přepnutí vláken na vlákno Tl, nebo jiné vlákno na pozadí pokud jsou v architektuře procesoru povolena více než dvě vlákna. Jakmile nastane přepnutí vláken z Tl nebo jiného vlákna na pozadí a běh se vrátí na vlákno TO, nastane druhý pokus spustit vlákno TO a stav vlákna TO bude 001 jako v bloku 630. Pokud opět vlákno TO narazí na událost přepínání vláken, přepne se řízení procesoru pryč z vlákna TO na jiné vlákno. Podobně kdykoli nastane přepnutí z jiného vlákna, např. Tl zpět na vlákno TO, změní se stav TO na 010 v tomto třetím pokusu spustit TO (blok 640) na 011 při čtvrtém pokuse spustit TO (blok 650) , a do stavu 100 při pátém pokuse pustit TO (blok 660).
V této implementaci existuje pět pokusů přepnout na vlákno TO. Po pátém pokusu nebo kdykoli je hodnota bitů 15:17 ve stavovém registru 442 vláken (TSR) rovna hodnotě bitů 30:31 plus jedna v řídícím registru 410 přepínání vláken (TSC) , tj. kdykoli TSC (30:31 ) + 1 = TSR (15:17), nenastane žádné přepnutí vláken pryč z vlákna TO. Bude oceněno, že pět pokusů je volitelný počet; maximální počet přípustných přepnutí s neúspěšným spuštěním, tj. prahová hodnota postupu vpřed je programovatelná a v jistých architekturách může být pět příliš mnoho přepnutí, v jiných architekturách může být pět příliš málo. Při každé události musí být vztah mezi počtem, kolikrát byl uskutečněn pokus přepnutí na vlákno bez provedených instrukcí, porovnán s prahovou hodnotou, a jakmile byla tato prahová hodnota dosažena, nenastane žádné přepnutí vláken z tohoto vlákna a procesor čeká, dokud se nerozřeší latence spojená s tímto
• 99 • 9 * · - 38 - : . • · 99 9 · » 9· 9 • 9 9 9 9 9 9 9 9 9999 9 9 9 99 < • 9 99 9 9 9 9 9 «9 · 9 9 9 9 9 9 9 « 9 99 99
vláknem. Ve zde popsaném provedení je stav vlákna
představovaný bity 15:17 stavového registru 442 vláken
porovnán s bity 30:31 v řídícím registru 410 přepínání vláken. Speciální ošetřování pro konkrétní události, které mají extrémně dlouhou latenci, jako například interakce se vstupnš/výstupními zařízeními, aby se zabránilo předčasnému zablokování přepnutí vláken logikou postupu vpřed, zlepšuje výkon procesoru. Jeden způsob jak ošetřovat tyto události extrémně dlouhé latence je zablokovat inkrementování čítače postupu vpřed nebo ignorovat výstupní signál porovnání mezi čítačem postupu vpřed a prahovou hodnotou pokud data nebyla vrácena. Jiný způsob jak ošetřovat události extrémně dlouhých latenci je použít oddělený čítač delšího postupu vpřed pro tyto konkrétní události.
Správce přepínání vláken
Stav vláken pro všechna softwarová vlákna odesílaná do procesoru je přednostně udržován ve stavových registrech 442 a 444 vláken z obrázku 4 podle popisu. V jednom procesoru jedno vlákno provádí své instrukce najednou a všechna ostatní vlákna jsou nečinná. Běh je přepnut z aktivního vlákna na nečinné vlákno jakmile aktivní vlákno uvidí událost dlouhé latence jak bylo popsáno výše s ohledem na registr 420 postupu vpřed, řídící registr 410 přepínání vláken nebo časovaný registr 430 přepínání vláken. Nezávisle na tom, které vlákno je aktivní, používají tyto hardwarové registry podmínky, které za běhu dynamicky nemění.
Flexibilita změny podmínek přepnutí vláken správcem přepínání vláken vylepšuje celkový výkon systému. Softwarový správce přepínání vláken může měnit četnost přepínání vláken, zvýšit počet prováděcích cyklů dostupných pro kritickou úlohu a snížit celkový počet ztracených cyklů
Φ * · · · · e · •« · · · · · · ··· Φ · · · · · · · φ ··· φ · ······· 9 9 Φ · 9 9 * · · · ·
999 99 9 9 * ♦ · · · kvůli latenci přepínání vláken. Správce přepínání vláken může být naprogramován buďto v době kompilace nebo během provádění operačním systémem, např. blokovací smyčka může změnit četnost přepínačů vláken; nebo může být odeslána úloha operačního systému, protože nečinné vlákno ve stavu s nižší prioritou čeká na vnější přerušení nebo je jinak připraveno. Může být výhodné zakázat nebo snížit četnost přepínání vláken pryč z aktivního vlákna tak, aby výkon aktuálního proudu instrukcí netrpěl latencemi v důsledku přepínání na něj a z něj. Eventuálně se vlákno může zříci některých nebo všech ze svých prováděcích cyklů podstatným snížením své priority, a následkem toho snížit četnost přepínání na něj nebo zvýšit četnost přepínání z vlákna kvůli zlepšení celkového výkonu systému. Správce přepínání vláken může také nepodmíněně vynutit nebo potlačit přepnutí vláken, nebo ovlivnit, které vlákno se vybere jako další ke spuštění.
Schéma přepínání vláken s více prioritami přiděluje hodnotu priority každému vláknu kvůli ohodnocení podmínek, které způsobí přepnutí. Může být také v některých případech žádoucí, aby prioritu vláken měnil hardware. Například vlákno o nízké prioritě může čekat na nějakou událost, která jakmile nastane, může hardware zvýšit prioritu vlákna tak, aby ovlivnil dobu odezvy vlákna na událost. Relativní priority mezi vlákny nebo priorita určitého vlákna ovlivní ošetřování takové události. Priority vláken mohou být upraveny softwarem správce přepínání vláken použitím jedné nebo více instrukcí, nebo hardwarem odezvou na událost. Správce přepínání vláken mění akce prováděné hardwarovou logikou přepínání vláken tak, aby účinně měnil relativní prioritu vláken.
Tři priority jsou používány se zde popsaným provedením dvou vláken a nabízejí dostatečné rozlišení mezi vlákny, aby se umožnilo ladění výkonu bez nepříznivého ovlivnění výkonu systému. Se třemi prioritami mohou mít dvě vlákna stejný stav střední priority. Volba třech priorit pro dvě vlákna nemá být omezující. V některých architekturách může být normální stav takový, kdy jedno vlákno má vždy vyšší prioritu, než mají ostatní vlákna. Rozumí se, že je v rozsahu vynálezu pokrýt více než dvě vlákna provádění, která mají jednu nebo více priorit, které mohou být nastaveny v hardwaru nebo naprogramovány softwarově.
Tři priority každého vlákna jsou vysoká, střední a nízká. Jakmile je priorita vlákna TO stejná jako vlákna Tl, nemá to žádný vliv na logiku přepínání vláken. Obě vlákna mají stejnou prioritu, takže žádnému není dána výhoda doby provádění. Pokud je priorita vlákna TO vyšší než priorita vlákna Tl, bude přepnutí vláken z TO na Tl zablokováno pro všechna nenalezení položek v mezipaměti Ll cache, tj. zavedení dat, uložení dat a vyzvednutí instrukcí, protože nenalezení položky v mezipaměti Ll cache jsou rozřešena mnohem rychleji než jiné stavy jako například nenalezení položky a překlady v mezipaměti L2. Vláknu TO je dána větší šance přijmout více prováděcích cyklů, než vláknu Tl, což umožňuje vláknu TO pokračovat v běhu tak dlouho, dokud nevyplýtvá přebytečný počet prováděcích cyklů. Procesor však stále přenechá řízení vláknu Tl, pokud vlákno TO vykáže relativně dlouhou latenci provádění. Přepnutí vláken z Tl na TO není ovlivněno, kromě toho, že nastane přepnutí jakmile je nečinné vlákno TO připraveno a v tom případě vlákno TO předejde vlákno Tl. Očekává se, že tento příklad by nastal jakmile se vlákno TO přepne pryč kvůli nenalezení položky v mezipaměti L2 cache nebo požadavku na překlad, a podmínka se ·· i • * rozřeší na pozadí zatímco vlákno TO běží. Případ, kdy má vlákno TO prioritu nižší, než vlákno TI, je analogický s výše uvedeným případem, s obráceným přiřazením vláken.
předefinování instrukce a procesory; (b)
Existují různé možné přístupy implementace správy přepínání vláken změnou priorit vláken. Lze přidat nové instrukce do architektury procesoru. Také lze používat existující instrukce procesoru, které mají vedlejší účinky, které mají požadované akce. Několik faktorů ovlivňuje volbu mezi způsoby umožnění softwarového řízení: (a) snadnost architektury tak, aby obsahovala nové vliv změn v architektuře na existující vhodnost spouštění shodného softwaru na různých verzích procesorů; (c) využití výkonu v porovnání použití nových, speciálních instrukcí s novým používáním existujících instrukcí a definování výsledných vedlejších účinků; (d) požadovaná úroveň řízení softwarem, např. zda může být účinek způsoben každým spuštěním nějaké existující instrukce, jako například určitého zavedení nebo uložení,' nebo zda je nutné další řízení, přidáním instrukce do proudu kvůli výslovnému vyvolání účinku.
Architektura zde popsaná má přednostně výhodu nepoužívané instrukce jejíž hodnoty nemění navržené obecné registry procesoru; tato vlastnost je kritická pro dodatečné vybavení vícevláknových funkcí do architektury procesoru. Mohou být zakódovány jinak speciální funkce. Instrukce je přednostně nop or 0,0,0; jiné instrukce však mohou účinně pracovat jako nop. S použitím různých verzí instrukce or, or 0,0,0 or 1,1,1 atd. pro změnu priority vlákna, může stejný proud instrukcí běžet na procesoru bez nepříznivých účinků jako například neplatná přerušení instrukcí. Rozšíření používá stav stavového registru stroje ke změně významu <9 · • φ φ φ φ φ φ φ těchto instrukcí. Například může být nežádoucí povolit uživateli kódovat některé nebo všechny tyto instrukce priority vláken a přístupové funkce, které zajišťují. Speciální funkce, které zajišťují mohou být definovány tak, aby nastávaly pouze v jistých režimech běhu, nebudou mít žádný vliv v jiných režimech a budou prováděny normálně jako nop.
Jedna možná implementace, používající vícevláknový procesor se dvěma vlákny, používá tři instrukce, které se stávají částí samotného prováděného softwaru ke změně svojí priority:
tsop 1 or 1,1,1 tsop 2 or 1,1,1 tsop 3 or 2,2,2 tsop 4 or 3,3,3
-Přepnutí na nečinné vlákno
-Nastavení aktivního vlákna na nízkou prioritu -Přepnutí na nečinné vlákno
-POZNÁMKA: Platí pouze v privilegovaném režimu pokud není TSC[19]=1
-Nastavení aktivního vlákna na střední prioritu -Nastavení aktivního vlákna na vysokou prioritu -POZNÁMKA: Platí pouze v privilegovaném režimu
Instrukce tsop 1 a tsop 2 mohou být stejné instrukce jako jsou zde provedené jako or 1,1,1 ale mohou být také oddělené instrukce. Tyto instrukce komunikují s bity 19 a 21 řídícího registru 410 přepínání vláken a s bitem problem/privilege stavového registru stroje jak zde byl popsán. Pokud má bit 21 řídícího registru 410 přepínání vláken hodnotu jedna, může správce přepínání vláken nastavit prioritu jeho vlákna na jednu ze tří priorit znázorněných ve stavovém registru přepínání vláken bity 18:19. Pokud má bit 19 řídícího registru přepínání vláken 410 hodnotu nula, pak je přepnuti vláken instrukcí tsop 2 a nastavení priority vlákna řízeno bitem problem/privilege stavového registru stroje. Na druhé straně pokud má bit 19 řídícího registru
410 přepínání vláken hodnotu jedna, nebo pokud má bit problem/privilege stavového registru stroje hodnotu nula a v kódu je přítomna instrukce or 1,1,1, je priorita pro aktivní vlákno nastavena na nízkou a běh se okamžitě přepne na nečinné vlákno nebo vlákno na pozadí pokud je nečinné vlákno povoleno. Instrukce or 2,2,2 nastavuje prioritu aktivního vlákna na střední bez ohledu na hodnotu bitu problem/privilege stavového registru stroje. A instrukce or 3,3,3, pokud má bit problem/privilege stavového registru stroje hodnotu nula, nastavuje prioritu aktivního vlákna na vysokou. Pokud je bit 21 řídícího registru 320 přepínání vláken nula, nastaví se priorita pro obě vlákna na střední a účinek instrukcí or x, x, x na prioritu je zablokován. Pokud je vnější požadavek na přerušení aktivní a pokud je priorita odpovídajícího vlákna nízká, nastaví se priorita tohoto vlákna na střední.
Události měněné prioritami vláken jsou: (1) přepnout při nenalezení položky při zavádění dat z mezipaměti Ll Dcache; (2) přepnout při nenalezení položky při ukládání dat do mezipaměti Ll D-cache; (3) přepnout při nenalezení položky v mezipaměti Ll I-cache při vyzvedávání instrukce; a (4) přepnout pokud je nečinné vlákno ve stavu připraveno. Navíc může aktivace vnějšího přerušení měnit prioritu odpovídajícího vlákna. Následující tabulka ukazuje účinek priority na podmínky, které způsobují přepnutí vláken. Jeden záznam TSC ve sloupcích tři a čtyři znamená použití podmínek určených v řídícím registru (TSC) 410 přepínání vláken k zahájení přepnutí vláken. Záznam TSC[0:2] ošetřovaný jako 0 znamená, že bity 0:2 řídícího registru 410 přepínání vláken se ošetřují jako kdyby hodnota těchto bitů byla nula pro toto vlákno a jiné bity v řídícím registru 410 přepínání vláken jsou použity tak jak jsou pro definování podmínek, tttt tt
9 · • · · tt tttttttt • tt ·· · tttt ♦ ·· • «tttt • ··· tt * tttt· • tt · • * · 9 e ·* 9 • · tttt ·
9 9 tt «· tttt které způsobují přepínání vláken. Věta pokud je vlákno TO připraveno ve sloupci čtyři, znamená, že nastává přepnutí na vlákno TO jakmile vlákno TO již nečeká při události nenalezení položky v mezipaměti, která způsobila přepnutí z něj. Věta pokud je vlákno TI připraveno ve sloupci 3 znamená, že přepnutí na vlákno TI nastane jakmile vlákno TI již nečeká při události nenalezení položky v mezipaměti, která způsobila přepnutí z něj. Pokud je událost nenalezení položky přepnutí kvůli vypršení časového limitu, neexistuje záruka toho, že vlákno s nižší prioritou dokončí instrukci před tím, než se vlákno s vyšší prioritou přepne zpátky.
Priorita TO Priorita TI Podmínky přepnutí vlákna TO Podmínky přepnutí vlákna TI
Vysoká Vysoká TSC TSC
Vysoká Střední TSC[0:2] se ošetřuje j ako 0 TSC nebo pokud TO připraveno
Vysoká Nízká TSC [0:2] se ošetřuje j ako 0 TSC nebo pokud TO připraveno
Střední Vysoká TSC nebo pokud TI připraveno TSC[0:2] se ošetřuje jako 0
Střední Střední TSC TSC
Střední Nízká TSC[0:2] se ošetřuje jako 0 TSC nebo pokud TO připraveno
Nízká Vysoká TSC nebo pokud TI připraveno TSC[0:2] se ošetřuje j ako 0
Nízká Střední TSC nebo pokud TI připraveno TSC [0:2] se ošetřuje j ako 0
Nízká Nízká TSC TSC
Doporučuje se, aby vláknu, které neprovádí žádnou produktivní práci byla dána nízká priorita, aby se zamezilo ztrátě ve výkonu i když každá instrukce v čekající smyčce způsobí přepnutí vláken. Přesto je stále důležité umožnit hardwaru změnit prioritu vlákna pokud je vnější přerušení *· ♦ • φ
φ ···♦ » • · · φ · • φ požadováno u vlákna nastaveného na nižší prioritu. V tom případě se u vlákna zvýší priorita na střední, aby se umožnila rychlejší odezva na přerušení. To umožňuje, aby se vlákno, které čeká na vnější událost, nastavilo na nízkou prioritu, kde zůstane, dokud nebude signalizována událost.
Zatímco byl vynález popsán ve spojení s tím, co je v současnosti považováno za nejpraktičtější a upřednostňovaná provedení, rozumí se, že vynález není omezen na zveřejněná provedení, ale naopak je určen k pokrytí různých úprav a ekvivalentních uspořádání obsažených v duchu a rozsahu přiložených nároků.

Claims (14)

1. Počítačový procesor obsahující:
alespoň jeden vícevláknový procesor (100) k přepínání provádění mezi více vlákny instrukcí; a alespoň jeden softwarově programovatelný řídící registr (410) přepínání vláken, který má více bitů, přičemž každý z uvedených bitů je spojený jedinečně s jednou z více událostí přepínání vláken, přičemž alespoň jeden softwarově programovatelný řídící registr (410) přepínání vláken je propojen s vícevláknovým procesorem.
2. Procesor podle nároku 1, vyznačující se tím, že pokud jeden z bitů je povolen, způsobí řídící událost přepínání vláken spojená s tímto bitem, že se alespoň jeden vícevláknový procesor (100) přepne z jednoho množství vláken na jiné z uvedeného množství vláken.
3. [Zrušeno]
4. Procesor podle jednoho z nároků 1 až 3, vyznačující se tím, že alespoň jedna instrukce může zablokovat alespoň jeden z bitů v softwarově programovatelném řídícím registru (410) přepínání vláken.
5. Procesor podle jednoho z nároků 1 až 4, vyznačující se tím, že obsahuje více než jeden softwarově programovatelný řídící registr (410) přepínání vláken.
6. Procesor podle nároku 5, vyznačující se
27 79 451 • · 9 jednoho softwarově
410) přepínání vláken jiného z uvedených softwarově ··· 4 · 9 99 99 tím, že se bitové hodnoty programovatelného řídícího registru liší od bitových hodnot programovatelných řídících registrů (410) přepínání vláken.
7. Procesor podle jednoho z nároků 1 až 5, vyznačující se tím, že množství řídících událostí přepínání vláken obsahuje nenalezení položky v mezipaměti v alespoň jedné z následujících: mezipaměť Ll-data cache, mezipaměť L2 cache, překladová mezipaměť TLB.
8. Procesor podle jednoho z nároků 1 až 7, vyznačující se tím, že množství řídících událostí přepínání vláken obsahuje nenalezení položky instrukce v mezipaměti v alespoň jedné z následujících: instrukční mezipaměť Ll, překladová mezipaměť TLB.
9. Procesor podle jednoho z nároků 1 8, vyznačující s vláken obsahuje instrukce. e tím, chybu v že množství událostí přepínání překladu adresy dat a/nebo 10. Procesor vyznačující s přepínání vláken procesoru. podle e tím, obsahuje jednoho z nároků 1 až 9, že množství řídících událostí přístup k I/O zařízení vně 11. Procesor podle jednoho z nároků 1 10,
vyznačující se tím, že více řídících událostí přepínání vláken obsahuje přístup k jinému procesoru.
12. Procesor podle jednoho z nároků 2 až 11, vyznačující se tím, že množství řídících událostí
717.1^-7^3?Μ Φ φ · φ φφφ • φφφφφ přepínání vláken obsahuje počet postupu vpřed, počtu, kolikrát bylo přepnuto z jednoho z více vláken z alespoň jednoho vícevláknového procesoru, aniž by byla provedena nějaká instrukce jednoho z více vláken.
13. Procesor podle jednoho z nároků 1 až 12, vyznačující se tím, že více řídících událostí přepínání vláken obsahuje interval časové prodlevy.
14. [Zrušeno]
15. [Zrušeno]
16. Způsob určení obsahu softwarově programovatelného řídícího registru (410) přepínání vláken, obsahující kroky:
spočtení prvního počtu cyklu procesoru, ve kterých je vícevláknový procesor (100) pozastaven kvůli události latence procesoru;
spočtení druhého počtu procesorových cyklů vyžadovaných pro vícevláknový procesor (100) k přepnutí zpracování prvního vlákna instrukcí na druhé vlákno instrukcí;
přidělení události latence procesoru k řídící události přepínání vláken nastavením povolovacího bitu v softwarově programovatelném řídícím registru (410) přepínání vláken pokud je první počet větší, než druhý počet.
17. Způsob podle nároku 16, vyznačující se tím, že dále obsahuje:
poslání na výstup signálu k přepnutí vláken jakmile vícevláknový procesor (100) uvidí řídící událost přepínání vláken pokud je povolovací bit povolen.
CZ20001437A 1998-10-14 1998-10-14 Způsob a zařízení pro výběr událostí přepínání vláken ve vícevláknovém procesoru CZ20001437A3 (cs)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CZ20001437A CZ20001437A3 (cs) 1998-10-14 1998-10-14 Způsob a zařízení pro výběr událostí přepínání vláken ve vícevláknovém procesoru

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CZ20001437A CZ20001437A3 (cs) 1998-10-14 1998-10-14 Způsob a zařízení pro výběr událostí přepínání vláken ve vícevláknovém procesoru

Publications (1)

Publication Number Publication Date
CZ20001437A3 true CZ20001437A3 (cs) 2000-07-12

Family

ID=5470371

Family Applications (1)

Application Number Title Priority Date Filing Date
CZ20001437A CZ20001437A3 (cs) 1998-10-14 1998-10-14 Způsob a zařízení pro výběr událostí přepínání vláken ve vícevláknovém procesoru

Country Status (1)

Country Link
CZ (1) CZ20001437A3 (cs)

Similar Documents

Publication Publication Date Title
JP4006180B2 (ja) マルチスレッド式プロセッサでスレッド切替えイベントを選択するための方法および装置
JP3714598B2 (ja) マルチスレッド式プロセッサでのスレッド優先順位の変更
EP1027645B1 (en) Thread switch control in a multithreaded processor system
US6105051A (en) Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
US6076157A (en) Method and apparatus to force a thread switch in a multithreaded processor
US6018759A (en) Thread switch tuning tool for optimal performance in a computer processor
US6061710A (en) Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
KR100368350B1 (ko) 다중 스레드를 이용하는 처리 시스템과 다중 스레드 이용방법, 다중 독립 스레드 실행 방법과 스레드 실행 제어장치, 스레드와 연계한 프리페치 버퍼 이용 방법, 및스레드 실행 콘트롤러
US7424599B2 (en) Apparatus, method, and instruction for software management of multiple computational contexts in a multithreaded microprocessor
US20040172631A1 (en) Concurrent-multitasking processor
US8635621B2 (en) Method and apparatus to implement software to hardware thread priority
WO2007067562A2 (en) Methods and apparatus for multi-core processing with dedicated thread management
US8595747B2 (en) Efficient task scheduling by assigning fixed registers to scheduler
US7516311B2 (en) Deterministic microcontroller context arrangement
WO2002046887A2 (en) Concurrent-multitasking processor
CZ20001437A3 (cs) Způsob a zařízení pro výběr událostí přepínání vláken ve vícevláknovém procesoru
Biedermann et al. Virtualizable Architecture for embedded MPSoC

Legal Events

Date Code Title Description
PD00 Pending as of 2000-06-30 in czech republic