需求与功能


要求

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

  • 双向信息流,从用户通过Operators流向描述符,以及从描述符通过Traits流向用户。

  • 使用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块维度进行细粒度定制。