Conversation
Use the PR #313 planar NEON backport for the NeuralAmpModelerCore revision used by TONE3000 and include a2_planar.cpp in the local NAM library. The optimized Core remains bit-identical in its planar tests. On Apple M1, TONE3000 at 4x oversampling showed roughly 50% lower CPU in initial testing. Based on sdatkinson/NeuralAmpModelerCore#313 by Rik Hemsley.
|
@honkkis awesome excited to try this. agree this should ideally land upstream |
|
Hi, thanks @honkkis for testing this out and suggesting it for the Tone3000 plugin. I've updated my PRs (most importantly, the one against Core) today with a few commits that I'd had lying around waiting to be tested properly when I got access to hardware. I've also opened an issue on the Plugin repo so hopefully Steven will try it out at some point too. |
da690b5 to
9c532aa
Compare
|
I've updated this to commit 552c5ab from PR #313, replacing my earlier backport with a direct reference to Rik's Core branch. This includes his ARMv7 updates and cached prewarming, plus the newer upstream Core changes that branch is based on. I've also added the required Core source files to the plugin build and excluded the new benchmark tools from the default build. I tested the updated plugin and it works as well as the previous version. The submodule temporarily points to Rik's repository. Once the change lands upstream, TONE3000 can switch back to the upstream Core dependency. Credit for the planar NEON implementation and optimization work goes to Rik Hemsley (rikkus). |
This is an experimental integration of Rik Hemsley's planar NEON A2 work from NeuralAmpModelerCore PR #313:
sdatkinson/NeuralAmpModelerCore#313
TONE3000's phase-interleaved oversampling looks like a particularly good fit for it. At 4x, an A2 model is split across four native-rate model instances, so with 32- or 64-sample host buffers each instance runs at the same small block sizes where the planar path performs well.
I backported the PR #313 changes to the Core revision currently used by TONE3000 and added
a2_planar.cppto TONE3000's explicit NAM source list. The Core submodule URL in this branch points temporarily to my fork because PR #313 has not been merged upstream yet.Testing on an Apple M1:
I think this is worth trying as a performance experiment, especially for Apple Silicon users.
I wouldn't treat the current submodule pin as the final form. If the Core change lands upstream, TONE3000 can move back to the normal upstream Core dependency.
Credit for the planar NEON implementation and the underlying optimization work goes to Rik Hemsley (
rikkus) in NeuralAmpModelerCore PR #313.