오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 21. Direct ( cache ) 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 21. Direct ( cache )

쫑알bot 2023. 11. 20. 11:36
728x90

대부분의 프로그램은 Memory 에 data를 access하는 데에 시간을 대부분을 쓴다.

따라서, 메모리에 접근하는 시간이 Performance에 큰 영향을 끼침

 

+ 우리는 크고 빠른 데이터를 원한다. 

하지만 큰 데이터는 속도가 느리고

빠른 데이터는 작을 수밖에 없다. 

 " Smaller is faster

 

 

아래로 갈수록 데이터의 크기는 ↑ , 속도는 ↓

 

이상적인 메모리는 SRAM의 aceess 속도 + Disk의 용량이다.

 


 

해결법

 

 

계층 구조를 나눈다. (= 우선 순위를 나눈다)

 

- CPU에서 멀어지면 접근하는 시간이 길어지기 때문에

  우선 순위별로 CPU와 가깝게 배치한다.

 


 

Locality

 

1. temporal locality : 방금 썻던 놈을 곧 다시 쓰는 경우. 

ex) a = b + c;
      d = 2*a + 1;

 

교수님이 들어주신 예시 

Precessor = 학생
Main Mem= 도서관 책장
Cache Mem = 컴구 책 모아놓은 책장

더보기

컴구 책을 학생들이 자주 보고싶은데 도서관 너무 안쪽 책장에 책들이 있음.

교수님이 특별히 건의해서 이번학기 컴구에 쓰는 책들을 입구에 따로 배치해둠.
접근하기 쉬워짐. 

다음 학기되면 그 학기에 듣는 수업으로 책들을 교체함

 

 

2. spatial locality : 방금 썼던 데이터 근처의 데이터를 곧 사용할 경우 . 

 

주로 배열에서 쓰인다.

a[1]을 가져와도 곧 a[2]를 쓸 기미가 보이는 경우를 말한다.

 

 


 

Locality 특징

 

1. 메모리 계층구조를 사용했음

2. 모든 데이터를 Disk에 일단 저장

  1) recently accessed items + nearby items 를 disk에서 DRAM으로 복사한다.

       disk → DRAM

   2) More  recently accessed items + More nearby items 들을 DRAM에서 SRAM(cache)로 옮긴다.

   

= 자주 쓰는 건 CPU랑 가깝게 해서 더 빨리 왔다갔다 하게 

 

 


계층 구조는 2단계로 나눌 수 있다 

Upper / Lower

 

● Block : Data 묶음의 최소 단위 

        cache로 가져올 땐 내가 필요한 데이터 하나만 쏙 빼오는 게 아니라
        그 주변 데이터까지 block 단위로 한 번에 가져온다.

 

cache(upper level) 안에, 내가 찾으려고 하는 데이터의 유무에 따라

● hit : 있

 

● miss : 없

→ 우리가 원하는 데이터가 있는 Data block을 Upper(=cache)로 가져와야 한다.

→ CPU stalls 해야함

→ 시간 소모 심함 = performance 감소.

 

그럼에도 이렇게 계층 구조를 가지는 이유는

locality가 있기 때문에 이렇게 해보니 성능이 좋았어서. 

 

요약

 

 


 

Cache 

 

Cache에 접근할 때 생각할 수 있는 문제가 2개 있음

 

1) Cache에 원하는 data가 있는지 어떻게 알 수 있냐?

2) 있으면, 어떻게 찾을 수 있냐?

 

Block size =  1 word

 

Direct Mapped 

 

Lower level의 data들은 Cache에서 정해진 하나의 location에만 저장될 수 있다.

그래서 때에 따라서는 lower level 데이터들끼리 Cache location을 공유하는 경우도 있음.

 

Lower lv에서 끝 주소 3비트로 방을 구분한다고 한다.

101 로 끝나는 애들은 다 같은 방으로 들어감.

101은 방을 가는데 쓰이고 , 그 앞 2비트는 Tag로 각 데이터를 구분하기 위해서 쓰인다.

 

ex) 학교 도서관으로 예를 들면
학교 도서관 책상에 앉을 때,
학번을 8로 나누어 나머지가 1이면 1번자리, 2면 2번자리...

 

 

Valid bit : 현재 Cache에 있는 값이 Mem에서 가져온 valid한 값인지

               이전에 쓰다 남은 찌꺼기인지 판단하는 Valid bit

 

 

데이터가 cache에 저장되는 단계

 

 

내가 직접 해보기

 

 


 

Cache 내부 분석

총 32비트가 있는데,

 

● Cache는 1024words를 가질 수 있고, 이를 indexing하기 위해 필요한 비트 수 = 10bits

 

● 데이터는 byte 단위로 있는데 block(word) 단위로 가져오기 때문에 2비트는 그냥 버린다 = 2bits

 

32비트 - index용 비트 - byte -> word 하면서 없어지는 비트 

  = 32  -  10  - 2 = 20

 

●Valid 판단 비트 = 1bits

 

Data = 32비트 (주소로 가져오는 거니까)

Tag =   20비트

Index = 10비트

Valid 판단 = 1비트

word - byte = 2비트

 

 

 

마지막에 1024 * (30 + 20 +1 )인 이유

1024 자리가 있고, 각 자리마다 [ 데이터 + tag + valid ] 칸이 있음

 

 


Hits vs Misses

 

● Read hits : 원하는 거 있음

 

●  Read Misses : 원하는 거 없음

→ CPU stall

→ Mem에서 필요한 데이터가 있는 block fetch 

→ cache로 그 데이터를 옮긴다.

→ 다시 시작

 

 

[ Inst mem + Data mem ] 은 [ Inst cache + Data cache ]로 대체될 수 있다.

 

● Inst cache 에서 misses 인 경우 분석

1. mem에 PC-4 를 보낸다 ( 없는 거 확인하기 전에 PC+4를 했으니까 )

2. CPU stall 하고, 필요한 Inst가 있는 mem을 읽는다  

3. cache에 저장, valid bit 세팅.

4. 다시 시작

 

 

● Data cache 에서 misses 인 경우 분석 (Inst cache 에서 1빼고 한다 생각하면 됨)

1. CPU stall 하고, 필요한 Data가 있는 mem을 읽는다  

2. cache에 저장, valid bit 세팅.

3. 다시 시작

 

● 여기서 들 수 있는 의문

Cach에서는 tag만 다르지 같은 location으로 가면 자리를 공유할 수도 있음.

이런 경우에 1) 데이터를 새로 넣으면 원래 있던 block은 어떻게 할거임?
                    2) 메모리에 다시 돌려놓을지 아니면 버릴지

 


Cache에 write하는 경우

 

두 가지 방법이 있다.

 

1. Write through

: Data 가 업데이트 된다  → [ Cache의 해당 block에  업데이트 + Main mem에서 해당 block에 업데이트 ]

 

장점 : Miss인 상황에 작업이 빠르다.

이유 : cache에 있는 값과 memory에 있는 값이 일치하므로, 
          새로운 값을 가져와도 다시 업데이트 할 필요가 없다.( = 다시 돌려주면서 업데이트를 할 필요 X )

 

단점 : Cache가 업데이트 될 때마다 memory에 접근해야 하므로,  시간이 더 걸린다.

 

함해봐

 


 

2. Write back 

: Data 가 업데이트 된다  → [ Cache의 해당 block에민  업데이트 ]

+ Main mem에 update는 cache에 다른 block이 들어와서 교체될 때만 

 

● 특징 : Dirty or clean을 확인한다.

용도 : 교체될 때 Update해야하는지 굳이 안 해도 되는지 판단하기 위함

 

- Dirty : Dirty bit =1

= Cache block이 cache에 들어온 뒤에 값이 update된 적 있음

= Mem에도 Update 해야함

 

- Clean : Dirty bit =0

= Cache block이 cache에 들어온 뒤에 값이 update된 적 없음

= Mem에 Update 할 필요 X

 

 

 

Write through : Write back

 

장단점

- Write Through: 
장점 : Miss가 나도 값이 일치하기 때문에 새로 업데이트 X
단점 : 매 업데이트마다 시간이 좀 더 걸림

- Write Back :

장점 : 메모리에 쓰는 걸 반복하지 않아도 된다. 

단점 : 굳이 꼽자면 Dirty bit를 보고 Miss가 나면 Update를 해야한다. 

 

 

 

(출처)

한동대학교 용환기교수님 - 컴퓨터구조