📘 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 |
