Search
The link to English version of the bonus task description.
Ú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, který řadí čísla od nejmenšího po největší, budeme předpokládat, že se implementace nachází v souboru work/bubble-sort/bubble-sort.S vašeho repozitáře ve větvi master nebo main. 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
master
main
.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 (můžete použít bubble sort z předchozí úlohy nebo jakýkoliv jiný třídicí 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/apo-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/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
Pro spuštění příkazu z Windows je potřeba přidat do systémové proměnné PATH cestu k qtrvsim_cli.exe souboru.
Automatický systém zjišťuje každé 2 minuty ze kterých repozitářů přišla informace o změně kódu. Pozor, testují se pouze větve master a main. 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. Testovací systém předpokládá, že soubor je nahraný v cestě work/fibo-hazards/fibo-hazards.S vašeho repozitáře ve větvi master nebo main. Aktuální seznam (informace o chybách v individuálním logu v adresáři).
work/fibo-hazards/fibo-hazards.S
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