공유 메모리·NUMA·일관성
UMA·NUMA·분산 메모리를 구분하고 캐시 일관성과 프로그램 동기화가 해결하는 문제를 나눕니다.
여러 코어가 같은 합계 값을 읽고 각자 1을 더하면 “메모리는 하나니까 안전하다”고 생각하기 쉽습니다. 하지만 데이터 위치·캐시 복사·실행 순서에는 서로 다른 규칙이 필요합니다.
공유 주소와 접근 거리
공유 메모리는 여러 처리 주체가 공통 주소 공간의 데이터에 접근할 수 있는 모델입니다. UMA(Uniform Memory Access)는 교육용 설명에서 메모리 접근 비용이 균등한 모델입니다. NUMA(Non-Uniform Memory Access)는 메모리의 위치에 따라 로컬·원격 접근 비용이 달라집니다. 같은 주소를 공유해도 같은 거리·같은 지연인 것은 아닙니다.
분산 메모리는 처리 노드마다 자기 메모리를 갖고 통신으로 값을 교환하는 모델입니다. 물리 분산과 프로그래머가 보는 주소 모델은 함께 명시해야 합니다. 클러스터를 하나의 멀티코어 칩과 동일한 공유 메모리 규칙으로 다루지 않습니다.
컴퓨터구조 · 읽는 순서
주소를 공유해도 접근 거리는 다를 수 있습니다
코어 A가 자기 노드의 메모리 A와 다른 노드의 메모리 B에 접근하는 경우를 비교합니다.
두 화살표는 접근 관계이며 동시 실행이나 같은 지연을 뜻하지 않습니다. 캐시·상호연결·다른 코어는 생략했습니다. 실제 비용은 측정합니다.
캐시 복사본의 값 맞추기
캐시 일관성(coherence)은 같은 메모리 위치의 캐시 복사본들이 쓰기 후 어떤 값을 관찰해야 하는지를 다룹니다. 쓰기 전에 다른 복사본을 무효화하는 프로토콜이나 값을 갱신하는 접근이 있습니다. 구체적 프로토콜의 상태·전이 규칙을 확인하지 않고 “한 코어가 쓰면 즉시 모든 캐시가 같은 값”이라고 설명하지 않습니다.
메모리 일관성 모델(consistency model)은 여러 메모리 연산의 관찰 가능한 순서에 관한 규칙입니다. 한 위치의 값 관계와 여러 위치의 읽기·쓰기 순서는 같은 질문이 아닙니다. 동기화는 프로그램이 요구하는 상호배제·순서를 만드는 수단입니다. 하드웨어 coherence가 데이터 경쟁을 자동으로 제거하지 않습니다.
잃어버린 갱신
초기 합계 X=0을 두 코어가 읽기→+1→쓰기로 갱신합니다.
| 순서 | 코어 A | 코어 B | X |
|---|---|---|---|
| 1 | X=0 읽기 | — | 0 |
| 2 | — | X=0 읽기 | 0 |
| 3 | 읽은 값+1 쓰기 | — | 1 |
| 4 | — | 읽은 값+1 쓰기 | 1 |
캐시가 최종 X=1에 합의해도 우리가 기대한 2가 아닙니다. 원자적 read-modify-write나 잠금으로 갱신을 보호할 수 있습니다. RISC-V 메모리 모델은 ISA가 허용하는 순서를 명시하는 공식 예입니다. 이 교재의 표는 순차적으로 교차한 하나의 사례입니다.
거짓 공유(false sharing)는 다른 변수인데 같은 캐시 라인에 있어 여러 코어의 쓰기가 라인 소유권 변경·무효화를 서로 유발하는 현상입니다. 데이터 경쟁이 없는 프로그램도 성능에 영향을 받을 수 있습니다. 실제 라인 크기와 배치는 대상 시스템에서 확인해야 합니다.
독립 문제: 서로 다른 문제를 구분하기
코어 A는 X, 코어 B는 Y를 수정하고 X·Y는 서로 다른 변수이지만 같은 캐시 라인에 있습니다. 이 사실만으로 잘못된 결과가 반드시 생기나요? 거짓 공유의 가능성과 데이터 경쟁을 구분하세요. 이어 한 코어가 모든 메모리를 원격으로 읽는 NUMA 배치를 개선할 방향을 제안하세요.
힌트
값의 정확성과 전송 비용은 다른 기준입니다. 배치를 바꿔도 동기화 규칙을 버릴 수 없습니다.
풀이
서로 다른 위치의 독립 갱신이라면 같은 라인만으로 데이터 경쟁을 단정하지 않습니다. 하지만 라인 수준 coherence 트래픽이 증가할 수 있어 거짓 공유 후보입니다. 자주 쓰는 데이터를 처리 코어 가까이에 배치하거나 작업·메모리 배치를 함께 조정할 수 있습니다. 실제 개선 여부는 측정해야 합니다.
동기화 실습을 더 해 보고 싶다면 운영체제 교재의 해당 단원으로 확장할 수 있습니다. 여기서 필요한 정의는 이 절에 포함했습니다. 다음 두 변수의 메모리 순서에서 SC와 저장 버퍼 모형의 관측을 계산한 뒤 성능과 종합 추적으로 연결합니다.