Cache의 지역성과 iOS

장수빈·2025년 6월 7일

CS

목록 보기
4/14

개념

컴퓨터 시스템 성능 최적화의 핵심 개념 중 하나로, 캐시 메모리가 효과적으로 동작할 수 있는 이론적 배경
iOS와 같이 제한된 리소스 환경에서 지역성을 고려한 코드 작성이 성능에 큰 영향을 미침.

  • Locality란 CPU가 메모리 접근 시 특정 메모리 위치를 중심으로 접근이 집중되는 경향을 의미.
  • 이 성질을 기반으로 캐시 메모리가 설계되며 크게 두가지가 있음
지역성 종류설명
시간적 지역성 (Temporal Locality)최근에 접근한 데이터는 다시 접근할 가능성이 높다
공간적 지역성 (Spatial Locality)가까운 주소에 있는 데이터는 곧 접근할 가능성이 높다

코드 예시

시간적 지역성 예시

var sum = 0
let a = [1, 2, 3, 4, 5]

// 같은 변수 `a[2]`를 반복적으로 참조
for _ in 0..<100000 {
    sum += a[2]
}
  • a[2]는 한번 캐시에 올라가면 계속 재사용됨
  • 시간적으로 가까운 시점에서 같은 데이터에 접근 -> 캐시 히트율 높음 -> 성능 좋음

공간적 지역성 예시

let array = Array(repeating: 1, count: 10000)
var sum = 0

// 배열을 순차적으로 접근
for i in 0..<10000 {
    sum += array[i]
}
  • 배열의 요소들이 메모리에 연속적으로 존재
  • 한번 로드한 캐시 라인에 인접 요소들이 함께 올라감
  • 연속적인 인덱스 접근 -> 공간적 지역성 높음 -> 성능 좋음

지역성을 고려하지 않은 코드 예시

let matrix = Array(repeating: Array(repeating: 1, count: 1000), count: 1000)
var sum = 0

// 열 우선 순회 (메모리 레이아웃상 비연속 접근)
for j in 0..<1000 {
    for i in 0..<1000 {
        sum += matrix[i][j]
    }
}
  • Swift의 2차원 배열은 내부적으로 행 단위로 저장됨 (row-major order)
  • 위 코드는 메모리상 비연속적인 위치에 접근 -> 공간적 지역성 무시
  • 캐시 미스 증가 -> 성능저하

지역성을 고려하지 않으면 발생할 수 있는 성능 문제

문제설명
캐시 미스 증가CPU가 데이터를 캐시에서 찾지 못해 RAM 접근이 많아짐 (속도 저하)
CPU stall메모리 접근 지연으로 인해 CPU가 작업 대기
배터리 소비 증가 (모바일)자주 메모리 접근 시 에너지 소모 증가
스크롤/렌더링 지연특히 이미지 처리나 테이블 뷰, 콜렉션 뷰에서 지역성 고려하지 않으면 프레임 드랍 발생

정리

개념설명예시
시간적 지역성자주 접근하는 데이터는 또 접근됨변수 재사용, 최근 조회 캐시
공간적 지역성인접 데이터는 함께 접근됨배열 순차 접근, 스트리밍 처리
지역성 미고려 코드불연속 메모리 접근행렬의 열 우선 순회 등
profile
iOS 공부 이모저모 낙서장

0개의 댓글