Layer 01
Public surface
createFFTEngine()、real-input FFT API、CPU shortcuts 和 utilities 构成公开入口。
这页按“系统笔记”来写,而不是按宣传文案来写。重点是把 GPU 路径从哪里开始、CPU 路径仍然在哪些地方是权威实现、以及为什么当前设计刻意保持收敛,讲清楚。
系统地图
这个项目的核心是一条很窄但很清楚的执行链:公开 API 暴露 FFT 契约,执行层负责 plan 与资源,GPU pass 负责核心蝶形变换,应用级工具仍停留在 CPU。
Layer 01
createFFTEngine()、real-input FFT API、CPU shortcuts 和 utilities 构成公开入口。
Layer 02
FFTEngine 负责尺寸校验、execution plan cache、buffer 生命周期与 dispatch 顺序。
Layer 03
bit reversal、butterfly、scale 等 WGSL compute pass 组成 GPU FFT 主路径。
Layer 04
频谱分析和图像滤波建立在 CPU FFT 与窗口函数之上,不冒充 GPU-native 功能。
| 表面 | 后端现实 | 为什么重要 |
|---|---|---|
createFFTEngine() | WebGPU 驱动的 FFT 执行核心 | 这是主要加速路径 |
cpuFFT() / cpuIFFT() | CPU 参考实现 | 负责通用回退和 utility 复用 |
rfft() / irfft() | GPU / CPU 共享的 real-input 契约 | 让实值路径边界显式化 |
createSpectrumAnalyzer() | CPU-only helper | 不能被描述成 GPU-native |
createImageFilter() | CPU-only helper | 内部仍基于 CPU 2D FFT |
| 决策 | 为什么存在 | 带来的后果 |
|---|---|---|
| Radix-2 Cooley-Tukey DIT | 最适合规整 GPU 内存访问与可维护代码 | 输入尺寸必须保持为 2 的幂 |
| 2D FFT 采用行列分解 | 复用 1D kernel,而不是额外建立 2D 蝶形体系 | 心智模型里会多出显式转置步骤 |
workgroupSize = 256 | closeout 阶段保持 shader 表面稳定 | 更激进调优依赖具体硬件 profile |
| bank-conflict 优化默认关闭 | 给硬件特定优化留空间,但不改变默认契约 | 性能优化需要实测再开启 |
src/shaders/sources.ts 是 shader 真源 | 避免实现和参考副本漂移 | WGSL 变更保持集中 |
| 层级 | 文件 | 职责 |
|---|---|---|
| 公开 API | src/index.ts, src/types.ts | 暴露支持的契约 |
| 核心引擎 | src/core/fft-engine.ts, src/core/gpu-fft-backend.ts | 校验、资源生命周期、plan 复用 |
| Shader 真源 | src/shaders/sources.ts | Canonical WGSL source strings |
| CPU 工具层 | src/utils/**, src/apps/** | 回退路径与 CPU-only helper |
| 架构说明 | docs/architecture/rfc/** | 以普通文档形式保留的历史设计上下文 |