Repository navigation
v0.17.0
FFT kernel builders (#28)
go-fft's SIMD kernel generators now live here, one package per architecture:
-
fft/amd64:- Stockham passes of radix 2, 3, 4, 5, 8, 9, 10, 12, 15, 16 and 20 (AVX2), and radix 2, 4 and 8 at 512 bits;
- final, batched, strided and run-writing passes;
- the split layouts at 256 and 512 bits;
- float32 passes;
- the real-FFT untangle and retangle;
- SSE2 and AVX2 complex products;
- the two- and three-pass stack-frame trampolines and their address table.
Kernels.FMAbuilds the fused twins: the twiddle product, radix 8's √2/2, and the radix-9 and -16 internal twiddles. -
fft/arm64:- NEON passes of radix 2, 3, 4, 5 and 8 in float64 and float32: pass, final pass, batched pass, block-split layout;
- the untangle and retangle;
- the complex product.
-
fft/riscv64andfft/s390x: the RVV and vector-facility complex products.
Each builder appends one TEXT block to an emit.File. The caller supplies:
- the symbol;
- the constants-table offsets (
Consts,SplitConsts); - on amd64, FMA.
The arguments, registers and frame are the kernel's own, and are documented on each builder.
Verification:
- Every file go-fft generates is pinned, by SHA-256, to the bytes go-fft commits. That covers go-fft main's 21
.sfiles and the 3 FMA files of its Round 41 branch. - Golden files pin one or two kernels of every builder.
- Every kernel goes through the Go assembler.
examples/fft/<arch>runs the complex products and a 16-point FFT on each architecture.- The library gate covers
./fft/...at 100%.
No change to the existing packages.