컴퓨터 구조론

[컴퓨터 구조론]10.Memory Hierarchy -2

myjeongjun 2025. 1. 11. 18:48

Direct Mapped Cache에서의 불편한점을 이야기 해보고자 다음 상황을 살펴보자.

 

0을 시에 넣고 히트인지 miss를 판단한다.

 

4를 캐시에 집어넣고 hit인지 miss인지 판단한다.

여기서 0과 4의 주소차이가 block size * 2의 크기인 8byte이다. block크기가 4byte가 아니라 8byte였다면

0만 miss가나고 4는 hit가 났을 것이다.(왜냐하면 offset 비트가 00이 아니라 000,즉 3bit를 사용하게 될것이므로)

그렇기 때문에 miss rate를 줄이는 방법 중, block크기를 늘리는 발상을 시도했고, 그러면 자연스럽게 block 크기캐시 효율의 상관성을 고민해봐야하는 주제가 생긴다. 

이것은 block size와 miss rate의 관계를 나타낸 그래프로, 4k -> 256k로 갈수록 block size가 어느정도 커지면 miss rate가 감소한다. 하지만 선형적으로 증가하는것이아닌 계속커지다가 miss rate가 증가하는 지점이 생긴다. 이것은 자세하게 들여다보면

block size를 무작정 늘리면 spatial locality로 인해 증가하는 이득보다 temporal locality를 활용하지 못해 받는 손해가 더 커지는 지점이 존재하기때문에 그렇다.

 

 

다음으로 수업중에 제시한 불편한 점은

계속 수를 집어넣다가 16384라는 수는 0과 tag는 다르지만 index는 동일한 0000000000 이어서 0자리에 16384가 들어가야한다. 그렇다는 말은 앞으로 같은 index에 있는 값들이 한 두개가 아닐텐데, 무조건 캐시에는 한 개만 들어가야하고, 그 수들이 자주 사용된다면 교체도 자주일어나면서 miss rate가 무시할수없을 정도로 상승할 것이다. 그렇기 때문에 같은 index의 값을 여러개를 가지고있는것이 더 효율적이지 않을까? 라는 발상에 의해 N -way set associative caches라는 방식을 제시한다.

 

Set - Associative chaches

이것은 Direct Mapped Cache가 parallel한 구조라고 생각하면 된다..1개의 block이 들어있는게 아닌 여러개의 block가 들어있는 set이라고 생각하면편하다. 이때 set당 들어있는 block이 n개라면 n - way set associative cache라고 한다.

hit miss구현도 한 개의 block이라도 1이 나오면 hit를 반환시킨다.

 

Fully - associate caches라는건 말그대로 모든 block이 병렬적으로 존재하는 형태

 

그럼 direct - mapped caches는 1 -way set associative caches라고 불릴수도있다.

 

그렇지만 아무리 4 -way , 8 -way라고해도 캐싱할수있는 수는 한정되어있기때문에 miss시 교체해줘야하는데 교체 되는 값은 최근까지 참조되지 않은 값이 가장 합당할것이다. 이것을 LRU(least recently used)라고 부른다. 그것을 구분하기 위해 숫자가 올라갈수록 1,2,3,4,5,... 처럼 최근에 참조된순으로 줄을 세워야하는데, 이것은 set에 많은 수의 block을 집어넣을수록 구현난이도도 상승한다는것을 시사한다.

 

여기서 Average memory access time을 결정하는 요소로 hit time , miss rate , miss penalty가 있는데

상식적으로 hit time(hit판단까지 걸리는 시간)을 늘리기 위해선 cache를 작게하고  가능한한 1 way - set associative caches에 가깝게 설계하면 그렇게 되는경우 miss rate가 감소한다.

 

miss rate 감소 방법은 

cache를 크게, n way - set associative caches에서 n을 크게 할수록 증가 등등이 있을것이다.

 

어쨋든 이 부분에서 설명하고 싶은점은 hit time , miss rate, miss penalty는 trade off한 관계에 놓여있기때문에 이러한 단점을 없애기 위해서 cache를 분리시켜 한 캐시는 hit time을 최적화 다른 캐시는 miss rate를 최적화 하는 방식으로 구현한다면 장점이 극대화 되므로 

어째서 우리는 Memory Hierarchy구조로 메모리를 설계했는지 합리적인 이유를 알수있다.

 

이것은 intel 과 AMD의 cache 구조에 대해 비교한 표이다.

L1,L2는 코어당 부여되어있고 L3는 코어 끼리 공유한다.

 

이에 따라 서로 다른 프로세서나 코어의 캐시끼리 데이터가 일치하지 않는 문제점을 제시했는데,

 

이것에 대한 해결 방법을 설명하자면

 

Write invalidate Protocol : system bus를 통해 한 캐시에서 write를 하면 다른 캐시에 이에 해당하는 데이터가 존재하면 valid bit를 0 으로 바꾼다.

 

Write Broadcast Protocol : system bus를 통해 한 캐시에서 write를 하면 다른 캐시또한 update를 시켜준다.

더 효율적이지만 구현하기 어렵다.