Languages: [EN] English | [KO] 한국어
Eden nightly Windows Custom Build - AMD Zen4 Exclusive + PGO Optimization
Eden nightly 윈도우용 빌드 - AMD Zen4 전용 + PGO 최적화
Overview 소개
AMD Zen4 + PGO optimizations applied to the Eden Windows custom build, featuring UI usability improvements.
AMD Zen4 + PGO 최적화 적용 및 UI 편의를 개선한 Eden 윈도우용 커스텀 빌드.
Build Configuration 빌드 구성
- AMD Zen 4–specific build (not executable on CPUs other than the AMD Zen 4 series)
- Profile-Guided Optimization applied(PGO)
- Build Setup:
- Environment: Visual Studio 2026 Insider (CMake + Ninja)
- Toolchain: LLVM 21.1.8 (clang-cl, lld)
- Package Manager: vcpkg
- Platform: Windows 11
- PGO data collection build options: -fprofile-instr-generate -fprofile-loop-info
- PGO optimization applied build options: -fprofile-instr-use
- AMD Zen4 "전용" (AMD Zen4 계열 외 CPU에서는 실행 불가)
- 프로파일 가이드 최적화 적용(PGO)
- 빌드 설정:
- 환경: Visual Studio 2026 Insider (CMake + Ninja)
- 툴체인: LLVM 21.1.8 (clang-cl, lld)
- 패키지 매니저: vcpkg
- 플랫폼: Windows 11
- PGO 데이터 수집 빌드 옵션: -fprofile-instr-generate -fprofile-loop-info
- PGO 최적화 적용 빌드 옵션: -fprofile-instr-use
PGO Data Summary PGO 데이터 요약
- Instrumentation level: Front-end
- Total functions: 99003
- Maximum function count: 555422090880
- Maximum internal block count: 1837157549715
- Total number of blocks: 281908
- Total count: 29961822282003
- Coverage report: Download
Why Front-end PGO? Front-end PGO 선택 이유
-
Emulators are control-flow bound rather than compute-bound
- The dominant cost in emulators comes from conditional branches, state checks, and cache validity checks
- ALU throughput and vectorization have less impact than branch mispredictions and control-flow overhead
-
Hot paths matter more than hot loops
- Unlike typical applications, emulators are built around state machines rather than tight loops
- The same function can execute very different paths depending on the current emulation state
- Performance is determined by execution paths across functions, not by individual functions alone
-
Vulkan renderers are inherently branch-heavy
- Extensive conditional logic for pipeline state, resource caches, and GPU capability checks
- Composed of many small functions with frequent branching
- Branch mispredictions directly translate into frame time spikes
-
Front-end PGO learns real-world branch probabilities and state transitions
- Collects accurate branch selection frequencies from real execution
- Places frequently executed basic blocks adjacently in memory
- Separates rarely executed error-handling and exceptional paths into cold regions
- Improves both branch prediction accuracy and instruction cache locality
-
IR PGO can induce excessive inlining and code growth in emulators
- IR PGO aggressively optimizes hot IR regions, often increasing inlining decisions
- Code size growth increases instruction cache pressure
- In emulators, this can harm frame time stability despite improving microbenchmarks
-
Real usage-based Front-end PGO stabilizes state-machine execution paths
- Captures diverse transitions such as menus, loading screens, real-world usage scenarios, UI, and scripted events
- Extended usage sessions allow branch probabilities to converge statistically
- Represents execution patterns that short benchmarks and automated tests fail to capture
-
The primary benefit is frame time stability rather than peak FPS
- Average FPS gains may be modest
- Frame drops, stutter, and hitches during real-world usage are significantly reduced
- Results in a smoother and more consistent user experience
-
에뮬레이터는 연산 집약적 코드가 아니라 제어 흐름 집약적 구조
- 에뮬레이터의 주요 비용은 산술 연산이 아니라 조건 분기, 상태 체크, 캐시 여부 판단에 있음
- ALU 성능이나 벡터화보다 분기 예측 실패 및 제어 흐름 비용이 성능에 더 큰 영향을 줌
-
Hot loop보다 Hot path가 성능을 좌우
- 일반 애플리케이션과 달리 에뮬레이터는 반복 루프 중심이 아닌 상태 머신 기반 구조
- 동일한 함수라도 호출되는 상태에 따라 전혀 다른 실행 경로를 가짐
- 함수 자체보다 함수 간 실행 경로(Path)의 연속성이 중요함
-
Vulkan 렌더러는 분기 폭발(branch-heavy) 구조
- 파이프라인 상태, 리소스 캐시, GPU 기능 여부에 따른 조건 분기가 매우 많음
- 작은 함수와 다수의 조건 분기가 결합된 구조
- 분기 예측 실패 시 프레임 타임 스파이크로 직결됨
-
Front-end PGO는 실제 분기 확률과 상태 전이를 직접 학습
- 실제 실행 시 어떤 분기가 얼마나 자주 선택되는지를 수집
- 자주 연속 실행되는 basic block을 인접하게 배치
- 드물게 실행되는 오류 처리 및 예외 경로를 cold path로 분리
- 분기 예측 정확도와 instruction cache locality를 동시에 개선
-
IR PGO는 에뮬레이터에서 과도한 인라이닝과 코드 팽창을 유발
- IR PGO는 실행 빈도가 높은 IR 단위에 반응하여 인라이닝을 공격적으로 수행
- 코드 사이즈 증가로 인해 I-cache 압박이 발생
- 에뮬레이터에서는 성능 향상보다 프레임 타임 불안정성을 초래하는 경우가 있음
-
실제 사용 기반 Front-end PGO는 상태 머신 경로를 통계적으로 수렴
- 메뉴, 로딩, 게임 플레이, UI, 이벤트 등 다양한 상태 전이를 포함
- 장시간 실제 사용을 통해 분기 확률이 안정적으로 수렴
- 벤치마크나 자동화 테스트로는 재현하기 어려운 경로까지 반영 가능
-
결과적으로 평균 FPS보다 프레임 타임 안정성에 더 큰 영향을 줌
- 평균 FPS 수치 변화는 크지 않을 수 있음
- 프레임 드랍, stutter, hitch 현상이 감소
- 체감 성능과 플레이 안정성이 향상됨
Changes 수정 사항
- Taskbar appearing in borderless fullscreen mode on Windows 11 tablet mode (not fully resolved, still in progress, further testing required)
- Restarting while in borderless fullscreen mode caused both borderless fullscreen to be disabled and a window attribute error
- Error when creating shortcut icons for titles containing multi-byte characters.
- Error when the shortcut path includes multi-byte characters.
- When launched via a shortcut with the fullscreen(-f) option, the main UI is hidden at startup and a separate start screen is immediately displayed to confirm execution
- 전체화면(보더리스)에서 Windows 11 태블릿 모드 작업표시줄 표시 문제 (아직 완벽하지 않음)
- 전체화면(보더리스)에서 재시작시 보더리스 전체화면 해제 및 창 속성 오류
- 멀티바이트 문자열이 포함된 바로가기 생성 오류
- 바로가기 생성 경로에 멀티바이트 문자가 포함될 경우 오류
- 전체화면(-f) 옵션이 포함된 바로가기 실행 시, 시작 시 메인 UI를 숨기고 실행 여부 확인을 위한 별도 시작 화면을 바로 표시.
Notice 안내
- Current changes are incompatible with Eden’s multi-platform direction, so they cannot be applied to the official build.
- The borderless fullscreen issue is likely caused by differences in how Qt5 and Qt6 handle this feature
- Applying CS-PGO, LTO (fat or thin) optimization makes emulation itself impossible
- Use at your own risk.
- It does not include any Nintendo copyrighted material (firmware, keys, rom files, etc.).
- 현재 수정 사항은 Eden의 방향성(멀티플랫폼)과 맞지 않아 공식 빌드에 적용 어려움
- 전체화면(보더리스) 문제는 Qt5와 Qt6의 렌더링 처리 방식 차이로 인한 것으로 추정
- CS-PGO, LTO(fat,thin) 최적화 적용시 에뮬레이션 기능에 문제가 발생
- 사용에 따른 문제는 전적으로 사용자 책임입니다.
- Nintendo의 저작물(펌웨어, 키, 롬 파일 등)은 포함되어 있지 않습니다.
Download 다운로드
Submission 참여
The PGO Collector version is also provided. Please send the .profraw file generated after normal gameplay for application to the build.
PGO Collector 버전도 같이 제공되고 있으니 해당 버전으로 정상 플레이 후 생성된 .profraw 파일을 보내주시면 빌드에 적용 합니다.
License 라이센스
Eden is licensed under the GPLv3 (or any later version). Refer to the LICENSE.txt file.
Reference 참조

Comments
Post a Comment