Book/COMPUTER ORGANIZATION AND DESIGN RISC-V

5.10 Parallelism an Memory Hierarchy:Cache Coherence

S0LL 2024. 12. 2. 17:22

 

1. Cache Coherence란 무엇인가?

 

캐시 일관성(Cache Coherence) 문제는 다중 프로세서 시스템에서 발생한다.

문제:

여러 프로세서가 공유 메모리를 캐싱할 때, 동일한 메모리 위치에 대해 다른 값을 관찰할 수 있다.

예: CPU A와 CPU B가 각각 자신의 캐시에서 동일한 메모리 위치를 읽고, 한 프로세서가 값을 변경했지만 다른 프로세서가 이를 반영하지 못하는 상황.

Cache Coherence 정의:

“메모리 시스템은 최근에 기록된 값만 반환해야 한다.”

하지만 Coherence는 “어떤 값을 반환할 수 있는가?“라는 질문에 답하고, Consistency는 “언제 값을 반환하는가?“를 다룬다.

 

 

2. Coherence의 세 가지 속성

 

캐시 일관성을 유지하려면 다음 세 가지 조건이 만족되어야 한다:

1. Reads Follow Writes:

한 프로세서 가 주소 에 값을 썼다면, 가 나중에 읽을 때 항상 그 값을 읽어야 한다.

2. Writes Propagate:

 에 값을 쓰고, 가 이를 읽을 때 쓰기와 읽기 사이에 다른 쓰기가 없다면,  의 값을 읽어야 한다.

3. Write Serialization:

동일 주소에 대한 모든 쓰기는 일관된 순서로 모든 프로세서에게 보여야 한다.

쓰기의 순서는 프로세서가 아닌 메모리 시스템이 결정.

 

예시: 그림 5.39

 

Step 1: CPU A가 X=0을 읽음.

Step 2: CPU B가 X=0을 읽음.

Step 3: CPU A가 X=1을 메모리에 씀.

CPU B가 X를 읽을 때 반드시 1을 관찰해야 한다.

 

 

 

3. Coherence를 보장하는 두 가지 방법

 

1. Migration (이동):

데이터를 한 프로세서의 로컬 캐시로 이동시킴.

장점:

데이터 접근 지연 최소화.

공유 메모리 대역폭 요구량 감소.

2. Replication (복제):

공유 데이터의 복사본을 여러 캐시에 저장.

장점:

여러 프로세서가 동시에 읽는 데이터를 병목 없이 처리 가능.

 

이 두 가지는 Cache Coherence Protocols에 의해 관리된다.

 

 

 

4. Cache Coherence Protocols

 

1) Snooping Protocols (버스 감시 프로토콜):

 

동작 원리:

모든 캐시가 공유된 버스 또는 네트워크를 통해 메모리 상태를 모니터링.

캐시는 특정 데이터 블록의 복사본을 소유한 경우, 이를 확인하고 상태를 업데이트.

특징:

단순하지만 확장성 제한 (버스의 대역폭).

 

2) Directory-Based Protocols:

 

동작 원리:

각 메모리 블록에 대한 디렉토리를 유지하여 어떤 캐시가 블록의 복사본을 소유하는지 추적.

디렉토리는 중앙화된 테이블로 구성.

특징:

확장성 우수하지만 추가 오버헤드 존재.

 

 

 

5. Snooping-Based Protocol: Invalidation

 

Write-Invalidate Protocol:

 

한 프로세서가 쓰기를 수행하면, 다른 캐시에 저장된 동일 데이터의 복사본을 무효화.

동작 과정:

프로세서가 데이터를 쓰기 전에 독점적인 접근 권한을 가져야 함.

다른 프로세서가 데이터를 읽으려면 새 복사본을 메모리에서 가져옴.

 

예시: 그림 5.40

 

1. CPU A가 X=0읽음:

Cache Miss → 메모리에서 X=0로드.

2. CPU B가 X=0읽음:

Cache Miss → 메모리에서 X=0로드.

3. CPU A가 X=1씀:

X에 대한 다른 캐시의 복사본 무효화.

4. CPU B가 X를 다시 읽음:

Cache Miss → 메모리에서 X=1로드.

 

 

 

6. False Sharing

 

정의:

 

두 프로세서가 서로 다른 변수를 사용하지만, 이 변수들이 동일한 캐시 블록에 위치할 때 발생.

결과: 한 프로세서의 쓰기 작업이 다른 프로세서의 캐시 블록을 무효화하여 성능 저하 발생.

 

예방 방법:

 

데이터를 캐시 블록 경계에 맞춰 정렬.

중요한 변수들을 다른 캐시 블록에 분리.

 

 

 

7. Consistency와 Coherence

 

Coherence:

 

“같은 데이터에 대한 값”을 정의.

 

Consistency:

 

“값이 업데이트된 시점”을 정의.

프로세서 간 일관된 순서로 메모리 연산을 처리.

예: Sequential Consistency, Relaxed Consistency 등.