快速安装指南#

cuFFTDx 库作为 MathDx 软件包的一部分发布。要下载包含 cuFFTDx 的最新 MathDx 软件包版本,请访问 https://developer.nvidia.com/cufftdx-downloads 网站。

注意

MathDx 软件包包含

  • cuBLASDx,用于选定的线性代数函数,如通用矩阵乘法 (GEMM),

  • cuFFTDx,用于 FFT 计算,

  • cuSolverDx,用于选定的稠密矩阵分解和求解例程,

  • cuRANDDx,用于随机数生成。

MathDx 库旨在在单个项目中协同工作。

请注意,对于使用多个设备扩展库的项目,所有库必须来自同一 MathDx 版本。软件包中包含此类融合的示例。

在您的项目中使用 cuFFTDx#

cuFFTDx 是一个仅头文件的库,因此要使用它,用户只需将包含 cufftdx.hpp 和 commonDx 的目录包含到他们的编译命令中即可。所有其他要求都在 要求 部分列出。最简单的方法是使用 MathDx 包含目录

nvcc -std=c++17 -arch sm_XY (...) -I<mathdx_include_dir> <your_source_file>.cu -o <your_binary>

当您将 MathDx YY.MM 软件包 tarball 解压缩到 <your_directory> 中时,cufftdx.hpp 文件将在以下位置可用

  • <your_directory>/nvidia/mathdx/yy.mm/include/

您可以查看与 cuFFTDx 示例一起提供的 Makefile,以检查它们的编译方式。

注意

自 1.2.1 版本起,cuFFTDx 对 CUTLASS 库具有间接依赖性。如果未使用其他 Dx 库,则可以通过定义 CUFFTDX_DISABLE_CUTLASS_DEPENDENCY 宏来禁用该依赖性。如果使用了其他 Dx 库,定义 CUFFTDX_DISABLE_CUTLASS_DEPENDENCY 可能会导致编译错误。

注意

自 1.3.0 版本起,cuFFTDx 提供了一种优化用户项目最终二进制文件大小的方法。这通过将所有可执行文件链接到一个包含 FFT 计算所需预计算常量的共享对象来实现,从而在转换单元之间共享这些常量。当在可执行文件中包含大量带有 cuFFTDx 内核的转换单元(.cu 源文件)时,尤其推荐使用此方法。要使用这种新优化进行编译,只需将 -DCUFFTDX_USE_SEPARATE_TWIDDLES -rtc=true 添加到编译命令中,并将 <mathdx_dir>/src/cufftdx/lut.cu 包含到要编译的文件中。

nvcc -DCUFFTDX_USE_SEPARATE_TWIDDLES -std=c++17 -arch sm_XY (...) -rtc=true -I<mathdx_include_dir> <cufftdx_include_dir>/liblut/lut.cu <your_source_file>.cu <mathdx_include_dir> -o <your_binary>

与 cuFFTDx 示例一起提供的 Makefile 包含这些额外的编译标志。以下命令将使用此优化构建示例。

make all_twiddles

在您的 CMake 项目中使用 cuFFTDx#

MathDx 软件包提供了配置文件,简化了在其他 CMake 项目中使用 cuFFTDx 的过程。在使用 find_package 找到 mathdx 后,用户必须将 mathdx::cufftdx 链接到他们的目标。这会将包含目录 cufftdx_INCLUDE_DIRSmathdx::commondx 依赖项以及 C++17 要求传播到他们的目标。

find_package(mathdx REQUIRED COMPONENTS cufftdx CONFIG)
target_link_libraries(YourProgram mathdx::cufftdx)

您可以使用 PATHS 选项传递 MathDx 软件包的路径

find_package(mathdx REQUIRED COMPONENTS cufftdx CONFIG PATHS "<your_directory>/nvidia/mathdx/yy.mm/")

或者,您可以在项目的 cmake 配置期间设置 mathdx_ROOT

cmake -Dmathdx_ROOT="<your_directory>/nvidia/mathdx/yy.mm/" (...)

注意

自 1.2.1 版本起,cuFFTDx 对 CUTLASS 库具有间接依赖性。如果未使用其他 Dx 库,则可以在 find_package(...) 之前添加 set(mathdx_cufftdx_DISABLE_CUTLASS TRUE) 来禁用该依赖性。如果使用了其他 Dx 库,禁用对 CUTLASS 的依赖性可能会导致编译错误。

注意

自 1.3.0 版本起,提供了一个新目标,可以在包含 cuFFTDx 时优化最终二进制文件的大小。这通过将所有可执行文件链接到一个包含 FFT 计算所需预计算常量的共享对象来实现,从而在转换单元之间共享这些常量。当在可执行文件中包含大量带有 cuFFTDx 内核的转换单元(.cu 源文件)时,尤其推荐使用此方法。您必须通过添加 set(cufftdx_SEPARATE_TWIDDLES_CUDA_ARCHITECTURES <your cuda architectures>) 或设置默认变量 CMAKE_CUDA_ARCHITECTURES 来设置该目标的编译架构,例如,set(cufftdx_SEPARATE_TWIDDLES_CUDA_ARCHITECTURES 90-real)。必须在执行 find_package(...) 之前进行设置。此外,由于为预计算值创建了一个单独的对象文件,您的可执行目标应启用 cuda 可分离编译:set_property(TARGET YourProgram PROPERTY CUDA_SEPARABLE_COMPILATION ON)

set(cufftdx_SEPARATE_TWIDDLES_CUDA_ARCHITECTURES YourChosenArchitecture)
find_package(mathdx REQUIRED COMPONENTS cufftdx CONFIG)
target_link_libraries(YourProgram mathdx::cufftdx_separate_twiddles_lut)
set_property(TARGET YourProgram PROPERTY CUDA_SEPARABLE_COMPILATION ON)

定义的变量#

mathdx_cufftdx_FOUND, cufftdx_FOUND

如果找到 cuFFTDx,则为 True。

cufftdx_INCLUDE_DIRS

cuFFTDx 包含目录。

mathdx_INCLUDE_DIRS

MathDx 包含目录。

mathdx_cutlass_INCLUDE_DIR

CUTLASS 包含目录。

mathdx_VERSION

MathDx 软件包版本号,格式为 X.Y.Z

cuFFTDx_VERSION

cuFFTDx 版本号,格式为 X.Y.Z

MathDx/cuFFTDx 版本矩阵

MathDx

cuFFTDx

22.02

1.0.0

22.11

1.1.0

24.01

1.1.1

24.04

1.2.0

24.08

1.2.1