2-2/컴퓨터 구조

[컴퓨터 구조] Direct- mapped Cache

윤진노 2022. 11. 25. 17:03

캐시에는 여러가지 종류가 있다.

크게 보면 모두 다 Set- associative Cache로 볼 수 있는데, 이중 Set이 1-way 인 경우를 Direct-mapped Cache로 본다.

이번 포스팅에서는 Direct - mapped Cache에 대해서 알아보도록 하자.

 

 

💻 Direct - mapped Cache

Direct - mapped Cache는 메모리 주소에 따라, 이미 캐시에 들어갈 위치가 정해져 있다.

위그림에서, 밑에 길다란 블록들의 집합이 메모리이고, 각각 화살표를 캐시로 가리키고 있다.

초록색 위치의 블록들을 모아보겠다.

00001, 01001, 10001,11001 공통점을 보면 주소의 뒤 3비트가 001이다.

파란색칸 주소들을 보면 맨뒤 3비트가 101로 끝난다. 이처럼 주소에 따라서, 캐시에 들어갈 곳이 정해져 있는 것이 DIrect-mapped Cache이다.

 

이렇게 캐시에 들어갈 위치를 정해주는 비트를 index라고 한다.이 인덱스의 길이는 캐시의 block size에 따라 달라진다.

현재는 block size가 8bit이다. 8비트는 2진수로 3bit로 표현이 가능하다. 따라서 주소에서 index 3비트만 떼오는 것이다.

따라서, 메모리주소 00001에서 001이 인덱스가 되고, 나머지 00은 tag가 된다.

 

 

Direct-mapped Cache

위 그림에서 Cache의 블록 사이즈는 8이다.

캐시의 구성 요소로는 먼저 각 캐시 블록을 나타내는 index가 있다.

그리고, 그 인덱스마다 값이 들어갈 수 있는 value가 있다.

그리고, 메모리에서의 주소를 구분해주는 tag가 있다. 여기서 블록사이즈가 8이므로 index는 메모리 주소에서 index로 3비트를 떼가고, tag로는 나머지 주소를 떼간다.

나중에 포스팅 하겠지만, 보통 인덱스보다 태그가 훨~씬더 길다. 메모리가 캐시보다 훨~씬더 크기 때문이다.

그리고, 캐시 내부의 값의 여부를 나타내는 valid가 있다. 값이 있다면 1, 그렇지 않다면 0을 나타내고 있다.

 

 

💻  Address Subdivision

Cache의 Address는 bit 단위로 끊겨 각각 tag,index,Byte offset을 나타낸다.

여기서 Byte offset이란, Data가 1word로 되어있다. 그 word를 byte로 나타내면 4byte이다. 그리고 그중에서 몇번째 바이트를 가리키고 있는지를 의미한다. 따라서, Byte offset의 bit크기는 log2(Block size)로 나타낼 수 있다.

 

 

여기서는 64bit 주소라고 가정한 것이다.

먼저, Cache index에 해당하는 index로 이동하여, tag가 같은지,확인하고 valid가 1인지 확인한다.

모두 해당하면 hit이다. 논리 로직을 보면 Tag와 Valid 값을 뽑아서 And 게이트에 넣고 있다.

 

Cache size란 valid field와 Tag field를 뺀 Data fileld의 영역만을 일컫는것이다.

따라서, Cache size = Block size x num of index 이므로, 위 그림에서 캐시 사이즈는 2^10 x 2^2 = 2^12 (Byte)= 4KB 이다. 

이렇게 , Cache size에 따라서 구성하는 address bit가 달라진다.

 

 

💻 Block Size and Miss Rate

블록 사이즈와 Miss Rate의 관계를 살펴보자.

 

X축은 Block size, Y축은 Miss rate를 가리키고 있다.

이그래프가 많은걸 함축하고 있다.

먼저 Block size가 2배씩 커지고 있는데 Miss rate는 16->64는 줄어 들다가 다시 늘어나는 경우를 볼 수 있다.

 

따라서, Block size가 는다고 Miss rate가 무조건 줄어드는 것은 아니고 적절한 크기가 있다. 

Block size가 캐시 사이즈에 비해 너무 커지면 Block 개수가 감소하게 되어 캐시에서 그 데이터를 사용하기도 전에 다른 데이터로 업데이트 되는 결과가 나타난다. 이것은, Spatial locality의 감소이므로 Miss rate가 증가하는 결과이다.

이때, Miss penalty도 같이 증가한다.

 

오른쪽,에 적힌 숫자들은 Cache size를 의미한다.

보면, Cache size가 커지면 Miss rate는 줄어든다. 하지만 커질수록 그 줄어드는 폭이 좁아지므로, Miss rate를 줄이는 것과 가격의 상승에 합당한 선을 찾으려 든다.

 

 

💻 Miss penalty

앞선 포스팅에서 Miss penalty에 대해서 설명했었다.

Miss penalty란 Main mameory로 블록을 Main memory에서 캐시로 load해오는 시간이다.

이것을 자세히 나누면 준비하는 Set-up time과 운반하는 transfer time으로 나눌 수 있다.

뭐 Block size가 늘어나면 당연하게도 Miss penalty는 늘어난다.

이 Miss penalty를 줄이기 위해서 Block size를 줄일 수는 없으니.. 방법 두가지를 준비했다.

 

1. early - restart

전체 Block을 기다리지 않고, 요청된 word/Block이 반환되면 바로 진행하는 것이다. 이것은 data보다는 instruction에게 더 효과적이다.

 

2.critical word first

순서를 바꿔서 cpu가 원하는 word를 먼저 받는 것이다.