Tak dobře.
1) Mikroprogramování používá paměť pro mikroinstrukce. Každá mikroinstrukce se skládá z řídících bitů (těch bude třeba
n) a (většinou) adresy další mikroinstrukce. Takže pokud bude paměť obsahovat
k mikroinstrukcí, bude mít velikost
k * n, popřípadě
k * (n + log2(k)), pokud obsahuje ještě adresu další mikroinstrukce, která musí být schopná adresovat kterýkoliv z
k řádků, takže bude mít
log2(k) bitů.
Nanoprogramování naopak využívá toho, že se některé mikroinstrukce opakují. Zde figuruje nanopaměť, ve které je
v nanoinstrukcí, každá po
n řídících bitech, takže je velká
n * v bitů. Mirkoinstrukce tedy nemusí obsahovat řídící bity, ale místo nich pouhý odkaz do nanopaměti, který musí umět adresovat
v řádků a mít tedy velikost
log2(v) bitů.
Tedy:
Mirko =
k * (n + log2(k))
Nano =
k * (log2(v) + log2(k)) + v * n
Jinak vertikální / horizontální mikroprogramování s tím moc nesouvisí...
2) Jde o to, že když se mají sečíst dvě dvojice vektorů
c = a + b
e = c + d
tak druhý výpočet může začít jestě před dokončením prvního, a to tehdy, jakmile je hodový výsledek první složky prvního výpočtu.
3) Těžko říct...
4) Pokud si dobře vzpomínám, používají RISC kromě zpožděného skoku i predikci při vyzvednutí a vyhodnocení při dekódování (aby byl skok co nejdříve hotov a nezdržoval, musí kvůli tomu být i snadné podmínky).
5) Máš to veměs správně. Problém je právě v tom, že to (precizní přerušení) nemusí být splněno. Proto se odkládájí instrukce v původním pořadí, nebo se nedejbože tento efekt zanedbává a pak může být sranda.
6) V případě neúspěšné predikce se musí zrušit vykonané i na vykonání čekající instrukce z neplatné větve programu, musí se updatovat historie skoků a predikční jednotka se musí upozornit na chybu, aby si dala příště pozor.
Jinak se mrkni sem:
http://www.osklivy-sup.cz/mff/dok/principy.rtf
Tak dobře.
1) Mikroprogramování používá paměť pro mikroinstrukce. Každá mikroinstrukce se skládá z řídících bitů (těch bude třeba [i]n[/i]) a (většinou) adresy další mikroinstrukce. Takže pokud bude paměť obsahovat [i]k[/i] mikroinstrukcí, bude mít velikost [i]k * n[/i], popřípadě [i]k * (n + log2(k))[/i], pokud obsahuje ještě adresu další mikroinstrukce, která musí být schopná adresovat kterýkoliv z [i]k[/i] řádků, takže bude mít [i]log2(k)[/i] bitů.
Nanoprogramování naopak využívá toho, že se některé mikroinstrukce opakují. Zde figuruje nanopaměť, ve které je [i]v[/i] nanoinstrukcí, každá po [i]n[/i] řídících bitech, takže je velká [i]n * v[/i] bitů. Mirkoinstrukce tedy nemusí obsahovat řídící bity, ale místo nich pouhý odkaz do nanopaměti, který musí umět adresovat [i]v[/i] řádků a mít tedy velikost [i]log2(v)[/i] bitů.
Tedy:
Mirko = [i]k * (n + log2(k))[/i]
Nano = [i]k * (log2(v) + log2(k)) + v * n[/i]
Jinak vertikální / horizontální mikroprogramování s tím moc nesouvisí...
2) Jde o to, že když se mají sečíst dvě dvojice vektorů
c = a + b
e = c + d
tak druhý výpočet může začít jestě před dokončením prvního, a to tehdy, jakmile je hodový výsledek první složky prvního výpočtu.
3) Těžko říct...
4) Pokud si dobře vzpomínám, používají RISC kromě zpožděného skoku i predikci při vyzvednutí a vyhodnocení při dekódování (aby byl skok co nejdříve hotov a nezdržoval, musí kvůli tomu být i snadné podmínky).
5) Máš to veměs správně. Problém je právě v tom, že to (precizní přerušení) nemusí být splněno. Proto se odkládájí instrukce v původním pořadí, nebo se nedejbože tento efekt zanedbává a pak může být sranda.
6) V případě neúspěšné predikce se musí zrušit vykonané i na vykonání čekající instrukce z neplatné větve programu, musí se updatovat historie skoků a predikční jednotka se musí upozornit na chybu, aby si dala příště pozor.
Jinak se mrkni sem:
[url]http://www.osklivy-sup.cz/mff/dok/principy.rtf[/url]