View

300x250

 

 

 

 

 

 

CPU마다 Lv1 Cache를 가지고있기에, 같은 주소에 다른 데이터를 저장할 가능성이 있다.

(Lv1의 같은 주소에 서로다른 데이터를 저장 -> Lv2는 Update되지 않아 서로 꼬이는 경우) : Cache Coherence Problem

=> MESI protocol

Lv1 Cache #1, Cache #2가 참조하는 메모리주소가 같은 경우, 건드리지 않는다.

Handling Writes on Cache Memory


Read Miss ( 읽기에 실패 ) : 메모리에서 해당 데이터를 가져오면 해결

Write Miss ( 쓰고자하는 메모리주소가 Cache에 없는 경우 ) : ???

아래는 HardWare가 알아서 처리해주는 문제에 해당한다. 원리를 알아두자.

Write Allocated - Write Back

메모리에서 데이터블럭을 Cache로 가져와 Cache에서 작성 + Cache의 Dirty Bit을 Set ( 메인메모리의 Data는 오래된 Data임을 알림 )

Write No-Allocated - Write Through

메모리에 직접 접근해 데이터를 작성. 따라서 Cache에 Dirty Bit이 필요없다.

Replacement Policy


Cache의 Set중의 Way가 가득차있다면 (이미 모든 Way에 Load를 한 상태) 새로운 data의 load를 위해 어떤 Way를 덮어씌워야 할까?

1. Least Resently Used : LRU

각 Set에 포함되어있는 LRU Bit을 보고 가장 오래된 Way를 선택해 초기화시키는 방법. ( Way 마다 붙어있는 것이 아니다! )

4개의 Way가 있다면 4!= 24 … 24개의 State가 존재하는 셈 ( 1234, 1243, 1324, 1342 … ) 따라서 4개의 Way를 처리하기 위해서는 16 < 24 < 32 이므로 최소 5개의 LRU Bit이 필요하다.

동작하는 방식은 State Machine이다. 1234에서 3을 사용하면 1243 으로 3이 맨 뒤로 가는것 처럼, 24개의 State에 대한 State Machine이 설계되어있음. Way가 많아질수록 기하급수적으로 더 복잡해진다. ( 팩토리얼으로 복잡해진다 )

2. Random Access

무작위로 초기화시킬 Way를 선택하여 초기화시키는 방법.

High-Associated Cahce ( Way가 많은 Cache 구조 )에서 잘 작동한다. ( 12 way는 state가 무려 479,001,600개 … state machine을 만드는 것 보다 무작위로 접근하는 것이 더 효율적이다. )

320x100
Share Link
reply
반응형
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31