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.