[CSAPP 6장 완전 정복] 6.5 캐시 친화적인 코드 최적화 전략 알아보기

2025. 4. 30. 11:42·크래프톤 정글/컴퓨터구조(CSAPP)

캐시 친화적인 코드 최적화 전략 알아보기

이번 포스트에서는 우리가 실제 코드를 작성할 때 캐시 성능을 높이기 위해 어떤 전략을 적용할 수 있는지를 살펴보겠습니다. 지역성(Locality) 개념을 잘 활용하면, 동일한 알고리즘이라도 훨씬 더 빠르게 동작할 수 있게 되지요.

 

 

캐시 친화적 코드의 중요성

앞서 배운 것처럼 캐시 적중률(Cache Hit Rate)이 높을수록 CPU는 상대적으로 느린 메모리로부터 데이터를 가져오지 않아도 되어, 보다 빠르게 데이터를 처리할 수 있는데요. 따라서 캐시에 잘 맞는 코드를 작성하는 것이 성능 최적화의 핵심이 됩니다.

 

 

캐시 친화적인 코드 작성 전략

  • 배열을 순차적으로 접근하기 (Stride-1)
    • 공간 지역성(spatial locality)을 극대화
  • 중첩 루프에서 메모리 접근 순서에 주의하기
    • 행 우선(row-major) 접근: C에서는 행이 연속 저장됨
  • 불필요한 메모리 접근 줄이기
    • 같은 값을 반복해서 읽지 않도록 캐시나 레지스터에 저장
  • 데이터 구조 설계 시 메모리 배치 고려하기
    • 구조체 내 필드 순서, padding 최소화 등

 

예시: 행렬 전치와 지역성

행렬 전치(transpose)를 예로 들면, 다음 두 코드는 같은 작업을 하지만 성능 차이가 큽니다.

// 캐시 친화적이지 않음
for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
        B[j][i] = A[i][j];
// 캐시 친화적
for (j = 0; j < N; j++)
    for (i = 0; i < N; i++)
        B[j][i] = A[i][j];

 

CPU의 쓰기 동작은 캐시에 영향을 더 크게 받는데요. 때문에 쓰기 대상 배열인 B에 대해 캐시 친화적으로 접근해야 전체 성능을 보다 향상시킬 수 있습니다. 이때 C에서는 배열이 행 우선(row-major)으로 저장되므로, i가 안쪽 루프에 있을 때 배열 B에 대해 메모리를 연속적으로 접근하게 되어 캐시 효율이 좋아집니다.

 

 

기타 전략들

  • 루프 블로킹(Loop Blocking)
    • 큰 배열을 블록 단위로 쪼개서 처리해, 작은 데이터 집합을 캐시에 유지
  • 구조체와 배열 선택
    • 배열을 사용하면 데이터가 연속되게 저장되므로 더 캐시 친화적
  • 캐시 라인 크기 인지
    • 대부분 64바이트, 데이터를 읽을 때 전체 라인을 불러옴
    • 이를 쓸모 있는 데이터로 채우는 것이 중요

 

마치면서

이번 편에서는 캐시 성능을 고려해 현실적인 코드 최적화를 어떻게 수행할 수 있는지를 살펴봤는데요. 지역성을 최대한 활용하는 것, 메모리 접근 패턴을 이해하고 설계하는 것이 빠른 프로그램을 만드는 핵심이라고 할 수 있습니다.

 

다음 편에서는 지금까지 배운 내용을 종합해서, 캐시가 프로그램 성능에 미치는 실제 영향을 평가하고 6장을 마무리해보겠습니다. 감사합니다!

저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글

[CSAPP 11장 완전 정복] 11.1 소켓 프로그래밍을 위한 클라이언트-서버 모델 개념 잡기  (0) 2025.05.01
[CSAPP 6장 완전 정복] 6.6~6.7 캐시가 프로그램 성능에 미치는 영향 및 6장 전체 요약  (0) 2025.04.30
[CSAPP 6장 완전 정복] 6.4 캐시 메모리 핵심 정리  (0) 2025.04.29
[CSAPP 6장 완전 정복] 6.3 메모리 계층구조 제대로 이해하기  (0) 2025.04.29
[CSAPP 6장 완전 정복] 6.1~6.2 저장장치 기술과 지역성(Locality) 개념 이해하기  (0) 2025.04.28
'크래프톤 정글/컴퓨터구조(CSAPP)' 카테고리의 다른 글
  • [CSAPP 11장 완전 정복] 11.1 소켓 프로그래밍을 위한 클라이언트-서버 모델 개념 잡기
  • [CSAPP 6장 완전 정복] 6.6~6.7 캐시가 프로그램 성능에 미치는 영향 및 6장 전체 요약
  • [CSAPP 6장 완전 정복] 6.4 캐시 메모리 핵심 정리
  • [CSAPP 6장 완전 정복] 6.3 메모리 계층구조 제대로 이해하기
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기 N
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리)
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어)
        • Equipped in 정글(나만무) N
        • 마이 정글(WIL, 에세이)
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[CSAPP 6장 완전 정복] 6.5 캐시 친화적인 코드 최적화 전략 알아보기
상단으로

티스토리툴바