[KOR][100]New-GPU-Profiler-and-RHI-Submission-Pipe

https://m.youtube.com/watch?v=vnbARZHccpQ

Frame at 0.00s
## 언리얼 엔진 5.6 GP 프로파일러 및 RHI 제출 파이프라인 Epic Games의 Luke Thatcher가 언리얼 엔진 5.6의 새로운 GP 프로파일러와 RHI 제출 파이프라인에 대한 세션을 진행합니다. ### 1. 새로운 GP 프로파일러 개선 사항 (Unreal 5.6) * **핵심 구성 요소:** * `stat GPU` * `profile GPU` 명령 * Unreal Insights * **주요 변경 사항:** * RHI 브레드크럼 시스템 기반으로 재구축 * **통합 데이터 소스:** 모든 도구가 동일한 정보 사용 (정확도 향상) * **멀티 GPU 및 멀티 큐 지원:** * 이전에는 첫 번째 GPU의 그래픽 파이프라인만 표시 * 이제 모든 GPU 및 비동기 컴퓨팅 큐 정보 표시 * `stat GPU [인덱스] [큐 타입] [인덱스]` 명령으로 개별 큐 통계 확인 가능 * **`stat GPU` 데이터 확장:** * **바쁜 시간 (Busy Time):** 이전과 동일 (실제 작업 수행 시간) * **대기 시간 (Wait Time):** 한 큐가 다른 큐의 완료를 기다리는 시간 (특히 컴퓨팅 큐에서 높을 수 있음) * **유휴 시간 (Idle Time):** GPU가 CPU로부터 새로운 작업을 받지 못해 대기하는 시간 (CPU 바운드 징후) * **`profile GPU` 개선:** * RHI 브레드크럼 시스템 기반 * **배타적 및 포함 시간 (Exclusive & Inclusive Timings) 표시:** 이전에는 포함 시간만 표시 * **멀티 GPU 및 멀티 큐 지원:** GPU 및 큐별 테이블 제공 * **비동기 컴퓨팅 (Async Compute) 비활성화 권장:** 특정 렌더 패스 최적화 시 `r.rdg.asyncCompute 0` 사용 * **콘솔 변수를 통한 테이블 필터링 및 열 표시/숨기기:** `r.profileGPU.root`로 특정 이벤트 그룹 표시 * **Unreal Insights GPU 기능 강화:** * **멀티 GPU 및 멀티 큐 지원:** GPU 및 큐별 타임라인 제공 * **CPU-GPU 작업 흐름 시각화:** 큐의 대기 및 유휴 상태 파악 용이 * **GPU 작업 상태 시각화:** * **바쁜 작업 (Busy Work):** GPU 작업 수행 구간 * **대기 구간 (Wait Regions):** 큐가 차단된 상태 * **유휴 구간 (Idle Regions):** GPU가 더 이상 작업이 없어 대기하는 상태 * **펜스 종속성 화살표 (Fence Dependency Arrows):** 큐 간의 대기 종속성 시각화 * **RHI 제출 스레드 및 RHI 인터럽트 스레드 시각화:** CPU-GPU 데이터 흐름 분석에 활용 ### 2. RHI 제출 파이프라인 (5.5 출시) * **핵심 역할:** 렌더러와 GPU 플랫폼 API 사이의 중개자 * **주요 구성 요소:** * `FRHI-Commandlist-based` 타입: RHI 명령 목록 기록 * `RHI Command List Immediate`: 렌더 스레드가 소유하는 단일 진입점 * 각 플랫폼 RHI별 구현 (예: `RHIComputeContext`, `RHICommandContext`) * **작동 방식:** * 렌더러/렌더 그래프가 `FRHI Command List` 인스턴스 생성 (스레드별 1개) * 명령은 CPU 순서로 기록 * `switchPipeline` 및 `enqueueLambdaMultipipe` 함수를 통해 적절한 컨텍스트로 명령 전달 * `Immediate Command List`를 통해 모든 RHI 명령 목록 제출 * **2단계 작동:** 기록 (Recording) -> 번역 (Translation) * **번역:** 기록된 명령을 RHI 컨텍스트를 통해 GPU별 명령으로 변환 * **병렬 번역 (Parallel Translate):** * **번역 체인 (Translate Chains):** 명령 목록을 그룹화하여 병렬 처리 * **CVAR 제어:** * `r.rhiCommand.parallelTranslate.maxCommandsPerTranslate`: 각 번역 체인에 포함될 최대 명령 수 * `r.rhiCommand.parallelTranslate.combineSingleAndParallel`: 단일 스레드 번역과 병렬 번역 결합 여부 * **병렬 번역 제한 사유:** * `Immediate Command List` 사용 (단일 스레드 번역 강제) * `Lock Fence` 사용 (RHI 리소스의 CPU 측 변이 시) * **RHI 스레드 및 인터럽트 스레드:** * **RHI 제출 스레드:** RHI 스레드와 GPU 사이에서 작업 배치 및 펜스 해결 * **RHI 인터럽트 스레드:** GPU 작업 완료 모니터링 및 엔진에 신호 전달 ### 3. RHI 브레드크럼 시스템 (RHI Breadcrumb System) * **목표:** 다양한 렌더링 시스템 간의 레이블링 일관성 확보 * **특징:** * **통합 마커:** 렌더 스레드, 병렬 패스, 병렬 번역, RHI 스레드, GPU 전반에 걸쳐 동일한 마커 사용 * **컨텍스트 제공:** 스레드가 현재 어떤 작업을 수행하는지 명확히 파악 가능 * **활성화 조건:** * RHI 브레드크럼 매크로 활성화 빌드 (기본: Debug, Development) * `profileGPU` 명령 활성화 * **`r.rdg.events` CVAR:** 렌더 그래프 이벤트 세부 정보 수준 제어 (0: 기본, 3: 모든 정보) * **코드에서의 활용:** * 다양한 스코프 매크로 (`ScopeDrawerEvents`, `Breadcrumb` 매크로)가 동일 시스템으로 통합 * 플랫폼별 RHI 코드에도 적용 가능 (`D3D12` 예시) * **작동 방식:** * RHI 명령 목록 기록 시 RHI 브레드크럼 노드 트리 생성 * 디스패치 시 루트 트리에 연결되어 프레임 전체 컨텍스트 제공 * **가치 캡처 (By-value capture):** 포맷 인수 캡처로 컨텍스트 정보 유지 (성능 향상) * **CPU/GPU 브레드크럼 함수:** * `Begin/End Breadcrumb CPU`: Insights 마커 삽입, CPU 크래시 보고 (렌더 그래프 패스 컨텍스트 제공) * `Begin/End Breadcrumb GPU`: Pix 마커, RHI Insights GPU 마커 삽입 * **GPU 크래시 디버깅:** * `GPU Crash Debugging` 기능 활성화 시, GPU 명령 목록에 정수 쓰기 (크래시 후 데이터 복구) * 크래시 발생 시, 진행 상황에 따라 마지막으로 실행된 브레드크럼 정보 로깅 (멀티 GPU/큐 지원) --- 이 세션은 언리얼 엔진의 성능 분석 및 최적화를 위한 중요한 도구와 기법을 다룹니다. GP 프로파일러의 개선 사항, RHI 제출 파이프라인의 내부 동작, 그리고 RHI 브레드크럼 시스템을 통한 디버깅 효율성 향상에 대한 내용을 자세히 설명합니다.