📘 TIL – CPU 성능 관점에서 보는 DOD와 Aliasing

🔹 오늘 공부한 주제

  • CPU 파이프라인 관점의 성능 분석
  • latency와 capacity의 차이
  • 데이터 의존성이 성능에 미치는 영향
  • DOD(Data-Oriented Design)의 정의와 필요성
  • Aliasing의 정의와 왜 문제가 되는지

🔹 Latency와 Throughput 복습

CPU 성능을 이야기할 때 단순히 “연산이 빠르다 / 느리다”로 판단하면 안 된다는 걸 다시 느꼈다.

  • Latency
    하나의 연산이 끝나는 데 걸리는 시간
  • Capacity
    한 사이클에 동시에 처리할 수 있는 연산의 개수

연산 자체의 latency가 크더라도 데이터 의존성이 없고 병렬로 처리 가능하다면 전체 성능은 좋아질 수 있다.


🔹 DOD(Data-Oriented Design)란?

오늘 새롭게 정리한 개념이 바로 DOD이다.

  • DOD는
    👉 “객체 중심이 아니라, 데이터와 그 흐름을 중심으로 설계하는 방식” 이다.
  • 핵심 목적은
    • CPU 캐시 친화적인 메모리 구조
    • 연속적인 메모리 접근
    • 파이프라인과 병렬 처리 효율 극대화

기존 OOP 방식이 "객체 단위로 책임을 나누는 설계"라면,

DOD는 "CPU가 데이터를 어떻게 읽고 처리하는지"를 기준으로 설계한다.


🔹 왜 DOD가 성능에 유리한가?

CPU는

  • 메모리를 연속적으로 읽을 때 가장 빠르고
  • 산발적인 메모리 접근이 발생하면 성능이 급격히 떨어진다.

DOD는

  • 같은 타입의 데이터를 연속된 메모리에 배치
  • 불필요한 데이터 접근 최소화
  • 캐시 미스 감소

👉 결과적으로 latency를 숨기고 throughput을 최대한 활용할 수 있다.


🔹 Aliasing이란?

Aliasing은 오늘 확실히 정리한 개념 중 하나였다.

  • Aliasing이란
    👉 서로 다른 포인터가 같은 메모리 주소를 가리키는데, load와 store의 순서가 꼬여서 같은 주소를 가리키지만 가리키는 값이 다른 상황이다.

🔹 DOD와 Aliasing의 연결

오늘 공부하면서 가장 인상 깊었던 점은 이 두 개념이 자연스럽게 이어진다는 것이었다.

  • DOD
    • 데이터 구조를 단순화
    • 접근 패턴을 명확히 함
  • 결과적으로
    • aliasing 가능성을 줄이고
    • 컴파일러와 CPU가 더 공격적인 최적화를 할 수 있음

👉 "설계가 곧 성능이다"라는 말이 체감되는 순간이었다.


🔹 느낀 점

CS 공부를 하면서 점점 느끼는 건, 코드의 가독성이나 논리뿐 아니라

  • CPU가 어떻게 데이터를 읽는지
  • 파이프라인이 막히는 지점은 어디인지
  • 컴파일러가 무엇을 확신하지 못하는지

를 이해해야 진짜 성능 개선이 가능하다는 점이다.

앞으로 코드를 작성할 때

"이 구조가 DOD 관점에서 좋은가?"
"불필요한 aliasing을 만들고 있지는 않은가?"
를 한 번 더 고민해봐야겠다.

'TIL' 카테고리의 다른 글

26.01.28_TIL  (0) 2026.01.28
26.01.27_TIL  (0) 2026.01.27
26.01.14_TIL  (0) 2026.01.14
26.01.13_TIL  (0) 2026.01.13
Team7_KPT회고록  (0) 2026.01.07