-
-
Notifications
You must be signed in to change notification settings - Fork 58
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
Arm pan tweaks #426
Arm pan tweaks #426
Conversation
3f5d2e2
to
472d5ee
Compare
Note that while this would help for "most" cases it could lead to bad worst cases behavior when there is an event in the block, so it's not a perfect solution either. |
Yes because this function is implemented in software without the flags. May we implement |
Yes sure, let's do it. Honestly I'm also debating whether the templated versions are useful (are we gonna use double ever?) and whether we should strip every functions but the ones we actually use to really target important parts to eventually translate... |
Then let's close the debate right away, no they arent :) |
This is turning into more than a small change to help ARM xD |
228617e
to
afc390e
Compare
The CI fails randomly. I'll work on cleaning up SIMD overall (again? one day it'll be the last) and integrate simde, looks like a nice project ! |
afc390e
to
3bac650
Compare
For future reference, on a raspi 3. |
Apparently ARM takes a substantial hit to repeatedly go from float to int to float, which hurts in table lookups. In fact, data interpolation and panning takes up more than half the processing time of ARM rendering.
This patch sets NEON as a required element for ARM builds (not too unreasonable I think) and uses an accelerated codepath if present. Speedup on raspi 3 is about 50% for the panning/width process, and 25% overall.
Note that performance is still not that great on such a device 🙂 But we'll get somewhere. I think having shortcuts for modifiers at the voice level would be the most evident thing to do. We could interrogate the mod matrix somehow with a
canShortcut(ModKey target)
or something: if no event happened during the block then you can apply a single value and you're done. This would probably also help the performance on all platforms.