Čekání na nový webový server Multimediaexpo.cz skončilo !
Motorem našeho webového serveru bude pekelně rychlý
procesor AMD Ryzen Threadripper 7960X (ZEN 4)
.

CISC

Z Multimediaexpo.cz

(Rozdíly mezi verzemi)
m (1 revizi)
(+ Výrazné vylepšení...Literatura, Reference, Externí odkazy)
 
Řádka 1: Řádka 1:
-
'''CISC''' ({{Vjazyce2|en|'''Complex Instruction Set Computer'''}}) v [[Informační technologie|informačních technologiích]] označuje [[procesor]] s velkou sadou [[Strojová instrukce|strojových instrukcí]] (řádově stovky) a relativně malým počtem [[registr procesoru|registrů]] (jejich počet obvykle nepřesahuje 30). Procesory CISC mají různě dlouhé strojové instrukce, jejichž vykonání trvá různě dlouhou dobu. Označení CISC bylo zavedeno jako protiklad až poté, co se prosadily procesory [[RISC]], které mají instrukční sadu naopak maximálně redukovanou.
+
'''CISC''' ({{Vjazyce|en}} {{Cizojazyčně|en|'''Complex Instruction Set Computing'''}}) označuje v [[Informatika|informatice]] skupinu [[Procesor|procesorů]] vyznačujících se podobným návrhem sady [[Strojová instrukce|strojových instrukcí]]. Označení ''complex'' vyjadřuje skutečnost, že strojové instrukce pokrývají velmi široký okruh funkcí, které by jinak šly [[Programování|naprogramovat]] pomocí jednodušších již obsažených strojových instrukcí (například [[násobení]] je možné nahradit [[sčítání]]m a [[Bitový operátor|bitovými posuny]]). Opakem procesorů CISC jsou procesory [[RISC]], které obsahují redukovanou instrukční sadu.
-
== CISC versus RISC ==
+
 
 +
== Charakteristika ==
 +
Procesory CISC jsou charakteristické velmi Košatou instrukční sadou [[Strojová instrukce|strojových instrukcí]], instrukce mají proměnlivou délku i dobu vykonání a procesor obsahuje relativně nízký počet [[Registr procesoru|registrů]]. Paradoxně se tak může stát, že operace provedená složenou instrukcí (například [[násobení]]) může být nahrazena sledem jednodušších strojových instrukcí ([[sčítání]] a [[Bitový operátor|bitové posuvy]]), které mohou být ve výsledku vykonány rychleji, než hardwarově implementovaná složená varianta.
 +
 
 +
Označení CISC bylo zavedeno jako protiklad až poté, co se prosadily procesory [[RISC]], které mají instrukční sadu naopak maximálně redukovanou. Téměř výhradně jen jednoduché operace, minimum složených, jsou stejně dlouhé a jejich vykonání trvá stejnou dobu (procesory [[IBM 801]] a MIPS R2000).
 +
 
 +
Obvyklou chybou je domněnka, že procesory CISC mají více strojových instrukcí, než procesory RISC. Ve skutečnosti nejde o absolutní počet, ale o počet různých druhů operací, které procesor sám přímo umí vykonat na [[Hardware|hardwarové]] úrovni (tj. již z výroby). Procesor CISC tak může například paradoxně obsahovat pouze jednu strojovou instrukci pro danou operaci (např. [[logická operace]]), zatímco procesor RISC může tuto operaci obsahovat jako několik strojových instrukcí, které stejnou operaci umí provést nad různými registry.
 +
 
 +
== Historický kontext ==
 +
Předtím než se v [[Procesor|procesorech]] prosadila architektura [[RISC]], se designéři počítačů snažili o překonání tzv. sémantické mezery – navrhnout sady [[Strojová instrukce|instrukcí]] tak, aby přímo podporovaly konstrukce [[Vyšší programovací jazyk|vysokoúrovňových jazyků]], např.: volání [[Procedura|procedury]], kontrola [[Řídicí struktura|smyček]]. Tyto nové instrukce umožňovaly kombinovat data a přístupy k poli. Nové a kompaktní instrukce usnadnily tvorbu menších programů a zmenšení počtu přístupů do [[Operační paměť|hlavní paměti]], které byly značně pomalé. Zejména v 60. letech se užitím těchto instrukcí zrychlilo vykonávání operací a došlo i k šetření výdajů na [[Operační paměť|počítačové paměti]] a [[Pevný disk|disková úložiště]]. Kompaktnost nových instrukcí značně zvýšila produktivitu programování v [[Jazyk symbolických adres|jazyce symbolických adres]] i ve vysokoúrovňových jazycích ([[Fortran]], nebo [[ALGOL|Algol]]).
 +
 
 +
=== Nové instrukce ===
 +
V 70. letech 20. století se analýzou [[Vyšší programovací jazyk|vysokoúrovňových jazyků]] ukázala nutnost implementovat některé části [[Strojový kód|strojového kódu]] – cílem bylo vytvořit nové [[Strojová instrukce|instrukce]], které zlepší výpočetní [[výkon]]. Byly vytvořeny a přidány některé instrukce, které nebyly pro [[jazyk symbolických adres]] původně zamýšleny, ale které velmi dobře pracovaly s [[Vyšší programovací jazyk|vysokoúrovňovými jazyky]]. [[Překladač|Kompilátory]] byly aktualizovány pro použití těchto nových instrukcí. Výhody [[Sémantika|sémanticky]] košatých instrukcí s kompaktním [[kódování]]m jsou využity v moderních [[mikroprocesor|procesorech]], zejména v jejich [[cache]], protože jejich kód je kratší a snadněji se do cache vejde.
 +
 
 +
== Stránka designu ==
 +
Některé návrhy se vyznačují vysokou programovou propustností, nízkou cenou a také tím, že umožňují vyjádření vysokoúrovňových konstrukcí menším počtem instrukcí - tento přístup však není vždy vhodný. Jako ilustraci lze uvést užití nenáročné verze architektury, která je charakteristická malým množstvím [[Hardware|hardwaru]]. U této architektury bylo možné dostat se do situace, kdy se výkon dal zvýšit použitím sekvence jednodušších instrukcí. Takový přístup však měl jeden hlavní nedostatek - návrháři navrhli některé instrukce [[Jazyk symbolických adres|jazyka symbolických adres]] tak, že jejich funkce nebylo možné implementovat na základním [[Hardware|hardwaru]], který byl k tomu k dispozici. Příkladem bylo provedení nastavení [[Registr procesoru|registru]], nebo místa v [[Operační paměť|paměti]], jenž bylo zřídka užíváno, přes vnitřní, nebo vnější [[Sběrnice|sběrnici]]. Takováto činnost by vždy vyžadovala zvláštní cykly navíc.
 +
 
 +
I ve vyvážených [[Výpočetní cluster|high-performance]] návrzích s vysokoúrovňovými instrukcemi je komplikované dekódování a efektivní vykonávání v omezeném souboru [[tranzistor]]ů. Takové architektury tedy vyžadují velké množství práce v návrhu [[mikroprocesor|procesoru]] zejména v případě, že nejde užít jednodušší, ale také typicky pomalejší řešení založené na dekódovací tabulce, nebo mikrokódu.
 +
 
 +
=== Superskalár ===
 +
V moderním kontextu se pro komplikované, ale proveditelné sestavení [[Superskalární architektura|superskalární]] implementace CISC programovacího modelu ([[Pentium]], nebo [[Cyrix 6x86]]) užívá kódování s proměnnou délkou instrukcí. Úroveň paralelismu instrukcí, jenž jsou vytěžovány z kódu, může být limitována častými přístupy do paměti pro operandy, přestože je to prováděno rychlou [[cache]]. Zásluhou "kompaktních" a [[Sémantika|sémanticky]] bohatých instrukcí je průměrný počet operací vykonaných na kódovou jednotku (na [[byte]], nebo [[bit]]) pro CISC vyšší, než [[RISC]] procesor, což může být značnou výhodou v implementaci založené na moderní [[cache]].
 +
 
 +
[[Tranzistor]]y logiky a mikrokódu jsou nyní běžně dostupné, pouze velké a rychlé [[Cache|cache paměti]] jsou limitovány maximálním počet [[tranzistor]]ů. Počet [[tranzistor]]ů CISC dekodérů neroste exponenciálně jako počet [[tranzistor]]ů [[Procesor|na procesoru]]. Vzrůstající počet tranzistorů spolu s novými nástroji a technologiemi, vedou k implementaci návrhů s proměnnou délkou bez omezení [[RISC|load-store]] (mají ho [[RISC|RISC procesory]]). Těmito prostředky je na jedné straně umožněna opětovná aplikace starších architektur (například všudypřítomný [[x86]]), na druhé straně užití nových návrhů [[Jednočipový počítač|mikrokontrolerů]] pro [[Vestavěný systém|embedded systémy]]. [[Superskalární architektura|Superskalár]] je v případě moderní [[x86]] řešen dynamicky vydávanými a [[Vyrovnávací paměť|bufferovanými]] mikrooperacemi ([[Pentium Pro]] a [[AMD K5]]).
 +
 
 +
== Označení CISC a RISC ==
 +
Označení CISC a [[RISC]] přestalo mít význam s pokračujícím vývojem obou typů [[Procesor|procesorů]]. První implementací typu [[x86]] s vysokým [[pipelining]]em byl [[Intel 80486|486]] od Intelu, AMD, Cyrixu a IBM, který podporoval každou instrukci, jenž podporoval jeho [[preprocesor]]. Maximální výkonnosti dosahoval pouze s velmi jednoduchým [[x86]] subsetem, který byl jen o něco více než typická [[RISC]] [[instrukční sada]] (bez typických [[RISC load-store omezení]]). První generace procesorů [[Pentium|Intel P5 Pentium]] byla převážně [[Superskalární architektura|superskalární verzí]] založenou na těchto principech. Moderní [[x86|x86 procesory]] dekódují a rozdělují instrukce do dynamických sekvencí mikrooperací, které nejen pomáhají vykonávat větší skupiny instrukcí metodou [[pipelining]]u, ale také podporují pokročilejší [[paralelismus]] kódového streamu, pro ještě větší výkon.
 +
 
 +
== Rozdíl CISC a RISC ==
Široká instrukční sada procesorů CISC usnadňuje jejich programování, protože není některé operace nutné rozepisovat (například násobení), avšak ve strojovém kódu (nebo v [[Jazyk symbolických adres|jazyce symbolických adres]]) se dnes programuje jen minimálně. Složitost CISC procesorů vede k problémům při výrobě (velká spotřeba materiálu, větší pravděpodobnost vady, komplikovaný návrh, problémy s vysokými frekvencemi, [[pipelining]], [[cache]] atd).
Široká instrukční sada procesorů CISC usnadňuje jejich programování, protože není některé operace nutné rozepisovat (například násobení), avšak ve strojovém kódu (nebo v [[Jazyk symbolických adres|jazyce symbolických adres]]) se dnes programuje jen minimálně. Složitost CISC procesorů vede k problémům při výrobě (velká spotřeba materiálu, větší pravděpodobnost vady, komplikovaný návrh, problémy s vysokými frekvencemi, [[pipelining]], [[cache]] atd).
-
Typickými zástupci koncepce CISC jsou procesory rodiny [[Motorola 68000]] a procesory postavené na architektuře Intel [[x86]].
+
 
 +
Typickými zástupci koncepce CISC jsou procesory rodiny [[Motorola 68000]], a procesory postavené na architektuře Intel [[x86]].
 +
 
== CISC s mikrokódem ==
== CISC s mikrokódem ==
V současné době jsou některé CISC procesory konstruovány interně jako procesor RISC (jehož [[Hardware|hardwarová]] výroba je jednodušší, snadněji se implementuje [[pipelining]] atd.). Tento interní mikroprocesor operuje s tzv. mikroinstrukcemi, pomocí nichž jsou [[Interpret (software)|interpretovány]] běžné [[Strojová instrukce|strojové]] CISC instrukce (tzv. [[mikrokód]]). Jedna CISC instrukce je tak provedena jako několik elementárních RISC mikroinstrukcí. Takové CISC procesory jsou tak vlastně malé [[počítač]]e řízené vlastním [[Počítačový program|programem]].
V současné době jsou některé CISC procesory konstruovány interně jako procesor RISC (jehož [[Hardware|hardwarová]] výroba je jednodušší, snadněji se implementuje [[pipelining]] atd.). Tento interní mikroprocesor operuje s tzv. mikroinstrukcemi, pomocí nichž jsou [[Interpret (software)|interpretovány]] běžné [[Strojová instrukce|strojové]] CISC instrukce (tzv. [[mikrokód]]). Jedna CISC instrukce je tak provedena jako několik elementárních RISC mikroinstrukcí. Takové CISC procesory jsou tak vlastně malé [[počítač]]e řízené vlastním [[Počítačový program|programem]].
 +
=== Aktualizace mikrokódu ===
=== Aktualizace mikrokódu ===
-
Mikrokód je u procesorů Intel ([[Pentium Pro]] a novějších) možné nahrazovat, čehož využívají výrobci procesorů k opravě chyb. Nový mikrokód se musí po každém zapnutí nahrávat znovu, protože je uložen ve volatilní [[Elektronická paměť|paměti]] a mikroprocesor se po vypnutí vrací ke svému původnímu mikrokódu. K aktualizaci mikrokódu může být použit [[BIOS]] (v rámci [[Power On Self Test|POST]] testů po zapnutí počítače) nebo je možné ho nahradit i později (ovladač CPU v [[Microsoft Windows]], nástroj <code>microcode_ctl</code> v [[Linux]]u<ref>http://www.urbanmyth.org/microcode/</ref>).
+
Mikrokód je u procesorů Intel ([[Pentium Pro]] a novějších) možné nahrazovat, čehož využívají výrobci procesorů k opravě chyb. Nový mikrokód se musí po každém zapnutí nahrávat znovu, protože je uložen ve volatilní [[Elektronická paměť|paměti]] a mikroprocesor se po vypnutí vrací ke svému původnímu mikrokódu. K aktualizaci mikrokódu může být použit [[BIOS]] (v rámci [[Power On Self Test|POST]] testů po zapnutí počítače) nebo je možné ho nahradit i později (ovladač CPU v&nbsp;[[Microsoft Windows]] a nástroj <code>microcode_ctl</code> v&nbsp;[[Linux]]u&nbsp;<ref>[https://linux.die.net/man/8/microcode_ctl/ microcode_ctl(8) – Linux man page (anglicky)]</ref><ref>[https://access.redhat.com/articles/3436091 Is CPU microcode available to address CVE-2017-5715 via the microcode_ctl package? (anglicky)]</ref>).
-
== Reference ==
+
 
-
<references />
+
== Literatura ==
 +
* František Plášil, Jan Staudek, a kolektiv: ''Ročenka výpočetní techniky 1 Informatika'', SNTL, Praha 1989, 400 stran, Cena 37 Kčs
== Související články ==
== Související články ==
* [[RISC]]
* [[RISC]]
 +
== Reference ==
 +
<references />
 +
== Externí odkazy ==
 +
* [http://www.fit.vutbr.cz/study/courses/ITP/public/itp07/architektury01.pdf Architektury CISC a RISC, uplatnění v personálních počítačích (PDF, česky)]
 +
* [http://poli.cs.vsb.cz/edu/arp/down/procrisc.pdf Procesory CISC a RISC – Studijní materiál pro předmět Architektury počítačů (PDF, česky)]

Aktuální verze z 4. 8. 2018, 23:55

CISC (anglicky Complex Instruction Set Computing) označuje v informatice skupinu procesorů vyznačujících se podobným návrhem sady strojových instrukcí. Označení complex vyjadřuje skutečnost, že strojové instrukce pokrývají velmi široký okruh funkcí, které by jinak šly naprogramovat pomocí jednodušších již obsažených strojových instrukcí (například násobení je možné nahradit sčítáním a bitovými posuny). Opakem procesorů CISC jsou procesory RISC, které obsahují redukovanou instrukční sadu.

Obsah

Charakteristika

Procesory CISC jsou charakteristické velmi Košatou instrukční sadou strojových instrukcí, instrukce mají proměnlivou délku i dobu vykonání a procesor obsahuje relativně nízký počet registrů. Paradoxně se tak může stát, že operace provedená složenou instrukcí (například násobení) může být nahrazena sledem jednodušších strojových instrukcí (sčítání a bitové posuvy), které mohou být ve výsledku vykonány rychleji, než hardwarově implementovaná složená varianta.

Označení CISC bylo zavedeno jako protiklad až poté, co se prosadily procesory RISC, které mají instrukční sadu naopak maximálně redukovanou. Téměř výhradně jen jednoduché operace, minimum složených, jsou stejně dlouhé a jejich vykonání trvá stejnou dobu (procesory IBM 801 a MIPS R2000).

Obvyklou chybou je domněnka, že procesory CISC mají více strojových instrukcí, než procesory RISC. Ve skutečnosti nejde o absolutní počet, ale o počet různých druhů operací, které procesor sám přímo umí vykonat na hardwarové úrovni (tj. již z výroby). Procesor CISC tak může například paradoxně obsahovat pouze jednu strojovou instrukci pro danou operaci (např. logická operace), zatímco procesor RISC může tuto operaci obsahovat jako několik strojových instrukcí, které stejnou operaci umí provést nad různými registry.

Historický kontext

Předtím než se v procesorech prosadila architektura RISC, se designéři počítačů snažili o překonání tzv. sémantické mezery – navrhnout sady instrukcí tak, aby přímo podporovaly konstrukce vysokoúrovňových jazyků, např.: volání procedury, kontrola smyček. Tyto nové instrukce umožňovaly kombinovat data a přístupy k poli. Nové a kompaktní instrukce usnadnily tvorbu menších programů a zmenšení počtu přístupů do hlavní paměti, které byly značně pomalé. Zejména v 60. letech se užitím těchto instrukcí zrychlilo vykonávání operací a došlo i k šetření výdajů na počítačové paměti a disková úložiště. Kompaktnost nových instrukcí značně zvýšila produktivitu programování v jazyce symbolických adres i ve vysokoúrovňových jazycích (Fortran, nebo Algol).

Nové instrukce

V 70. letech 20. století se analýzou vysokoúrovňových jazyků ukázala nutnost implementovat některé části strojového kódu – cílem bylo vytvořit nové instrukce, které zlepší výpočetní výkon. Byly vytvořeny a přidány některé instrukce, které nebyly pro jazyk symbolických adres původně zamýšleny, ale které velmi dobře pracovaly s vysokoúrovňovými jazyky. Kompilátory byly aktualizovány pro použití těchto nových instrukcí. Výhody sémanticky košatých instrukcí s kompaktním kódováním jsou využity v moderních procesorech, zejména v jejich cache, protože jejich kód je kratší a snadněji se do cache vejde.

Stránka designu

Některé návrhy se vyznačují vysokou programovou propustností, nízkou cenou a také tím, že umožňují vyjádření vysokoúrovňových konstrukcí menším počtem instrukcí - tento přístup však není vždy vhodný. Jako ilustraci lze uvést užití nenáročné verze architektury, která je charakteristická malým množstvím hardwaru. U této architektury bylo možné dostat se do situace, kdy se výkon dal zvýšit použitím sekvence jednodušších instrukcí. Takový přístup však měl jeden hlavní nedostatek - návrháři navrhli některé instrukce jazyka symbolických adres tak, že jejich funkce nebylo možné implementovat na základním hardwaru, který byl k tomu k dispozici. Příkladem bylo provedení nastavení registru, nebo místa v paměti, jenž bylo zřídka užíváno, přes vnitřní, nebo vnější sběrnici. Takováto činnost by vždy vyžadovala zvláštní cykly navíc.

I ve vyvážených high-performance návrzích s vysokoúrovňovými instrukcemi je komplikované dekódování a efektivní vykonávání v omezeném souboru tranzistorů. Takové architektury tedy vyžadují velké množství práce v návrhu procesoru zejména v případě, že nejde užít jednodušší, ale také typicky pomalejší řešení založené na dekódovací tabulce, nebo mikrokódu.

Superskalár

V moderním kontextu se pro komplikované, ale proveditelné sestavení superskalární implementace CISC programovacího modelu (Pentium, nebo Cyrix 6x86) užívá kódování s proměnnou délkou instrukcí. Úroveň paralelismu instrukcí, jenž jsou vytěžovány z kódu, může být limitována častými přístupy do paměti pro operandy, přestože je to prováděno rychlou cache. Zásluhou "kompaktních" a sémanticky bohatých instrukcí je průměrný počet operací vykonaných na kódovou jednotku (na byte, nebo bit) pro CISC vyšší, než RISC procesor, což může být značnou výhodou v implementaci založené na moderní cache.

Tranzistory logiky a mikrokódu jsou nyní běžně dostupné, pouze velké a rychlé cache paměti jsou limitovány maximálním počet tranzistorů. Počet tranzistorů CISC dekodérů neroste exponenciálně jako počet tranzistorů na procesoru. Vzrůstající počet tranzistorů spolu s novými nástroji a technologiemi, vedou k implementaci návrhů s proměnnou délkou bez omezení load-store (mají ho RISC procesory). Těmito prostředky je na jedné straně umožněna opětovná aplikace starších architektur (například všudypřítomný x86), na druhé straně užití nových návrhů mikrokontrolerů pro embedded systémy. Superskalár je v případě moderní x86 řešen dynamicky vydávanými a bufferovanými mikrooperacemi (Pentium Pro a AMD K5).

Označení CISC a RISC

Označení CISC a RISC přestalo mít význam s pokračujícím vývojem obou typů procesorů. První implementací typu x86 s vysokým pipeliningem byl 486 od Intelu, AMD, Cyrixu a IBM, který podporoval každou instrukci, jenž podporoval jeho preprocesor. Maximální výkonnosti dosahoval pouze s velmi jednoduchým x86 subsetem, který byl jen o něco více než typická RISC instrukční sada (bez typických RISC load-store omezení). První generace procesorů Intel P5 Pentium byla převážně superskalární verzí založenou na těchto principech. Moderní x86 procesory dekódují a rozdělují instrukce do dynamických sekvencí mikrooperací, které nejen pomáhají vykonávat větší skupiny instrukcí metodou pipeliningu, ale také podporují pokročilejší paralelismus kódového streamu, pro ještě větší výkon.

Rozdíl CISC a RISC

Široká instrukční sada procesorů CISC usnadňuje jejich programování, protože není některé operace nutné rozepisovat (například násobení), avšak ve strojovém kódu (nebo v jazyce symbolických adres) se dnes programuje jen minimálně. Složitost CISC procesorů vede k problémům při výrobě (velká spotřeba materiálu, větší pravděpodobnost vady, komplikovaný návrh, problémy s vysokými frekvencemi, pipelining, cache atd).

Typickými zástupci koncepce CISC jsou procesory rodiny Motorola 68000, a procesory postavené na architektuře Intel x86.

CISC s mikrokódem

V současné době jsou některé CISC procesory konstruovány interně jako procesor RISC (jehož hardwarová výroba je jednodušší, snadněji se implementuje pipelining atd.). Tento interní mikroprocesor operuje s tzv. mikroinstrukcemi, pomocí nichž jsou interpretovány běžné strojové CISC instrukce (tzv. mikrokód). Jedna CISC instrukce je tak provedena jako několik elementárních RISC mikroinstrukcí. Takové CISC procesory jsou tak vlastně malé počítače řízené vlastním programem.

Aktualizace mikrokódu

Mikrokód je u procesorů Intel (Pentium Pro a novějších) možné nahrazovat, čehož využívají výrobci procesorů k opravě chyb. Nový mikrokód se musí po každém zapnutí nahrávat znovu, protože je uložen ve volatilní paměti a mikroprocesor se po vypnutí vrací ke svému původnímu mikrokódu. K aktualizaci mikrokódu může být použit BIOS (v rámci POST testů po zapnutí počítače) nebo je možné ho nahradit i později (ovladač CPU v Microsoft Windows a nástroj microcode_ctlLinuxu [1][2]).

Literatura

  • František Plášil, Jan Staudek, a kolektiv: Ročenka výpočetní techniky 1 Informatika, SNTL, Praha 1989, 400 stran, Cena 37 Kčs

Související články

Reference

  1. microcode_ctl(8) – Linux man page (anglicky)
  2. Is CPU microcode available to address CVE-2017-5715 via the microcode_ctl package? (anglicky)

Externí odkazy