工具介绍
Vulkan/CUDA/HIP/OpenCL/Level Zero/Metal 快速傅里叶变换库
VkFFT - Vulkan/CUDA/HIP/OpenCL/Level Zero/Metal 高速傅里叶变换库 VkFFT 是一个高效的 GPU 加速多维高速傅里叶变换库,适用于 Vulkan/CUDA/HIP/OpenCL/Level Zero/Metal 项目。VkFFT 的目标是为社区提供一个开源替代方案,同时实现更好的性能。VkFFT 使用 C 语言编写,支持 Vulkan、CUDA、HIP、OpenCL、Level Zero 和 Metal 作为后端。
目前支持的功能: - 1D/2D/3D/ND 系统 - 为任意数量的维度指定 VKFFT_MAX_FFT_DIMENSIONS。 - FFT 的前向和逆向方向。 - 支持大 FFT 维度大小。 当前限制: 所有类型的变换在所有维度中大约为 2^32。 取决于设备上可用的共享内存量。 - Radix-2/3/4/5/7/8/11/13 FFT。 使用 radix 3、5、7、11 和 13 的序列与 2 的幂具有可比的性能。 - Rader 的 FFT 算法,适用于从 17 到最大共享内存长度 (~10000) 的素数。 通过内联并无需额外的内存传输。 - Bluestein 的 FFT 算法,适用于所有其他序列。 通过使用零填充和 VkFFT 的合并卷积支持,优化了尽可能减少内存传输。 - 单精度、双精度、半精度和四倍精度 (双双精度) 支持。 双精度和四倍精度使用 CPU 生成的 LUT 表。 半精度仍然在单精度中执行所有计算,并仅使用半精度来存储数据。 - 所有变换均在原地执行,不会造成性能损失。 通过选择不同的输入/输出缓冲区来支持非原地变换。 - 不需要额外的转置上传。 注意: 可以使用额外的缓冲区对 Four Step FFT 算法后重新排序数据 (对于大序列)。 对卷积而言无关紧要 - 它们会返回到输入顺序 (节省内存)。 - 复数到复数 (C2C)、实数到复数 (R2C)、复数到实数 (C2R) 变换以及实数到实数 (R2R) 的 I、II、III 和 IV 类型的离散余弦变换。 R2R、R2C 和 C2R 经过优化,可在 GPU 上运行。