Multithreading (počítačová architektura) - Multithreading (computer architecture)

Proces se dvěma podprocesy provádění, běžící na jednom procesoru.  Vlákno č. 1 je provedeno jako první, nakonec se spustí vlákno č. 2 a čeká na odpověď.  Když vlákno # 2 skončí, signalizuje vlákno # 1, aby pokračovalo v provádění až do dokončení, a pak dokončí.
Proces se dvěma podprocesy provádění, běžící na jednom procesoru.

V počítačové architektuře je multithreading schopnost centrální procesorové jednotky (CPU) (nebo jednoho jádra ve vícejádrovém procesoru ) poskytovat více podprocesů provádění současně, podporovaných operačním systémem . Tento přístup se liší od multiprocesingu . V aplikaci s více vlákny vlákna sdílejí prostředky jednoho nebo více jader, které zahrnují výpočetní jednotky, mezipaměti CPU a vyrovnávací paměť překladu (TLB).

V případě, že systémy s více procesy zahrnují více kompletních procesorových jednotek v jednom nebo více jádrech, cílem multithreadingu je zvýšit využití jednoho jádra pomocí paralelismu na úrovni vláken i paralelismu na úrovni instrukcí . Jelikož se tyto dvě techniky vzájemně doplňují, kombinují se téměř ve všech moderních systémových architekturách s více CPU s více vlákny as CPU s více jádry s více vlákny.

Přehled

Paradigma pro vícevláknové zpracování se stalo populárnějším, protože úsilí o další využívání paralelismu na úrovni instrukcí se od konce 90. let zastavilo. To umožnilo, aby se koncept propustnosti výpočetní techniky znovu vynořil ze specializovanější oblasti zpracování transakcí . I když je velmi obtížné dále zrychlit jeden podproces nebo jeden program, většina počítačových systémů ve skutečnosti multitasking mezi více podprocesy nebo programy. Techniky, které zlepšují propustnost všech úkolů, tedy vedou k celkovému zvýšení výkonu.

Dvě hlavní techniky pro výpočet propustnosti jsou multithreading a multiprocesing .

Výhody

Pokud vlákno získá spoustu chyb v mezipaměti , ostatní vlákna mohou nadále využívat výhody nevyužitých výpočetních prostředků, což může vést k rychlejšímu celkovému spuštění, protože tyto prostředky by byly nečinné, kdyby byl spuštěn pouze jeden podproces. Pokud vlákno také nemůže využívat všechny výpočetní prostředky CPU (protože pokyny závisí na výsledku druhého), spuštění jiného vlákna může zabránit nečinnosti těchto prostředků.

Nevýhody

Více vláken se může vzájemně ovlivňovat při sdílení hardwarových prostředků, jako jsou mezipaměti nebo překladové vyrovnávací paměti překladu (TLB). Výsledkem je, že časy provádění jediného vlákna se nezlepšují a lze je degradovat, i když se provádí pouze jedno vlákno, kvůli nižším frekvencím nebo dalším fázím potrubí, které jsou nezbytné pro přizpůsobení hardwaru pro přepínání vláken.

Celková účinnost se liší; Společnost Intel požaduje až 30% zlepšení díky technologii Hyper-Threading Technology , zatímco syntetický program, který právě provádí smyčku neoptimalizovaných závislých operací s plovoucí desetinnou čárkou, ve skutečnosti získá 100% zlepšení rychlosti při paralelním spuštění. Na druhou stranu ručně vyladěné programy v jazyce assembleru využívající rozšíření MMX nebo AltiVec a provádějící přednastavení dat (jak by mohl dobrý kodér videa) netrpí chybami v mezipaměti nebo nečinnými výpočetními prostředky. Takové programy proto neprospívají hardwarovým multithreadingem a mohou skutečně vidět snížený výkon kvůli soupeření o sdílené prostředky.

Ze softwarového hlediska je hardwarová podpora pro vícevláknové zpracování viditelnější pro software, což vyžaduje více změn jak v aplikačních programech, tak v operačních systémech než při víceprocesovém zpracování. Hardwarové techniky používané k podpoře multithreadingu často paralelně probíhají se softwarovými technikami používanými pro multitasking počítačů . Plánování vláken je také velkým problémem v multithreadingu.

Druhy multithreadingu

Interleaved / Temporal multithreading

Hrubozrnné multithreading

Nejjednodušší typ multithreadingu nastává, když běží jedno vlákno, dokud není blokováno událostí, která by za normálních okolností vytvořila stání s dlouhou latencí. Takovým zastavením může být chybějící mezipaměť, která musí přistupovat k paměti mimo čip, což může trvat stovky cyklů CPU, než se data vrátí. Namísto čekání na vyřešení stání by procesor se závitem přepnul provedení na jiné vlákno, které bylo připraveno ke spuštění. Teprve když dorazí data pro předchozí vlákno, bude předchozí vlákno umístěno zpět na seznam vláken připravených ke spuštění .

Například:

  1. Cyklus i : je vydána instrukce j z vlákna A.
  2. Cyklus i + 1 : je vydána instrukce j + 1 z vlákna A.
  3. Cyklus i + 2 : je vydána instrukce j + 2 z vlákna A , což je instrukce načtení, která ve všech mezipaměti chybí.
  4. Cyklus i + 3 : plánovač vláken vyvolán, přepne na závit B .
  5. Cyklus i + 4 : je vydána instrukce k z vlákna B.
  6. Cyklus i + 5 : je vydána instrukce k + 1 z vlákna B.

Koncepčně je to podobné jako kooperativní multitasking používaný v operačních systémech v reálném čase , kdy se úkoly dobrovolně vzdají doby provádění, když potřebují počkat na nějaký typ události. Tento typ vícevláknového zpracování se nazývá blokové, kooperativní nebo hrubozrnné vícevlákno.

Cílem podpory vícevláknového hardwaru je umožnit rychlé přepínání mezi blokovaným vláknem a jiným vláknem připraveným ke spuštění. K dosažení tohoto cíle je nákladem na hardware replikace viditelných registrů programu a některých řídicích registrů procesoru (například počitadlo programu). Přepínání z jednoho vlákna na jiné vlákno znamená, že hardware přepíná z používání jednoho registru nastaveného na jiný; pro efektivní přepínání mezi aktivními vlákny musí mít každé aktivní vlákno nastavenu vlastní registraci. Například pro rychlé přepínání mezi dvěma vlákny je třeba hardware registru zaregistrovat dvakrát.

Další hardwarová podpora pro vícevláknové zpracování umožňuje přepínání podprocesů v jednom cyklu CPU a přináší vylepšení výkonu. Další hardware také umožňuje každému vláknu chovat se, jako by se provádělo samostatně a nesdílelo žádné hardwarové prostředky s jinými vlákny, čímž se minimalizuje množství softwarových změn potřebných v rámci aplikace a operačního systému k podpoře více vláken.

Mnoho rodin mikrokontrolérů a vestavěných procesorů má několik bank registrů, které umožňují rychlé přepínání kontextu pro přerušení. Taková schémata lze považovat za typ blokového multithreadingu mezi vláknem uživatelského programu a vlákny přerušení.

Prokládané multithreading

Účelem prokládaného vícevlákna je odebrat všechny stánky závislostí na datech z kanálu provádění . Vzhledem k tomu, že jedno vlákno je relativně nezávislé na jiných vláknech, je menší pravděpodobnost, že jedna instrukce v jedné fázi zavádění potřebuje výstup ze starší instrukce v potrubí. Koncepčně je podobný preventivnímu multitaskingu používanému v operačních systémech; analogií by bylo, že časový úsek daný každému aktivnímu vláknu je jeden cyklus CPU.

Například:

  1. Cyklus i + 1 : je vydán pokyn z vlákna B.
  2. Cyklus i + 2 : je vydán pokyn z vlákna C.

Tento typ multithreadingu se nejprve nazýval barel processing, ve kterém tyče barelu představují fáze potrubí a jejich prováděcí vlákna. Prokládané, preventivní, jemnozrnné nebo časově řízené multithreading jsou modernější terminologií.

Kromě nákladů na hardware popsaných v blokovém typu multithreading má prokládané multithreading další náklady na každou fázi potrubí, která sleduje ID vlákna instrukce, kterou zpracovává. Vzhledem k tomu, že se v kanálu souběžně spouští více podprocesů, musí být sdílené prostředky, jako jsou mezipaměti a TLB, větší, aby se zabránilo thrashingu mezi různými podprocesy.

Simultánní multithreading

Nejpokročilejší typ multithreadingu platí pro superskalární procesory . Zatímco normální superskalární procesor vydává více instrukcí z jednoho vlákna každý cyklus CPU, v simultánním multithreadingu (SMT) může superskalární procesor vydávat instrukce z více vláken každý cyklus CPU. Tento typ multithreadingu, který si uvědomuje, že každé jedno vlákno má omezené množství paralelismu na úrovni instrukcí , se pokusí využít paralelismu dostupného napříč více vlákny, aby se snížilo plýtvání spojené s nevyužitými sloty pro vydání.

Například:

  1. Cyklus i : instrukce j a j + 1 z vlákna A a instrukce k z vlákna B jsou vydávány současně.
  2. Cyklus i + 1 : instrukce j + 2 z vlákna A , instrukce k + 1 z vlákna B a instrukce m z vlákna C jsou vydávány současně.
  3. Cyklus i + 2 : instrukce j + 3 z vlákna A a instrukce m + 1 a m + 2 z vlákna C jsou vydávány současně.

Abychom odlišili ostatní typy multithreadingu od SMT, termín „ temporální multithreading “ se používá k označení, kdy lze současně vydávat pokyny pouze z jednoho vlákna.

Kromě nákladů na hardware diskutovaných pro prokládané vícevláknové zpracování má SMT další náklady na každou fázi kanálu, která sleduje ID vlákna každé zpracovávané instrukce. Sdílené prostředky, jako jsou mezipaměti a TLB, musí být znovu dimenzovány pro velký počet zpracovávaných aktivních vláken.

Implementace zahrnují DEC (později Compaq ) EV8 (nedokončil), Intel Technologie Hyper-Threading , IBM POWER5 / POWER6 / POWER7 / POWER8 / POWER9 , IBM Z13 / Z14 / Z15 , Sun Microsystems UltraSPARC T2 , Cray XMT a AMD Bulldozer a Zen mikroarchitektury.

Specifika implementace

Hlavní oblastí výzkumu je plánovač podprocesů, který si musí rychle vybrat ze seznamu podprocesů připravených ke spuštění, aby se mohl spustit další, a také udržovat seznamy připravených ke spuštění a pozastavené podprocesy. Důležitým podtématem jsou různá schémata priorit podprocesů, která mohou být použity plánovačem. Plánovač vláken může být implementován úplně v softwaru, úplně v hardwaru nebo jako kombinace hardware / software.

Další oblastí výzkumu je, jaký typ událostí by měl způsobit přepnutí podprocesu: vynechání mezipaměti, komunikace mezi podprocesy, dokončení DMA atd.

Pokud schéma vícevláknového zpracování replikuje veškerý stav viditelný pro software, včetně privilegovaných řídicích registrů a TLB, pak umožňuje vytvoření virtuálních strojů pro každé vlákno. To umožňuje každému vláknu spouštět svůj vlastní operační systém na stejném procesoru. Na druhou stranu, pokud je uložen pouze stav uživatelského režimu, je zapotřebí méně hardwaru, což by umožnilo aktivovat více vláken najednou pro stejnou oblast matrice nebo cenu.

Viz také

Reference

externí odkazy