29 aprilie 2011

Mini-problema labirintului

In memoria principala este definita o matrice ce descrie calea de la intrarea într-un labirint pana la o comoara. Drumul spre comoara este encodat în matrice ca un set de salturi de la niste coordonate la altele (un nod din drum contine ca informatie urmatorul nod la care trebuie sa se sara). Stim ca am ajuns la comoara cand trebuie sa sarim la nodul (0, 0). In programul din PPU se scrie drumul în labirint si trimite SPU-ului adresa catre începutul matricii. SPU-ul va trebui sa gaseasca coordonatele comorii si sa le scrie în prima celula a labirintului (0, 0). In PPU la sfarsit se va verifica daca in celula (0, 0) se gasesc coordonatele comorii.

Rezolvare: http://dl.dropbox.com/u/24465060/labXcell.zip

----

Instructiune Descriere
cache_rd(name, eaddr) Copiaza valoarea stocata la adresa eaddr in cache. Returneaza valoarea.
cache_wr(name, eaddr, val) Scrie in cache valoarea val.
cache_touch(name, eaddr) Aduce in cache valoarea stocata la adresa eaddr. Functia este non-blocanta. Functia intoarce adresa din spatiul de adrese al LS, unde va fi stocata valoarea la incheierea tranferului.
cache_wait(name, lsa) Asteapta terminarea unui transfer non-blocant, care intoarce date la adresa lsa din spatiul LS-ului.
cache_rw(name, eaddr) Copiaza in cache valoarea stocata la adresa eaddr, transmitand sistemului de cache faptul ca valoarea ar putea fi modificata. Functia este blocanta si va intoarce adresa din spatiul LS unde va fi stocata valoarea. Linia de cache este marcata dirty la scrierea datelor.
cache_lock(name, lsa) Blocheaza datele de la adresa lsa din cache.
cache_unlock(name, lsa) Deblocheaza date de la adresa lsa din cache.
cache_flush(name)
cache_rd_x4(name, eaddr4) Citeste un vector care contine 4 valori unsigned int.
e_pr_stats(name) Afiseaza statistici despre cache.
Un program care utilizeaza sofware caching trebuie sa includa fisierul header “cache-api.h” si poate contine la inceputul sau definitii pentru:
  • 'CACHE_NAME' - un nume unic ce va identifica cache-ul.
  • 'CACHED_TYPE' - tipul elementelor stocate in cadrul cache-ului. Poate fi orice tip de date valid in limbajul C.
  • 'CACHELINE_LOG2SIZE' - log2 (dimensiunea unei linii de cache).
  • 'CACHE_LOG2NWAY' - specifica asociativitatea cache-ului. Exista 2 valori posibile: 0 si 2 (2 fiind valoarea implicita).
  • 'CACHE_LOG2NSETS' - log2 (numarul de seturi dintr-un cache). Valorile posibile sunt cuprinse intre 0 si 12. Valoarea implicita este 6 (26 = 64 seturi).
  • 'CACHE_TYPE' - tipul de acces la cache: read-only (0) sau read-write (1 - implicit)
  • 'CACHE_SET_TAGID(set)' - specifica tag-ID-ul unui anumit set. Valorile posibile sunt cuprinse intre 0 si 31. Implicit se defineste ca set mod 32.

Niciun comentariu: