Commit 6314281
Add spqlios-intl: interleaved-format FFT backend
Add a new FFT backend at thirdparties/spqlios-intl/ that uses interleaved
complex layout [re0,im0,re1,im1,...] instead of SPQLIOS's split layout.
Enable with -DUSE_SPQLIOS_INTL=ON. This sets USE_INTERLEAVED_FORMAT and
links the new library.
Components:
- fft_processor_spqlios_intl.h: class with same interface as SPQLIOS
- fft_processor_spqlios_intl.cpp: C++ FFT/IFFT with AVX2 intrinsics
- Complex multiply via unpacklo/unpackhi + vfmaddsub (3 ops)
- Cooley-Tukey DIT (forward) / Gentleman-Sande DIF (inverse)
- Interleaved trig tables
- AVX2 MulInFD/FMAInFD for interleaved format in mulfft.hpp
Status: functionally correct (passes polymul, externalproduct tests).
Performance is currently ~2x slower than optimized split SPQLIOS because
the FFT butterfly lacks stage fusion. The interleaved MulInFD/FMAInFD
use vfmaddsub for complex multiply (3 loads + 1 store per 2 complex
values vs 6 loads + 2 stores for split format).
Next step: port the fused butterfly passes (Option C/D) to the
interleaved FFT to match or beat split SPQLIOS performance.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent c7c505c commit 6314281
File tree
7 files changed
+682
-3
lines changed- benchmark
- include
- src
- thirdparties/spqlios-intl
7 files changed
+682
-3
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
| 86 | + | |
86 | 87 | | |
87 | 88 | | |
88 | 89 | | |
| |||
191 | 192 | | |
192 | 193 | | |
193 | 194 | | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
194 | 202 | | |
195 | 203 | | |
196 | 204 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
12 | 17 | | |
13 | 18 | | |
14 | 19 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
| 21 | + | |
20 | 22 | | |
21 | 23 | | |
22 | 24 | | |
| |||
217 | 219 | | |
218 | 220 | | |
219 | 221 | | |
220 | | - | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
221 | 234 | | |
222 | 235 | | |
223 | 236 | | |
| |||
279 | 292 | | |
280 | 293 | | |
281 | 294 | | |
282 | | - | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
283 | 306 | | |
284 | 307 | | |
285 | 308 | | |
| |||
347 | 370 | | |
348 | 371 | | |
349 | 372 | | |
350 | | - | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
351 | 386 | | |
352 | 387 | | |
353 | 388 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
61 | 65 | | |
62 | 66 | | |
63 | 67 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
0 commit comments