- Wrap up Cache
- Virtual Memory
Types of cache misses, ranged by the amount of delay caused:
- Cache read miss from instruction cache
- Cache read miss from data cache
- Cache write miss to data cache
Reasons for cache misses:
- Cold (compulsory) miss: Cache is empty
- Capacity miss: Not enough space
- Conflict miss: Enough space, a lot of conflicts (and thus replacements)
Common placement policies are:
- Fully associative (M-way associative, if M blocks in total)
- K-way associative: Each set fits K blocks
- Direct mapped (1-way associative)
General Cache Organization:
- B: Number of bytes in a cache line (typically 64)
- E: Number of cache lines/blocks that combine to make up a set (typically 2^{0,1,2,3,4})
- S: Number of sets that make up the cache
- T: Total cache size
- B * E * S = T
Accessing data with locality gives a huge speedup:
int sum_array_rows(int** a){
int i, j, sum = 0;
// Option 1: Accessed with locality
for (i = 0; i < M; i++)
for(j = 0; j < N; j++)
sum += a[i][j];
// Option 2: Accessed w/o locality
for (j = 0; j < N; j++)
for (i = 0; i < M; i++)
sum += a[i][j];
return sum;
}