Assume that the 2-D integer array you allocated starts at address 0x40000000 in
ID: 3810412 • Letter: A
Question
Assume that the 2-D integer array you allocated starts at address 0x40000000 in memory, the size of an integer is 4 bytes, D-cache block size is 64 bytes and the D-cache is initially empty. As you read the integers in the 2-D array one-by-one, starting with element array[0,0], how many D-cache misses will you see for reading the first 10 integers in case of (to be answered without running pin):
cache2Drows (row-wise ordering) with hit ratio of 0.9911:
cache2Dcols (column-wise ordering) with hit ratio of 0.8748:
Explanation / Answer
Given D-cache block size is = 64 bytes
Size of integer is = 4 bytes
Number of integers in one block is = 64/4 =16.
Given a 2 D array and it is starting with element array[0,0].
a) cache2Drows (row-wise ordering)
In this case all the 10 integers from array[0,0] to array[0,10] can be
stored in 1 block.
As cache is initially empty , this block has to be transfered from
Main Memory to Cache.
Hence Number of Misses after reading first 10 integers is = 1.
b) cache2Dcols (column-wise ordering)
In this case all the 10 integers from array[0,0] to array[0,10] cannot be
stored in 1 block as it is column-wise ordering.
In 1st block elements from array[0,0] to array[15,0] this will be one cache miss for array[0,0]
in the same way for 10 elements number of misses is = 10.