컴퓨터 구조 - 병렬 처리 - Cache coherence
병렬 처리 - Cache coherence
1. 개요
UMA든, NUMA든 각 프로세스나 코어는 캐시를 가진다.
UMA인지 NUMA인지를 구분하는게 메모리이기 때문이다.
이 경우 매우 일이 복잡해지는데 각 코어나 프로세스가 가지는 캐시 값을 동기화해주어야하기 때문이다.
이를 Cache coherence라고 하며 이를 위한 여러가지 방법들이 있다.
2. 기본적 접근법
다중 프로세서에서 실행되는 프로그램은 일반적으로 동일한 데이터를 여러 캐시에 복사해 둔다. 별로 드문상황이 아니고 꽤나 자주 일어나는 상황으로 소프트웨어에서 공유를 회피하려 하기보다는, SMP(Symmetric Multiprocessor) 시스템에서 하드웨어 프로토콜을 사용해 캐시 일관성을 유지한다.
이 경우 아래의 두개가 공유 데이터 성능의 핵심이다.
1) 캐시 값 이동
하나의 캐시에서 다른 캐시로 데이터를 옮겨서 사용한다. 원격에 할당된 공유 데이터 접근 시 지연(latency)과 메모리 대역폭 요구를 모두 줄인다.
2) 캐시 값 복사
동시에 읽히는 공유 데이터에 대해, 각 캐시가 로컬에 복사본을 만들어서 사용한다. 접근 지연과 읽기 시 발생하는 경쟁(contension)을 모두 줄여준다.
3. 캐시 동기화 규약 (Cache Coherence Protocols)
1) 스누핑(Snooping)
- 데이터를 복사한 모든 캐시는 해당 블록의 공유 상태 정보도 로컬에 보유하되, 중앙집중식 상태 정보는 없다.
- 모든 캐시는 버스나 스위치 같은 브로드캐스트 매체를 통해 서로 접근 가능하다
- 각 캐시 컨트롤러는 매체를 감시(snoop)하여, 버스나 스위치 요청 시 자신이 해당 블록을 가지고 있는지 판단한다.
- 대체적으로 서로 공유하는 회로가 복잡하기 때문에 확장성 면에선 떨어진다.
2) 디렉토리 기반(Directoy based)
- 물리 메모리 블록의 공유 상태 정보를 단 하나의 장소(디렉토리)에만 저장이다.
- 브로드캐스트가 아닌 포인트 대 포인트(point-to-point) 통신 방식이다.
- 스누핑에 비하여 확장성(scalability)이 우수한 구조이다.
※ 추가 업데이트 및 검증 예정이고, 올라간 부분도 아직 완벽하지 않으니 참고만 바란다.
참고자료
- Computer Organization and Design-The hardware/software interface, 5th edition, Patterson, Hennessy, Elsevier
- 서강대학교 이혁준 교수님 강의자료 - 고급 컴퓨터 구조
This post is licensed under CC BY 4.0 by the author.