aex-emu 22.09 & future plans

This is the first tag after forking from FEX-Emu, and as such is not a full, stable release.

Highlights

OBJ Cache and IR Cache have been merged

These have been pending for quite some time, and they are now merged.

OBJ Cache is enabled by default, and brings an ~ 8-10x speedup on launching applications that have been cached. First launch performance isn’t affected much.

OBJC benchmarks @ NVIDIA Orin

No Cache OBJ Cache Native
277ms 29ms 7ms

No Cache

New, linear-time register allocator, has been merged

The old FEX-Emu register allocator has very bad runtime performance, while generating mediocre code and being overly complex.

NRA implements a much simpler, linear-scan scheme, is less than half lines of code, and runs much faster while generating marginalby worse object code. It also doesn’t need the RA to be compacted.

A new switch, --ra=cra|nra controls which register allocator is used

RA benchmarks @ NVIDIA Orin

/bin/ls

CRA NRA IRINT
280ms 215ms crashes

/bin/true

CRA NRA IRINT
160ms 125ms 255 ms

Address space stealing optimisations

This is a minor startup optimisation that was PR’d before the fork. See https://github.com/FEX-Emu/FEX/pull/1885 for more details.

Syncing up with upstream

This release contains most of the FEX-2209 improvements. See https://fex-emu.com/FEX-2209/ for more details.

Future plans

skmp has a pretty ambitious plan for aex-emu over the following months, with a strong focus on improving code quality, latency and sustained performance.

The current milestones are

22.10

  • Infastructure setup (CI, CD)
  • Major architectural changes in the project
  • Re-worked thunking system / goals
  • base work for optimisations
  • See https://gitlab.com/aex-emu/aex/-/milestones/1#tab-issues for details

    22.11

  • Focused on optimisations & bug fixes
  • See https://gitlab.com/aex-emu/aex/-/milestones/2#tab-issues for details

    22.12

  • Focused bug fixes, qa & polishing
  • See https://gitlab.com/aex-emu/aex/-/milestones/3#tab-issues for details

With a goals to have an alpha-quality release by the end of October, a beta-quality release by the end of November, and a stable release before December 25th.

Written on October 3, 2022