====== Distanční výuka, organizace ====== Předmět je nyní v přípravě na běh v letním semestru akademického roku 2021/2022. Dotazy můžete psát do vlákna [[https://cw.felk.cvut.cz/forum/thread-5748.html|Dotazy]] na fóru nebo na Teams. Pokud nebude dohodnuto jinak, tak všechna důležitá oznámení budou posílaná/archivovaná ve vláknu [[https://cw.felk.cvut.cz/forum/thread-5745.html|Novinky / News]]. V distanční formě výuky budou v časech přednášek konzultace k záznamům přednášek na [[https://www.youtube.com/playlist?list=PLQL6z4JeTTQnq6kjJ9JO-Fb7Md-ofJ-zL|YouTube]] Obecnější dotazy pište do fóra k vhodně zvolenému tématu. 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. Intenzivní kratší videa připravená panem doktorem Petrem Štěpánem na [[https://www.youtube.com/playlist?list=PLQL6z4JeTTQkguL75-cpr6tXc6atfm5m3|YouTube]]. ===== Přednášky ===== Přednášky jsou k dispozici 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 ze sítě Č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. Pro přístup z počítače mimo síť ČVUT se přihlaště třeba do [[https://cw.felk.cvut.cz/brute/|BRUTE]] a poté ze záložky [[http://knihovna.cvut.cz/katalogy-a-databaze/prehled-databazi/katalog-informacnich-zdroju#knovel|KNOVEL]] zvolte ''Vzdálený přístup do databáze''. 30 kusů papírové učebnice bylo také do knihovního fondu zakoupeno z prostředků kateder [[https://dce.fel.cvut.cz/|řídicí techniky]], [[https://cyber.felk.cvut.cz/|kyberneticky]] a [[http://cs.felk.cvut.cz/|počítačů]]. Aktuální, [[https://www.elsevier.com/books/computer-organization-and-design-mips-edition/patterson/978-0-12-820109-1|šesté vydání]], je v knihovně ČVUT k dispozici ve dvou exemplářích v MIPS edici a dvou v [[https://www.elsevier.com/books/computer-organization-and-design-risc-v-edition/patterson/978-0-12-820331-6|RISC-V]] edici. ===== 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 . 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 [[https://fel.cvut.cz/cz/education/rozvrhy-ng.B212/public/html/predmety/47/03/p4703306.html|rozvrhu]] otevírané místnosti pro cvičení po skupinách. Během semestru budeme dodržovat svátky a přesuny podle [[http://www.fel.cvut.cz/cz/education/harmonogram.html|harmonogramu]]. ===== Vzdálený přístup ===== K materiálům a programovému vybavení v laboratořích, včetně uživatelských kont je možné přistupovat vzdáleně. Návod najdete v dokumentaci v sekci [[courses:b35apo:documentation:remote:start|Vzdálený přístup]]. ===== Aktuální probíraná látka ===== Pro úspěšný start výuky v semestru se předpokládá, že každý týden před konzultacemi a cvičeními shlédnete záznam příslušné přednášky nebo nastudujete příslušnou problematiku z učebnice a ověříte si rozsah látky prohlédnutím příslušné prezentace. Nutným předpokladem do začátku je základní znalost o ukládání informace po základních jednotkách, bitech, a jak takto zakódovat nezáporná celá čísla. Přesto, že se tato znalost předpokládá a pro jakoukoliv serióznější práci s počítačem je nutná, tak i základy v rychlosti shrnuje i první přednáška. Přesto by si každý měl ověřit a dostudovat tyto znalosti dopředu z materiálu {{..:lectures:apolos_v11.pdf|APOLOS}} - výuka APO předpokládá znalost 3. kapitoly. Dále základní znalosti o návrhu jednoduchých algoritmů v jazyce C a nebo Python. ===== 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. Bodové hodnocení viz [[..:classification:start|Hodnocení]]. /* Aktuální předpokládané termíny a organizace zkoušek budou diskutované ve vláknu na fóru (zatím archiv LS 2019/2020 [[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. */ ===== 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%2Fqtrvsim%2Fbuble-sort|seminaries/qtrvsim/buble-sort]]) a v tomto adresáři šablona ''[[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/blob/master/seminaries/qtrvsim/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í riscv32-unknown-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 qtrvsim_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é 2 minuty ze kterých repozitářů přišla informace o změně kódu. Pro ty pak 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%2Fqtrvsim%2Fapo-sort|seminaries/qtrvsim/apo-sort]]) a v tomto adresáři šablona ''[[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/blob/master/seminaries/qtrvsim/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''. Parametry paměti cache se nastavují v souboru ''[[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/blob/master/seminaries/qtrvsim/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 Maximální povolená velikost vyrovnávací paměti je 16 32-bitových slov. Nahrávaná testovací sada obsahuje mezi 24 a 32 slovy. 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í riscv32-unknown-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 qtrvsim_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é 2 minuty ze kterých repozitářů přišla informace o změně kódu. Pozor, testuje se větev **master**. Větev //main// tento běh již do testů přidávat nebudu. Pokud byl repozitář změněný, provede se test a ten 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í RISC-V CPU ===== Implementovat Fibonacciho posloupnost pro CPU bez hazard unit ([[https://gitlab.fel.cvut.cz/b35apo/stud-support/-/blob/master/seminaries/qtrvsim/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]]).