Search
Úlohy se odevzdávají uložením navrženého kódu do osobního GitLab repozitáře pro předmět APO, viz dokumentace použití osobního GITu.
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 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 ebreak dojde k vyzvednutí dat z adresy array_start. V repozitáři stud-support je připravená šablona projektu (seminaries/qtrvsim/buble-sort) a v tomto adresáři šablona 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
work/bubble-sort/bubble-sort.S
.globl
array_size
array_start
ebreak
work/bubble-sort
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
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 ebreak dojde k vyzvednutí dat z adresy array_start. V repozitáři stud-support je připravená šablona projektu (seminaries/qtrvsim/apo-sort) a v tomto adresáři šablona 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.
work/apo-sort/apo-sort.S
work/ao-sort/apo-sort.S
work/apo-sort
No pipeline no cache
Parametry paměti cache se nastavují v souboru work/apo-sort/d-cache-template.par ve formátu
work/apo-sort/d-cache-template.par
policy,sets,words_in_block,ways,write_method
lru,1,1,1,wb
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/.
Implementovat Fibonacciho posloupnost pro CPU bez hazard unit (fibo-hazards). Kód se odevzdává zasláním do osobního GITu. Aktuální seznam (informace o chybách v individuálním logu v adresáři).
Zadání úlohy naleznete v šabloně print-hex-to-uart. Výsledky hodnocení http://pisa-virt.felk.cvut.cz/apo/print-hex-to-uart-ci/. Vstupem je náhodné číslo, úlohu lze řešit i tak v konstantním čase a optimalizovat na rychlost, ale nemá to příliš význam.
Cílem úkolu je implementovat jednoduchou “kalkulačku” v jazyce C. Šablonu najdete na seminaries/qtrvsimuart-calc-add/uart-calc-add-template.c . Výsledky hodnocení naleznete v souboru rank.txt v adresáři http://pisa-virt.felk.cvut.cz/apo/uart-calc-add-ci/. Přechod do prostředí jazyka C odpovídá přechodu na vyšší úroveň přístupu k periferiím z programu běžícího na výukovém kitu MZ_APO (téma semestrální práce).
Spuštění C programu pro přímý běh na CPU vyžaduje i pro QtRvSim alespoň minimální sekvenci pro nastavení globálního ukazatele a zásobníku, viz soubor crt0local.S ve složce šablony. Poskytnutý Makefile sestaví program a otestuje ho. Potřebujete kompilátor C pro architekturu RISC-V a běh bez operačního systému. Testovat můžete v laboratoři i na serveru Postel.
crt0local.S
Makefile