Diskuze: Ako Procesor spracúva Inštrukcie
David Novák:14.8.2015 2:16
1. Frekvence je počet "tiků" hodin za sekundu.. Víš co je to hodinový
signál (clock)?
O čem ty mluvíš je tzv. OPS (Operations per second), přičemž dnes se
měří výkon typicky ve FLOPS (Floating-point operations per second) - počet
operací v plovoucí desetinné čárce za sekundu
2. V moderních CISC procesorech je typicky dekodér, které rozkládá složitější (jejichž vykonávání trvá více než jeden takt) instrukce na jednoduší (které se vykonávají právě jeden takt), které jsou pak prováděny. Velmi zjednodušeně řečeno jsou dnešní CISC procesory vlastně uvnitř RISC.
Zásadní rozdíl mezi CISC a RISC je ten, že u RISC ti instrukce mohou provádět přístup do paměti, kdežto u RISC ne - od toho jsou tam instrukce STORE a LOAD. Příklad v "pseudo" asembleru:
CISC:
ADD [prom1], [prom2]
RISC:
LOAD reg1, [prom1]
LOAD reg2, [prom2]
ADD reg1, reg2
STORE [prom1], reg1
Oba kódy dělají to stejné - sečtou obsah prom1 a prom2 a výsledek uloží do prom1. Zápis u CISC by prováděl práci přímo s pamětí - tj. 2 přístupy do RAM, výpočet, přístup do RAM. Přístup RISC umožňuje tuto operaci rozložit - např. nahrát si data do registrů, udělat s nimi x výpočtů a pak je nahrát do paměti..
Obecně zmiňovanou výhodou RISC je jednodušší HW (není třeba implementovat tolik jednotek, které by zvládali vykonávat množství různých instrukcí), nevýhodou je nutnost dobrého kompilátoru. U CISC většinu té práce udělá tzv. front-end (dekodér, branch prediction, ..) Odměnou za složitější procesor je také často vyšší výkon ve specifických úkonech - různé složité instrukce (SSE, AVX, ...) zvyšují při správném využití rychlost výpočtu. I ty jsou ale rozloženy a vykonány jako jednoduché RISC instrukce.
V praxi je to tedy dnes víceméně stejné - jak jsem říkal, CISC procesory jsou vevnitř ve skutečnosti RISC a procesory jsou již tak pokročilé, že si nahrávají data dopředu, mění pořadí vykonávaných instrukcí (jak se jim hodí nejlíp), používají pipeline a spoustu dalších a dalších triků, takže se to nedá jednoduše popsat. Sám si nejsem 100% jistý vším, co jsem napsal, takže doporučuji pročíst nějaké materiály (ale pozor - hodně jich bude neaktuálních), jestli na to máš čas..
+20 Zkušeností
+2,50 Kč
Martin Dráb:14.8.2015 11:55
Jak píše David, hlavním znakem CISC procesorů je jejich vyšší složitost, která zajišťuji i bohatší množinu instrukcí. Složité instrukce jsou obvykle rozkládány na mikroinstrukce, o které se pak starají další části procesoru.
Procesor (platí podle mě zvláště pro CISC) se samozřejmě snaží navenek působit tak, že bere instrukce jednu po druhé a v tomto pořadí je i vykonává. Ve skutečnosti to nemusí být pravda, protože si je jednak přehazuje tak, aby zvýšil využití svých výpočetních a jiných jednotek, druhak může jednotlivé (mikro)instrukce vykonávat i paralelně.
Těch optimalizací, které procesor (CISC) provádí, je spousta (pipelining, scheduling, out of order execution...) a není tedy divu, že složité procesory mají v sobě firmware. Teoreticky je možné, že procesor v jednom taktu (tiku hodin) dokončí i několik instrukcí najednou (zavádí se tu veličina instructions per clock cycle).
- neznamená, i když je pravda, že hodně instrukcí už opravdu bere jenom ten jeden takt (myslím, že i třeba to sčítání obsahu registru s obsahem v paměti)... ale to je za předpokladu, že např. obsah paměti, se kterým ta instrukce pracuje, je snadno dosažitelný (L1 cache,). Pokud se něco musí lovit třeba až z RAM, může si procesor mezitím dojít na kafe.
- Procesor bude mít nějakou interní paměť, kde má jednotlivé (mikro)instrukce uložené. Může se třeba jednat o pole, do kterého se indexuje operačním kódem "velké" instrukce a v každé položce je nějak zakódováno, co se má přesně udělat.
B42P6:14.8.2015 14:14
Ďakujem za odpoveď, ale stále tomu nechápem.
(podľa tohto videa: https://www.youtube.com/watch?…) ak chce procesor (resp.
jeho Radič) zapísať niečo do registra zapne na tomto registri set-wire ,ak
chce niečo získať zapne enable-wire.
Čiže nato aby spracoval inštrukciu LOAD (hoci aj v RISC procesore) musí
spraviť viac krokov (napr. spustiť set-wire na registri kde bude uložené
číslo ktoré chce načíťat, požiadať RAM o číslo na určitej
adrese(táto inštrukcia by mala viac krokov (výpočet adresy,ďalšie
set/enable atd.)), vypnúť set-wire na registri kde sa číslo uložilo).Čiže
hoci aj na jednoduchú inštrukciu LOAD treba mnoho signálov(výpočet,
set/enable atd.) Dúfam ,že ma chápete.
PS: máš tam preklep "že u RISC ti instrukce mohou provádět přístup do paměti, kdežto u RISC ne"
David Novák:14.8.2015 14:49
Tohle je ukázka VELMI jednoduchécho 8-bit CPU (které by dokázal každý slušný ajťák navrhnout).. To s dnešními procesory již moc společného nemá..
Jinak během taktu typicky procesor udělá hodně věcí zaráz - klidně přečte x různých dat z paměti. Je to ovšem dosti složité a nedokážu ti detailně popsat, jak to funguje..
Zkus někde pohledat na internetu.. Docela dobrá stránka je například toto: http://www.realworldtech.com/
Jinak můžeš vyzkoušet přímo návrh čipu ve VHDL nebo Verilogu. Existují tzv. FPGA čipy, které ti umožní naprogramovat jakékoliv obvody - můžeš si tak klidně vyzkoušet navrhnout vlastní, jednoduchý CPU. To by ti určitě mohlo pomoct k pochopení principu
Koupit si nějakou developer board ani není tolik drahé..
B42P6:14.8.2015 16:19
Dík za odpoveď, ale šlo mi skôr o to aby som mal nejaký prehľad. FPGA možno vyskúšam niekedy v budúcnosti.
Martin Dráb:14.8.2015 17:01
To, jaké signály řadič posílá, je už asi věc konkrétní implementace. Já to chápu tak, že v jednoduchém případě prostě řadič na základě operačního kódu instrukce prostě zašle signály na určitá místa (pro každé místo, kam lze zaslat signál, může mít někde v popisu instrukce zapsáno 0 (neposílat) či 1 (poslat signál)).
Ve škole nám zmiňovali i architektury, které měly instrukce ve formátu VLIW (Very Large Instruction Word) – "operační kód" takové instrukce obsahoval přímo příkazy pro řadič, do jakých částí procesoru má vyslat signály.
Pokud si vezmu např. AVR ATmega128 (RISC, který jsem teď často vídal), tak tam asi není problém tahat data z RAM (zde SRAM) během jednoho taktu, např. protože takt toho procesoru je relativně nízký (16 MHz), takže jestli paměť potřebuje nějakou tu nanosekundu na vybavení dat, má dost času (na rozdíl od 3 GHz Intelů). Navíc je její konstrukce zřejmě jiná (SRAM) než u dnešního mainstreamu (to bude nějaká DRAM).
B42P6:14.8.2015 18:32
Teraz tomu chápem tak nejako ako ty (podľa opcodu vytvorí formát podobný
ako VLIW). Ak dobre chápem čo Fetch-Decode-Execute cyklus je tak tento cyklus
len utvrdzuje tento názor (Delenie inštrukcie na formát ktorý obsahuje
signály).Podľa mňa existujú aj takéto architektúry: pri Decode časti sa
inštrukcie dekóduju (podľa wiki je za to zodpovedný tzv.Instruction Decoder)
do VLIW, alebo iného podobného formátu, potom je inštrukcia prenesená do
radiča (Execute časť) a ten vyšle signály kde treba), taktiež si myslím
že jeden takt sa spracuje zvyčajne spracuje celý Fetch-Decode-Execute cyklus
(môže zabrať aj viac taktov podľa toho z kadiaľ sa dáta berú pri Fetch
cykle (Napr. ako si spomenul vyššie ak potrebuje niečo z RAM, celý procesor
(resp. Jadro ktoré inštrukciu vykonáva) čaká až kým všetko čo potrebuje
na správne spracovanie inštrukcie má). Tak nejako si to predstavujem ja.(S
ohľadom nato že neriešim pipeling a podobné veci).
Na wiki to majú pekné popísane(celý Fetch-Decode-Exectue cyklus, článok:
https://en.wikipedia.org/…cessing_unit, chápem že v
dnešných CPU sa vyžívajú rôzne techniky na vykonanie, ale myslím si že
sú odvodené od Fetch-Decode-Execute )
Zobrazeno 8 zpráv z 8.