Cache 2탄-_-
Written by windwiser
Cache에 대해 좀더 알아보자. -_-;;
그 전에 바로 전post를 꼭 이해하시고 보시기를 바란다. -_-;;
나도 알고 있던 기본적인 내용들을 정리하고 복습하는 차원에서 이런 짓들을-_-;;
하고 있기에 다소 애매하거나 틀린내용이 있을지도 모른다. -_-;;
사실 현재의pc주소space는32bit가 주류이고 점차64bit시대가 열리고 있는 상태이다.
하지만 곧바로32bit주소로 생각하다 보면 좀 헷갈리는 면이 있기에4bit의address space로 설명한다.
먼저 다음과 같은 점을 명확히 해두자.
cache쪽에서 두개의mem이 보이는데 한line이랄까 한block은1byte라 생각한다.
머 넘 당연한가-_-;;
그리고 위 그림서read 0101이라 나와있는데 이는 곧add 0110이 된다.
위 그림은cache hit!!즉cache가 안타를 어케 쳤는지 보여준다. -_-;;
Cpu가 메모리의0110주소에 해당하는data를read하려 하고 있다.
그래서 언제나 그랬듯이-_- cache에게“야 너 있냐?”물어본다.
이때cache는0110을 다음과 같이 생각한다.
0110 10은두개의cache안의 메모리tag와data메모리에서10에 해당하는 즉10주소에 해당하는byte즉-_-;; block을 확인(참조)한다.
이10을index라 한다.
먼저 앞선post에서 말했듯이tag를 살핀다.
10에 보니깐, 01이 있다.이 놈이 실제tag이다. tag메모리tag tag메모리안에tag가 들었다.
말이 꼬이네-_-;;
‘암튼, 01이라는tag가 있다.그리고 나서cpu가read하고 싶다던0110에서 앞선 두자리bit즉01이랑compare한다.
똑같다.!!순간cache는 안타를 예감한다. -_-
그래서 다른 또 하나의 메모리인(in cache) data mem에서 앞선index에 해당했던block의
값을 참조하고 이를cpu에게return한다.위 그림에서 그 값은90이 되겠다.
이는cache가main mem에서0110에 해당하는 주소를 미리 사전에!!
0110 ->즉, 10 index에 의해서!! Tag mem과data mem에 해당block을 찾고tag mem쪽엔 앞선 두bit즉tag 01을tag mem쪽에,그때의main mem의 값을data mem쪽에 넣어두고 있었다는 애기가 된다.!!그래서cpu가 달라고 했을 때 앞선 애기처럼 해서hit를 한 것이다.
근데 만약miss penalty상황이라면?어떻게cache가 앞선post애기처럼 그miss났던data를update할까?
위 그림을 보자.
Cpu가0110 data를 요청했는데
앞서처럼cache는0110으로 분리해서 생각한다.
10에 해당하는block을tag mem과data mem에서 찾고tag mem에서tag를 본다.
11이다.근데cpu가 요구한건0110앞2bit를 보면01 11 != 01이다.
즉 비교해 보니깐 일치하지 않은 것이다.
이것이miss다.
그리고 당연히miss이므로10주소에 해당하는data mem에서data를cpu에게 건네주면 안되는 것이다.다시update를 해주어야 한다.
Miss가 나면cache는 위 그림과 같은 행동을 취하게 된다.
즉 다음번에 또 그거 달라할지 모르니(확률이 높다.!! Spatial,temporal locality)가져온다.
먼저0110이니
0110에서index 10에 해당하는address영역을 가져온다. Main mem에서
거기 참조하러 가보면90이 들어있다.다른1010 0010도 해당되나 여기선0110쪽을 택했다고 하자.
그럼0110의 뒤에2bit 10주소에 해당하는data mem과tag mem의 해당block에
Tag엔 앞에2bit 01을 쓰고data쪽엔10 byte에90을 쓴다.
이렇게update가 다 되고 난후에
Cpu가 다시read 0110을cache에게 요구하면 이번엔10주소의01과tag가match가 되서
Hit를 치고90을cpu에게 넘겨준다.
이것이 바로cache가cpu가 요구한data를 넘겨주는 방식algorithm이다.
즉index를 보고tag compare할 거를 찾아서 해보고hit인지miss인지 본 담에hit면
역시 그 주소의data mem쪽에 있는value를 넘겨주고miss면
위와 같은update를 하는 것이다.
그리고 위 그림들을 잘보면4개의byte로4개의block인cache이다.
즉1byte = 1block이다.그리고main mem의 하나가cache의tag쪽과data쪽에 어느 한 구역(block)에matching되므로 이는direct cache임도 알아두자.
위 이야기는cache의 원리를 보여주기 위함이다.
이제 슬슬-_-실제cache에 접근해 들어가자.
위 그림 위에 애기들은cpu가 하나의data를 요구하면 그게 있으면hit없으면miss이런애기였다. -_-;;
근데 누누히 애기해 왔지만spatial, temporal locality이다.즉 공간적으로 시간적으로 명령어나data가 요구될 가능성이 크다.따라서cache가main mem에서data를 가져올 때
하나만 딸랑 가져오지 말고 비슷한 주소영역의 몽창 가져온다.
그러면 다음 번cpu의 요구시 위 그림을 예를 들자면 이번엔90이 아니라88을 요구했다면main mem에게access안해도 바로 넘겨줄수 있다.즉 연발hit인 것이다.캬-_-;;
위 그림을 보자
Cpu가read 010110이라 즉add 011010이라 요구했다.
011010
이번엔10이index다.
즉, cache는10자리에 해당하는block을 참조하게 된다.
이때 보면, 99,88,77,68이다.즉4byte이다.
즉1block = 4byte인 구조다.이는 앞서main mem을 다시 좀 보자.
중간에10이 들어가는address를 가져올 수가 있다.
몇 개 되는데 여기서도 그 중에서011000을 가져온다고 하자.
즉index를 보고 가져온다.
다시 애기를 진행하면
Cpu가add 011010이라 요청했는데 이때cache가 보니깐miss났다고 하자.
그러면cache는update를 역시 하는데
이때1byte만 가져오지 않고4byte를 가져오자는 것이다.
그리고 그4byte는index 10에 해당하는main mem에서 찾아서 가져오는데 위 그림에선011000에서 가져오는 그림이다.
그리고4byte로 구성된index 10에 해당하는data mem에다가 가져온4개 즉4byte data인99,88,77,68을 쓴다.(write)그리고main에서 가져왔던 주소 즉011000에서01을tag mem에index에 해당하는10자리에 쓴다. 01을 쓴다.이제 다시cpu가add011010이라 요청하면 다시01과10자리의01을 비교해서tag가 일치하게 되고hit를 친다.
그리고10에 해당한data mem의block에서!!
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까지 안가도 되는 것이다.
아참 그리고 노파심에;;
2의2승 즉 두bit면4개의block을addressing할수 있으므로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이다.
그리고index는main mem에서 어느 주소의 것을 가져올것인가를 알게해주고 또한
Cache의tag쪽과mem쪽에서 어디다가tag랑data를 저장할 것인가를 알려주는 것이다.
또한, tag는cpu가 요청한tag와compare하기 위한 것이다.
즉hit냐miss냐를 결정해 준다.
위 그림을 보면
Offset은cache의block의byte수의 로그값이 되겠다.즉cache의 한 블락이 몇byte짜리인가 이다.
이를log를 취해서 구한게 바로offset값이 되겠다.
또한index의 비트수는 이번엔cache의block의 개수의 로그값이 되겠다.
그리고cache address구조를 보면 알지만..위 두index와offset비트 수를 빼주면
즉32bit address라면 위 두index와offset비트수를 빼주면tag의 비트수가 나온다
요게direct cache의 구조가 되겠다.
자 위에서 말한cache address가 나왔다고 하자.
그럼direct cache는 말이지-_-;;먼저tag를 함봐-_-
그담에 말이지-_-;;요거decoding해서 즉tag ram에서decoding해서 알아낸 예를 들어01이면01을tag ram에서 찾고 바로 그01에 해당하는data ram에서block을 찾는다.
그리고tag compare해서 안타다!!하면data ram에서 해당data를mux를 통해 선택해서
보내준다는 애기다.
잘 보면direct cache가 두개로 보인다.두개다. -_-;;
마치cp한 것처럼-_-;;
설명하자면(머 잘 알지도 못하지만-_-;;) cache address가 왔다 이거야-_-;;
그래서tag를decoding해서 알아내려 하는데 말이지;;두번 한다는 거지
위아래로 말이지 그 담에tag알아내면compare하지 만약 이때 위쪽에서hit면
해당data ram에서data가mux에서 나와서 가겟지
밑에서hit밑에서 가고,만약 둘다miss면main mem에서 가져오는 거지
보면compare가or로 묶이는 것이 보인다.즉 둘중 하나 맞는거 보낸다가 된다.
이런식으로direct가2개짜리를2way associative cache라 하고
4개면4way가 되고8개면fully가 된다.
근데4 way이상은 잘 사용되지 않는다고 하는군요-_-;;
자 그럼 다음 문제 함 풀어보자-_-;;
32bit address space를 쓰는 시스템이다. Cache mem이32kbyte이다.
그리고 이cache는2way set-associative방식이다.
Cache block의size가4byte이다.
이cache는 어떤 놈일까? -_-;;;;;
32bit address라 하면
2의2승* 2의30승이니 그리고2의10승이k고20승이m고30이니g이다.
즉4 * g다시말해4Gbyte의 주소영역을 가진다는 애기다.
(실제 요즘 우리가 많이 쓰는 시스템이다.)
Cache의 한block이4byte짜리라니깐
32k/4byte하면8kbyte이다.
즉4byte짜리block이8000개 있다는 애기다.
즉, tag mem과data mem이8000라인8000block으로 구성되어 있다는 애기다.
2way이므로direct가2개다.
이 말은2개의block을 하나의set으로 한다는 말이다.
따라서8k/2 = 4k즉4k개의set이다.
즉4k개의set으로 구성된cache이다.
2 way associative cache이므로set으로 기준한다.
자 이제cache address즉offset block과block address부분을 알아보면
Offset size는cache에서의1block size이므로 즉 몇바이트이냐를 알면되므로
4byte라고 했으니 로그를 취하면2가 된다.
즉offset block은2bit로 이루어 진다.
그리고 앞서set이4k개라고 알아냈다.4k를log를 취하면4k는
K가2의10승이므로2의2승* 2의10승이다.즉12가 된다.
그리고 나머지tag부분은 위index의bit수와offset bit수를 빼주면 된다.
32bit시스템이므로32에서 빼준다.
32–12 -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 |