High/Low level emulation: Difference between revisions

Ahayri (talk | contribs)
Ahayri (talk | contribs)
Line 71: Line 71:
** 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.


** '''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|accessdate=2025-07-26}}</ref> 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>
* '''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> 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>
** '''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>


* '''Platform-Specific Memory and I/O Optimization''': Modern emulators use platform-specific APIs to allocate memory and optimize I/O performance:
* '''Platform-Specific Memory and I/O Optimization''': Modern emulators use platform-specific APIs to allocate memory and optimize I/O performance: