serversim
학습시뮬레이터템플릿가격
…
…
메뉴 열기
학습↗시뮬레이터↗템플릿↗가격↗
내 Documents문서
전체 목차/5장/5.333 / 40

5.3 · 캐시와 지역성

거짓 공유는 왜 다중 스레드를 느리게 할까?

서로 다른 변수를 수정하는 두 스레드가 왜 싸울 수 있을까요?

변수는 달라도 같은 캐시 라인에 들어 있으면 코어 사이 일관성은 그 라인 전체를 단위로 움직입니다.

먼저 생활 비유

한 장의 공용 화이트보드

A는 왼쪽 칸, B는 오른쪽 칸만 쓰지만 보드 전체를 한 사람씩 가져가야 한다면 계속 주고받게 됩니다.

컴퓨터 예제로 바꾸기

인접한 두 카운터

coreA: counters[0]++
coreB: counters[1]++

두 원소가 같은 캐시 라인에 있으면 각 쓰기가 다른 코어의 복사본을 무효화합니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

코어 A 복사본

counter[0]과 [1]이 든 라인을 가져옵니다.

가까운 곳에서 먼 곳으로코어 A 복사본단계 1A가 쓰기단계 2B 복사본 무효화단계 3B가 다시 요청단계 4핑퐁단계 5캐시 라인 소유권현재: 코어 A 복사본

이 그림에서 기억할 한 문장

거짓 공유는 논리적으로 공유하지 않는 값들이 물리적으로 같은 캐시 라인을 써서 생기는 성능 문제입니다.

현재 상태

이동하는 것
캐시 라인 소유권
현재 위치
코어 A 복사본
다음 위치
A가 쓰기

30초 확인 문제

거짓 공유를 줄이는 한 방법은?

처음 보는 용어 두 개

캐시 라인
캐시와 메모리 사이에서 복사·일관성을 관리하는 고정 크기 단위
거짓 공유
서로 다른 변수가 같은 캐시 라인에 있어 발생하는 불필요한 충돌

이 절을 다 읽었다면

거짓 공유는 논리적으로 공유하지 않는 값들이 물리적으로 같은 캐시 라인을 써서 생기는 성능 문제입니다.

← 이전 절

5.2 캐시 친화적인 코드는 어떻게 생겼을까?

다음 절 →

5.4 메모리 장벽은 어떤 순서를 지킬까?