Main / CoursesAACacheExample
Given:
- Total memory size = 64GB = 2^36 bytes
- Cache data size = 16MB = 2^24 bytes
- Word size = 64 bits = 2^3 bytes
- Cache block size = 16 words = 2^7 bytes
We find:
- Num cache lines = cache size / block size = 2^24 / 2^7 = 2^17
- Num bits to address a word in a block = log2(words in a block) = log2(16) = 4
- Num bits to address a byte in a word = log2(bytes in a word) = log2(8) = 3
If memory is "byte addressable":
- Address size = 36 bits.
- 3 bits are used to address the byte in each word.
- 4 bits are used to address a word in each block.
- This means there are 36-3-4 = 29 address bits left to keep track of.
- Num index bits = 17 since there are 2^17 cache lines.
- Num bits tag = 29-17=12.
If memory is "word addressable":
- Num words in memory = 64GB/8 bytes = 8Gwords = 2^33 words
- Address size = 33 bits.
- 4 bits are used to address a word in each block.
- This means there are 33-4 = 29 address bits left to keep track of.
- Num bits tag = 29-17 = 12.
The problem would be different if I had said the address has 36 bits. In that case, byte-addressable and word-addressable would imply different memory sizes. In the above, the memory size is fixed so being byte-addressable or word-addressable doesn't change much other than forcing us to make the last 3 bits of the address 0 in the word-addressable case.