发行说明

cuFFTMp 11.2.6 EA (HPC-SDK 24.07)

新功能

  • 支持具有多节点 NVLINK (MNNVL) 的系统。

  • 支持 NVSHMEM 3.0.6,它提供 NVSHMEM 主机和设备库之间的 ABI 向后兼容性。从 NVSHMEM 3.0.6 开始,较新的主机库将继续与同一主版本中的早期设备库版本兼容。这意味着 cuFFTMp 11.2.6(与 NVSHMEM 3.0.6 一起发布)可以链接到未来的 NVSHMEM 3.x 主机库。有关更多详细信息,请参阅兼容性

弃用

  • 不适用

已知问题

  • cuFFT LTO 功能目前在 cuFFTMp 中不受支持。

已解决的问题

  • 先前版本中 nvshmem_init/nvshmem_finalize 的资源分配问题已修复。

cuFFTMp 11.0.14 EA (HPC-SDK 23.11)

新功能

  • 支持 CUDA 12 上的 Grace-Hopper CPU-GPU 架构。

弃用

  • 不适用

已知问题

  • NVSHMEM 2.10.1 有一个错误,导致首次调用 nvshmem_finalize 释放所有资源。任何后续的 nvshmem_init 都将重新初始化所有资源。cuFFTMp 仅在 NVSHMEM 尚未初始化时才初始化它,并在所有 plan 都被销毁时完成 NVSHMEM 的最终化。因此,在第一次 nvshmem_finalize 之后和任何后续 nvshmem_init 之前的任何 NVSHMEM 或 cuFFTMp API 调用(nvshmem_finalize 除外)都可能导致应用程序崩溃。一种解决方法是在整个应用程序生命周期中保持至少一个 cuFFTMp plan 处于活动状态,并在最后一次调用 nvshmem_finalize 之前销毁它。

例如,这可能会崩溃

nvshmem_init(...)
void* ptr = nvshmem_malloc(...)
cufftCreate(...)
cufftMpAttachComm(...)
cufftXtMakePlan(...)
cufftExecC2C(...)
cufftDestroy(...) // Will finalize all NVSHMEM resources (bug)
nvshmem_free(ptr) // May crash
nvshmem_finalize()

应替换为

nvshmem_init(...)
void* ptr = nvshmem_malloc(...)
cufftCreate(...)
cufftMpAttachComm(...)
cufftXtMakePlan(...)
cufftExecC2C(...)
nvshmem_free(ptr) // Will not crash
cufftDestroy(...)
nvshmem_finalize()

有关工作示例,请参阅cuFFTMp 和 NVSHMEM C++ 示例

  • NVSHMEM 2.10.1 有轻微的资源泄漏,导致在进程生命周期内 NVSHMEM 可以初始化/最终化的次数受到限制。此错误通过死锁或在 cuFFTMp plan 创建时发生段错误来体现。一种解决方法是在整个应用程序中保持至少一个 cuFFTMp plan 处于活动状态,以避免重复的 nvshmem_init / nvshmem_finalize

已解决的问题

  • 不适用

cuFFTMp 11.0.5 EA (HPC-SDK 23.3)

新功能

  • cuFFTMp 11.0.5 集成了 NVSHMEM 2.8,并同时支持 CUDA 11 和 CUDA 12。匹配的 libnvshmem_host.so 库(具有匹配的 NVSHMEM 和 CUDA 版本)应在运行时可用。

  • 添加了对 Hopper GPU 架构的支持。

  • 添加了 NVSHMEM 互操作性支持。应用程序和库现在都可以使用 NVSHMEM 并共享资源,例如 NVSHMEM 分配的缓冲区。这要求应用程序和所有启用 NVSHMEM 的库都动态链接 libnvshmem_host.so

  • cuFFTMp 现在可以在没有 MPI 通信器的情况下进行引导。有关更多详细信息,请参阅 cufftMpAttachComm

  • cufftXtSetDistribution API 已更改,请参阅 cufftXtSetDistribution

  • 添加了一个新的 cufftXtSetSubformatDefault API,让用户无需通过 cufftExecC2CcufftXtExec 和类似 API 的 cuFFT 多 GPU 描述符即可使用 cuFFTMp。请参阅 cufftXtSetSubformatDefault

  • 改进了单节点、3D、复数到复数变换的性能。

弃用

  • 不适用

已知问题

  • HPC-SDK 23.3 发布了 NVSHMEM 2.9,但 cuFFTMP 用户应在运行时指向兼容文件夹中的 NVSHMEM 2.8。请参阅兼容性

已解决的问题

  • cuFFTMp 现在支持与 cuFFT 相同的 GPU 架构,用于所有单进程功能

cuFFTMp 10.8.1 EA (HPC-SDK 23.1)

新功能

  • 不适用

弃用

  • 不适用

已知/已解决问题

  • HPC-SDK 23.1 发布了 NVSHMEM 2.8,但 cuFFTMP 用户应在运行时指向兼容文件夹中的 NVSHMEM 2.6。请参阅兼容性

cuFFTMp 10.8.1 EA (HPC-SDK 22.5+)

cuFFTMp 10.8.1 集成了 NVSHMEM 2.5.0,并修复了以下指示的几个问题。

新功能

  • 不适用

弃用

  • 不适用

已知/已解决问题

  • 已解决单节点、单精度、3D、复数到复数 2 的幂次变换中 Z > 8192 产生不正确结果的问题。

  • cuFFTMp 的版本控制已得到纠正。展望未来,cuFFTMp 的版本控制将类似于 cuFFT。请参阅版本控制

cuFFTMp 0.0.2 EA (HPC-SDK 22.3)

新功能

  • 改进了 cufftXtSetDistribution 和分布式描述符的性能。这有效地为 Pencil 数据分解提供了全面支持。

  • 改进了 Reshape API 的性能。

弃用

不适用

已知/已解决问题

  • 单节点、单精度、3D、复数到复数 2 的幂次变换中 Z > 8192(例如大小为 2x2x16384 的变换)在使用内置 Slab 分解(即 CUFFT_XT_FORMAT_INPLACECUFFT_XT_FORMAT_INPLACE_SHUFFLED)时将导致不正确的结果。这将在 cuFFTMp 的未来版本中修复。cufftXtSetDistribution 可以用作一种解决方法。

独立 EA (2021 年 11 月)

新功能

  • 与 MPI 互操作的新多进程 API。

  • 内置 Slab 分解(使用 CUFFT_XT_FORMAT_INPLACECUFFT_XT_FORMAT_INPLACE_SHUFFLED 描述符)使用 cufftMpAttachComm

  • 自定义数据分解(使用 CUFFT_XT_FORMAT_DISTRIBUTED_INPUTCUFFT_XT_FORMAT_DISTRIBUTED_OUTPUT 描述符)使用 cufftXtSetDistributioncufftMpAttachComm

  • cufftXtMalloccufftXtFreecufftXtMemcpy 与上述完全兼容

  • 具有 cufftReshapeHandle 和相关 API 的独立分布式 reshape API

此外,以下限制已解除

  • C2R/Z2D 现在支持 3D 中的 CUFFT_XT_FORMAT_INPLACE

  • R2C/D2Z 现在支持 3D 中的 CUFFT_XT_FORMAT_INPLACE_SHUFFLED

以下限制已为 CUFFT_XT_FORMAT_INPLACECUFFT_XT_FORMAT_INPLACE_SHUFFLED 解除

  • “维度必须分解为小于或等于 127 的素数”

  • “单精度最大维度大小为 4096”

  • “双精度最大维度大小为 2048”

以下限制已为 R2C/D2Z/C2R/Z2D 和 CUFFT_XT_FORMAT_INPLACECUFFT_XT_FORMAT_INPLACE_SHUFFLED 解除

  • “最快变化的维度大小需要为偶数”

弃用

不适用

已知/已解决问题

  • cufftXtMemcpyCUFFT_COPY_DEVICE_TO_DEVICE 在之前所有版本的 cuFFT 中为 2D 和 3D 变换返回错误的结果。这已得到修复。