07 - Princip činnosti počítače

Obecné informace

počítač

vymyslel Turing - 30. léta

1. počítač - ENIAC (1946), 2. počítač - EDVAC (1952)

dnes: je v informatice elektronické zařízení, které zpracovává data pomocí předem vytvořeného programu

data ovládají hardware ⇒ lze přeprogramovat pro jinou činnost

algoritmus

je přesně definovaná konečná posloupnost příkazů (které jsou vybírány z předem definované konečné množiny elementárních příkazů), jejichž prováděním pro každé přípustné vstupní hodnoty získáme po konečném počtu kroků odpovídající hodnoty výstupní

aplikačně specifický číslicový obvod - optimalizovaný, výkonný pro jeden algoritmus … dlouho se navrhuje, je drahý

program pro procesor - univerzální pro více algoritmů, nízká cena … výkonnost nemusí být dostačující

komponenty HW

datové struktury - registry (proměnné)

řídící struktury

sekvence - komponenty seřazeny za sebou

selekce - multiplexor

iterace - čítač a řídící automat

rekurze - NEJDE vyřešit v HW

Řídící striktury

procesor

obvodová realizace algoritmu, který dokáže vykonávat libovolné programy (algoritmy), sestavené z předem definovaných elementárních operací (instrukcí)

vykoná program, který je uložen od zadané adresy v paměti

program transformuje data, uložená na zadané adrese v paměti, na jiná data, jejichž nové umístění musí být rovněž specifikováno

programy jsou uloženy v paměti jako posloupnosti instrukcí, vykonávají se sekvenčně

sekvenční (obvykle) synchronní číslicový obvod

hlavní komponenty procesoru

programový čítač - PC

určuje adresu, kde se nachází následující instrukce

po resetu dochází k inicializaci procesoru a mj. je definován obsah PC (např. PC = 0003h)

instrukční registr - IR

uchovává právě zpracovávanou instrukci

neviditelný registr, v podstatě se jedná o aktuální stav konečného automatu

řadič

řídí činnost procesoru - vykonává instrukce

konečný automat - FSM (konečný stavový stroj)

aritmeticko-logická jednotka - ALU

slouží k provádění matematických operací

převádí vstup na výstup

I/O jednotka

umožňuje vstup a výstup dat do/z procesoru (obvykle do jeho registrů) i jinak než pouze skrz paměť

TODO

registry

klopné obvody, které ochovávají informace po dobu napájení

Program a jeho uložení

Harwardská koncepce procesoru

paměť pro data a programy je oddělena

Von Neumannova (princetonská) koncepce procesoru

společná paměť pro data a programy

Ještě tu dodávám tuto poznámku: Uspořádání bytů

rozhraní procesoru

RESET - definuje obsah PC a inicializuje procesor

CLK - hodinový signál (v INP jsme řešili pouze synchronní procesory a obvody)

adresová sběrnice - je připojena na paměť (procesor generuje adresy pro paměť)

datová sběrnice

řídící sběrnice

Princip procesoru

vykonání instrukce

instrukce, která se vykoná je uložena v PC (programovém čítači)

vykoná se obvykle v několika hodinových taktech

fetch - F: načtení instrukce

adresa určená obsahem PC je vystavena na adresovou sběrnici a je iniciováno čtení z paměti

paměť dodá na datovou sběrnici kód instrukce, která se má vykonat

instrukce je uložena do IR (instrukčního registru)

instruction decode - ID: dekódování instrukce

Instrukce je dekódována (tzn., že jsou nastaveny řídicí signály pro komponenty procesoru, které se podílí na vykonání instrukce – je např. vybrána operace sčítání a operandy ALU)

execute - E: vykonání instrukce

pokud instrukce vyžaduje pro své vykonání operand z paměti, musí být z příslušné adresy načten tento operand

instrukce je vykonána (např. provede se sčítání), jsou nastaveny příznaky (např. přetečení)

uloží se výsledek do registru, popř. se iniciuje zapsání výsledku do paměti

pro další instrukci se určí nový obsah PC

obvodová realizace procesoru

při návrhu procesoru se vychází ze specifikace, která obsahuje požadavky na instrukční soubor, architekturu, šířku dat a adres, výkonnost, plochu na čipu, spotřebu atd.

používali jsme (na příkladech, v projektu) tzv. střádačovou architekturu - speciální registr střádač (acumulator) - do něj se ukládají výsledku z ALU (existuje i zásobníková, registrová a smíšená)

zásobníková - má zásobník a registr SP (Stack pointer) a používají se operace PUSH m_a, POP m_a, nejsou registry

registrová

sada registrů - připojeny k ALU + sada FP (plovoucí řádová čárka) registrů - připojeny k FPU (operace v plovoucí řádové čárce)

ADD R1, R2, R3

Architektury procesoru

Mluvili jsme často o stavu vysoké impedance. Na INP to vysvětloval a na netu jsem našel obrázek: Třístavový budič Vysokou impedanci značí první obrázek ⇒ zařízení je odpojeno. Pokud by byly zapojeny oba spínače, nastal by zkrat. ⇒ Třístavový budič ⇒ používá se například u sběrnic, pamětí, …

nepřímé adresování

například ACC = M[M[123]] ⇒ do akumulátoru vlož obsah paměti s adresou, která je uložena v paměti na adrese 123

potřebujeme registr IAR, který nám zjistí a uschová přímou

IAR proto má:

výstup na adresovou sběrnici ⇒ pošle adresu do paměti (123)

vstup z datové sběrnice ⇒ přijde mu obsah z paměti daný adresou 123 ⇒ adresa obsahu, který chceme nahrát do akumulátoru

Schéma procesoru

klasifikace moderních procesorů

parametr V - počet instrukcí, které se v jednom okamžiku vydají ke zpracování

parametr P - počet současně prováděných (rozpracovaných) instrukcí

subskalární procesory - P = 1, V = 1 (286, 383) (bez zřetězeného zpracovaní)

skalární procesory - P > 1, V = 1 - využívá řetězené zpracování (Pentium) (s zřetězeným zpracováním)

superskalární procesory - P > 1, V > 1 (s zřetězeným zpracováním + multithreading/multicore)

Flynnova klasifikace procesorů

je založena na sledování počtu instrukčních a datových proudů v počítači

jeden (single) instrukční resp. datový proud označujeme symboly SI resp. SD

více než jeden proud (multiple) označujeme analogicky zkratkami MI resp. MD

příklady:

SISD - von Neumannův počítač

SIMD - vektorový procesor - dva vektory (více čísel) sčítá jedna instrukce (např. grafická karta vykonává 1 instrukci na více datech[napr. pixelech])

MISD - více počítačů zpracovává stejná data (řídicí počítač Space Shuttle) - stehný problém řeší více počítačů ⇒ bezpečnost (výsledek všech počítačů se porovnává a vybírá výsledná hodnota [např. většina počítačů musí mít stejný výsledek])

MIMD - multiprocesorový systém (více instrukcí zpracovává více dat)

Současné kategorie procesorů

Univerzální (Intel, AMD, HP, IBM, …)

Grafické (Nvidia, ATI, Matrox, …)

Signálové (TI, Fujitsu, …)

Aplikační, např. pro mobilní telefony (Intel PXA250, …)

Multimediální (TI, Mpact, …)

Speciální (šifrovací, kompresní, např. pro MPEG-2, I/O, šachové, hrací, …)

Urychlování činnosti procesoru

techniky urychlování výpočtu v HW

speciální kódování dle potřeby dané úlohy (není to řešení pro univerzální procesory (nejsou na nich naimplementované aritmetické operace v kódu zbytkových tříd)

speciální výpočetní jednotky dle potřeby dané úlohy (FFT - rychlá fourierova transformace)

paralelní zpracování (násobné výpočetní jednotky)

zřetězené zpracování (=pipeling)

něco k jednotlivým metodám

paralelní zpracování

více elementárních úloh běží současně

zřetězené zpracování:

Zřetězené zpracování

Jako vzorvný příklad se uvádí grafický filtr. Vstupem obvodu je pixel, který se po projití obvodu (filtrem) přefiltruje.

1) obvod bez zřětězení

2) zřetězený filtr

původní filtr je rozdělen a do obvodu jsou přidány registry

uvažujeme 9-ti stupňový filtr

stejně jakou u první obvodu počítame s 65 536 pixelů

zpoždění stupně filtru: 10 ns

1. pixel se zpracuje za 9 x 10 = 90 ns

2., 3., … 65 536. pixel vždy po 10 ns

celkem tedy: 90 ns + (65535 x 10 ns) = 655 440 ns ⇒ zrychlení 8.9989 krát

zrychlení není 9x, protože se musí naplnit zřetězená linka ve výpočtu se neuvažuje zpoždění registru

zrychlení použitím řetězením

vytvoříme k stupňů oddělených registry

počet vstupů: N

počet stupňů: k

zpoždění stupně: t

zpoždění registru: d

zrychlení celkem:

je třeba položit si otázky

kdy má smysl zavést zřetězené zpracování?

Pokud je N dostatečně velké!

Pokud je zpoždění stupňů přibližně stejné

jaký je optimální počet stupňů?

Řetězené zpracování instrukcí v procesorech

princip zřetězení se značně překrývá s principy procesorů RISC

základní myšlenka:

„V procesorech CISC používají složité strojové instrukce (CPI»1) pouze špičkový programátoři, ale standartí rutiny kompilátoru je nepoužívají.“

CPI = průměrný počet taktů na jednu instrukci

výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce

cílem je dosáhnout parametru instrukčního souboru CPI = 1

toho lze dosáhnout pouze trikem - překrýváním cyklů (u jednoduchého procesoru má instrukce CPI minimálně 3)

Popis cyklů reálného procesoru

Obecné rysy architektur RISC

malý počet relativně jednoduchých instrukcí

snaha o CPI = 1 (ideální teoretický případ) ⇒ v každém taktu se procesoru se většinou dokončí jedna instrukce (reálný průměr je CPI < 1,5)

všechny instrukce mají stejnou složitost

přístup k paměti mají pouze 2 instrukce: LOAD a STORE (zbytek pracuje s registry) → malý počet adresivých modů (3-5)

registrová architektura (dostupných je 32-192)

rychlý obvodový řadič

oddělená pamět (cache) instrukcí a dat

p.p. řadič = pevně propojený řadič

oddělené paměti cache pro instrukce (I) a data (D)

DLX procesor

výukový RISC procesor

MX: multiplexor, DC: cache dat, =O?: detektor nuly, IC: cache instrukcí, ALU: aritmeticko-logická jednotka, PC: čítač instrukcí, IR: registr instruce, RF: soubor registrů, s.ex: jednotka rozšíření znaménka, dst: adresa cílového registru, src1 a scr2: adresy zdrojových registrů, imm: přímý operand, L/S: load/store

paměť M je rozdělena na paměť instrukcí (IC) a paměť dat (DC)

v každém taktu je celý stav zpracování instrukce obsažen úplně a výhradně v obvodech jen jednoho stupně → ostatní stupně jsou volné a dají se použít pro paralelní zpracování dalších nezávislých instrukcí

Konflikty u řetězeného zpracování v procesorech

tyto konflikty mohou vést ke zpomalení linky

Strukturální

obvodová struktura neumožňuje současné provedení určitých akcí (např. současné čtení dvou hodnot z paměti nebo současné provedení dvou sčítání, pokud má procesor jednu ALU)

Datové

když jsou zapotřebí data z předcházející instrukce, která ještě není dokončena

klasifikace (nechť máme dve instrukce v pořadí (i, j)), Pozn. k významu (AAB: operace A se začne vykonávat před dokončením operace B)

RAW - Read After Write (j se snaží o přečtení registru předtím, než do něj i zapíše, j pak dostává starou hodnotu)

WAW - Write After Write (j se snaží zapsat do registru předtím, než do něj zapíše i, takže dojde k přepisu instrukcí i a instrukce j jakoby se nevykonala)

WAR - Write After Read (j zapisuje do registru předtím, než ho i přečtě)

Bypassing

poskytnutí mezivýsledku dřív než bude zapsán do registru

je to umožněno přidáním speciálních datových cest (např. příklady na obrázku)

pomáhá řešit datové konflikty

Řídící

když skoková instrukce mění obsah PC nebo jiné

neví, kam skočit, protože adresa bude známa až po fázi M na řádku BC

řešení:

Řídící konflikty a prediktory skoku

experimenty bylo zjištěno, že četnost skoků v programech je značná - z toho se asi 83% povede

u skoků je třeba zrychlit zjištění cílové adresy (kam skočit), proto se používá malá cache pamět pro uložení cílových adres (BTB - Branch Target Buffer)

u podmíněných skoků jsou navíc ještě vyhodnocovány podmínky, o jejich splnění je možné spekulovat predikce skoků - ta může být statická (kompilátor nastaví bit predikce) nebo dynamická (pomocí speciálního HW)

predikce (spekulace) probíhá podle předchozích směrů skoku (historii lze popsat binárním řetězcem několika bitů)

nejjednodušší prediktor = Jednobitový prediktor

použí 1 bit z historie (tj. předchozí skok) a předpovídá následující

stav 0 = skok se minule neprovedl, předpověď je neskoč (-)

stav 1 = skok se minile provedl ⇒ předpověď je skoč (+)

pokud je předpověd špatná musí být špatná větev programu ukončena a musí začít načítání instrukcí ze správné větve (je třeba aktualizovat BTB, to stojí několik taktů zřetězené linky)

Zřetězené zpracování přináší urychlení výpočtu nejen v procesorech, ale i jiných číslicových obvodech (např. pro zpracování obrazu, bioinformatických dat apod.). Pokud použijeme zřetězené zpracování, musíme dodat řadu podpůrných obvodů a řešit řadu nových problémů. Moderní procesory používají kromě zřetězení i další koncepty:

superskalární architektury

VLIW procesory - má více ALU - tzn. může zároveň dělat více operací ⇒ k tomu slouží dlouhé instrukce

vektorové procesory

multivláknové procesory

CISC architektura

Vloženo jako poznámka pro znázornění rozdílu v architekturách.

= procesory s komplexním instrukčním souborem

vysoká složitost instrukcí ⇒ nutný systematický návrh řadiče procesoru

vykonání strojové instrukce probíhá posloupností mikrooperací (předpepsána mikroinstrukcí v řídící paměti)

řidící paměti byly pevné (Read-Only Memory = ROM) a mnohem rychlejší než RAM

díky vývoji mikrotechniky se řídící pamět přesuna na cache; to umožnilo držet krok s RISC architekturou

patří mezi nejvíce rozšířené (486, Pentium)

Zdroje

INP: 5. přednáška věnová RISC procesorům (dostupná na https://wis.fit.vutbr.cz/FIT/st/course-files-st.php/course/INP-IT/lectures/inp2010_05risc.pdf) Dvořák Václav Prof.Ing. DrSc., Drábek VLadimír Doc.Ing. CSc. - Architektura procesorů - VUTIUM 1999 CIS architektura (ilustrace z) http://www.wiki.sps-pi.com/index.php/CISC_architektura