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

5.2 · 캐시와 지역성

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

같은 데이터를 계산해도 순회 순서에 따라 왜 속도가 달라질까요?

CPU는 요청한 값 주변을 한꺼번에 가져오므로 연속된 주소를 곧바로 사용하면 가져온 캐시 라인을 낭비하지 않습니다.

먼저 생활 비유

마트 진열대 순서대로 장보기

목록 순서가 매장 동선과 같으면 한 번 지나가며 담지만, 매번 반대편 진열대로 이동하면 오래 걸립니다.

컴퓨터 예제로 바꾸기

2차원 배열 행 우선 순회

for (row)
  for (col) sum += a[row][col];

C 계열의 행 우선 배열은 같은 행의 값이 메모리에 연속되어 캐시 라인을 잘 활용합니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

첫 원소 요청

주소 하나를 읽으려 합니다.

가까운 곳에서 먼 곳으로첫 원소 요청단계 1주변 64B 가져오기단계 2다음 원소 적중단계 3라인 끝단계 4다음 라인단계 5캐시 라인현재: 첫 원소 요청

이 그림에서 기억할 한 문장

시간 지역성과 공간 지역성을 살리는 데이터 배치와 순회 순서가 캐시 효율을 높입니다.

현재 상태

이동하는 것
캐시 라인
현재 위치
첫 원소 요청
다음 위치
주변 64B 가져오기

30초 확인 문제

연속 배열 순회가 보통 유리한 이유는?

처음 보는 용어 두 개

공간 지역성
최근 접근한 주소 주변을 곧 접근할 가능성
시간 지역성
최근 접근한 값을 곧 다시 사용할 가능성

이 절을 다 읽었다면

시간 지역성과 공간 지역성을 살리는 데이터 배치와 순회 순서가 캐시 효율을 높입니다.

← 이전 절

5.1 캐시는 왜 컴퓨터 곳곳에 있을까?

다음 절 →

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