cpu time = # insts * CPI * T
= clock cycles * T
= (cpu execution clock cycles + Memory-stall clock cycles) * T
* memory stall clock cycles = read-stall cycles + write-stall cycles
만약 read miss, write miss의 penalty가 동일하다면
-> memroy stall clocky cycles
= (memory access / program) * miss rate * miss penalty
* AMAT(평균 메모리 접근 시간) = Hit time + Miss rate * Miss penalty
캐시 성능 개선 방법: miss rate를 줄이거나 miss penalth를 줄이자
Reducing Cache Miss Rate
direct mapped cache는 하나의 cache line을 여러 메모리 블록이 겅유 -> conflict 발생
-> fully associative cache를 쓰자
* fully associative cache는 cache 내 아무데나 갈 수 있음
* n-way set associative cache는 direct랑 fully의 중간 형태
-> cache를 다수의 set로 나누고 각 set는 n개의 way를 가짐
-> 메모리 블록을 unique set에 mapping
cache 크기 고정된 상태에서, associativity를 두배로 늘리면 set 수는 절반으로 감소함
associativity 늘어나면 index는 감소, tag는 증가
* Replacement Policy
cache miss 발생 시 어떤 것을 replace?
1) LRU(Least-recently used) : 가장 오랜 시간동안 사용하지 않은 것을 방출
cache contorller가 계속 tracking 해야함 (오래된 데이터 구분을 위해_
2way면 저장된 순서 2!이므로 1bit면 충분
4way면 저장된 순서 4!이므로 5bit면 충분
2) Random
3) NMRU(Not Most Recenlty Used): 가장 최근에 사용한 데이터만 피하자
Reducing Cache Miss Penalty
메모리 계층을 더 촘촘하게 두자 (여러 레벨의 캐시를 사용하자)
* multilevel cache performance (L1 캐시에 L2 캐시 추가했을 때의 성능 향상)
L1 캐시: hit time 감소에 초점, miss rate가 증가하더라도 L2, L3가 막아줄거라 믿음
L2 캐시: miss rate 감소에 초점 (for penalty 감소)