Superskalární procesor - Superscalar processor

Jednoduchý superskalární plynovod. Načtením a odesláním dvou pokynů najednou lze dokončit maximálně dvě pokyny na cyklus. (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Access memory, WB = Register write back, i = Instruction number, t = Clock cycle [ie time])
Deska procesoru superpočítače CRAY T3e se čtyřmi superskalárními procesory Alpha 21164

Superskalární procesor je procesor , který implementuje formou paralelismu volal na úrovni instrukcí paralelismus v rámci jednoho procesoru. Na rozdíl od skalárního procesoru, který může provádět maximálně jednu jedinou instrukci za taktovací cyklus, může superskalární procesor provádět více než jednu instrukci během hodinového cyklu současným odesláním více instrukcí do různých prováděcích jednotek v procesoru. Umožňuje tedy větší propustnost (počet instrukcí, které lze provést v jednotce času), než by bylo při dané rychlosti hodin jinak možné . Každá prováděcí jednotka není samostatným procesorem (nebo jádrem, pokud je procesorem vícejádrový procesor ), ale prostředkem provádění v rámci jednoho CPU, jako je aritmetická logická jednotka .

Ve Flynnově taxonomii je jednojádrový superskalární procesor klasifikován jako procesor SISD (Single Instruction stream, Single Data stream), ačkoli jednojádrový superskalární procesor, který podporuje operace s krátkými vektory, lze klasifikovat jako SIMD (Single Instruction stream, Multiple Data proudy). Vícejádrové superskalární procesor je klasifikován jako MIMD procesoru (více proudů instrukce, více datových proudů).

Zatímco superskalární CPU je obvykle také pipelinováno , superskalární a pipeline proces se považují za různé techniky vylepšení výkonu. První provádí více instrukcí paralelně pomocí více prováděcích jednotek, zatímco druhý provádí více instrukcí ve stejné prováděcí jednotce paralelně rozdělením prováděcí jednotky do různých fází.

Superskalární technika je tradičně spojována s několika identifikačními charakteristikami (v daném CPU):

  • Pokyny se vydávají z postupného proudu pokynů
  • CPU dynamicky kontroluje datové závislosti mezi instrukcemi za běhu (oproti kontrole softwaru v době kompilace )
  • CPU může provádět více instrukcí za taktovací cyklus

Dějiny

Seymour Cray ‚s CDC 6600 z roku 1966 je často zmiňován jako první superskalární provedení. IBM System / 360 Model 91 z roku 1967 byl dalším superskalárním sálovým počítačem. Mikroprocesory Motorola MC88100 (1988), Intel i960 CA (1989) a AMD 29000 - série 29050 (1990) byly prvními komerčními jednočipovými superskalárními mikroprocesory. Mikroprocesory RISC, jako jsou tyto, byly první, které měly superskalární provedení, protože RISC architektury volné tranzistory a zemřít oblast, které lze použít k zahrnutí více prováděcích jednotek (proto byly návrhy RISC rychlejší než designy CISC v 80. a 90. letech).

S výjimkou procesorů používaných v aplikacích s nízkou spotřebou energie , vestavěných systémech a zařízeních napájených z baterie jsou v podstatě všechny univerzální CPU vyvinuté přibližně od roku 1998 superskalární.

P5 Pentium byl první superskalární x86 procesor; Nx586 , P6 Pentium Pro a AMD K5 byly mezi prvními vzory, které dekódovací x 86 -instructions asynchronně do dynamického mikrokód -jako mikro-op sekvencí před vlastním provádění na superskalární mikroarchitektury ; tím se otevřelo dynamické plánování dílčích instrukcí v mezipaměti a umožnilo se extrahovat více paralelismu ve srovnání s přísnějšími metodami používanými v jednodušším P5 Pentiu ; také zjednodušilo spekulativní provádění a umožnilo vyšší taktovací frekvence ve srovnání s designy, jako je pokročilý Cyrix 6x86 .

Skalární až superskalární

Nejjednodušší procesory jsou skalární procesory. Každá instrukce prováděná skalárním procesorem obvykle manipuluje s jednou nebo dvěma datovými položkami najednou. Naproti tomu každá instrukce prováděná vektorovým procesorem pracuje současně s mnoha datovými položkami. Analogií je rozdíl mezi skalární a vektorovou aritmetikou. Superskalární procesor je směsicí těchto dvou. Každá instrukce zpracovává jednu datovou položku, ale v každém CPU je více prováděcích jednotek, takže více instrukcí může zpracovávat samostatné datové položky současně.

Superskalární design CPU klade důraz na zlepšení přesnosti dispečinku instrukcí a umožňuje mu nepřetržitě používat více prováděcích jednotek. To se stává stále důležitějším, jak se zvyšuje počet jednotek. Zatímco časné superskalární CPU by měly dvě ALU a jednu FPU , novější konstrukce, jako je PowerPC 970, obsahuje čtyři ALU, dvě FPU a dvě jednotky SIMD. Pokud je dispečer neefektivní v udržování zásob všech těchto jednotek pokyny, nebude výkon systému o nic lepší než výkon jednodušší a levnější konstrukce.

Superskalární procesor obvykle udržuje rychlost provádění přesahující jednu instrukci na cyklus stroje . Pouhé zpracování více instrukcí souběžně však nedělá architekturu superskalární, protože to dosahuje i pipeline , multiprocesorová nebo vícejádrová architektura, ale s různými metodami.

V superskalárním CPU dispečer čte instrukce z paměti a rozhoduje, které z nich lze spustit paralelně, přičemž každou odešle do jedné z několika prováděcích jednotek obsažených v jednom CPU. Lze si tedy představit superskalární procesor, který má více paralelních kanálů, z nichž každý zpracovává instrukce současně z jednoho podprocesu instrukce.

Omezení

Dostupné zlepšení výkonu ze superskalárních technik je omezeno třemi klíčovými oblastmi:

  • Stupeň vnitřní paralelismu v proudu instrukcí (instrukce vyžadující stejné výpočetní zdroje z CPU)
  • Složitost a časové náklady na logiku kontroly závislostí a registraci přejmenování obvodů
  • Zpracování větvové instrukce

Existující binární spustitelné programy mají různé stupně vnitřní paralelismu. V některých případech nejsou instrukce navzájem závislé a lze je provádět současně. V ostatních případech jsou na sobě vzájemně závislé: jedna instrukce ovlivňuje zdroje nebo výsledky druhé. Pokyny a = b + c; d = e + f lze spustit paralelně, protože žádný z výsledků nezávisí na jiných výpočtech. Pokyny a = b + c; b = e + f však nemusí být možné spustit paralelně, v závislosti na pořadí, ve kterém se pokyny dokončují, když se pohybují jednotkami.

Přestože instrukční proud nemusí obsahovat žádné závislosti mezi instrukcemi, superskalární CPU musí přesto tuto možnost zkontrolovat, protože neexistuje žádná záruka jinak a selhání detekce závislosti by přineslo nesprávné výsledky.

Bez ohledu na to, jak zdokonalený je proces polovodičů nebo jak vysoká je rychlost přepínání, představuje to praktické omezení, kolik instrukcí lze současně odeslat. Zatímco pokroky v procesu umožní stále větší počet prováděcích jednotek (např. ALU), zátěž kontroly závislostí instrukcí rychle roste, stejně jako složitost obvodů přejmenování registrů ke zmírnění některých závislostí. Společně spotřeba energie , složitost a náklady na zpoždění brány omezují dosažitelné superskalární zrychlení na zhruba osm současně odeslaných pokynů.

Avšak i při nekonečně rychlé logice kontroly závislostí na jinak konvenčním superskalárním CPU, pokud má samotný tok instrukcí mnoho závislostí, omezilo by to také možné zrychlení. Stupeň vnitřní paralelismu v proudu kódu tedy tvoří druhé omezení.

Alternativy

Společně tato omezení podporují vyšetřování alternativních architektonických změn, jako jsou velmi dlouhé instrukční slovo (VLIW), výslovně paralelní výpočetní instrukce (EPIC), simultánní vícevláknové zpracování (SMT) a vícejádrové výpočty .

S VLIW je obtížný úkol kontroly závislostí pomocí hardwarové logiky za běhu odstraněn a delegován na kompilátor . Výslovně paralelní výpočetní instrukce (EPIC) je jako VLIW s extra instrukcemi pro předběžné načítání mezipaměti.

Simultánní multithreading (SMT) je technika pro zlepšení celkové efektivity superskalárních procesorů. SMT umožňuje více nezávislých podprocesů provádění k lepšímu využití zdrojů poskytovaných moderními architekturami procesorů.

Superskalární procesory se od vícejádrových procesorů liší tím, že několik prováděcích jednotek není celými procesory. Jeden procesor se skládá z jemněji provedených prováděcích jednotek, jako je ALU , celočíselný multiplikátor , celočíselný posunovač, FPU atd. Každá prováděcí jednotka může mít více verzí, které umožňují provádění mnoha instrukcí paralelně. To se liší od vícejádrového procesoru, který souběžně zpracovává pokyny z více vláken, jedno vlákno na jednotku zpracování (tzv. „Jádro“). Také se liší od zřetězeného procesoru , kde může být více instrukcí současně v různých fázích provádění, způsobem montážní linky .

Různé alternativní techniky se vzájemně nevylučují - mohou být (a často jsou) kombinovány v jednom procesoru. Je tedy možný vícejádrový procesor, kde každé jádro je nezávislý procesor obsahující více paralelních kanálů, přičemž každý kanál je superskalární. Některé procesory také zahrnují schopnost vektoru .

Viz také

Reference

  • Mike Johnson , design mikroprocesoru Superscalar , Prentice-Hall, 1991, ISBN   0-13-875634-1
  • Sorin Cotofana, Stamatis Vassiliadis, „O konstrukční složitosti emisní logiky superskalárních strojů“, EUROMICRO 1998: 10277-10284
  • Steven McGeady , „Implementace architektury 80960 i960CA SuperScalar“, IEEE 1990, s. 232–240
  • Steven McGeady a kol., „Vylepšení výkonu v zabudovaném mikroprocesoru Superscalar i960MM,“ ACM Proceedings of the Conference Conference of Computer Architecture (Compcon) , 1991, str. 4–7

externí odkazy