KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
As a school assignment, I need to find a way to get the L1 data cache line size, without reading config files or using api calls. Supposed to use memory accesses read/write timings to analyze & get this info. So how might I do that? In an incomplete try for another part of the assignment, to find the levels & size of cache, I have: for (i = 0; i < steps; i++) { arr[(i * 4) & lengthMod]++; } I was thinking maybe I just need vary line 2, (i * 4) part? So once I exceed the cache line size, I might need to replace it, which takes sometime? But is it so straightforward? The required block might already be in memory somewhere? Or perpahs I can still count on the fact that if I have a large enough steps , it will still work out quite accurately? UPDATE Heres an attempt on GitHub ... main part below // repeatedly access/modify data, varying the STRIDE for (int s = 4; s <= MAX_STRIDE/sizeof(int); s*=2) { start = wall_clock_time(); for (unsigned int k = 0; k < REPS; k++) { data[(k * s) & lengthMod]++; } end = wall_clock_time(); timeTaken = ((float)(end - start))/1000000000; printf("%d, %1.2f \n", s * sizeof(int), timeTaken); } Problem is there dont seem to be much differences between the timing. FYI. since its for L1 cache. I have SIZE = 32 K (size of array)
Tags (comma-separated)
Save Edits
Cancel