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


๋ฐ˜์‘ํ˜•
728x90

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ์•ˆ๋˜๋ฉด?

- ํ”„๋ ˆ์ž„ ๋“œ๋ž
- ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜
- ๊ฒŒ์ž„ ํฌ๋ž˜์‹œ
๊ทธ๋ž˜์„œ ๊ฒŒ์ž„ ์—”์ง„๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ณ  ์žˆ์Œ

1. ๋™์  ํ• ๋‹น๊ณผ ์ •์  ํ• ๋‹น

์ •์  ํ• ๋‹น(Static Allocation)
- ์ปดํŒŒ์ผ ์‹œ๊ฐ„(๋นŒ๋“œ ์‹œ์ )์— ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋จ
- ์˜ˆ์‹œ : ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜, ์ •์  ๋ณ€์ˆ˜, ์Šคํƒ ๋ณ€์ˆ˜

๋™์  ํ• ๋‹น(Dynamic Allocation)
- ์‹คํ–‰ ์ค‘(Run-time) ํ•„์š”ํ•œ ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น
- ์˜ˆ์‹œ : new(C++), malloc()(C), Instantiate()(Unity)

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ์ค‘์š”ํ•œ ์ด์œ 
- ๋™์  ํ• ๋‹น์„ ๋„ˆ๋ฌด ๋งŽ์ด ํ•˜๋ฉด ํ”„๋ ˆ์ž„๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น/ํ•ด์ œ๊ฐ€ ๋ฐœ์ƒ -> ์„ฑ๋Šฅ ์ €ํ•˜
- ํ•ด๊ฒฐ์ฑ… : ๋ฉ”๋ชจ๋ฆฌ ํ’€(Memory Pool) ํ™œ์šฉ (์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด๋‘ )

2. ์Šคํƒ(Stack) vs. ํž™(Heap) ๋ฉ”๋ชจ๋ฆฌ

์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ(Stack)
- ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ž๋™ ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
- ํ• ๋‹น/ํ•ด์ œ ์†๋„๊ฐ€ ๋น ๋ฆ„
- ๋‹จ์  : ํฌ๊ธฐ๊ฐ€ ํ•œ์ •์ ์ด๊ณ , ๋„ˆ๋ฌด ๋งŽ์ด ์“ฐ๋ฉด ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Stack Overflow) ๋ฐœ์ƒ

ํž™ ๋ฉ”๋ชจ๋ฆฌ(Heap)
- new/malloc()๋กœ ๋™์  ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ
- ์ž์œ ๋กญ๊ฒŒ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆ ๊ฐ€๋Šฅ
- ๋‹จ์  : ํ• ๋‹น/ํ•ด์ œ ๋น„์šฉ์ด ํฌ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”(Fragmentation) ๋ฐœ์ƒ ๊ฐ€๋Šฅ

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ์ค‘์š”ํ•œ ์ด์œ 
- ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„์—์„œ๋Š” ํž™ ํ• ๋‹น์„ ์ตœ์†Œํ™”ํ•ด์•ผ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ์Œ
- ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• : ์˜ค๋ธŒ์ ํŠธ ํ’€๋ง(Object Pooling) ํ™œ์šฉ

3. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ (Memory Leak)

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ž€?
- ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š์•„์„œ ์ ์  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ํ˜„์ƒ
- ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด RAM์ด ๋ถ€์กฑํ•ด์„œ ๊ฒŒ์ž„์ด ํฌ๋ž˜์‹œ๋  ์ˆ˜ ์žˆ์Œ

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ํ”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์‚ฌ๋ก€
- new๋กœ ํ• ๋‹นํ•˜๊ณ  delete๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ (C++)
- Unity์—์„œ GameObject.Destroy()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ฐธ์กฐ๋ฅผ ๋‚จ๊ฒจ๋‘ 
- Unreal Engine์—์„œ UObject๊ฐ€ ์ ์ ˆํžˆ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์Œ

์˜ˆ์ œ(C++ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐœ์ƒ ์ฝ”๋“œ)

void Function(){
	Data* data = new Data();	//๋™์  ํ• ๋‹น
	//ํ•ด์ œํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐœ์ƒ
}


ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
- ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ(Smart Pointer) ์‚ฌ์šฉ (C++)
  - std::unique_ptr,std::shared_ptr
- Garbage Collector(GC) ์ตœ์ ํ™” (C#/Unity,UE4)
  - Resources.UnloadUnusedAssets() ์‚ฌ์šฉ
- ๋ฉ”๋ชจ๋ฆฌ ํ’€๋ง(Object Pooling) ํ™œ์šฉ

4. ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” (Memory Fragmentation)

๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ž€?
- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์ด ํŒŒํŽธ์ฒ˜๋Ÿผ ํฉ์–ด์ ธ ์žˆ์–ด์„œ ํฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ
- ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„์—์„œ๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํฐ ์˜ค๋ธŒ์ ํŠธ ๋กœ๋”ฉ์ด ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Œ

๊ฒŒ์ž„์—์„œ ๋‹จํŽธํ™”๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•
- ๋ฉ”๋ชจ๋ฆฌ ํ’€๋ง(Memory Pooling) : ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ํ• ๋‹น
- ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ(Array vs. Linked List)
  - ๋ฐฐ์—ด์€ ์—ฐ์†๋œ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์บ์‹œ ํšจ์œจ์ด ์ข‹์Œ
- ์ •์  ํ• ๋‹น ์šฐ์„  ์‚ฌ์šฉ

5. ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ• (๊ฒŒ์ž„ ๊ฐœ๋ฐœ ์ ์šฉ)

์˜ค๋ธŒ์ ํŠธ ํ’€๋ง(Object Pooling)
- ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด๋‘๊ณ , ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•
- ์˜ˆ์‹œ : ์ด์•Œ, ์  ์บ๋ฆญํ„ฐ, ์ดํŽ™ํŠธ

๋ฐ์ดํ„ฐ ๋ ˆ์ด์•„์›ƒ ์ตœ์ ํ™”(Cache-Friendly Design)
- ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ CPU ์บ์‹œ ๋ฏธ์Šค๋ฅผ ์ค„์ž„
- ์˜ˆ์‹œ : SoA(Structure of Arrays) vs. AoS(Array of Structures)

๋ฆฌ์†Œ์Šค ์ŠคํŠธ๋ฆฌ๋ฐ(Texture Streaming, Level Streaming)
- ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝ
- Unreal Engine, Unity๋Š” ๋น„๋™๊ธฐ ๋กœ๋”ฉ(Async Loading)์„ ์ œ๊ณต

์ •์  ํ• ๋‹น(Static Allocation) ํ™œ์šฉ
- ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ ํ•œ ๋ฒˆ ํ• ๋‹นํ•˜๊ณ  ๋๊นŒ์ง€ ์œ ์ง€
- ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์˜ค๋ธŒ์ ํŠธ์— ์ ํ•ฉ

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection) ๊ด€๋ฆฌ
- Unity: GC.Collect() ํ˜ธ์ถœ ์ตœ์†Œํ™”
- Unreal Engine: Garbage Collection์ด ์ž๋™์œผ๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ ํ•„์ˆ˜

๋ฐ˜์‘ํ˜•
728x90

1. ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ

- ํ”„๋กœ์„ธ์Šค : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ
- ์Šค๋ ˆ๋“œ : ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์—… ๋‹จ์œ„

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ์–ด๋–ป๊ฒŒ ์“ฐ์ผ๊นŒ?

๊ฒŒ์ž„์—”์ง„์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•จ
- ๋ Œ๋”๋ง ์Šค๋ ˆ๋“œ : ๊ทธ๋ž˜ํ”ฝ ์—ฐ์‚ฐ ๋‹ด๋‹น
- ๋ฌผ๋ฆฌ ์—”์ง„ ์Šค๋ ˆ๋“œ : ์ถฉ๋Œ ๊ฐ์ง€ ์บ๋ฆญํ„ฐ ์›€์ง์ž„ ๊ณ„์‚ฐ
- AI ์Šค๋ ˆ๋“œ : NPC ํ–‰๋™ ์—ฐ์‚ฐ
- ์˜ค๋””์˜ค ์Šค๋ ˆ๋“œ : ๋ฐฐ๊ฒฝ์Œ์•…๊ณผ ํšจ๊ณผ์Œ ์ฒ˜๋ฆฌ
๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์ž˜๋ชป ์“ฐ๋ฉด?
- ๋ฐ์ดํ„ฐ ์ถฉ๋Œ(๋ ˆ์ด์Šค ์ปจ๋””์…˜)์ด ๋ฐœ์ƒ
- ๋™๊ธฐํ™” ๋ฌธ์ œ๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ €ํ•˜
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ๋ฝ(lock) ์ตœ์†Œํ™”, ์“ฐ๋ ˆ๋“œ ์•ˆ์ „ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์šฉ

2. ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ๊ณผ ์˜ค๋ฒ„ํ—ค๋“œ

- ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ(Context Switching) : CPU๊ฐ€ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋ฒˆ๊ฐˆ์•„ ์‹คํ–‰ํ•  ๋•Œ, ์ž‘์—… ๊ฐ„ ์ „ํ™˜์„ ์œ„ํ•œ ์ €์žฅ/๋ณต๊ตฌ ๊ณผ์ •
- ํ•˜๋‚˜์˜ CPU๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…(ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์Šค๋ ˆ๋“œ)์„ ์‹คํ–‰ํ•  ๋•Œ, ํ˜„์žฌ ์ž‘์—…์˜ ์ƒํƒœ(Context)๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ์ž‘์—…์˜ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •
- ์šด์˜์ฒด์ œ(OS)๊ฐ€ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ๋ถ„๋ฐฐํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•จ

์ปจํ…์ŠคํŠธ(Context)๋ž€?

- CPU๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋œปํ•จ
- ํฌํ•จ๋˜๋Š” ์ •๋ณด
  - ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ(ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ช…๋ น์–ด ์œ„์น˜)
  - CPU ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’
  - ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ ์ •๋ณด
  - ์Šค์ผ€์ฅด๋ง ์ •๋ณด

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๊ณผ์ •

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์€ CPU๊ฐ€ ๋‹ค๋ฅธ ์ž‘์—…์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ณผ์ •
1. ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ์ €์žฅ (PCB : Process Control Block)
2. ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒ (์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๊ฒฐ์ •)
3. ์ƒˆ๋กœ์šด ์ž‘์—…์˜ ์ƒํƒœ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์‹คํ–‰
์ด ๊ณผ์ •์—์„œ CPU์˜ ๊ณ„์‚ฐ ์‹œ๊ฐ„์ด ๋‚ญ๋น„๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•จ

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ์–ด๋–ป๊ฒŒ ์˜ํ–ฅ์„ ์ค„๊นŒ?

๊ฒŒ์ž„์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ณผ๋„ํ•œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ๋ฐœ์ƒํ•˜๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋จ
- AI, ๋ฌผ๋ฆฌ ์—”์ง„, ๋ Œ๋”๋ง์ด ๋™์‹œ์— ์‹คํ–‰๋  ๋•Œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด CPU ์‹œ๊ฐ„์ด ๋‚ญ๋น„๋จ
์ตœ์ ํ™” ๋ฐฉ๋ฒ•
- ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์œ ์ง€ (๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ ์ฆ๊ฐ€)
  - ๋ฌผ๋ฆฌ ์ฝ”์–ด ์ˆ˜๋ณด๋‹ค ๋งŽ์€ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์‹ฌํ•ด์ง
- ์ž‘์—…์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์‹คํ–‰ (์บ์‹œ ๋ฏธ์Šค๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด)

3. ๋™๊ธฐ(Synchronous) vs. ๋น„๋™๊ธฐ(Asynchronous) ์—ฐ์‚ฐ

- ๋™๊ธฐ ๋ฐฉ์‹ : ํ•˜๋‚˜์˜ ์ž‘์—…์ด ๋๋‚˜์•ผ ๋‹ค์Œ ์ž‘์—…์„ ์‹คํ–‰
- ๋น„๋™๊ธฐ ๋ฐฉ์‹ : ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ ๊ฐ€๋Šฅ

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ์–ด๋–ป๊ฒŒ ์“ฐ์ผ๊นŒ?

๊ฒŒ์ž„์—์„œ ๋กœ๋”ฉ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ ๋กœ๋”ฉ(Async Loading)์„ ํ™œ์šฉํ•จ
- ํ…์Šค์ฒ˜, ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋น„๋™๊ธฐ ๋กœ๋“œํ•˜๋ฉด ํ”„๋ ˆ์ž„ ๋“œ๋ž ์—†์ด ์ง„ํ–‰ ๊ฐ€๋Šฅ
- ๋„คํŠธ์›Œํฌ ํ†ต์‹ (๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ๊ฒŒ์ž„)์—์„œ ์„œ๋ฒ„ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  UI๋ฅผ ๊ณ„์† ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅ
์˜ˆ์ œ(Unity, Unreal)
- Unity : Resources.LoadAsync()
- Unreal Engine : Async Loading System
๋น„๋™๊ธฐ ๋กœ๋”ฉ์„ ์ž˜๋ชป ์“ฐ๋ฉด?
- ๋น„๋™๊ธฐ ์ž‘์—… ๊ฐ„ ์šฐ์„ ์ˆœ์œ„ ๋ฌธ์ œ ๋ฐœ์ƒ
- ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ํฌ๋ž˜์‹œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ํ•„์š” ์—†๋Š” ๋ฆฌ์†Œ์Šค๋Š” ์ฆ‰์‹œ ์–ธ๋กœ๋“œ

4. ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์™€ ์บ์‹œ ๋ฏธ์Šค(Cache Miss)

- CPU ์บ์‹œ(Cache Memory) : ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ดˆ๊ณ ์† ๋ฉ”๋ชจ๋ฆฌ
- ์บ์‹œ ๋ฏธ์Šค(Cache Miss) : CPU๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์—†์„ ๋•Œ RAM์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์ƒํ™ฉ (์†๋„ ์ €ํ•˜)

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ• ๊นŒ?

CPU ์บ์‹œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋ ˆ์ž„ ๋“œ๋ž์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
- ์—ฐ์†๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(๋ฐฐ์—ด) ์‚ฌ์šฉ -> ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์†๋„ ํ–ฅ์ƒ
- ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ ์ตœ์ ํ™” -> ์บ์‹œ ๋ผ์ธ์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ ๋ฐฐ์น˜

๋น„ํšจ์œจ์ ์ธ ์ฝ”๋“œ(์บ์‹œ ๋ฏธ์Šค ๋ฐœ์ƒ ๊ฐ€๋Šฅ)

struct Data{
	int id;
	float posX,posY,posZ;
};
Data data[1000];

- ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๋ถˆ๊ทœ์น™ํ•œ ๋ฐฐ์น˜

์บ์‹œ ์นœํ™”์  ์ฝ”๋“œ

struct Data{
	int ids[1000];
	float posX[1000],posY[1000],posZ[1000];
};
Data data;

- ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†๋œ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๋ฉด CPU ์บ์‹œ ํšจ์œจ์ด ์ฆ๊ฐ€ํ•จ

๋ฐ˜์‘ํ˜•
728x90


์ปดํ“จํ„ฐ๋Š” ์—ฌ๋Ÿฌ ํ•˜๋“œ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ˜‘๋ ฅํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์ปดํ“จํ„ฐ์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

์ปดํ“จํ„ฐ๋Š” ํฌ๊ฒŒ CPU, ๋ฉ”๋ชจ๋ฆฌ, ์ €์žฅ์žฅ์น˜, I/O ์žฅ์น˜๋กœ ๋‚˜๋‰˜์–ด์ง‘๋‹ˆ๋‹ค.

1-1. CPU (Central Processing Unit, ์ค‘์•™์ฒ˜๋ฆฌ ์žฅ์น˜)

CPU๋Š” ์ปดํ“จํ„ฐ์˜ ๋‘๋‡Œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
- ์—ฐ์‚ฐ์žฅ์น˜(ALU, Arithmetic Logic Unit) : ๋ง์…ˆ, ๋บ„์…ˆ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰
- ์ œ์–ด์žฅ์น˜(CU, Control Unit) : ๋ช…๋ น์„ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰
- ๋ ˆ์ง€์Šคํ„ฐ(Register) : ์ดˆ๊ณ ์† ๋ฉ”๋ชจ๋ฆฌ (CPU ๋‚ด๋ถ€์—์„œ ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ)
- ํด๋Ÿญ ์†๋„(Clock Speed) : CPU๊ฐ€ ์ดˆ๋‹น ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผํŒŒ์ˆ˜ (GHz ๋‹จ์œ„)

CPU ์ž‘๋™ ์›๋ฆฌ๋Š” ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ (Fetch), ํ•ด์„ํ•˜๊ณ (Decode), ์‹คํ–‰(Execute) ํ•ฉ๋‹ˆ๋‹ค.

1-2. ๋ฉ”๋ชจ๋ฆฌ (Memory)

- RAM (ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ) : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์ž„์‹œ๋กœ ์ €์žฅ
- ROM (๋น„ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ) : ๋ถ€ํŒ… ์‹œ ํ•„์š”ํ•œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์ €์žฅ
- ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ (Cache) : CPU์™€ RAM ์‚ฌ์ด์—์„œ ์ž์ฃผ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ œ๊ณต
  - L1 -> L2 -> L3 ์ˆœ์œผ๋กœ ๋น ๋ฅด๊ณ  ์šฉ๋Ÿ‰์€ ์ž‘์Œ

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉด ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ(Swap) ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๊ณ  ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค.

๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋ž€?

- ์‹ค์ œ RAM(์ฃผ๊ธฐ์–ต์žฅ์น˜)๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์šด์˜์ฒด์ œ๊ฐ€ ํ•˜๋“œ๋””์Šคํฌ(๋˜๋Š” SSD)์˜ ์ผ๋ถ€๋ฅผ RAM์ฒ˜๋Ÿผ ํ™œ์šฉํ•˜๋Š” ๊ธฐ์ˆ 
- CPU๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ RAM์œผ๋กœ ๊ฐ€์ ธ์˜ด
- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์ ์„ ๊ฐ€์ง
- ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ(isolation)๋ฅผ ์ œ๊ณตํ•จ

๊ฐ€์žฅ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋™์ž‘ ๋ฐฉ์‹

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํŽ˜์ด์ง•(Paging) ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„๋จ

1. ํŽ˜์ด์ง•(Paging)
- ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์™€ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ผ์ • ํฌ๊ธฐ์˜ ๋ธ”๋ก(ํŽ˜์ด์ง€, Page)์œผ๋กœ ๋‚˜๋ˆ”
- RAM์— ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ์—์„œ RAM์œผ๋กœ ๋กœ๋“œ(ํŽ˜์ด์ง€ ๊ต์ฒด)ํ•จ

2. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” (Page Table)
- ๊ฐ€์ƒ ์ฃผ์†Œ(Virtual Addtress) <-> ๋ฌผ๋ฆฌ ์ฃผ์†Œ(Physical Address) ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ตฌ์กฐ
- CPU๋Š” ์ง์ ‘ ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , MMU(Memory Management Unit)๊ฐ€ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•จ

3. ํŽ˜์ด์ง€ ํดํŠธ (Page Fault)
- CPU๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ RAM์— ์—†์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ(Exception)
- ์šด์˜์ฒด์ œ๊ฐ€ ๋””์Šคํฌ์—์„œ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์™€ RAM์— ์˜ฌ๋ฆผ

ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜

RAM ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•  ๋•Œ ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ๋‚ด๋ณด๋‚ผ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•จ

๋Œ€ํ‘œ์ ์ธ ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜

1. FIFO (First-In, First-Out)
- ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐ
- ๋‹จ์  : ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ํŽ˜์ด์ง€๊ฐ€ ๊ผญ ๋œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์•„๋‹˜

2. LRU (Least Recently Used)
- ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐ
- ์‹œ๊ฐ„ ์ง€์—ญ์„ฑ(Temporal Locality)์— ์ ํ•ฉ
- ๊ตฌํ˜„์ด ์–ด๋ ต๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

3. LFU(Least Frequently Used)
- ์‚ฌ์šฉ ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐ
์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์œ ์ง€ํ•˜๋ ค๋Š” ์ „๋žต

4. Optimal (OPT, Belady's Algorithm)
- ์•ž์œผ๋กœ ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐ
- ํ˜„์‹ค์ ์œผ๋กœ ๋ฏธ๋ž˜๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์–ด์„œ ์ด์ƒ์ ์ธ ์ด๋ก  ๋ชจ๋ธ๋กœ ์‚ฌ์šฉ๋จ

์Šค์™‘ (Swap)๊ณผ ์Šค์™‘ ๊ณต๊ฐ„(Swap Space)

- ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•  ๋•Œ, ์šด์˜์ฒด์ œ๋Š” ๋””์Šคํฌ์˜ ์ผ๋ถ€๋ฅผ ์Šค์™‘ ๊ณต๊ฐ„(Swap Space)์œผ๋กœ ํ• ๋‹นํ•จ
- RAM์ด ๋ถ€์กฑํ•˜๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์™‘ ๊ณต๊ฐ„์œผ๋กœ ์˜ฎ๊น€ -> ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ!

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

์žฅ์ 
- RAM๋ณด๋‹ค ํฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
- ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ํฌํ˜ธ ๊ฐ€๋Šฅ (๊ฐ๊ฐ ๋…๋ฆฝ๋œ ์ฃผ์†Œ ๊ณต๊ฐ„ ์‚ฌ์šฉ)
- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ (๋ฉ€ํ‹ฐํƒœ์Šคํ‚น)
๋‹จ์ 
- ๋””์Šคํฌ ์ ‘๊ทผ ์†๋„๊ฐ€ RAM๋ณด๋‹ค ํ›จ์”ฌ ๋Š๋ฆผ -> ์†๋„ ์ €ํ•˜ ๋ฐœ์ƒ
- ๋„ˆ๋ฌด ๋งŽ์€ ์Šค์™‘ ์‚ฌ์šฉ ์‹œ ์Šค๋ ˆ์‹ฑ (Thrashing) ๋ฌธ์ œ ๋ฐœ์ƒ

์Šค๋ ˆ์‹ฑ (Thrashing)์ด๋ž€?

- CPU๊ฐ€ ๊ณ„์†ํ•ด์„œ ํŽ˜์ด์ง€ ํดํŠธ(Page Fault)๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š๋ผ ์‹ค์ œ ์ž‘์—…์„ ๊ฑฐ์˜ ๋ชปํ•˜๋Š” ์ƒํ™ฉ
- ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : RAM ์šฉ๋Ÿ‰์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜, ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์šด์˜์ฒด์ œ(OS)๊ฐ€ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•จ
๊ณ ์„ฑ๋Šฅ ๊ฒŒ์ž„์—์„œ๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ํšŒํ”ผํ•˜๋Š” ์ „๋žต์ด ์ค‘์š”ํ•จ

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๊ธฐ๋ฒ•

1. ๋ ˆ๋ฒจ ์ŠคํŠธ๋ฆฌ๋ฐ(Level Streaming)
- ์˜คํ”ˆ์›”๋“œ ๊ฒŒ์ž„์ฒ˜๋Ÿผ ๋งต์ด ํฐ ๊ฒฝ์šฐ, ์ „์ฒด ๋งต์„ ํ•œ ๋ฒˆ์— ๋กœ๋”ฉํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋ฒ•
- RAM๊ณผ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ๋กœ๋”ฉ ์—†์ด seamlessํ•˜๊ฒŒ ์ง„ํ–‰ ๊ฐ€๋Šฅ
- ์–ธ๋ฆฌ์–ผ์—์„œ๋Š” World Partition์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด์„ ์ค„์ž„
- GTA V, The Witcher 3 ๊ฐ™์€ ์˜คํ”ˆ์›”๋“œ ๊ฒŒ์ž„์—์„œ ํ™œ์šฉ๋จ

2. ํ…์Šค์ฒ˜ ์ŠคํŠธ๋ฆฌ๋ฐ(Texture Streaming)
- ๊ณ ํ•ด์ƒ๋„ ํ…์Šค์ฒ˜๋ฅผ ํ•œ ๋ฒˆ์— ๋กœ๋”ฉํ•˜์ง€ ์•Š๊ณ , ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ณด๋Š” ๋ถ€๋ถ„๋งŒ ๋กœ๋”ฉ
- VRAM(๊ทธ๋ž˜ํ”ฝ์นด๋“œ ๋ฉ”๋ชจ๋ฆฌ)๊ณผ RAM์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Œ
- ์–ธ๋ฆฌ์–ผ ์—”์ง„๊ณผ ์œ ๋‹ˆํ‹ฐ ๋ชจ๋‘ ํ…์Šค์ฒ˜ ์ŠคํŠธ๋ฆฌ๋ฐ ๊ฐ€๋Šฅ
- ์ฝœ์˜ค๋ธŒ๋“€ํ‹ฐ ๊ฐ™์€ FPS ๊ฒŒ์ž„์—์„œ ๋ฉ€๋ฆฌ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋Š” ๋‚ฎ์€ ํ•ด์ƒ๋„๋กœ ๋กœ๋”ฉ ํ›„ ๊ฐ€๊นŒ์ด ์˜ค๋ฉด ๊ณ ํ•ด์ƒ๋„๋กœ ๋ณ€๊ฒฝ

3. LOD (Level of Detail)
- ๋ฉ€๋ฆฌ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋Š” ์ €ํ•ด์ƒ๋„ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ€๊นŒ์ด ์˜ค๋ฉด ๊ณ ํ•ด์ƒ๋„ ๋ชจ๋ธ๋กœ ๋ณ€๊ฒฝ
- ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์™€ RAM์˜ ๋ถˆํ•„์š”ํ•œ ์‚ฌ์šฉ์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ ์ตœ์ ํ™”
- ์˜คํ”ˆ์›”๋“œ ๊ฒŒ์ž„์—์„œ ๋ฉ€๋ฆฌ ์žˆ๋Š” ๊ฑด๋ฌผ์ด๋‚˜ NPC๊ฐ€ ์ €ํ•ด์ƒ๋„๋กœ ํ‘œ์‹œ๋จ
- ์Šค์นด์ด๋ฆผ, ๋ ˆ๋ฐ๋ฆฌ2 ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ๊ฒŒ์ž„์—์„œ ์‚ฌ์šฉ๋จ

4. ๋ฐ์ดํ„ฐ ์••์ถ• ๋ฐ ํ’€๊ธฐ (Memory Compression)
- ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•œ ์ƒํƒœ๋กœ RAM์— ์ €์žฅํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ ํ’€์–ด์„œ ์‚ฌ์šฉ
- ์••์ถ•๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
- PS5๋Š” Kraken ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅธ ๋กœ๋”ฉ ์ง€์›
- ์œ ๋‹ˆํ‹ฐ์—์„œ๋Š” Addressables ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•˜์—ฌ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๊ฐ€๋Šฅ

5. ๋น„๋™๊ธฐ ๋กœ๋”ฉ (Asynchronous Loading)
- ๊ฒŒ์ž„์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์™€ RAM์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ
- ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๋Œ€์‹ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ RAM์— ์˜ฌ๋ ค์„œ ๋กœ๋”ฉ ์ง€์—ฐ์„ ์ค„์ž„
- ์œ ๋‹ˆํ‹ฐ์˜ Resources.LoadAsync(), ์–ธ๋ฆฌ์–ผ ์—”์ง„์˜ Async Loading System


1-3. ์ €์žฅ์žฅ์น˜ (Storage)

- HDD (ํ•˜๋“œ๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ) : ๋ฌผ๋ฆฌ์  ๋””์Šคํฌ, ๋Š๋ฆฌ์ง€๋งŒ ์šฉ๋Ÿ‰ ํผ
- SSD (์†”๋ฆฌ๋“œ ์Šคํ…Œ์ดํŠธ ๋“œ๋ผ์ด๋ธŒ) : ๋ฐ˜๋„์ฒด ๊ธฐ๋ฐ˜, ๋น ๋ฅด๊ณ  ์•ˆ์ •์ 
- NVMe SSD : PCle ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๊ธฐ์กด SSD๋ณด๋‹ค ๋” ๋น ๋ฆ„

SSD๊ฐ€ ๋น ๋ฅธ ์ด์œ ๋Š” ๊ธฐ๊ณ„์‹ ํšŒ์ „ ์—†์ด ์ „์ž์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ

1-4. I/O ์žฅ์น˜ (Input/Output Devices)

- ์ž…๋ ฅ์žฅ์น˜ : ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค, ํ„ฐ์น˜์Šคํฌ๋ฆฐ
- ์ถœ๋ ฅ์žฅ์น˜ : ๋ชจ๋‹ˆํ„ฐ, ํ”„๋ฆฐํ„ฐ, ์Šคํ”ผ์ปค
- ๋„คํŠธ์›Œํฌ ์žฅ์น˜ : LAN ์นด๋“œ, Wi-Fi ๋ชจ๋“ˆ

2. ์ปดํ“จํ„ฐ์˜ ์ž‘๋™ ์›๋ฆฌ

1. ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
2. ํ”„๋กœ๊ทธ๋žจ์ด RAM์— ๋กœ๋“œ
3. CPU๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰
4. ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅ ์žฅ์น˜ ๋˜๋Š” ํ™”๋ฉด์— ์ถœ๋ ฅ

CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ„ ๋ฐ์ดํ„ฐ ์ด๋™์€ ๋ฒ„์Šค(Bus)๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง

๋ฐ˜์‘ํ˜•
728x90

 

hELLO ํ‹ฐ์Šคํ† ๋ฆฌ ๋ธ”๋กœ๊ทธ ์ ์šฉ์„ ํ•˜๋‹ค๊ฐ€ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฌดํ•œ๋กœ๋”ฉ์ธ๋ฐ

์ด๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‚˜ ๋‹จ์ˆœํžˆ ์Šคํ‚จ ๋“ฑ๋ก์„ ํ•˜๋‹ค๊ฐ€ ๋‚˜์˜ค๋Š” ์‹ค์ˆ˜์ผ ์ˆ˜๋„ ์žˆ๋‹ค

 

 

์Šคํ‚จ ๋“ฑ๋ก์„ ํ•  ๋•Œ

์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์— images ํด๋”๋งŒ ์˜ฌ๋ฆฌ๋Š” ๊ฒฝ์šฐ์ด๋‹ค

์•ˆ์˜ ํŒŒ์ผ์€ ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— images ํด๋” ์•ˆ์— ๋“ค์–ด๊ฐ€์„œ ์ด ํŒŒ์ผ๋“ค์„ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค

 

 

์ด๊ฒƒ ์™ธ์— ๋‹ค๋ฅธ ๋ถ€๋ถ„๋“ค์€ ํ‹ฐ์Šคํ† ๋ฆฌ๊ฐ€ ์š”์ฆ˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๊ฐœํŽธํ•˜๋ฉด์„œ ์ž ์ˆ˜ํŒจ์น˜๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ๋“ค์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค

ํ•ด๋‹น ๋ถ€๋ถ„๋“ค์€ 

 

 

GitHub - pronist/hello: ๐Ÿ˜Ž ๋‹น์‹ ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์œ„ํ•œ ์ตœ๊ณ ์˜ ํ‹ฐ์Šคํ† ๋ฆฌ ์Šคํ‚จ

๐Ÿ˜Ž ๋‹น์‹ ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์œ„ํ•œ ์ตœ๊ณ ์˜ ํ‹ฐ์Šคํ† ๋ฆฌ ์Šคํ‚จ. Contribute to pronist/hello development by creating an account on GitHub.

github.com

 

์ œ์ž‘์ž๋‹˜ ๊นƒํ—ˆ๋ธŒ์— ๋“ค์–ด๊ฐ€์„œ ํ™•์ธํ•ด๋ณด๊ฑฐ๋‚˜ ์ด์Šˆ๋กœ ๋‹ฌ์•„์ฃผ์‹œ๋ฉด ํŒŒ์•…ํ•˜์‹œ๋Š”๋ฐ ๋„์›€์ด ๋˜์‹ค ๊ฒƒ ๊ฐ™๋‹ค

 

 

๋ฐ˜์‘ํ˜•
728x90

 

IK ์‚ฌ์šฉํ•ด์„œ ํ•œ๋ฒˆ ์กฐ์ž‘์ด ์–ด๋ ค์šด ๊ฒŒ์ž„์„ ๋งŒ๋“ค์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค

๋‚˜๋ฆ„ ์žฌ๋ฏธ์žˆ์ง€์•Š์„๊นŒ?!

PoC ๋Š๋‚Œ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค

PoC ๋นจ๋ฆฌ ๋งŒ๋“ค๊ณ  ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฐ˜์‘์„ ํ•œ๋ฒˆ ๋ณด๊ณ .. ๋˜ ๋‹ค๋ฅธ๊ฑฐ ๊ฐœ๋ฐœํ•˜๊ณ  ํ•ด์•ผ์ง€

 

https://assetstore.unity.com/packages/tools/animation/fast-ik-139972

 

Fast IK | ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„๊ตฌ | Unity Asset Store

Use the Fast IK tool from Daniel Erdmann on your next project. Find this & more animation tools on the Unity Asset Store.

assetstore.unity.com

 

fast IK ๋™์ž‘ ๋ชจ์Šต

 

 

์ผ๋‹จ IK๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์• ๋‹ˆ๋ฉ”์ด์…˜์—์„œ IK(Inverse Kinematics) ๊ธฐ์ˆ ์€ ์บ๋ฆญํ„ฐ๋‚˜ ๊ฐ์ฒด์˜ ๋ง๋‹จ(์†์ด๋‚˜ ๋ฐœ) ์œ„์น˜๋ฅผ ์„ค์ •ํ•˜๋ฉด, ํ•ด๋‹น ์œ„์น˜์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์บ๋ฆญํ„ฐ์˜ ๊ด€์ ˆ(์–ด๊นจ, ํŒ”๊ฟˆ์น˜, ์†๋ชฉ ๋˜๋Š” ํ—ˆ๋ฒ…์ง€, ๋ฌด๋ฆŽ, ๋ฐœ๋ชฉ)์ด ์ž๋™์œผ๋กœ ์กฐ์ •๋˜๋Š” ๊ธฐ์ˆ 

 

IK ํŠน์ง•

1. ๋ชฉํ‘œ ๊ธฐ๋ฐ˜ ์›€์ง์ž„

2. ์‹ค์‹œ๊ฐ„ ๊ณ„์‚ฐ

3. ํšจ์œจ์ ์ด๊ณ  ์ž์—ฐ์Šค๋Ÿฌ์šด ์›€์ง์ž„

 

IK VS FK(์ •์šด๋™ํ•™ : Forward Kinematics)

 

FK (Forward Kinematics) : ๊ด€์ ˆ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ง์ ‘ ์กฐ์ž‘ํ•ด์„œ ๋ง๋‹จ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹

์–ด๊นจ โ†’ ํŒ”๊ฟˆ์น˜ โ†’ ์†๋ชฉ ์ˆœ์œผ๋กœ ๊ฐ๋„๋ฅผ ์„ค์ •ํ•ด์•ผ ์†์˜ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋จ

 

์žฅ์  : ์ œ์–ด๊ฐ€ ์„ธ๋ฐ€ํ•˜๊ณ  ์• ๋‹ˆ๋ฉ”์ดํ„ฐ๊ฐ€ ์›ํ•˜๋Š” ์ž์„ธ๋ฅผ ์ •ํ™•ํžˆ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

๋‹จ์  : ์ž์—ฐ์Šค๋Ÿฌ์šด ์›€์ง์ž„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์ˆ˜์ž‘์—…์ด ํ•„์š”ํ•จ

 

IK(Inverse Kinematics) : ๋ง๋‹จ์˜ ๋ชฉํ‘œ ์œ„์น˜๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋‚˜๋จธ์ง€ ๊ด€์ ˆ๋“ค์ด ์ž๋™์œผ๋กœ ์กฐ์ •๋จ

 

์žฅ์  : ์บ๋ฆญํ„ฐ๊ฐ€ ๋ชฉํ‘œ๋ฅผ ์žก๊ฑฐ๋‚˜ ๋ฐ”๋‹ฅ์„ ๋””๋””๋Š” ๋™์ž‘ ๋“ฑ์—์„œ ๋งค์šฐ ๋น ๋ฅด๊ณ  ์ง๊ด€์ 

๋‹จ์  : ์„ค์ •์— ๋”ฐ๋ผ ๋น„์ž์—ฐ์Šค๋Ÿฌ์šด ์ž์„ธ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์–ด ์ถ”๊ฐ€ ์กฐ์ •์ด ํ•„์š”


 

์ฒ˜์Œ ์ด ๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒƒ์€ ๋งฅ์ฃผ๋ฅผ ๊ทธ์ € ๋”ฐ๋ฅด๋Š” ๊ฒŒ์ž„์ธ๋ฐ ์ž˜ ๊ธฐ์šธ์—ฌ์•ผํ•˜๋Š” ๊ฒŒ์ž„์ด์˜€๋‹ค

IK๋ฅผ ํ™œ์šฉํ•ด์„œ ์šฐ์Šค๊ฝ์Šค๋Ÿฌ์šด ๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ IK๋ฅผ ํ™œ์šฉํ•˜๋ ค๊ณ  ํ•˜๋‹ค๋ณด๋‹ˆ๊นŒ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ฒŒ์ž„์ด ์•ˆ๋‚˜์˜ฌ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๋Š” ๊ฒฐ๋ก ์ด ๋‚˜๋Š”๋ฐ..

Chanined Together๋‚˜ ์ด๋Ÿฐ ๊ฒŒ์ž„๋“ค์€ IK๋ฅผ ํ™œ์šฉํ•œ ๊ฒŒ์ž„์ด ์•„๋‹Œ๊ฐ€? ์‹ถ๊ธฐ๋„ ํ•˜๊ณ  ์ข€ ๋” ์ƒ๊ฐํ•ด๋ด์•ผ๊ฒ ๋‹ค

 

๋ฐ˜์‘ํ˜•

+ Recent posts