-
-
Notifications
You must be signed in to change notification settings - Fork 546
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Significant Overhaul of the Interpreter's Timing Model #2235
base: master
Are you sure you want to change the base?
Conversation
remove some checks for interlock that im pretty sure can't trigger
not implemented for direct boot
I believe this also applies to other loads as well, but currently untested.
need to verify if they apply to all store instructions
might be less accurate
something *has* to rely on this, as stupid as it seems
IM SORRY GENERIC
fixes twilight menu
@@ -171,20 +219,48 @@ class ARM | |||
u32 DataRegion; | |||
s32 DataCycles; | |||
|
|||
u32 R[16]; // heh | |||
alignas(64) u32 R[16]; // heh |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did you mean u64
here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the alignas? no. i explicitly meant to align it to a host cacheline. which should be 64 bytes. it seemed to give a noticeable performance boost doing so in a few places (though maybe that was just luck?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In that case, I think you might want std::hardware_destructive_interference_size
or std::hardware_constructive_interference_size
, so that you don't need to hardcode the cacheline size.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what's the difference between the two?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From the linked reference page:
- Minimum offset between two objects to avoid false sharing. Guaranteed to be at least alignof(std::max_align_t)
- Maximum size of contiguous memory to promote true sharing. Guaranteed to be at least alignof(std::max_align_t)
It has details and examples.
oh no that was covering up SO many bugs hhhhsdfghhg
caused innumerable issues will need a more comprehensive rewrite later
this should fix something?
the hack is to make arm9 dma contention work with prior improvements to synchronization
Heavily reworks the ARM9 & ARM7 timing models to greatly improve accuracy (and slaughter performance).
Builds upon my work in #2125 and uses the excellent cache implementation found in #1955 (probably want to merge those two first). (hopefully building this pr upon those two doesn't cause any stupid or weird issues with git...? Fingers crossed?)
Implements:
Known Issues: