On cache hit, CPU proceeds normally (additional delay 없이)
On cache miss,
-stall the CPU pipeline
-fetch block from next level of hierarchy
-instruction cache miss: restart instruction fetch
-data cache miss: complete data access
명령어 캐시 실패의 처리 단계
1. 원래의 pc값을 메모리로 보낸다.
2. 메인 메모리에 읽기 동작을 지시하고 메모리가 접근을 끝낼 때까지 기다린다.
3. 캐시 엔트리에 쓴다. 이때 메모리에서 인출한 데이터를 데이터 부분에 쓰고, 태그 필드에 주소의 상위 비트를 쓰고, 유효 비트를 1로 한다.
4. 명령어 수행을 첫 단계부터 다시 시작한다. 캐시에서 명령어를 다시 인출하는데, 이번에는 필요한 명령어를 캐시에서 찾을 수 있다.
데이터 접근을 위한 캐시 제어도 기본적으로는 같아서, 실패가 발생하면 메모리가 데이터를 보내줄 때까지 프로세서를 지연시킨다.
<쓰기의 처리>
1. write-through (즉시 쓰기)
항상 데이터를 메모리와 캐시에 같이 써서 메인 메모리와 캐시를 일치시킴
이러한 방식은 쓰기를 매우 간단히 처리하기는 하지만 좋은 성능을 제공하기는 어려움
모든 쓰기가 메인 메모리에 데이터를 써야만 하고 프로세서의 성능을 심하게 저하시킨다
만약 명령어의 10%가 저장 명령어라고 가정할 때, 캐시 실패가 없으면 CPI가 1.0이고 모든 쓰기에 100개의 추가 사이클이 필요하다면 CPI는 1.0 + 100 x 10% = 11이 되어 10배 이상의 성능 저하가 생기게 된다.
이러한 문제를 해결하기 위한 한 가지 방법은 쓰기 버퍼(write buffer)를 이용하는 것
쓰기 버퍼는 데이터가 메모리에 써질 때까지 기다리는 동안 이 데이터를 저장한다.
그리고 프로세서는 데이터를 캐시와 쓰기 버퍼에 쓰고 난 후에 바로 수행을 계속할 수 있다. 메인 메모리에 쓰기를 완료하면 쓰기 버퍼의 엔트리는 지워진다.
2. write-back (나중 쓰기)
쓰기가 발생했을 때 새로운 값은 캐시 내의 블록에만 쓴다.
keep track of whether each block is dirty (D bit)
V | D | Tag | Data |
D: add new information for cache block
distinguish whether the cache line has been updated within the cache memory. start with 0
그러다가 나중에 캐시에서 쫓겨날 때 쓰기에 의해 내용이 바뀌었으면 이 블록을 하위 메모리 계층에 쓴다.
(When a dirty block is replaced, write it back to memory
this also uses the write buffer)
Main memory update only once when the cache line keep out of cache memory
<Handling Store Miss>
1. No write allocate
Just go to the memory and update memory only (메모리의 있는 블록의 해당 부분만 갱신하고 캐시에는 쓰지 않는 방식)
Cache is unchanged
2. Write allocate
Fetch the line from memory as if we have a load miss (캐시 실패시 캐시에 블록을 할당)
일단 전체 블록을 메모리에서 읽어온 후, 블록 중에서 쓰기 실패를 발생시킨 워드만 덮어 쓴다.
...and then do the same thing as a store hit
'SKKU SW > Computer Architecture' 카테고리의 다른 글
[컴퓨터구조] 캐시 성능의 측정 및 향상 (0) | 2023.06.02 |
---|---|
[컴퓨터구조] 5. Memory Hierarchy 메모리 계층구조 (0) | 2023.05.28 |
[컴퓨터구조] Procedure Calling (0) | 2023.04.17 |
[컴퓨터구조] RISC-V Instruction Formats(2) (0) | 2023.04.15 |
[컴퓨터구조] RISC-V Instruction Formats(1) (0) | 2023.04.14 |