메모리 계층 구조와 캐시
메모리 계층 구조 (Memory Hierarchy) 피라미드
이상적인 메모리는 '초고속이면서 대용량이고 가격도 저렴하며 전원이 꺼져도 데이터가 유지되는' 메모리이지만, 물리적으로 이 조건들을 동시에 만족하는 소자는 없습니다. 따라서 컴퓨터는 여러 메모리를 계층적으로 조합하여 마치 빠르면서도 거대한 단일 메모리가 있는 것처럼 동작하게 만듭니다.
캐시 동작 원리와 참조 지역성(Locality of Reference)
캐시 용량은 RAM의 수백 분의 1에 불과하지만 실제 캐시 적중률(Cache Hit Ratio)은 90~99%에 달합니다. 그 비결은 프로그램이 메모리를 무작위로 접근하지 않고 특정 영역만 집중적으로 참조하는 지역성(Locality) 성질을 갖기 때문입니다.
for 루프의 제어 변수 i나 누적 합산 변수 sum, 자주 호출되는 함수 코드.평균 메모리 접근 시간(AMAT, Average Memory Access Time) 공식은 다음과 같습니다:
AMAT = (Hit Time) + (Miss Rate × Miss Penalty)
여기서 Hit Time = 1ns, 적중률이 95%(0.95)이므로 실패율(Miss Rate) = 1 - 0.95 = 0.05(5%), Miss Penalty = 100ns입니다.
따라서 AMAT = 1ns + (0.05 × 100ns) = 1ns + 5ns = 6ns입니다.
만약 캐시가 없었다면 매번 100ns가 걸렸겠지만, 95%의 캐시 적중률 덕분에 전체 메모리 접근 속도가 약 16.7배 빨라진 것을 확인할 수 있습니다.
캐시 친화적 코드(Cache-Friendly Code)와 쓰기 정책
arr[Row][Col]을 메모리에 행 우선(Row-major) 순서로 연속 배치합니다.i), 안쪽 루프를 열(j)로 두고 arr[i][j] 순서로 읽으면 공간 지역성이 극대화되어 캐시 적중률이 98% 이상 나오지만, 반대로 arr[j][i] 순서로 열 방향 점프를 하면 매번 캐시 미스(Cache Miss / Thrashing)가 발생하여 똑같은 연산임에도 실행 속도가 5배~10배 이상 느려집니다!핵심 요약
- ✓메모리 계층 구조는 레지스터 ➔ 캐시(SRAM) ➔ 주기억장치(DRAM) ➔ 보조기억장치(SSD/HDD) 순으로 구성된다.
- ✓시간 지역성은 최근 접근한 데이터를 재참조하는 성질이고, 공간 지역성은 인접한 주소의 데이터를 연속 참조하는 성질이다.
- ✓캐시는 공간 지역성을 활용하기 위해 64바이트 단위의 캐시 라인(Cache Line) 블록 통째로 데이터를 가져온다.
- ✓2차원 배열 순회 시 메모리 배치 순서(행 우선)에 맞춰 접근해야 캐시 미스를 줄이고 실행 성능을 극대화할 수 있다.