Avatar
B42P6
Člen
Avatar
B42P6:

Zdravím, neviem či tomu úplne rozumiem ,ale ak procesor typu CISC spracúva inštrukciu, nespracúva inštrukciu priamo (Myslím si ,že by nevedel čo presne ma spraviť aby sčítal 2 čísla) ,ale nájde pre ňu súbor inštrukcií (mikrokódy?) ktoré už vykonať dokáže (Vlož číslo z adresy X do Registra 1 atď.). Chápem tomu správne? A ešte pár otázok.

1.Znamená Frekvencia procesora koľko zložitých inštrukcií (Sčítaj 2 čísla) ,alebo koľko tých jednoduchších inštrukcií (Vlož číslo z adresy X do Registra 1 atď.)vie procesor vykonať za 1s?

2.Ak procesor funguje tak ako som napísal hore. Kde sú potom tie jednoduché inštrukcie uložené? Ako procesor zistí rad jednoduchých inštrukcií ktoré ma vykonať ak vie iba to že ma Sčítať 2 čísla?

Odpovědět 13.8.2015 23:38
'long long long' is too long for GCC
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na B42P6
David Novák:

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..

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 14.8.2015 2:16
Chyba je mezi klávesnicí a židlí.
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na B42P6
Martin Dráb:

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).

  1. 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.
  2. 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.
Nahoru Odpovědět  +4 14.8.2015 11:55
2 + 2 = 5 for extremely large values of 2
Avatar
B42P6
Člen
Avatar
Odpovídá na David Novák
B42P6:

Ď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"

Nahoru Odpovědět 14.8.2015 14:14
'long long long' is too long for GCC
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na B42P6
David Novák:

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é.. ;)

Nahoru Odpovědět  +1 14.8.2015 14:49
Chyba je mezi klávesnicí a židlí.
Avatar
B42P6
Člen
Avatar
Odpovídá na David Novák
B42P6:

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.

Nahoru Odpovědět  +1 14.8.2015 16:19
'long long long' is too long for GCC
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na B42P6
Martin Dráb:

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).

Nahoru Odpovědět  +1 14.8.2015 17:01
2 + 2 = 5 for extremely large values of 2
Avatar
B42P6
Člen
Avatar
Odpovídá na Martin Dráb
B42P6:

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 ;) )

Nahoru Odpovědět 14.8.2015 18:32
'long long long' is too long for GCC
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.