Skip to content

Optimize Cartridge::Mbc1#24

Merged
sacckey merged 1 commit intosacckey:mainfrom
byroot:rom-simpler
Feb 10, 2025
Merged

Optimize Cartridge::Mbc1#24
sacckey merged 1 commit intosacckey:mainfrom
byroot:rom-simpler

Conversation

@byroot
Copy link
Copy Markdown
Contributor

@byroot byroot commented Feb 9, 2025

Closes: #23

Having to call a proc for every memory access isn't ideal, that quite a bit of overhead.

If instead we use a case statement with only immediate values and a few bitwise operations we can let YJIT generate very efficient code.

two runs on main with ruby 3.4.1 / YJIT:

Ruby: 3.4.1
YJIT: true
1: 4.051815 sec
2: 3.989457 sec
3: 3.963555 sec
FPS: 374.849216902501

Ruby: 3.4.1
YJIT: true
1: 3.872855 sec
2: 3.943231 sec
3: 4.024268 sec
FPS: 380.05620440064547

On this branch:

Ruby: 3.4.1
YJIT: true
1: 3.625805 sec
2: 3.615032 sec
3: 3.572852 sec
FPS: 416.1392102177157

Ruby: 3.4.1
YJIT: true
1: 3.543953 sec
2: 3.520738 sec
3: 3.506004 sec
FPS: 425.70521616601366

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants