#define CACHE_NAME MY_CACHE /* numele cache-ului */ #define CACHED_TYPE int /* tipul elementului de baza al cache-ului */ /* atribute optionale */ #define CACHE_TYPE CACHE_TYPE_RW /* acces de scriere si citire */ #define CACHELINE_LOG2SIZE 11 /* 2^11 = lungimea unei linii de cache de 2048 bytes */ #define CACHE_LOG2NWAY 2 /* 2^2 = 4-way cache */ #define CACHE_LOG2NSETS 4 /* 2^4 = 16 seturi */ #include int main(unsigned long long spu_id, unsigned long long parm){ int a, b; unsigned eaddr_a, eaddr_b; /* initializeaza adresele efective cu o adresa din memoria principala */ eaddr_a = parm; eaddr_b = parm + sizeof(int); /* citeste a si b din memoria principala (folosind adresa efectiva) */ a = cache_rd(MY_CACHE, eaddr_a); b = cache_rd(MY_CACHE, eaddr_b); /* modifica valorile locale */ a++; b++; /* scrie valorile modificate in cache. */ /* nu se face imediat scriere in memoria principala (nu e un cache write-through) */ /* se actualizeaza doar copiile din LS si se marcheaza ca "dirty" liniile corespunzatoare */ cache_wr(MY_CACHE, eaddr_a, a); cache_wr(MY_CACHE, eaddr_b, b); /* scrie toate liniile modificate (dirty) inapoi in memoria principala */ cache_flush(MY_CACHE); return 0; }