--- id: P-REINFORCE-AUTO-A0A931 category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - ๋Œ€๊ทœ๋ชจ ํŒŒํ‹ฐํด ์‹œ์Šคํ…œ ์ตœ์ ํ™”" --- # [[แ„ƒแ…ขแ„€แ…ฒแ„†แ…ฉ แ„‘แ…กแ„แ…ตแ„แ…ณแ†ฏ แ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช|๋Œ€๊ทœ๋ชจ ํŒŒํ‹ฐํด ์‹œ์Šคํ…œ ์ตœ์ ํ™”]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > ๋Œ€๊ทœ๋ชจ ํŒŒํ‹ฐํด ์‹œ์Šคํ…œ์„ ์ตœ์ ํ™”ํ•˜๋ ค๋ฉด CPU ์—ฐ์‚ฐ ๋ณ‘๋ชฉ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์œผ๋กœ ์ธํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ์ŠคํŒŒ์ดํฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด **WebGPU ์—ฐ์‚ฐ ์…ฐ์ด๋”(Compute Shaders)**, **InstancedMesh**, **์˜ค๋ธŒ์ ํŠธ ํ’€๋ง(Object Pooling)**, ๊ทธ๋ฆฌ๊ณ  **๋ฐ์ดํ„ฐ ์ง€ํ–ฅ ์„ค๊ณ„(ECS/SoA)**๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **1. WebGPU ์—ฐ์‚ฐ ์…ฐ์ด๋”(Compute Shaders) ๋ฐ GPU ์˜๊ตฌ ๋ฒ„ํผ ๋„์ž…** ์ „ํ†ต์ ์ธ CPU ๊ธฐ๋ฐ˜์˜ ํŒŒํ‹ฐํด ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์ธ ํ•˜๋“œ์›จ์–ด ํ™˜๊ฒฝ์—์„œ ํŒŒํ‹ฐํด์ด ์•ฝ 50,000๊ฐœ์— ๋„๋‹ฌํ•˜๋ฉด ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์ผ์œผํ‚ต๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ ์ˆ˜์ค€์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋ ค๋ฉด ์—ฐ์‚ฐ ์ž‘์—…์„ WebGPU์˜ ์—ฐ์‚ฐ ์…ฐ์ด๋”๋กœ ์ด์ „ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ `instancedArray`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ ˆ์ž„ ๊ฐ„์— ์œ ์ง€๋˜๋Š” GPU ์˜๊ตฌ ๋ฒ„ํผ(Persistent GPU buffers)๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ํŒŒํ‹ฐํด ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค๋Š” ์ฃผ๋œ ์›์ธ์ธ CPU-GPU ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์›์ฒœ์ ์œผ๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **2. ๋ฒ„ํผ ์—…๋ฐ์ดํŠธ์˜ ์ผ๊ด„ ์ฒ˜๋ฆฌ (Batching)** CPU ์ธก์—์„œ ๋ถ€๋“์ดํ•˜๊ฒŒ ํŒŒํ‹ฐํด ๋ฒ„ํผ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ์ˆ˜๋งŽ์€ ์ž‘์€ ๋ฒ„ํผ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋†’์€ ์ฒ˜๋ฆฌ ๋น„์šฉ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒํ‹ฐํด ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๊ธฐ๊ฐ€ ํฐ ํ•˜๋‚˜์˜ `Float32Array`์— ๋ชจ์€ ๋’ค, ๋‹จ ํ•œ ๋ฒˆ์˜ ์ผ๊ด„ ์—…๋ฐ์ดํŠธ(Single batched update)๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ”„๋ ˆ์ž„๋‹น ๋ฒ„ํผ ์“ฐ๊ธฐ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. **3. InstancedMesh๋ฅผ ํ†ตํ•œ ๋“œ๋กœ์šฐ ์ฝœ(Draw Call) ์ตœ์ ํ™”** ์ˆ˜๋งŒ ๊ฐœ์˜ ํŒŒํ‹ฐํด์„ ๊ฐœ๋ณ„์ ์ธ Three.js ๋ฉ”์‹œ(Mesh)๋กœ ๋ Œ๋”๋งํ•˜๋ฉด ์—„์ฒญ๋‚œ ์ˆ˜์˜ ๋“œ๋กœ์šฐ ์ฝœ์ด ๋ฐœ์ƒํ•˜์—ฌ ํ”„๋ ˆ์ž„ ๋ ˆ์ดํŠธ๊ฐ€ ๊ธ‰๋ฝํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ์  ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋ ค๋ฉด **๋™์ผํ•œ ๊ธฐํ•˜๊ตฌ์กฐ์™€ ์žฌ์งˆ์„ ๊ณต์œ ํ•˜๋Š” `InstancedMesh`**๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ˆ˜์ฒœ, ์ˆ˜๋งŒ ๊ฐœ์˜ ํŒŒํ‹ฐํด ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹จ 1ํšŒ์˜ ๋“œ๋กœ์šฐ ์ฝœ๋งŒ์œผ๋กœ GPU์—์„œ ๋ณต์ œํ•˜์—ฌ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **4. ์˜ค๋ธŒ์ ํŠธ ํ’€๋ง(Object Pooling)์„ ํ†ตํ•œ GC ์ŠคํŒŒ์ดํฌ ๋ฐฉ์ง€** ํŒŒํ‹ฐํด์ฒ˜๋Ÿผ ์•„์ฃผ ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ๋ผ์ง€๋Š” ๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กœ ์ƒ์„ฑ(`new Object()`)ํ•˜๊ณ  ์‚ญ์ œํ•˜๋ฉด, ํž™ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ธ‰๊ฒฉํžˆ ํŒŒํŽธํ™”๋˜๋ฉฐ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(GC)์— ์—„์ฒญ๋‚œ ๋ถ€ํ•˜๋ฅผ ์ค๋‹ˆ๋‹ค. ์ด๋Š” ํ™”๋ฉด์ด ๋š๋š ๋Š๊ธฐ๋Š” 'Stop-the-world' ํ”„๋ฆฌ์ง• ํ˜„์ƒ์˜ ์ฃผ๋ฒ”์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด **๋ฏธ๋ฆฌ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ์˜ค๋ธŒ์ ํŠธ ํ’€(Fixed Pool)์„ ์ƒ์„ฑํ•ด ๋‘๊ณ , ํŒŒํ‹ฐํด์„ ์ƒˆ๋กœ ํ• ๋‹นํ•˜๋Š” ๋Œ€์‹  ํ’€ ์•ˆ์˜ ๋น„ํ™œ์„ฑ ํŒŒํ‹ฐํด ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ**ํ•ด์•ผ ๋Ÿฐํƒ€์ž„ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **5. ECS ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์ง€ํ–ฅ ์„ค๊ณ„ (Structure of Arrays, SoA)** ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์Šค๋ ˆ๋“œ์—์„œ ๋Œ€๊ทœ๋ชจ ํŒŒํ‹ฐํด ์ƒํƒœ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๊ฐ์ฒด ์ง€ํ–ฅ ๋ฐฉ์‹ ๋Œ€์‹  ์ด์ „ ๋Œ€ํ™”์—์„œ ๋‹ค๋ฃฌ `bitECS`์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ง€ํ–ฅ ์„ค๊ณ„(ECS) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ๊ทน ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํŒŒํ‹ฐํด ์†์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌด๊ฑฐ์šด JS ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ **์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก(`TypedArray`) ๊ธฐ๋ฐ˜์˜ SoA ๊ตฌ์กฐ๋กœ ์ €์žฅ**ํ•˜๋ฉด, CPU ์บ์‹œ ์ ์ค‘๋ฅ ์ด ๊ทน๋Œ€ํ™”๋˜์–ด ์ˆ˜์ฒœ ๊ฐœ์˜ ํŒŒํ‹ฐํด ์—”ํ‹ฐํ‹ฐ๋ฅผ 1ms ์ด๋‚ด์˜ ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ์ดˆ๊ณ ์†์œผ๋กœ ์ผ๊ด„ ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[WebGPU Compute Shaders|WebGPU Compute Shaders]], [[InstancedMesh (แ„ƒแ…ณแ„…แ…ฉแ„‹แ…ฎ แ„แ…ฉแ†ฏ แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช)|InstancedMesh (๋“œ๋กœ์šฐ ์ฝœ ์ตœ์ ํ™”)]], [[Object Pooling (แ„‹แ…ฉแ„‡แ…ณแ„Œแ…ฆแ†จแ„แ…ณ แ„‘แ…ฎแ†ฏแ„…แ…ตแ†ผ)|Object Pooling (์˜ค๋ธŒ์ ํŠธ ํ’€๋ง)]], [[Garbage Collection (GC) แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช|Garbage Collection (GC) ์ตœ์ ํ™”]], Data-Oriented Design (bitECS) - **Projects/Contexts:** ์ดˆ๋Œ€๊ทœ๋ชจ ํŒŒํ‹ฐํด ๋ฐ ์—”ํ‹ฐํ‹ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (React Three Fiber), ๊ณ ์„ฑ๋Šฅ ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ์›น ๊ฒŒ์ž„ ์•„ํ‚คํ…์ฒ˜ - **Contradictions/Notes:** ์—ฐ์‚ฐ ์…ฐ์ด๋”์™€ ์˜๊ตฌ GPU ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•ด ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ํŒŒํ‹ฐํด์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ์‹์ด ์••๋„์ ์œผ๋กœ ๋น ๋ฅด์ง€๋งŒ, ์ด๋Š” WebGPU ํ™˜๊ฒฝ์—์„œ๋งŒ ์˜จ์ „ํžˆ ๋™์ž‘ํ•˜๋ฉฐ WebGL ํ™˜๊ฒฝ์œผ๋กœ ํด๋ฐฑ(Fallback)๋  ๊ฒฝ์šฐ ์ด ์ˆ˜์ค€์˜ ๋™์‹œ์„ฑ์„ ๊ธฐ๋Œ€ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ์ œ์•ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค. --- _Last updated: 2026-04-14_ - Raw Source: 00_Raw/2026-04-20/๋Œ€๊ทœ๋ชจ ํŒŒํ‹ฐํด ์‹œ์Šคํ…œ ์ตœ์ ํ™”.md ---