CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ์๋ ์ฐจ์ด๋ฅผ ์ค์ด๊ธฐ ์ํด ๋์
๋ ๊ฒ์ด ์บ์(Cache)
๊ฒ์์ฒ๋ผ ์ฐ์ฐ์ด ๋ง์ ํ๊ฒฝ์์๋ ์บ์์ ํ์ฉ์ด ์ฑ๋ฅ์ ์์ฒญ๋ ์ํฅ์ ์ค
1. ์ ์บ์๊ฐ ํ์ํ ๊น?
- CPU๋ ์์ฒญ ๋น ๋ฆ
- RAM(๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ)์ ์๋์ ์ผ๋ก ๋๋ฆผ
- ๋งค๋ฒ RAM์ ์ ๊ทผํ๋ฉด ์ฑ๋ฅ ์ ํ ๋ฐ์
-> ๊ทธ๋์ CPU ๊ทผ์ฒ์ ๋ ๋น ๋ฅด๊ณ ์์ ๊ธฐ์ต์ฅ์น์ธ ์บ์๋ฅผ ๋ฌ์ ์ฑ๋ฅ์ ๋์
2. ์บ์ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต ๊ตฌ์กฐ
๋ณดํต ์บ์๋ L1 -> L2 -> L3 ์์๋ก ๊ตฌ์ฑ๋จ
๊ณ์ธต / ์์น / ํฌ๊ธฐ / ์๋ / ์ญํ
L1 / CPU ๋ด๋ถ / ์ ์(์์ญ KB) / ๊ฐ์ฅ ๋น ๋ฆ / ํ์ฌ ์คํ ์ค์ธ ๋ช
๋ น๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
L2 / CPU ๋ด๋ถ or ์ธ๋ถ / ์๋ฐฑ KB~MB / L1๋ณด๋ค ๋๋ฆผ / L1์์ ๋ชป ์ฐพ์ ๋ ์ฌ์ฉ
L3 / CPU ์ธ๋ถ (๊ณต์ ) / ์ MB / L2๋ณด๋ค ๋๋ฆผ / ๋ชจ๋ ์ฝ์ด๊ฐ ๊ณต์
* RAM์ ์บ์ ๋ฏธ์ค๊ฐ ๋ฌ์ ๋ ์ ๊ทผํ๋ ์ฃผ ๊ธฐ์ต์ฅ์น
3. ์บ์ ํํธ vs ์บ์ ๋ฏธ์ค
- ์บ์ ํํธ (Cache Hit)
-> ์ํ๋ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์์ -> ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
- ์บ์ ๋ฏธ์ค (Cache Miss)
-> ์บ์์ ๋ฐ์ดํฐ ์์ -> RAM ์ ๊ทผ -> ์๋ ๋๋ฆผ
๊ฒ์์์ ์บ์ ๋ฏธ์ค๊ฐ ์ฆ์ผ๋ฉด
- FPS ํ๋ฝ
- ์
๋ ฅ ์ง์ฐ
- ๋ฌผ๋ฆฌ ์ฐ์ฐ ๋๋ ค์ง
4. ์บ์ ์นํ์ ์ธ ์ฝ๋ ์์ฑํ๊ธฐ (Cache-Friendly)
CPU๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ข์ํจ
๊ตฌ์กฐ์ฒด ์ค๊ณ ํ
- SoA (Structure of Arrays) -> ์บ์ ํจ์จ ๋์
- AoS (Array of Structures) -> ๋นํจ์จ์ ์ผ ์ ์์
5. ๊ฒ์ ๊ฐ๋ฐ์์ ์บ์ ํ์ฉ ์์
- Physics Simulation : ์ถฉ๋ ํ์ ๊ณ์ฐ ์ ์บ์ ํจ์จ์ด ์ค์
- Animation : ๋ณธ ์ ๋ณด์ ํธ๋์คํผ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์์ผ ํจ
- AI Pathfinding : ๋
ธ๋ ๊ทธ๋ํ ํ์ ์ ์บ์ ์ต์ ํ
- Rendering : ๋ฒํ
์ค, ํ
์ค์ฒ ๋ฐ์ดํฐ ์บ์ฑ
Unity ECS(Entity Component System)
1. ์ผ๋ฐ์ ์ธ OOP ๋ฐฉ์์ ๋ฌธ์ ์ (MonoBehaviour ์ค์ฌ)
Unity์ ์ ํต์ ์ธ ๋ฐฉ์์ OOP(Object-Oriented Programming)๋ฅผ ๋ฐ๋ฅด๊ณ ์์
์ด ๊ฐ์ฒด๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ํฉ์ด์ ธ ์์ (๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ถ์ฐ์์ )
CPU์บ์ ๋ฏธ์ค ์ฆ๊ฐ
2. CPU ์บ์๋ ์ด๋ป๊ฒ ๋์ํ๋?
CPU๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ(RAM)์์ ์ง์ ์ฝ๊ธฐ๋ณด๋ค, L1~L3 ์บ์์ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์์ ์ฌ์ฉํจ
๋ฐ์ดํฐ๋ฅผ ์ฐ์๋ ์ฃผ์(๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก)๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์, ์บ์์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ๋ ๋ณดํต 64๋ฐ์ดํธ ๋จ์๋ก ๋ฌถ์ฌ์ ์ฒ๋ฆฌ๊ฐ ๋จ (์บ์ ๋ผ์ธ ๋จ์)
๋ฐ๋ผ์ ์ฐ์๋ ๋ฐ์ดํฐ ๊ตฌ์ฃ์๋ก ์บ์ ์ ์ค๋ฅ (Cache Hit Rate)์ด ๋์
3. Unity ECS์ ๊ตฌ์กฐ: SoA (Structure of Arrays)
Unity ECS๋ ๋ฐ์ดํฐ๋ฅผ SoA (Structure of Arrays) ๋ฐฉ์์ผ๋ก ์ ์ฅํจ
์ฆ, ์ปดํฌ๋ํธ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ํฐ ๋ฐฐ์ด์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ์ ์ฅํจ
Entity๋ง๋ค ์ปดํฌ๋ํธ๋ค์ ๊ฐ์ง๋ฉฐ, ์ด ๋ฐ์ดํฐ๋ค์ Chunk๋ผ๋ ๋จ์๋ก ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋จ
1Chunk = ์ฌ๋ฌ Entity์ ๋์ผํ ์ปดํฌ๋ํธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ๋ ๋ฐฐ์ด ํํ๋ก ๋ณด๊ด
Chunk๋ ECS ๋ด๋ถ์์ ์ปดํฌ๋ํธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณ ์ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก
ECS๋ ๋ชจ๋ Entity์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๊ด๋ฆฌํ์ง ์๊ณ , ๋น์ทํ ๊ตฌ์ฑ์ Entity๋ค์ ๋ฌถ์ด์ Chunk์ ์ ์ฅํจ
Chunk ํ๋๋ ๋ณดํต 16KB ํฌ๊ธฐ๋ก ๊ณ ์ ๋์ด ์์ (Unity ๊ธฐ๋ณธ ์ค์ ๊ธฐ์ค)
Chunk๋ ๊ฐ์ Archetype(Entity ๊ตฌ์กฐ)๋ฅผ ๊ฐ์ง Entity๋ค์ ๋ด๋ ์ปจํ
์ด๋
ํ๋์ Chunk์ ๋ด๊ธด Entity๋ค์ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ์์๋ก ๊ฐ๊ณ ์์
์ด๋ ๊ฒ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์๊ธฐ๊ณ , CPU ์บ์ ํจ์จ์ด ๊ทน๋ํ ๋จ
โCPU ์บ์๋ฅผ ๊ณ ๋ คํ ๋ฌผ๋ฆฌ์ ์ ๋ ฌ ๋ฐฉ์โ
์ด ๊ตฌ์กฐ๊ฐ ์ ๋น ๋ฅธ๊ฐ?
์ฐ์๋ ๋ฐฐ์ด ์ํ -> ์บ์ ํํธ -> ๋ฒกํฐํ ๊ธฐ๋ฅ (SIMD) -> ์ด๊ณ ์ ์ฒ๋ฆฌ
4. Burst Compiler์ ํจ๊ป ์๋ํ ๋
ECS๋ ๋จ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ง ๊ฐ์ ํ ๊ฒ ์๋๋ผ, Burst Compiler์ ์กฐํฉ๋๋ฉด ์ฑ๋ฅ์ด ๊ทน์ ์ผ๋ก ํฅ์๋จ
Burst๋ Low-level CPU ์ต์ ํ๋ฅผ ์๋์ผ๋ก ํด์ค
์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๋์์ผ๋ก SIMD(Vectorization) ์ต์ ํ๋ ์ ์ฉ
์บ์ ํํธ๋ฅผ ํ์ฉํ์ฌ ๋ฃจํ๋ฅผ ํจ์จ์ ์ผ๋ก ์ธ๋ผ์ธํ & ํ์ดํ๋ผ์ธํ
'๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL ํ๋ก์ ํธ] 3์ผ์ฐจ - ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฒ์ ์ต์ ํ (0) | 2025.04.03 |
---|---|
[TIL ํ๋ก์ ํธ] 2์ผ์ฐจ - ์ด์์ฒด์ (OS) (0) | 2025.04.02 |
[TIL ํ๋ก์ ํธ] 1์ผ์ฐจ - ์ปดํจํฐ ๊ตฌ์กฐ (Computer Architecture) (1) | 2025.04.01 |