컴퓨터/컴퓨터구조특론

[ACA] 캐시 메모리의 인덱스로 중간 비트를 사용하는 이유

xeskin 2020. 4. 14. 12:37
반응형

Direct-mapped cache

캐시 메모리 공부를 할 때 Direct-mapped cache, Set-associative cache 를 배운다. 얘들을 잘 살펴보면 캐시 메모리의 인덱스로 중간 비트를 사용한다. 상위 비트를 사용할 수도 있을텐데, 중간 비트를 사용하는 이유가 있을까?

다음과 같이 4개의 블록을 가진 캐시가 있다고 생각해보자. 이때 상위 비트 인덱싱을 하면 다음과 같다.

보는바와 같이 인접한 메모리 블록들이 같은 캐시 엔트리로 매핑된다. 메모리 블록에서 상위 4개는 캐시의 첫번째 블록에, 밑의 3개는 두번째 블록에, 그 밑의 3개는 세번째 블록에 매핑된다. 만약에 어떤 프로그램이 좋은 spatial locality를 갖고 있고, 어레이의 원소를 순차적으로 훑는 걸 생각해보자. 그렇게 되면, 캐시는 그 어레이를 훑을 때, 특정 순간에 어레이 청크만을 캐시 메모리에 저장하게 되는데, 이는 캐시 메모리를 비효율적으로 사용하는 것이다.

하지만 중간 비트를 인덱싱하면 연속되는 메모리 블록들이 항상 캐시의 다른 블록에 매핑된다. 이때는 캐시가 크기가 C-byte인 청크, 주소 공간을 한번에 저장할 수 있다. 정확히는 (# of set) x (bytes/block) x (entry/set) 만큼 주소 공간을 한번에 저장할 수 있다. 그렇기 때문에 spatial locality를 잘 활용할 수 있게 되는 것이다.

반응형