Cache 2-_-

Written by windwiser

 

 

Cache에 대해 좀더 알아보자. -_-;;

그 전에 바로 전post를 꼭 이해하시고 보시기를 바란다. -_-;;

나도 알고 있던 기본적인 내용들을 정리하고 복습하는 차원에서 이런 짓들을-_-;;

하고 있기에 다소 애매하거나 틀린내용이 있을지도 모른다. -_-;;

사용자 삽입 이미지

사실 현재의pc주소space32bit가 주류이고 점차64bit시대가 열리고 있는 상태이다.

하지만 곧바로32bit주소로 생각하다 보면 좀 헷갈리는 면이 있기에4bitaddress space로 설명한다.

 

먼저 다음과 같은 점을 명확히 해두자.

cache쪽에서 두개의mem이 보이는데 한line이랄까 한block1byte라 생각한다.

머 넘 당연한가-_-;;

그리고 위 그림서read 0101이라 나와있는데 이는 곧add 0110이 된다.

 

위 그림은cache hit!!cache가 안타를 어케 쳤는지 보여준다. -_-;;

 

Cpu가 메모리의0110주소에 해당하는dataread하려 하고 있다.

그래서 언제나 그랬듯이-_- cache에게야 너 있냐?물어본다.

이때cache0110을 다음과 같이 생각한다.

0110 10두개의cache안의 메모리tagdata메모리에서10에 해당하는 즉10주소에 해당하는byte-_-;; block을 확인(참조)한다.

10index라 한다.

먼저 앞선post에서 말했듯이tag를 살핀다.

10에 보니깐, 01이 있다.이 놈이 실제tag이다. tag메모리tag tag메모리안에tag가 들었다.

말이 꼬이네-_-;;

암튼, 01이라는tag가 있다.그리고 나서cpuread하고 싶다던0110에서 앞선 두자리bit01이랑compare한다.

똑같다.!!순간cache는 안타를 예감한다. -_-

그래서 다른 또 하나의 메모리인(in cache) data mem에서 앞선index에 해당했던block

값을 참조하고 이를cpu에게return한다.위 그림에서 그 값은90이 되겠다.

이는cachemain mem에서0110에 해당하는 주소를 미리 사전에!!

0110 ->, 10 index에 의해서!! Tag memdata mem에 해당block을 찾고tag mem쪽엔 앞선 두bittag 01tag mem쪽에,그때의main mem의 값을data mem쪽에 넣어두고 있었다는 애기가 된다.!!그래서cpu가 달라고 했을 때 앞선 애기처럼 해서hit를 한 것이다.

 

근데 만약miss penalty상황이라면?어떻게cache가 앞선post애기처럼 그miss났던dataupdate할까?

사용자 삽입 이미지

위 그림을 보자.

Cpu0110 data를 요청했는데

앞서처럼cache0110으로 분리해서 생각한다.

10에 해당하는blocktag memdata mem에서 찾고tag mem에서tag를 본다.

11이다.근데cpu가 요구한건01102bit를 보면01 11 != 01이다.

즉 비교해 보니깐 일치하지 않은 것이다.

이것이miss.

그리고 당연히miss이므로10주소에 해당하는data mem에서datacpu에게 건네주면 안되는 것이다.다시update를 해주어야 한다.

사용자 삽입 이미지

Miss가 나면cache는 위 그림과 같은 행동을 취하게 된다.

즉 다음번에 또 그거 달라할지 모르니(확률이 높다.!! Spatial,temporal locality)가져온다.

먼저0110이니

0110에서index 10에 해당하는address영역을 가져온다. Main mem에서

거기 참조하러 가보면90이 들어있다.다른1010 0010도 해당되나 여기선0110쪽을 택했다고 하자.

그럼0110의 뒤에2bit 10주소에 해당하는data memtag mem의 해당block

Tag엔 앞에2bit 01을 쓰고data쪽엔10 byte90을 쓴다.

이렇게update가 다 되고 난후에

Cpu가 다시read 0110cache에게 요구하면 이번엔10주소의01tagmatch가 되서

Hit를 치고90cpu에게 넘겨준다.

 

이것이 바로cachecpu가 요구한data를 넘겨주는 방식algorithm이다.

index를 보고tag compare할 거를 찾아서 해보고hit인지miss인지 본 담에hit

역시 그 주소의data mem쪽에 있는value를 넘겨주고miss

위와 같은update를 하는 것이다.

 

그리고 위 그림들을 잘보면4개의byte4개의blockcache이다.

1byte = 1block이다.그리고main mem의 하나가cachetag쪽과data쪽에 어느 한 구역(block)matching되므로 이는direct cache임도 알아두자.

 

위 이야기는cache의 원리를 보여주기 위함이다.

이제 슬슬-_-실제cache에 접근해 들어가자.

사용자 삽입 이미지

위 그림 위에 애기들은cpu가 하나의data를 요구하면 그게 있으면hit없으면miss이런애기였다. -_-;;

근데 누누히 애기해 왔지만spatial, temporal locality이다.즉 공간적으로 시간적으로 명령어나data가 요구될 가능성이 크다.따라서cachemain mem에서data를 가져올 때

하나만 딸랑 가져오지 말고 비슷한 주소영역의 몽창 가져온다.

그러면 다음 번cpu의 요구시 위 그림을 예를 들자면 이번엔90이 아니라88을 요구했다면main mem에게access안해도 바로 넘겨줄수 있다.즉 연발hit인 것이다.-_-;;

 

위 그림을 보자

Cpuread 010110이라 즉add 011010이라 요구했다.

 

011010

이번엔10index.

, cache10자리에 해당하는block을 참조하게 된다.

이때 보면, 99,88,77,68이다.4byte이다.

1block = 4byte인 구조다.이는 앞서main mem을 다시 좀 보자.

중간에10이 들어가는address를 가져올 수가 있다.

몇 개 되는데 여기서도 그 중에서011000을 가져온다고 하자.

index를 보고 가져온다.

 

다시 애기를 진행하면

Cpuadd 011010이라 요청했는데 이때cache가 보니깐miss났다고 하자.

그러면cacheupdate를 역시 하는데

이때1byte만 가져오지 않고4byte를 가져오자는 것이다.

그리고 그4byteindex 10에 해당하는main mem에서 찾아서 가져오는데 위 그림에선011000에서 가져오는 그림이다.

그리고4byte로 구성된index 10에 해당하는data mem에다가 가져온4개 즉4byte data99,88,77,68을 쓴다.(write)그리고main에서 가져왔던 주소 즉011000에서01tag memindex에 해당하는10자리에 쓴다. 01을 쓴다.이제 다시cpuadd011010이라 요청하면 다시0110자리의01을 비교해서tag가 일치하게 되고hit를 친다.

그리고10에 해당한data memblock에서!!

99,88,77,68에서77을 돌려준다.이게 먼가 하면

Add 011010에서10의 의미가 된다.

99 88 77 68

00 011011

이런식으로 생각하면 된다.

이런 원리로77을 넘겨주는 것이다.

그리고 다시Add 011011을 요청해 오면 역시나10자리 검색해서tag일치되므로(01)

99 88 7768

00 01 1011

68을 돌려준다.이렇게 되면 궂이main mem까지 안가도 되는 것이다.

 

아참 그리고 노파심에;;

22승 즉 두bit4개의blockaddressing할수 있으므로00 01 10 11식으로 했던것이다.tag mem data mem address에서;;

 

 

 

앞서 애기의 주된 핵심은 무엇일까?

이를cache addressing이라 하는데

사용자 삽입 이미지

Cache address는 어떻게 구성될까?

앞서 눈치챘겠지만,

앞에tag그리고index그리고offset이란걸로 이루어 진다.

이를 다시 앞에tag+ index를 모아서block address뒤에를block offset이라 한다.

 

Block offset요게 머냐면

Select the data from the block!!

즉 앞서00 01 10 11해서 넘겨줄data가 그block에서 무엇인지를 알아냈다.

바로 이걸 알게 해주는게 바로-_-;; block offset이다.

 

그리고indexmain mem에서 어느 주소의 것을 가져올것인가를 알게해주고 또한

Cachetag쪽과mem쪽에서 어디다가tagdata를 저장할 것인가를 알려주는 것이다.

또한, tagcpu가 요청한tagcompare하기 위한 것이다.

hitmiss냐를 결정해 준다.

사용자 삽입 이미지

위 그림을 보면

Offsetcacheblockbyte수의 로그값이 되겠다.cache의 한 블락이 몇byte짜리인가 이다.

이를log를 취해서 구한게 바로offset값이 되겠다.

 

또한index의 비트수는 이번엔cacheblock의 개수의 로그값이 되겠다.

그리고cache address구조를 보면 알지만..위 두indexoffset비트 수를 빼주면

32bit address라면 위 두indexoffset비트수를 빼주면tag의 비트수가 나온다

사용자 삽입 이미지

요게direct cache의 구조가 되겠다.

자 위에서 말한cache address가 나왔다고 하자.

그럼direct cache는 말이지-_-;;먼저tag를 함봐-_-

그담에 말이지-_-;;요거decoding해서 즉tag ram에서decoding해서 알아낸 예를 들어01이면01tag ram에서 찾고 바로 그01에 해당하는data ram에서block을 찾는다.

그리고tag compare해서 안타다!!하면data ram에서 해당datamux를 통해 선택해서

보내준다는 애기다.

 

사용자 삽입 이미지

잘 보면direct cache가 두개로 보인다.두개다. -_-;;

마치cp한 것처럼-_-;;

설명하자면(머 잘 알지도 못하지만-_-;;) cache address가 왔다 이거야-_-;;

그래서tagdecoding해서 알아내려 하는데 말이지;;두번 한다는 거지

위아래로 말이지 그 담에tag알아내면compare하지 만약 이때 위쪽에서hit

해당data ram에서datamux에서 나와서 가겟지

밑에서hit밑에서 가고,만약 둘다missmain mem에서 가져오는 거지

 

보면compareor로 묶이는 것이 보인다.즉 둘중 하나 맞는거 보낸다가 된다.

 

이런식으로direct2개짜리를2way associative cache라 하고

4개면4way가 되고8개면fully가 된다.

사용자 삽입 이미지

근데4 way이상은 잘 사용되지 않는다고 하는군요-_-;;

 

자 그럼 다음 문제 함 풀어보자-_-;;

 

 

 

32bit address space를 쓰는 시스템이다. Cache mem32kbyte이다.

그리고 이cache2way set-associative방식이다.

Cache blocksize4byte이다.

cache는 어떤 놈일까? -_-;;;;;

 

32bit address라 하면

22* 230승이니 그리고210승이k20승이m30이니g이다.

4 * g다시말해4Gbyte의 주소영역을 가진다는 애기다.

(실제 요즘 우리가 많이 쓰는 시스템이다.)

 

Cache의 한block4byte짜리라니깐

32k/4byte하면8kbyte이다.

4byte짜리block8000개 있다는 애기다.

, tag memdata mem8000라인8000block으로 구성되어 있다는 애기다.

 

2way이므로direct2개다.

이 말은2개의block을 하나의set으로 한다는 말이다.

따라서8k/2 = 4k4k개의set이다.

4k개의set으로 구성된cache이다.

2 way associative cache이므로set으로 기준한다.

 

자 이제cache addressoffset blockblock address부분을 알아보면

Offset sizecache에서의1block size이므로 즉 몇바이트이냐를 알면되므로

4byte라고 했으니 로그를 취하면2가 된다.

offset block2bit로 이루어 진다.

그리고 앞서set4k개라고 알아냈다.4klog를 취하면4k

K210승이므로22* 210승이다.12가 된다.

그리고 나머지tag부분은 위indexbit수와offset bit수를 빼주면 된다.

32bit시스템이므로32에서 빼준다.

3212 -2 = 18이 된다.

그렇다면cache address는 다음과 같은 구조일 것이다.

31-14

13-2

1-0

 

위 숫자는bit number. ---à갈수록 하위bit

Cache 2탄을 마친다-_-

감독: WINDWISER -_-주연: WINDWISER촬영감독: WINDWISER -_-;;;

T H E E N D

-_-;;;

 

 

'Research > Image Processing' 카테고리의 다른 글

GPU Gems Online 공개  (1) 2008.05.20
GPU Gems 2의 CD내용물  (2) 2008.05.20
ray casting(3)  (3) 2008.05.09
선형대수의 기본  (1) 2007.10.22
분산과 표준편차  (3) 2007.08.10

Posted by 영웅기삼
,