Skip to content

Experimental: Apple Silicon planar A2 integration for lower CPU usage - #118

Open
honkkis wants to merge 2 commits into
tone-3000:mainfrom
honkkis:perf/a2-planar-4x
Open

honkkis wants to merge 2 commits into
tone-3000:mainfrom
honkkis:perf/a2-planar-4x

Conversation

@honkkis

@honkkis honkkis commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

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.cpp to 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:

  • Core planar tests pass and remain bit-identical to the existing A2 fast path.
  • A2 standard / 8-channel: 2.666x at 32 frames and 2.477x at 64 frames.
  • A2 nano / 3-channel: 2.171x at 32 frames and 1.992x at 64 frames.
  • In TONE3000 itself, using an A2 model with 4x oversampling in REAPER, I see roughly 50% lower CPU.

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.

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 honkkis changed the title Experimental: Apple Silicon planar A2 path for lower 4x CPU Experimental: Apple Silicon planar A2 integration for lower CPU usage Sep 10, 2026
@woodybury

Copy link
Copy Markdown
Member

@honkkis awesome excited to try this. agree this should ideally land upstream

@rikkus

rikkus commented Sep 11, 2026

Copy link
Copy Markdown

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.

@honkkis

honkkis commented Sep 11, 2026

Copy link
Copy Markdown
Contributor Author

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).

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.

3 participants