카테고리 없음
캐시 ( Cache hit / Cache miss )
JIK_
2022. 6. 5. 10:59
CPU 가 RAM 에서 데이터를 가져올때
캐시라는것을 두어 일단 CPU 코어 안에 자기가 들고 있는 캐시 메모리 (L1 캐시, L2 캐시, 레지스터 등 ) 에 먼저가서 체크를 해본다.
이미 알고 있는 값이면 RAM 까지 가지 않고 여기서 가져온다.
캐시를 설계할때 고려해야될 점은
1) Temporal Locality
2) Spatial Locality
우리가 직접 캐시를 설계할 일은 없겠지만, 어렴풋이라도 알고 있어야한다.
그럼 직접 실험을 통해 알아보자.
그리고 똑같은 코드인데 i 랑 j만 바꿔서 한번 실행해보자.
우선 결과를 보지 않고 들었던 내 생각은 2) Spatial Locality 이게 중요하다고 보여주려는 예시 같다.
j가 배열 행으로 오게 되면 [1][0] 의 다음인 [2][0] 의 거리가 ( int32 * 10,000 ) 만큼 있으니 아무래도 데이터를 읽을때 오래 걸릴 것 같다.
접근 회수로 보면은 동일하다.
결과를 보면 2배 정도 차이가 난다.
맨 처음 데이터 [1][0] 을 RAM에서 가져올때 딱 [1][0] 만 가져오지 않고, 어느 블럭 단위로 가져와 캐시에 저장을 하는데
j가 먼저 오면 그 블럭에 다음 데이터가 캐시에 없을 (Cache Miss) 확률이 높기 때문에 확인하고 없으면 다시 RAM에서 가져와야한다.
반대로 블럭 단위로 가져왔을때 데이터가 캐시에 있으면 (Cache hit ) 다시 RAM에서 가져올 필요가 없기 때문에 빠르다.