1. [主页](/)
2. 
3. /NVIDIA cuFFT

 ![](https://developer.download.nvidia.com/images/cuFFT-flat.svg)
# NVIDIA cuFFT

NVIDIA cuFFT 库提供 GPU 加速的快速里叶变换 (FFT) 实现，用于构建跨学科的应用程序，例如深度学习、计算机视觉、计算物理学、分子动力学、量子化学以及地震和医学成像。

# [CUDA 工具包](/cuda-toolkit) 中提供

### cuFFT

用于计算独立里叶变换器的 divide-and-conquer 算法。多 GPU 支持在单个节点中多达 16 个 GPU 上进行 FFT 计算。

[了解详情](#section-cufft)

# [HPC SDK](/hpc-sdk) 中提供

### cuFFT

用于计算独立里叶变换器的 divide-and-conquer 算法。多 GPU 支持在单个节点中多达 16 个 GPU 上进行 FFT 计算。

[了解详情](#section-cufft)

### cuFFTMp

多节点支持百亿亿次级 (Exascale) 问题中的 FFT。

[了解详情](#section-cufftmp)

# 可独立使用

### cuFFTDx 设备 API

cuFFT 设备扩展，用于在 CUDA 内核中执行 FFT 计算。

[了解详情并下载](#section-cufftdx)

* * *

## cuFFT

FFT 是一种分割和征服算法，用于高效计算复杂或有价值数据集的离散里叶变换。它是计算物理学和一般信号处理领域中应用最广泛的重要数值算法之一。cuFFT 库提供了一个用于在 NVIDIA GPU 上计算 FFT 的简单接口，允许用户在经过高度优化和测试的 FFT 库中快速利用 GPU 的浮点能力和并行性。  
  
在 GPU 之间分发计算时，cuFFT 支持使用连接到 CPU 的多达 16 个 GPU，通过其 cuFFTXt API 执行里叶变换。性能随 GPU 之间的带宽、单个 GPU 的计算能力以及要执行的 FFT 的类型和数量而变化。

[HPC SDK](https://developer.nvidia.cn/nvidia-hpc-sdk-downloads)[CUDA 工具包  
](https://developer.nvidia.cn/cuda-downloads)

主要特性

单 GPU 性能

多 GPU 性能

- 复杂和真实数据类型的 1D、2D 和 3D 转换

- 熟悉的 API，类似于西部快速里叶变换 (FFTW) 的高级接口

- 灵活的数据布局允许在单个元素和数组维度之间实现任意步长

- 流异步执行

- 半精度、单精度和双精度变换

- 批量执行

- 就地和非就地转换

- 支持多达 16 个 GPU 系统

- 线程安全且可从多个主机线程调用

cuFFT 库针对 NVIDIA GPU 上的性能进行了高度优化。下图显示了通过迁移到较新的硬件 (无需更改代码) 实现的性能提升。

# 1D 单精度 FFT
 ![A line chart displays performance boost achieved by moving to newer hardware with no code changes	](https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/cuFFT/1-d-single-precision-fft-850x480.svg)

下图将 16 个 NVIDIA Volta™ GV100 Tensor Core GPU 的性能与 8 个适用于 3D C2C FP32 FFT 的 NVIDIA Ampere 架构 GA100 Tensor Core GPU 的性能进行了比较。

  

* * *

## cuFFTDx 设备扩展

cuFFT 设备扩展程序 (cuFFTDx) 支持用户在其 CUDA 内核中执行 FFT 计算。融合数值运算可以降低延迟并提高应用性能。

[下载 cuFFTDx](https://developer.nvidia.com/cufftdx-downloads)

主要特性

性能

- 可嵌入 CUDA 内核的 FFT

- 无需在全局内存中执行不必要的高性能数据移动

- 可根据不同需求 (大小、精度、批量等) 通过选项调整 FFT 例程的选择

- 能够将 FFT 内核与其他运算融合在一起，从而节省全局内存行程

- 兼容 CUDA 工具包的未来版本

- 支持 Windows

下图显示了在使用 1D FFT 执行卷积时，与 cuFFT 主机调用相比，cuFFTDx 如何提供超过 2 倍的性能提升。

* * *

## cuFFTMp 多节点支持

多节点 FFT 功能可通过 cuFFTMp API 获得，使科学家和工程师能够解决百亿亿次级 (Exascale) 问题中的分布式 2D 和 3D FFT。该库处理机器之间的所有通信，使用户能够专注于问题的其他方面。

[HPC SDK](https://developer.nvidia.com/nvidia-hpc-sdk-downloads)

主要特性

性能

- 2D 和 3D 分布式内存 FFT

- 板 (1D) 和铅笔 (2D) 数据分解，具有任意块大小

- 兼容消息传递接口 (MPI)

- 使用 NVSHMEM 实现低延迟，并针对单节点和多节点 FFT 进行优化

随着问题规模和 GPU 数量的增加，下文按精度比较了分布式 3D FFT 的多节点弱扩展性能。该基准测试在 NVIDIA Selene 超级计算机上实现。请注意，对于 FP64 和尺寸为 16384 的3数据不适合系统。

 ![The chart compares multi-node weak scaling performance for distributed 3D FFT by precision](https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/cuFFT/multi-node-support-850x480.svg)

* * *

## cuFFT LTO EA 预览【已弃用】

**支持 LTO 的回调函数在 cuFFT 12.6 update 2 或更高版本中作为完全受支持的功能提供。cuFFT LTO 抢先体验版已弃用。**

此 cuFFT 库抢先体验预览包含对支持 LTO 的全新增强型 Linux 和 Windows 回调例程的支持。启用 LTO 的回调函数首次为 Windows 上的 cuFFT 提供回调支持。在许多用例中，这些全新的增强型回调函数可显著提升性能。  
  
此预览基于[nvJitLink](https://developer.nvidia.com/zh-cn/blog/cuda-12-0-compiler-support-for-runtime-lto-using-nvjitlink-library/)中引入的库[CUDA 工具包 12.0](https://developer.nvidia.cn/cuda-toolkit)然后，通过启用用户回调代码和库内核代码的运行时融合，利用即时链路时间优化 (JIT LTO) 进行回调。

[立即下载  
](https://developer.nvidia.com/cufftea)

主要特性

性能

- 回调 API 扩展，支持 LTO 回调例程

- 无需离线设备链接即可使用回调函数  

- 灵活的数据布局允许单个元素之间的任意步长以及单个元素和数组维度之间的数组维度面

- 为动态 cuFFT 库添加回调支持

- 向 Windows 添加回调支持

- 兼容现有的回调设备代码

- 在许多情况下，相较于非 LTO 回调例程，性能有所提升

下图比较了在 NVIDIA A100 Tensor Core 80GB GPU 上运行 cuFFT LTO EA 预览和 CUDA 工具包 11.7 中的 cuFFT 时，以最小负载和存储回调运行从复杂到复杂的 FFT 的性能。

 ![The chart compares multi-node weak scaling performance for distributed 3D FFT by precision](https://developer.download.nvidia.com/assets/blade_chart_v1_CUFFTEA.png)

* * *

## 资源

**文档：**

- [cuFFT/cuFFTXt](https://docs.nvidia.com/cuda/cufft/index.html)

- [cuFFTMp](https://docs.nvidia.com/hpc-sdk/cufftmp/index.html)

- [cuFFTDx](https://docs.nvidia.com/cuda/cufftdx/index.html)

**演示：**

- [在 cuSPARSE/cuFFT 中采用即时链路优化](https://www.nvidia.cn/on-demand/session/gtcfall21-a31155/)

- [具有灵活 C++API 的新 FFT 库](https://www.nvidia.cn/on-demand/session/gtcsiliconvalley2019-s9257/)

**示例：**

- [数学库 Github](https://github.com/NVIDIA/CUDALibrarySamples)

- [CUDA 工具包 Github](https://github.com/NVIDIA/cuda-samples)

**博客：**

- [使用 NVIDIA 数学库加速 GPU 应用程序](https://developer.nvidia.com/zh-cn/blog/accelerating-gpu-applications-with-nvidia-math-libraries/)

- [大规模使用 NVIDIA cuFFTMp FFT](https://developer.nvidia.com/zh-cn/blog/multinode-multi-gpu-using-nvidia-cufftmp-ffts-at-scale/)

**下载：**

- [CUDA 工具包](https://developer.nvidia.cn/cuda-downloads)

- [cuFFT EA](https://developer.nvidia.com/cufftea)

- [NVIDIA HPC SDK](https://developer.nvidia.com/nvidia-hpc-sdk-downloads)

- [cuFFTDx](https://developer.nvidia.com/mathdx)

* * *

 ![Decorative image representing Developer Forums](https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/cuFFT/m48-communication-chat-256px-blk.png)
#### 访问论坛

 ![Decorative image representing contact NVIDIA](https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/cuFFT/m48-information-notification-256px-blk.png)
#### 联系我们

快速链接

- [HPC SDK](https://developer.nvidia.cn/hpc-sdk)
- [CUDA 工具包](https://developer.nvidia.cn/cuda-toolkit)[下载 cuFFTDx](https://developer.nvidia.com/cufftdx-downloads)

* * *


