需求与功能¶
要求¶
cuFFTDx库是一个仅包含头文件的CUDA C++库。因此,使用该库所需的软件列表相对较少。用户需要:
CUDA Toolkit 11.0 或更新版本
支持的CUDA编译器
支持的主机编译器(需要C++17)
(可选) CMake (版本3.18或更高)
支持的编译器¶
CUDA编译器:
NVCC 11.0.194+ (CUDA Toolkit 11.0 或更新版本)
(实验性支持) NVRTC 11.0.194+ (CUDA Toolkit 11.0 或更新版本)
主机/C++编译器:
GCC 7+
Clang 9+ (仅限Linux/WSL2系统)
(初步支持) MSVC 1920+ (Windows/Visual Studio 2019 16.0 或更新版本)
警告
使用MSVC作为CUDA主机编译器进行编译时,需要启用__cplusplus
(/Zc:__cplusplus)。
为此,请将-Xcompiler "/Zc:__cplusplus"作为选项传递给NVCC。如果未能这样做,可能会导致错误报告称无法将dim3类的变量声明为constexpr。
注意
cuFFTDx会对不受支持的编译器版本发出错误提示,在编译时可以通过定义CUFFTDX_IGNORE_DEPRECATED_COMPILER来忽略这些错误。但请注意,cuFFTDx不保证能在其不支持的编译器版本上正常工作。
注意
cuFFTDx 会对不受支持的 C++ 标准版本发出错误提示,这些错误可以通过在编译时定义 CUFFTDX_IGNORE_DEPRECATED_DIALECT 来消除。cuFFTDx 不保证能在 cuFFTDx 不支持的 C++ 标准版本上正常工作。
支持的功能¶
- Supported functions include:
创建块描述符,在单个CUDA块中运行集体FFT操作(由一个或多个线程协作计算一个或多个FFT)。参见块操作符。
创建每个线程运行单个FFT操作的线程描述符。此函数可能需要更多cuFFTDx的专业知识才能获得更高性能的正确结果。参见Thread Operator。
使用SM Operator针对特定GPU架构进行优化。这允许用户通过建议参数配置描述符,以针对性能进行调优。
cuFFTDx 支持在范围 [0; max_size] 内选定的FFT尺寸,其中 max_size 取决于精度和CUDA架构,如下表所示;同时也支持范围 [0; max_size_fp64/2] 内的所有FFT尺寸,其中 max_size_fp64 是给定CUDA架构下双精度的最大FFT尺寸。然而,并非所有尺寸、精度、每线程元素数和每块FFT数的组合都是正确且可用的。下表总结了可用的配置:
注意
实数和复数之间的块FFT在每个精度下都有额外的可用大小(在表格中以加号标注),但仅当在RealFFTOptions算子中使用real_mode::folded值时才能访问。类似地,线程执行可以对所有偶数大小的常规范围两倍使用real_mode::folded,如下表所示。更多详情请参阅RealFFTOptions Operator。
精度 |
线程FFT |
块FFT |
||||||
|---|---|---|---|---|---|---|---|---|
C2C和R2C/C2R常规模式 |
R2C/C2R折叠模式 |
架构 |
C2C和R2C/C2R常规模式 |
R2C/C2R折叠模式 |
||||
半精度 |
[2; 64] |
偶数范围: [4; 128] |
75 |
[2; 4096] |
2的幂次范围: [4; 8192] |
|||
70;72;86;89 |
[2; 16384] |
范围内的2的幂次方: [4; 32768] |
||||||
80;87;90 |
[2; 32768] |
范围内的2的幂次:[2; 65536] |
||||||
浮点数 |
[2; 64] |
偶数范围:[4; 128] |
75 |
[2; 4096] |
2的幂次方范围:[2; 8192] |
|||
70;72;86;89 |
[2; 16384] |
范围内的2的幂次方: [2; 32768] |
||||||
80;87;90 |
[2; 32768] |
范围内的2的幂次:[2; 65536] |
||||||
双精度 |
[2; 32] |
偶数范围:[4; 64] |
75 |
[2; 2048] |
2的幂次范围:[2; 4096] |
|||
70;72;86;89 |
[2; 8192] |
范围内的2的幂次:[2; 16384] |
||||||
80;87;90 |
[2; 16384] |
范围内的2的幂次:[2; 32768] |
||||||
注意
cuFFTDx 0.3.0 版本新增了对[0; max_size_fp64/2]范围内所有尺寸的初步支持。大多数尺寸需要您通过全局内存分配创建额外的工作空间。有关工作空间的更多详情,请参阅Make Workspace Function。您可以通过FFT::requires_workspace特性检查给定的FFT是否需要工作空间。
提示
自 cuFFTDx 1.1.0 起,可以使用 cufftdx::is_supported 来检查给定的 CUDA 架构是否支持某个 FFT 描述。
以下尺寸的FFT不需要工作区:
2的幂次方,最大到32768
3的幂次方,最高至19683
5的幂次方,最高至15625
6的幂次方,最高至1296
7的幂次方直到2401
10的幂次方,最高到10000
11的幂次方直到1331
12的幂次方直到1728
- In the future versions of cuFFTDx:
其他配置可能不需要工作区要求。
不需要工作空间的FFT配置将继续保持这一特性。
- Functionality not yet supported include:
输入/输出存储在全局内存中。输入数据必须位于寄存器或共享内存中。
BlockDim Operator,支持对CUDA块维度进行细粒度定制。