34 lines
4.1 KiB
Markdown
34 lines
4.1 KiB
Markdown
---
|
|
id: [[P-Reinforce|P-Reinforce]]-AUTO-944A15
|
|
category: Dev
|
|
confidence_score: 0.90
|
|
tags: [auto-reinforced]
|
|
last_reinforced: 2026-04-20
|
|
github_commit: "[P-Reinforce] Continuous Worker - CPU Bottleneck"
|
|
---
|
|
|
|
# [[CPU Bottleneck|CPU Bottleneck]]
|
|
|
|
## 📌 한 줄 통찰 (The Karpathy Summary)
|
|
> 3D 그래픽스 및 실시간 렌더링 환경에서 CPU 병목(CPU Bottleneck)이란, CPU가 렌더링 명령어(드로우 콜)를 준비하고 GPU로 전송하거나 필요한 데이터 연산을 처리하는 속도가 느려져 GPU가 제 성능을 발휘하지 못하고 대기(Starve)하게 되는 현상을 말합니다 [1]. 주로 개별 모델에 대한 과도한 드로우 콜 발행이나 자바스크립트 메인 스레드에서의 무거운 연산(애니메이션, 정렬, 컬링 등)으로 인해 발생하며 [2-4], 이를 해결하기 위해 인스턴싱([[Instancing|Instancing]])이나 연산의 GPU 오프로딩 기법이 사용됩니다 [5, 6].
|
|
|
|
## 📖 구조화된 지식 (Synthesized Content)
|
|
- **드로우 콜 오버헤드 ([[Draw Call|Draw Call]] Overhead):** CPU 병목의 가장 주요한 원인입니다. CPU는 GPU에 그리기 명령을 내릴 때마다 변환 행렬, 셰이더 참조, 유니폼, 정점 버퍼 등의 렌더링 상태를 준비하고 통신해야 합니다 [2, 7]. 수백~수천 개의 개별 객체를 렌더링할 경우, 실제 폴리곤을 그리는 연산보다 CPU가 명령을 준비하고 발행하는 오버헤드가 시스템 버스에 막대한 부하를 가하여 병목을 유발합니다 [1, 7, 8].
|
|
- **자바스크립트 메인 스레드 한계:** 웹 렌더링(Three.js 등) 환경에서 수만 개의 객체에 대해 수동으로 시야 절두체 컬링([[Frustum Culling|Frustum Culling]])을 계산하거나, 투명 객체의 깊이 정렬(예: [[Radix Sort|Radix Sort]])을 수행할 경우 막대한 CPU 연산 비용이 발생합니다 [4, 9]. 단일 스레드 기반인 자바스크립트에서 렌더링 루프 내의 대규모 배열 조작은 메인 스레드를 점유하여 프레임 드랍을 유발하는 치명적인 CPU 병목을 낳습니다 [4, 9].
|
|
- **애니메이션 및 레이캐스팅 부하:** 스킨드 메시(Skinned Mesh)의 뼈대(Bone) 애니메이션 시스템은 매 프레임 CPU에서 행렬 업데이트 연산을 요구하므로 다수의 캐릭터가 있을 경우 렌더링 예산을 초과하는 CPU 시간을 소모합니다 [3]. 또한 수만 개의 인스턴스 환경에서 CPU 기반 레이캐스팅([[Raycasting|Raycasting]])을 수행하면 각 인스턴스의 행렬을 일일이 역산해야 하므로 즉각적인 반응을 불가능하게 만드는 동기화 병목이 발생합니다 [10].
|
|
- **입자 시스템 및 물리 연산:** CPU를 활용한 파티클 시스템 업데이트는 일반적인 하드웨어 기준 약 50,000개 수준에서 CPU 병목에 도달합니다 [5]. 이러한 연산 병목은 [[WebGPU|WebGPU]]의 컴퓨트 셰이더([[Compute Shader|Compute Shader]]s)를 활용해 메인 스레드의 작업을 GPU 코어로 병렬 오프로드함으로써 해결할 수 있습니다 [5, 11].
|
|
|
|
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
|
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
|
- **정책 변화:** Graphics & Performance 분야의 자동 자산화 수행.
|
|
|
|
## 🔗 지식 연결 (Graph)
|
|
- **Related Topics:** [[Draw Call|Draw Call]], InstancedMesh, [[Frustum Culling|Frustum Culling]]
|
|
- **Projects/Contexts:** Three.js, [[WebGL|WebGL]], [[WebGPU|WebGPU]]
|
|
- **Contradictions/Notes:** `[[InstancedMesh|InstancedMesh]]` 기술은 수천 개의 객체를 단 한 번의 드로우 콜로 처리하여 CPU 병목을 획기적으로 해결하는 기술로 알려져 있습니다 [6, 12]. 그러나 이 방식은 개별 객체의 컬링이나 정렬 같은 내부 최적화를 지원하지 않으므로, 이를 극복하기 위해 CPU 단에서 수동으로 위치를 검사하고 버퍼를 재정렬하는 로직을 추가할 경우 오히려 이전보다 더 극심한 CPU 연산 병목이 발생하는 역설적인 상황이 빈번하게 발생합니다 [4, 9].
|
|
|
|
---
|
|
*Last updated: 2026-04-19*
|
|
|
|
---
|