Use mixed-radix decompositions for CurveFFT - #166
Open
ValarDragon wants to merge 1 commit into
Open
Conversation
Contributor
Author
|
Follow-up CurveFFT kernel experiments (2026-08-23) I evaluated the remaining kernel ideas on top of this PR. None of items 1-7
Item 8 was kept on a separate experimental branch as requested:
Because DFT32 regresses portable multicore performance, I did not open the |
ValarDragon
marked this pull request as ready for review
August 24, 2026 12:15
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #164. The Apple AArch64 specialization is inherited from that
base; this PR adds no assembly changes.
What changed
k >= 6into DFT8 and DFT16tiers. The Orchard schedule is
16 x 16 x 8;k = 13uses16 x 8 x 8 x 8.transposing into contiguous, locally bit-reversed codelets.
one large affine inversion batch per substage.
free negation for exponents in the upper half of the root-of-unity cycle.
alternate one N-point affine scratch vector with the output.
affine GLV ladders, and first-value accumulator seeding.
k = 6:k = 3and4are already oneDFT8/DFT16 codelet, while a
2 x 16split atk = 5saves no scalarmultiplications and would add transpose traffic.
Operation counts
The tests instrument the executed path rather than only checking the
factorization on paper.
For a plain radix-2 Cooley-Tukey FFT with no codelets, each layer has
N / 2butterflies and one multiplication by the trivial twiddle
1per block. Thenumber of nontrivial point-scalar multiplications is therefore
kN / 2 - (N - 1).The codelet tiers use 14, 16, 18, and 18 sequential affine-addition
inversion batches respectively at
k = 10..13. The tests pin every batchwidth. The extra
k = 13copy required by the even number of tiers isincluded in its six measured layout passes.
CurveFFT benchmark
Four rotated Criterion rounds per revision, with compilation outside the
measurement window. Each row is the median of the four reported centers.
Linux compares the portable parent
1dc0e71to algorithm commit3d5c478;the two Mac hosts use the same comparison with the existing field ASM enabled.
Both Macs reported no thermal or performance warning. Pre-run process checks
found no competing benchmark workloads. The two Linux hosts were idle before
the run; post-run load reflected only the benchmark itself.
Correctness
k = 13.exceptional fallbacks through
k = 12;k = 13gets a direct comparisonon both curves.
permutation is bijective for
k = 6..16.without the multicore feature.
The final PR tree is byte-for-byte identical to tested stacked revision
110008b(treee6c0dc4); only the commit order was changed so this PR is aclean descendant of #164.