본문 바로가기
Compiler & Computer Architecture

CPU Cache 사상과 회로 구성

by 탁종민 2021. 12. 4.

참고 글 : https://www.clear.rice.edu/comp425/slides/L24.pdf

 

이 글은 다음과 같은 시스템을 가정하고 보자.

* 메인 메모리 : 4GB ( 32bit 메모리 주소  )

* Cache size : 64KB ( 2^16 bytes ) 

* Block ( Line ) size : 64byte  ( 2^6 bytes ) 

-> 따라서 메인 메모리의 총 블록 수는 : 2^32 / 2^6 = 2^26

-> 캐시의 총 블록 수는 : 26^16 / 2^6 = 2^10

 

Fully Associative Mapping ( 완전 연관 사상 )

완전 연관 사상에서는 하나의 캐시 블록(Line)이 그 어떤 메인메모리 블록이라도 캐싱할 수 있다.

예를들어 하나의 캐시 블록은 26 bit의 Tag값을 가진다. 이 값은 메인 메모리 ( 4G= 23^2) 에서의 블록 (64B = 2^6) 을 찾아내는 주소값이 된다.

 

그래서 Cache가 Hit인지 알아내려면 모든 Cache 블록의 Tag값을 검사해야한다. 때문에 CPU 회로는 병렬적으로 캐시 블록들의 Tag값을 검사해 Hit인지 아닌지를 OR로 출력한다.

 

BYTE OFFSET은 Cache Hit했을 때 캐시라인에서 뽑아온 데이터를 MUX에서 선택하는 비트로 사용된다.

 

 

Directed Mapping( 직접 사상 )

직접 사상은 메모리를 캐시 크기로 나누어 나뉜 메모리(페이지)를 각 캐시에 완전히 맵핑 시키는 방식이다.

캐시 사이즈가 2^16 이고 블록 사이즈가 2^6 이니 캐시에는 2^10 개의 블록이 존재하게 된다.  따라서 주소값 32bit는  Tag ( 2^16 ) + Cache Block Index ( 2^10 ) + Byte offset ( 2^6 ) 으로 해석된다. Tag는 현재 캐시블록에 주소값에 맞는 메모리 페이지인지 확인하는 값이 된다. 만약 태그값이 다르다면 태그값 다시 메모리에서 페이지를 선택하는 비트로 쓰인다. 메인 메모리의 각 페이지의 첫 번째 블록은 항상 캐시의 첫 번째 블록과 매칭된다. 마찬가지로 메인 메모리의 n번째 블록은 캐시의 n번째 블록과 매칭된다.

 

직접 사상은 완전 연관 사상처럼 병렬적으로 Tag검사를 할 필요없이 block index bit로 하나의 block을 고르고 해당 block의 tag값을 비교하면 된다.

 

 

Set-Associative Mapping ( 세트-연관 사상 )

https://www.clear.rice.edu/comp425/slides/L25.pdf

세트 연관사상은 블록을 세트로 묶고, 각 메인 메모리의 페이지를 세트에 맵핑시키는 방법이다.

n-way 세트 연관 사상은 n개의 블록을 세트로 묶는다. 이때 4way 세트 연관사상을 가정해보자. 그러면 한 개의 세트는 4개의 블록으로 구성되므로 2^6 * 2^2 = 2^8 바이트의 사이즈를 가지고 캐시는 2^16 / 2^8 = 2^8 개의 세트로 구성된다.

따라서 주소값 32bit는   Tag ( 2^18 ) + Set Index ( 2^8 ) + Byte offset ( 2^6 )   으로 해석된다. 

캐시의 총 크기는 세트수*블록사이즈(즉 2^8 * 2^6  = 2^14)이고,  메인 메모리크기(2^32 )  /  캐시의 크기 (2^14 )  는 Tag Bit 크기( 2^18)와 일치한다.   따라서 2^18 크기의 Tag 비트는 메인 메모리에서 캐싱 가능한 2^18 개의 블록 중 하나를 선택하는 값이 된다. 

 



캐시 Hit, Miss를 판단할 때는 set index로 Set을 선택한 다음 Set에 존재하는 모든 Block들의 Tag값들을 검사해 Cache Hit인지 Cache Miss인지 파악해야 한다.

 

 

댓글