Conversation
…nerator benchmark/suite.jl sweeps 1D (pow2 / smooth / prime / awkward sizes up to 2^22), 2D, 3D and batched (dims keyword) transforms for ComplexF64/ComplexF32 fft and Float64/Float32 rfft, measuring planned execution, plan construction, one-shot cost, per-execution allocations, accuracy vs FFTW and FFTW multi-threading. benchmark/report.jl renders REPORT.md with tables and SVG ratio plots without any plotting dependency.
This was referenced Aug 29, 2026
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #128 +/- ##
=======================================
Coverage 98.80% 98.80%
=======================================
Files 5 5
Lines 585 585
=======================================
Hits 578 578
Misses 7 7 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…d report FFTA threading
520 measured cases on Intel Core Ultra 7 165H (AVX2, no AVX-512), Julia 1.12.6, FFTW 3.3.11, same suite and knobs as the aarch64 run. Also refits two machine-specific constants on x86-64: the Bluestein 3-smooth pad cost factor (2.01-3.11 here vs 1.28-2.26 on aarch64) and the DFT-vs-Bluestein crossover (n = 23 here vs 47 on aarch64), with the pad choice measured end-to-end on both branches.
Adds the per-branch sweeps (integration pre- and post-fix, A, B, C, D, E), the back-to-back attribution probes, the refitted Bluestein constants, the section 5.2 codelet tables reproduced on x86-64, the thread-placement probe and every script used. Baseline and each branch carry the 20-row prime band (23,29,31,37,43) so class geomeans are over the same 24 prime sizes as the aarch64 columns.
Collaborator
|
I'm fine adding different/more benchmarks into the package, but I'm not going to add images into the git package. It makes the repo unnecessarily large---if people want to generate them, they are more than welcome to run whatever benchmark code is provided. |
This branch has not been deployed
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.
This adds a second, broader benchmark suite next to the existing
run_benchmarks.jl, plus a committed markdown report with results from an aarch64 machine.What it measures (
benchmark/suite.jl)dims=1contiguous,dims=2strided).ComplexF64/ComplexF32fftandFloat64/Float32rfft.ESTIMATEand, for powers of two,MEASURE.rel. errcolumn).How — both packages are loaded in one process; FFTA's
plan_*methods are reached withinvokebecause FFTW'sStridedArraymethods are more specific (this is also why the existing suite uses two processes). A small custom timing loop is used instead of@benchmark, whose per-call-site compilation dominated a ~500-case sweep.benchmark/report.jlrendersREPORT.mdand SVG plots with no plotting dependency.Results — see
benchmark/REPORT.md. Headline (aarch64 Neoverse-N1, Julia 1.12.6, FFTW 3.3.11,ComplexF64, planned execution, FFTA / FFTW):(geometric mean and range of FFTA/FFTW execution time, FFTW planned with
ESTIMATE, single thread.) Other observations from the report:ESTIMATEat n ≥ 2^20, but FFTW-MEASUREplans are 2.2–2.8× faster thanESTIMATEthere, so against tuned FFTW the large-size gap is ~2.5–3×.ESTIMATE; large primes are slow to plan in FFTW), so one-shotfft(x)on primes is closer than the planned numbers suggest.mul!allocates nothing except through Bluestein (12 KiB–200 MiB per call for primes ≥ 73, also inside composites) and ND transforms (pencil buffers, 0.4–66 KiB); real plans only support*, so they always allocate;rfftalongdimsallocates per column viamapslices.ComplexF32is no faster thanComplexF64in FFTA (FFTW: 1.6–1.8× faster).The report is from an aarch64 machine; an x86-64 run would be useful and only needs
cd benchmark; julia --project=. -t 8 suite.jl; julia --project=. report.jl results_suite.json.Two things noticed while writing this, which I'll open separately: with FFTW.jl and FFTA.jl both loaded,
plan_rfft(::Vector{Float64}, ::Int)(hencerfft(x)) is a method ambiguity; and the profile of composite sizes is dominated bysincospiinsidesingleton_params, i.e. twiddles are recomputed per execution rather than stored in the plan.