====== Distanční výuka, organizace ====== V tuto chvíli trvá povinnost sledovat e-mail a pro případ, že nedorazí, tak sledovat [[https://cw.felk.cvut.cz/forum/forum-1621.html|fórum]], minimálně vlákno [[https://cw.felk.cvut.cz/forum/thread-4689.html|Novinky / News]]. Zde byly uvedené odkazy na přednášky a úkoly pro samostudium. Tyto informace se nebudou opakovat na konzultacích (cvičeních). Na těch se projdou některé ukázky, které vyžadují interakci, a konkrétní dotazy na to, co nebylo pochopené. Obecnější dotazy pište do fóra k vhodně zvolenému tématu, pokud nebudou zodpovězené do vašeho cvičení, tak je můžete opakovat do "chatu" místnosti s odkazem na fórum, poté můžete otázku i odpověď přeformulovat i pro ostatní do fóra. Dotazy k výkladu a interakci v rámci cvičení formulujte do "chatu" místnosti a budou se probírat převážně v pořadí jejich zápisu. ===== Přednášky ===== Přednášky budou realizované formou nahrávek na YouTube. Odkazy na anglické verze prezentací a česky namluvená videa jsou přidaná na stránku [[..:lectures:start|českých přednášek]] kam budou přidané i další odkazy, jak budou k dispozici. K dispozici jsou i české prezentace z minulých let na celý semestr. Základní učebnice, která plně pokrývá minimálně první polovinu semestru, je [[https://www.elsevier.com/books/computer-organization-and-design-mips-edition/patterson/978-0-12-407726-3|Computer Organization and Design, The HW/SW Interface]] ve čtvrté MIPS edici, autoři profesor Patterson a Hennessy. Dostupná je pro studenty ČVUT v elektronické formě přes službu [[https://dialog.cvut.cz/|https://dialog.cvut.cz/]]. Pro přístup zvolte v poli ''Prosím, vyberte si svou univerzitu:'' volbu ''České vysoké učení technické'', vyplňte své přihlašovací údaje a potvrďte je. Potom zvolte zdroj ''Knovel'' a zadejte jména autorů a knihu, omezte seznam vyhledávání jen na knihy (nejdříve ''Book/Text'' a potom ''Book'') a můžete číst. ===== Konzultace - Cvičení ===== Týdenní harmonogram schůzek ‒ v pondělí bude otevřená místnost jak v 11:00 tak i v 16:15 a podle možností někdo z nás zodpoví dotazy, které se objeví do 15 minut od otevření v "chatu". Právě otevřené místnosti jsou přístupné z vašeho profilu na [[https://cw.felk.cvut.cz/brute|Brute]]. V týdnu podle vašeho zápisu do jednotlivých cvičení budou v čase podle [[http://www.fel.cvut.cz/cz/education/rozvrhy-ng.B192/public/html/mistnosti/10/11/m10119604.html|rozvrhu]] otevírané místnosti pro cvičení po skupinách. Na základě diskuzí s dalšími katedrami budeme dodržovat svátky a přesuny podle [[http://www.fel.cvut.cz/cz/education/harmonogram.html|harmonogramu]]. Komu čas nevyhovuje, tak si musí dohodnout se studijním oddělením oficiální přeřazení do jiné skupiny. Výjimky nejsme schopní technicky zajistit. Uvažuji o tom, že bych jako záchranu jedno páteční cvičení otevíral všem, ale přítomnost dalších studentů by nesměla být na úkor naplánované skupiny. ===== Aktuální probíraná látka ===== Práce na [[..:semestral:start|semestrální práci]], příprava na zkoušku. Konzultace jsou již jen na základě dohody. ===== Brute Big Blue Button ===== Pro interaktivní výuku a schůzky se bude používat systém Big Blue Button integrovaný do [[https://cw.felk.cvut.cz/brute/|Brute]]. Návod pro studenty zde [[https://youtu.be/uYYnryIM0Uw|BigBlueButton overview for viewers (students)]]. ===== Git ===== Zdrojové kódy ukázek z přednášek i základy pro vlastní experimenty budou publikované ve volně dostupném repozitáři [[https://gitlab.fel.cvut.cz/b35apo/stud-support|https://gitlab.fel.cvut.cz/b35apo/stud-support]]. Kód ke kontrole a komentování cvičícími pak bude předávaný přes osobní [[https://cs.wikipedia.org/wiki/Git|GIT]] repozitář, s tím že [[https://cs.wikipedia.org/wiki/Uniform_Resource_Locator|URL]] k danému souboru, adresáři zašlete e-mailem dohromady s dotazem nebo žádostí o ohodnocení svému cvičícímu. ===== Zápočet a zkouška ===== Základní kontrolou vašeho pochopení látky budou již od začátku semestru naplánované [[..:homeworks:start|čtyři domácí úkoly]], semestrální práce a zkouška. Aktuální předpokládané termíny a organizace zkoušek jsou diskutované ve vláknu [[https://cw.felk.cvut.cz/forum/thread-5074.html|Zkouška - termíny a organizace]]. Forma, termíny i umístění se může změnit podle aktuálního stavu situace. ===== Archivované informace ===== ===== Vypuštění 2 týdnů ===== Probíraná látka v týdnu od 23. - 27. března ‒ cvičení 4. vyrovnávací paměť (cache), doporučení implementovat bubble-sort (bonusový bod při jeho uložení do [[..:documentation:githowto:start|osobního GITu]] a úspěšného splnění testů na serveru, [[http://pisa-virt.felk.cvut.cz/apo/bubble-sort-ci/rank.txt|aktuální seznam]] úspěšných implementací s počty spotřebovaných cyklů CPU). Nápověda, zjednodušené cvičné úkoly v [[https://cw.felk.cvut.cz/forum/thread-4784.html|příslušném vlákně na fóru]]. Podrobný popis a plná verze úkolů zde ‒ [[..:tutorials:04:start|cvičení 4]]. Po vypracování bodů potvrzení pochopení tématu hlasováním. Další týdny se bude postupovat podle jednotlivých cvičení a ke každému bude vytvořené vlákno ve fóru a vaší povinností bude potvrdit hlasováním výsledek vaší práce. Podle pokynů referenta katedry je týden od 23.3. do 29.3. považovaný za čtvrtý (4.) výukový týden. Tedy na současné téma (cache) a potvrzení jeho pochopení máte čas do 29.3. Pak bude hlasování k tématu uzavřeno a jeho potvrzení bude sloužit i jako doklad o docházce na cvičení. Odpověď nerozumím, zaškrtněte až tehdy, pokud se v daném týdnu nebudete tématem již dále zabývat. Ostatní možnosti zaškrtávejte co nejdříve ať máme zpětnou vazbu o vašem postupu. Vzhledem k oficiálnímu určení, že se minulé dva týdny do semestru nepočítají, tak jsme se rozhodli o prodloužení termínu pro odevzdání prvního úkolu o týden. ===== Bubble-sort a případně další odevzdávané práce v assembleru ===== Pro zvládnutí předávání a hodnocení většího objemu prací hledáme způsob, jak maximálně jak pro studenty tak pro cvičící interakci zautomatizovat. V případě kontroly a zpětné vazby k implementaci algoritmu [[https://en.wikipedia.org/wiki/Bubble_sort|bubble-sort]] budeme předpokládat, že se implementace nachází v souboru ''work/bubble-sort/bubble-sort.S'' vašeho repozitáře. Implementace musí direktivou ''.globl'' exportovat symboly ''array_size'' a ''array_start'', přitom za symbolem ''array_start'' nesmí být v následujících 200 bytech žádná data nebo kód, jejichž přepsání by mělo negativní vliv na běh programu. Testovací program nahraje od adresy ''array_start'' testovací sadu dat, do slova na adrese ''array_size'' vyplní počet prvků, program je spuštěný a po zastavení na instrukci ''break'' dojde k vyzvednutí dat z adresy ''array_start''. V repozitáři [[https://gitlab.fel.cvut.cz/b35apo/stud-support|stud-support]] je připravená šablona projektu ([[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/tree/master/seminaries%2Fqtmips%2Fbuble-sort|seminaries/qtmips/buble-sort]]) a v tomto adresáři šablona ''[[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/blob/master/seminaries/qtmips/buble-sort/bubble-sort-template.S|work/bubble-sort/bubble-sort.S]]'' vlastní implementace. Soubor a případně i ostatní soubory zkopírujte pod správným jménem do adresáře ''work/bubble-sort'' vašeho repozitáře. Veškerý vývoj lze provést s využitím interního assembleru. Pokud chcete provádět testování tak, jak jsme schopní ho zautomatizovat, tak je potřeba externí [[..:documentation:mips-elf-gnu:start|mips-elf]] compiler. S interním se zatím neumíme při nahrávání odkázat na správné adresy. Při zápisu adres absolutními hodnotami lze testovat i vnitřním assemblerem qtmips_cli --dump-cycles --asm bubble-sort.S --load-range 0x12340,array_size.in --load-range 0x12344,array_data.in --dump-range 0x12344,60,array_data.out Automatický systém zjišťuje každých 15 minut v každém repozitáři, jestli se objevila nová verze zdrojového kódu. Pokud ano, provede testy a zapíše výsledky do souboru pojmenovaného podle přihlašovacího jména do adresáře [[http://pisa-virt.felk.cvut.cz/apo/bubble-sort-ci/|http://pisa-virt.felk.cvut.cz/apo/bubble-sort-ci/]]. ===== Optimalizace kódu a návrhu cache ===== Testovací systém předpokládá, že se v souboru ''work/apo-sort/apo-sort.S'' vašeho repozitáře nachází třídící algoritmus. Implementace musí direktivou ''.globl'' exportovat symboly ''array_size'' a ''array_start'', přitom za symbolem ''array_start'' nesmí být v následujících 200 bytech žádná data nebo kód, jejichž přepsání by mělo negativní vliv na běh programu. Testovací program nahraje od adresy ''array_start'' testovací sadu dat, do slova na adrese ''array_size'' vyplní počet prvků, program je spuštěný a po zastavení na instrukci ''break'' dojde k vyzvednutí dat z adresy ''array_start''. V repozitáři [[https://gitlab.fel.cvut.cz/b35apo/stud-support|stud-support]] je připravená šablona projektu ([[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/tree/master/seminaries%2Fqtmips%2Fapo-sort|seminaries/qtmips/apo-sort]]) a v tomto adresáři šablona ''[[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/blob/master/seminaries/qtmips/apo-sort/apo-sort-template.S|work/ao-sort/apo-sort.S]]'' vlastní implementace. Soubor a případně i ostatní soubory zkopírujte pod správným jménem do adresáře ''work/apo-sort'' vašeho repozitáře. Veškerý vývoj lze provést s využitím interního assembleru. Při testování je procesor natavený na volbu ''No pipeline no cache'' (to je využívá se již [[https://en.wikipedia.org/wiki/Delay_slot|delay slot]], qtmips_cli nenabízí, zatím, parametr na jeho zakázání). Parametry paměti cache se nastavují v souboru ''[[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/blob/master/seminaries/qtmips/apo-sort/d-cache-template.par|work/apo-sort/d-cache-template.par]]'' ve formátu policy,sets,words_in_block,ways,write_method například lru,1,1,1,wb Latence prvního přístupu do hlavní paměti je nastavena na 10 cyklů, při sekvenčním přístupu je nastavená hodnota burst na 2 (ve vlastním výpočtu jsem nalezl drobnou chybu v korekci času přístupů při použití burst, můžete jí zkusit [[https://cw.felk.cvut.cz/forum/thread-4747.html|popsat]], první dostane bod). Pokud chcete provádět testování tak, jak jsme schopní ho zautomatizovat, tak je potřeba externí [[..:documentation:mips-elf-gnu:start|mips-elf]] compiler. S interním se zatím neumíme při nahrávání odkázat na správné adresy. Při zápisu adres absolutními hodnotami lze testovat i vnitřním assemblerem qtmips_cli --dump-cycles --dump-cache-stats --d-cache lru,1,2,2,wb --read-time 10 --write-time 10 --burst-time 2 --asm apo-sort.S --load-range 0x12340,array_size.in --load-range 0x12344,array_data.in --dump-range 0x12344,60,array_data.out Automatický systém zjišťuje každých 15 minut v každém repozitáři, jestli se objevila nová verze zdrojového kódu. Pokud ano, provede testy a zapíše výsledky do souboru pojmenovaného podle přihlašovacího jména do adresáře [[http://pisa-virt.felk.cvut.cz/apo/apo-sort-ci/|http://pisa-virt.felk.cvut.cz/apo/apo-sort-ci/]]. ===== Vyřešení/eliminace datových hazardů přizpůsobením/optimalizací kódu pro nestandardní MIPS CPU ===== Implementovat Fibonacciho posloupnost pro CPU bez hazard unit ([[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/blob/master/seminaries/qtmips/fibo-hazards/fibo-hazards-template.S|fibo-hazards]]). Kód se odevzdává zasláním do [[..:documentation:githowto:start|osobního GITu]]. Aktuální [[http://pisa-virt.felk.cvut.cz/apo/fibo-hazards-ci/rank.txt|seznam]] (informace o chybách v individuálním logu v [[http://pisa-virt.felk.cvut.cz/apo/fibo-hazards-ci/|adresáři]]).