Benchmarks: the matched filter

Compare processors and output modes with selectable hardware and linear or logarithmic axes.

Time per data/template pair, including the product, inverse transform and peak scan. Results cover the hosts and sizes listed below. Shared CI timings vary with runner load.

5
CPU configurations
0.03
fastest us per pair
15
transform lengths
view

Cost of one (data, template) correlation with peak-only output. Lower is better.

scale
Time per pair0.050.100.200.501.02.05.010205010020050010002000500010000641282565121k2k4k8k16k32k64k128k256k512k1024ktransform length nmicroseconds per pairHaswell (2x Xeon E5-2698 v3)dev1 (Ryzen 9 5950X)linux-arm64linux-x86_64macos-arm64

Automatic CPU selection is shown once per host. AVX2 is shown separately when it differs; equivalent feature variants are omitted. Correctness CI still tests every compiled target.

What was tested

Workload2 data segments x 16 templates = 32 pairs, 4 data segments x 32 templates = 128 pairs, 8 data segments x 64 templates = 512 pairs, 16 data segments x 128 templates = 2048 pairs, 32 data segments x 256 templates = 8192 pairs, 64 data segments x 512 templates = 32768 pairs, single-threaded, complex64 throughout, peaks searched over the middle 60% of lags.
Batch shapeBatching can reuse inputs across pairs. Compare timings at the same shape; the benchmark reduces batches at large lengths to bound memory use.
ReferencesFFTW and MKL time the inverse FFT only, in single precision on one thread. matchedfilter also performs the product and peak scan.
runnerosarchback endMF_ISApython
Haswell (2x Xeon E5-2698 v3)Linuxx86_64AVX2auto3.11.0
dev1 (Ryzen 9 5950X)Linuxx86_64AVX2auto3.13.6
linux-arm64Linuxaarch64NEON_BF16auto3.12.14
linux-x86_64Linuxx86_64AVX2auto3.12.14
macos-arm64Darwinarm64NEONauto3.12.10
The back end is chosen at run time from the CPU. Rows sharing a prefix ran in one job on one host, so those compare kernels. Rows with different prefixes ran on different runners and compare machines at least as much as kernels. A platform that is absent did not report; it did not pass.
All numbers (71 rows, representative targets)
runnernshapeus/pairfftw usmkl usvs fftwvs mklmatches numpy
Haswell (2x Xeon E5-2698 v3)6464x5120.0970.20.22.2x1.9xyes
Haswell (2x Xeon E5-2698 v3)12864x5120.2080.50.72.5x3.2xyes
Haswell (2x Xeon E5-2698 v3)25664x5120.4321.21.62.8x3.6xyes
Haswell (2x Xeon E5-2698 v3)51264x5121.3122.33.21.8x2.4xyes
Haswell (2x Xeon E5-2698 v3)102464x5122.2695.26.82.3x3.0xyes
Haswell (2x Xeon E5-2698 v3)204864x5126.93813.513.81.9x2.0xyes
Haswell (2x Xeon E5-2698 v3)409664x51214.89525.428.61.7x1.9xyes
Haswell (2x Xeon E5-2698 v3)819264x51231.76961.566.21.9x2.1xyes
Haswell (2x Xeon E5-2698 v3)1638464x51270.124131.7144.61.9x2.1xyes
Haswell (2x Xeon E5-2698 v3)3276864x512171.920344.8353.32.0x2.1xyes
Haswell (2x Xeon E5-2698 v3)6553632x256399.454712.3845.91.8x2.1xyes
dev1 (Ryzen 9 5950X)6464x5120.033----yes
dev1 (Ryzen 9 5950X)12864x5120.059----yes
dev1 (Ryzen 9 5950X)25664x5120.136----yes
dev1 (Ryzen 9 5950X)51264x5120.345----yes
dev1 (Ryzen 9 5950X)102464x5120.827----yes
dev1 (Ryzen 9 5950X)204864x5122.022----yes
dev1 (Ryzen 9 5950X)409664x5124.332----yes
dev1 (Ryzen 9 5950X)819264x51210.249----yes
dev1 (Ryzen 9 5950X)1638464x51218.614----yes
dev1 (Ryzen 9 5950X)3276864x51242.067----yes
dev1 (Ryzen 9 5950X)6553632x25688.611----yes
dev1 (Ryzen 9 5950X)13107216x128206.942----yes
dev1 (Ryzen 9 5950X)2621448x64454.511----yes
dev1 (Ryzen 9 5950X)5242884x321047.939----yes
dev1 (Ryzen 9 5950X)10485762x162255.628----yes
linux-arm646464x5120.1050.2-2.4x-yes
linux-arm6412864x5120.2110.6-2.7x-yes
linux-arm6425664x5120.7421.4-1.8x-yes
linux-arm6451264x5121.5133.2-2.1x-yes
linux-arm64102464x5123.2586.8-2.1x-yes
linux-arm64204864x5127.28815.4-2.1x-yes
linux-arm64409664x51215.08834.1-2.3x-yes
linux-arm64819264x51232.61676.3-2.3x-yes
linux-arm641638464x51266.823169.6-2.5x-yes
linux-arm643276864x512141.060366.7-2.6x-yes
linux-arm646553632x256295.786804.2-2.7x-yes
linux-arm6413107216x128680.5901677.6-2.5x-yes
linux-arm642621448x641499.8283698.8-2.5x-yes
linux-arm645242884x323366.0989347.2-2.8x-yes
linux-arm6410485762x167253.28019698.9-2.7x-yes
linux-x86_646464x5120.0510.10.11.4x1.8xyes
linux-x86_6412864x5120.0870.20.21.8x2.8xyes
linux-x86_6425664x5120.2170.30.51.5x2.4xyes
linux-x86_6451264x5120.5381.11.42.1x2.7xyes
linux-x86_64102464x5121.1812.33.31.9x2.8xyes
linux-x86_64204864x5123.0755.66.91.8x2.3xyes
linux-x86_64409664x5126.76710.815.11.6x2.2xyes
linux-x86_64819264x51214.28725.335.41.8x2.5xyes
linux-x86_641638464x51227.81951.074.51.8x2.7xyes
linux-x86_643276864x51262.825126.5165.02.0x2.6xyes
linux-x86_646553632x256141.009300.6378.12.1x2.7xyes
linux-x86_6413107216x128331.623580.62014.81.8x6.1xyes
linux-x86_642621448x641079.9841331.45819.71.2x5.4xyes
linux-x86_645242884x321565.3324992.12857.23.2x1.8xyes
linux-x86_6410485762x163466.67010530.46290.73.0x1.8xyes
macos-arm646464x5120.0450.1-2.3x-yes
macos-arm6412864x5120.1180.3-2.4x-yes
macos-arm6425664x5120.4100.6-1.5x-yes
macos-arm6451264x5120.8471.3-1.6x-yes
macos-arm64102464x5121.6783.3-2.0x-yes
macos-arm64204864x5124.33010.4-2.4x-yes
macos-arm64409664x5128.28914.9-1.8x-yes
macos-arm64819264x51218.71839.5-2.1x-yes
macos-arm641638464x51243.823128.7-2.9x-yes
macos-arm643276864x51290.964359.1-3.9x-yes
macos-arm646553632x256193.217651.6-3.4x-yes
macos-arm6413107216x128490.3001692.8-3.5x-yes
macos-arm642621448x641152.7412962.9-2.6x-yes
macos-arm645242884x322034.7736478.0-3.2x-yes
macos-arm6410485762x164316.34215274.9-3.5x-yes