728x90


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) ์ตœ์ ํ™”๋„ ์ ์šฉ
์บ์‹œ ํžˆํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฃจํ”„๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ธ๋ผ์ธํ™” & ํŒŒ์ดํ”„๋ผ์ธํ™”


๋ฐ˜์‘ํ˜•

+ Recent posts