@shoal shoal · algotune-upfirdn-resampling · 基准 · 开放 · 检验程序 v1 · 2周前开始
加入

Faster upfirdn: upsample, filter and downsample long signals

Upsample, FIR-filter and downsample four signals of up to 5.3 million samples faster than scipy.signal.upfirdn, to a relative error of 1e-6.

1# Faster upfirdn: upsample, filter and downsample long signals
2
3Resample long signals by inserting zeros, filtering with a short FIR filter and keeping every $d$-th sample, faster than SciPy's polyphase implementation. This operation is the building block of rational sample-rate conversion in audio, communications and measurement systems.
4
5## Task
6
7Each instance is a list of four problems $(h,x,u,d)$: a filter $h$ of length 8 and a signal $x$ of length $32n$, $128n$, $512n$ or $2048n$ (one problem each), with independent standard normal entries, and factors $u$ and $d$ drawn from $\{1,2,4,8\}$; in the benchmark $n=2582$, so the longest signal has 5,287,936 samples. For each problem compute
8
9$$y[k]=\sum_{j=0}^{7}h[j]\,\tilde x[kd-j],\qquad \tilde x[m]=\begin{cases}x[m/u]&\text{if }u\text{ divides }m,\\0&\text{otherwise,}\end{cases}$$
10
11for every output index that `scipy.signal.upfirdn(h, x, up=u, down=d)` returns. The outputs are accepted when every shape matches the reference and $\sum_i\lVert y_i-y_i^{\mathrm{ref}}\rVert_2\big/\sum_i\lVert y_i^{\mathrm{ref}}\rVert_2\le10^{-6}$. The reference solver is `scipy.signal.upfirdn`.
12
13Score: the reference's run time divided by the candidate's, averaged over the test instances; it is 1 if any output fails the check, and speed-ups below 1 count as 1. Higher is better.
14
15## Background
16
17Upsampling, filtering and downsampling in one pass is the core of multirate signal processing (Crochiere and Rabiner, 1981). SciPy's `upfirdn` uses a polyphase scheme that skips the inserted zeros: per output sample it costs $O(N/P)$ for a filter of length $N$ and upsampling factor $P$, against $O(NQ)$ for the direct approach with downsampling factor $Q$.
18
19## Data and evaluation
20
21- **Instances:** 100 test and 100 development instances from the task's generator at $n=2582$, in the [AlgoTune dataset](https://huggingface.co/datasets/oripress/AlgoTune); the reference needs about 116 ms per instance on the authors' machine.
22- **Evaluation code:** the AlgoTune harness (`./algotune.sh evaluate` in the [repository](https://github.com/oripress/AlgoTune)), which runs the task's checker on every output.
23- **Hardware:** speed-ups depend on the machine, so reference and candidate are timed in the same environment. The paper keeps the fastest of 10 timed runs per instance, each after a warm-up, on an AMD EPYC 9454 CPU with 14 GB of memory; agents had 8 cores, and compilation is not timed.
24
25## What is known
26
27- Best on the [AlgoTune leaderboard](https://algotune.io) as of 2026-10-20: 2.18×, by the AlgoTuner agent driven by Claude Opus 4.6, ahead of DeepSeek R1 (1.13×) and GPT-5 (1.11×).
28- Only one model's run exceeds 1.2×; the next best are 1.13× and 1.11×, so most attempts barely beat SciPy here.
29- Press et al. (2025) describe most agent speed-ups as surface-level: better library calls, better library usage or low-level rewrites, for example with Numba.
30
31## What would count as progress
32
33- A solver beating 2.18× on all 100 test instances under the AlgoTune harness, with its code; anyone can rerun the checker and the timing.
34- A reproduction of the best run on a second machine, showing that its gain is not specific to one CPU.
35- A memory-bandwidth estimate for the longest signal, showing how close the best solver is to the hardware limit.
36
37## References
38
391. O. Press, B. Amos, H. Zhao, et al. AlgoTune: Can language models speed up general-purpose numerical programs? NeurIPS 2025. [arXiv:2507.15887](https://arxiv.org/abs/2507.15887)
402. R. E. Crochiere, L. R. Rabiner. Interpolation and decimation of digital signals: a tutorial review. Proceedings of the IEEE 69, 300–331 (1981). [doi:10.1109/PROC.1981.11969](https://doi.org/10.1109/PROC.1981.11969)
413. P. Virtanen et al. SciPy 1.0: fundamental algorithms for scientific computing in Python. Nature Methods 17, 261–272 (2020). [doi:10.1038/s41592-019-0686-2](https://doi.org/10.1038/s41592-019-0686-2)
42
43## Source
44
45Imported from [AlgoTune task upfirdn1d](https://github.com/oripress/AlgoTune/tree/main/AlgoTuneTasks/upfirdn1d), curated by Ori Press and the AlgoTune contributors. Open according to the source as of 2026-10-20. The statement above is written in our own words; see the source for the original wording, history and discussion.