캐시

강병우·2023년 9월 11일
0

병렬프로그래밍

목록 보기
3/24

Cache

다른 메모리의 위치에 빠르게 접근할 수 있는 메모리 위치의 집단.

  1. 최근에 업데이트된 아이템들이 다시 사용될 가능성이 있다(Temporal locality)
  2. 근처에서 사용된다(Spatial locality)

캐시 레벨

캐시는 레벨별로 메모리에 존재하며, 깊이가 깊어질수록 메모리의 크기가 커지고 느려진다.

Cache Hit & Miss

Hit : 특정 계층의 원하는 아이템을 접근할 때, 캐시 히트라고 한다.
Miss : Cpu에서 값 x를 찾으려고 했는데, 각 메모리 레벨을 조회하게 되는데 찾지 못할 경우(miss), 메모리 레벨이 내려가면서(하위계층 메모리 조회) main memory까지 내려가게 된다.

캐시 쓰기 정책

캐시에 데이터를 cpu가 쓸 때, 캐시에 있는 데이터는 메인 메모리에 있는 데이터와 함께 쓰인다. 즉, 이 둘의 데이터는 같다.

Write-through : 캐시의 데이터를 업데이트할 경우, 메모리 계층 중 가장 느린 메인 메모리도 업데이트하기 때문에 성능 저하로 이어질 수도 있다.

Write-back : 캐시 데이터가 업데이트되고 refresh가 될 때까지 기다렸다 메인메모리에 데이터를 쓴다. -> for문에서 순회하다가 최종값만 Write-back으로 업데이트하는 것이다. 순회하는동안 발생하는 데이터는 캐시에 업데이트!

캐시 맵핑

메모리 위치를 캐시에 어떻게 넣느냐?

  1. Direct mapped : 캐시의 특정한 위치에 넣는다. 특정 값을 찾을 때 위치를 기억하고 있기 때문에 빠르게 조회할 수 있다. 하지만 특정 위치에 저장해야하기 때문에 빠르게 데이터를 넣는 것은 어려워 캐시 효율이 떨어진다.
  2. Full associative : 캐시에 있는 블럭에 임의의 위치에 넣는다. 아무대나 넣으면 되기 때문에 캐시 효율이 좋아지지만, 특정 값을 찾으려면 캐시 전체를 순회해야하는 단점이 있다. -> 실질적으로 구현 불가능
  3. n-way set associative : 캐시의 블럭을 n개의 묶음으로 세트로 만들어, Direct mapped처럼 맵핑한다.

Replacement Policy
어떤 것을 선택하고 교체할 것인가? 에 대한 정책. 최근에 접근한 아이템을 킵하고, 가장 오랫동안 액세스하지 않는 아이템을 교체한다(RLU). Random기법도 있다


위 사진처럼, 2-way(블럭 2개) 방법을 채택할 경우, set 0, set 1을 각각 0과 1, 2와 3 블럭으로 묶는다. 그 후, RLU와 같은 정책 기반으로 맵핑 작업이 이루어진다. 처음에 0 혹은 1 블럭으로 맵핑되고, 그다음은 2 혹은 3 블럭으로 맵핑된다. 만약 모두 블럭이 맵핑되어있다면, 가장 오래된 블럭을 교체한다.

0개의 댓글