High/Low level emulation: Difference between revisions
| Line 69: | Line 69: | ||
** [[Cemu]]'s <code>PPCRecompiler</code> was recently rewritten for performance and modularity.<ref>{{cite web|url=https://github.com/cemu-project/Cemu/pull/641|title=Cemu PPC Recompiler Refactor|publisher=GitHub|accessdate=2025-08-02}}</ref> | ** [[Cemu]]'s <code>PPCRecompiler</code> was recently rewritten for performance and modularity.<ref>{{cite web|url=https://github.com/cemu-project/Cemu/pull/641|title=Cemu PPC Recompiler Refactor|publisher=GitHub|accessdate=2025-08-02}}</ref> | ||
** LLVM is increasingly adopted as a backend to translate emulator IR to optimized native code, offering maintainability and reuse of compiler tooling at the cost of compile-time speed. | ** LLVM is increasingly adopted as a backend to translate emulator IR to optimized native code, offering maintainability and reuse of compiler tooling at the cost of compile-time speed. | ||
** New approaches explore <code>AsmJit</code> for fast codegen, <code>MLIR</code> for structured IR optimizations, and <code>libffi</code> or <code>dyncall</code> for cross-platform dynamic call interfaces. | ** New approaches explore <code>AsmJit</code> for fast codegen, <code>MLIR</code> for structured IR optimizations, and <code>libffi</code> or <code>dyncall</code> for cross-platform dynamic call interfaces. On compatible architectures, some emulators (e.g., Yuzu) implement '''Native Code Execution''', bypassing traditional JIT layers for even greater performance and reduced overhead.<ref>{{cite web|url=https://yuzu-mirror.github.io/entry/yuzu-progress-report-nov-2023/#project-nice|title=Yuzu Progress Report Nov 2023|publisher=Yuzu|accessdate=2025-07-26}}</ref> | ||
* '''Fast Memory Access''': Techniques like Fastmem, implemented in [[PCSX2]], Yuzu, and [[Dolphin]], optimize memory operations for significant performance gains by minimizing overhead and improving cache efficiency.<ref>{{cite web|url=https://github.com/PCSX2/pcsx2/pull/5821|title=PCSX2 Pull Request #5821|publisher=GitHub|accessdate=2025-07-26}}</ref><ref>{{cite web|url=https://github.com/PCSX2/pcsx2/pull/7295|title=PCSX2 Pull Request #7295|publisher=GitHub|accessdate=2025-07-26}}</ref><ref>{{cite web|url=https://web.archive.org/web/20240229141516/https://yuzu-emu.org/entry/yuzu-fastmem/#what-is-fastmem|title=What is Fastmem?|publisher=Yuzu}}</ref><ref>{{cite web|url=https://dolphin-emu.org/blog/2016/09/06/booting-the-final-gc-game/|title=Booting the Final GC Game|publisher=Dolphin Emulator|accessdate=2025-07-26}}</ref> | * '''Fast Memory Access''': Techniques like Fastmem, implemented in [[PCSX2]], Yuzu, and [[Dolphin]], optimize memory operations for significant performance gains by minimizing overhead and improving cache efficiency.<ref>{{cite web|url=https://github.com/PCSX2/pcsx2/pull/5821|title=PCSX2 Pull Request #5821|publisher=GitHub|accessdate=2025-07-26}}</ref><ref>{{cite web|url=https://github.com/PCSX2/pcsx2/pull/7295|title=PCSX2 Pull Request #7295|publisher=GitHub|accessdate=2025-07-26}}</ref><ref>{{cite web|url=https://web.archive.org/web/20240229141516/https://yuzu-emu.org/entry/yuzu-fastmem/#what-is-fastmem|title=What is Fastmem?|publisher=Yuzu}}</ref><ref>{{cite web|url=https://dolphin-emu.org/blog/2016/09/06/booting-the-final-gc-game/|title=Booting the Final GC Game|publisher=Dolphin Emulator|accessdate=2025-07-26}}</ref> | ||
* '''Instruction Set Support''': such as AVX-512 for [[RPCS3]], improves emulation speed and performance on CPUs supporting advanced SIMD instructions.<ref>{{cite web|url=https://whatcookie.github.io/posts/why-is-avx-512-useful-for-rpcs3/|title=Why is AVX-512 useful for RPCS3?|publisher=WhatCookie | * '''Instruction Set Support''': such as AVX-512 for [[RPCS3]], improves emulation speed and performance on CPUs supporting advanced SIMD instructions.<ref>{{cite web|url=https://whatcookie.github.io/posts/why-is-avx-512-useful-for-rpcs3/|title=Why is AVX-512 useful for RPCS3?|publisher=WhatCookie|accessdate=2025-07-26}}</ref> | ||
* '''Compiler Optimization Techniques''': Emulators increasingly use Profile-Guided Optimization (PGO), Link-Time Optimization (LTO), and ThinLTO to generate more efficient binaries.<ref>{{cite web|url=https://old.reddit.com/r/rpcs3/comments/1jhgiqo/rpcs3_linktime_optimisations_lto_are_now_enabled/|title=RPCS3 Link-Time Optimisations (LTO) Are Now Enabled|publisher=Reddit|accessdate=2025-07-26}}</ref><ref>{{cite web|url=https://github.com/RPCS3/rpcs3/issues/16778|title=LTO implementation for RPCS3|publisher=GitHub|accessdate=2025-07-26}}</ref> | * '''Compiler Optimization Techniques''': Emulators increasingly use Profile-Guided Optimization (PGO), Link-Time Optimization (LTO), and ThinLTO to generate more efficient binaries.<ref>{{cite web|url=https://old.reddit.com/r/rpcs3/comments/1jhgiqo/rpcs3_linktime_optimisations_lto_are_now_enabled/|title=RPCS3 Link-Time Optimisations (LTO) Are Now Enabled|publisher=Reddit|accessdate=2025-07-26}}</ref><ref>{{cite web|url=https://github.com/RPCS3/rpcs3/issues/16778|title=LTO implementation for RPCS3|publisher=GitHub|accessdate=2025-07-26}}</ref> | ||