This challenging question tests your understanding of cache. Consider the following C code: int A[16]; int B[16]; int m; ... //A large chunk of code that does NOT access //arrays A and B. ... for (int i=0; i<10; i++) { for (int j=0; j<16; j++) { B[j] = m * A[j] + B[j]; } } Assume this program runs on a 32-bit machine, i.e., the CPU loads/stores 4 bytes from memory in one go. This machine has a 16-bit memory address, and each memory block stores 16 bytes. This machine has a direct-mapped data cache with 16 cache lines. Array A starts at address 0, and B starts at address 256 - both arrays begin at a memory block boundary. Each element of arrays A and B occupies 4 bytes. The values of i, j, and m are stored in CPU registers. What is the total number of data cache misses (including compulsory misses)
Q5 Cache Performance Analysis
This challenging question tests your understanding of cache.
Consider the following C code:
int A[16]; int B[16]; int m; ... //A large chunk of code that does NOT access //arrays A and B. ... for (int i=0; i<10; i++) { for (int j=0; j<16; j++) { B[j] = m * A[j] + B[j]; } }
Assume this program runs on a 32-bit machine, i.e., the CPU loads/stores 4 bytes from memory in one go. This machine has a 16-bit memory address, and each memory block stores 16 bytes. This machine has a direct-mapped data cache with 16 cache lines.
Array A starts at address 0, and B starts at address 256 - both arrays begin at a memory block boundary. Each element of arrays A and B occupies 4 bytes. The values of i, j, and m are stored in CPU registers.
What is the total number of data cache misses (including compulsory misses) when running the above code?
Trending now
This is a popular solution!
Step by step
Solved in 2 steps