发行说明#

cuDSS v0.5.0#

新功能:

  • 多线程 (MT) 模式,带有用于 Linux 上的 GNU OpenMP 和 Windows 上的 VCOMP (VCOMP140.dll) 的预构建独立线程层,以及自定义用户定义的线程后端

  • CUDSS_ALG_DEFAULT 重新排序算法的多线程重新排序

  • 混合主机/设备执行模式,以支持在因式分解和求解时使用主机(提高小矩阵的性能)

  • 混合内存模式的性能和内存需求得到改进

  • 新的配置选项 CUDSS_CONFIG_PIVOT_EPSILON_ALG,用于启用枢轴 epsilon 的缩放(仅限静态本地枢轴)

  • Blackwell GPU 架构支持 (sm_100, sm_120, sm_101)

破坏性更改:

  • 更改了 cudssMatrixCreateBatchDn()cudssMatrixGetBatchDn() 的函数签名,为具有批量标量参数的数组的整数类型添加了一个额外的参数(如 nrowsncolsld

  • 更改了 cudssMatrixFormat_tcudssMatrixGetFormat() 的定义,使矩阵格式枚举值变为位标志(可以组合),并添加了一个标志 CUDSS_MFORMAT_BATCH,用于查询 cudssMatrix_t 是否为批量

  • 放弃了对 SLES 15.x(对于 x <= 5)的支持(将 SLES 的最低版本升级到 15.6),并将支持的 GLIBC 的最低版本升级到 2.28

重要的错误修复:

  • 修复了当内部对称矩阵模式的非零元素数量超过 32 位整数最大值时出现的错误 (CUDSS-417)。

  • 修复了当 MGMN 模式为某些较大的矩阵产生不正确结果时出现的错误 (CUDSS-601)

  • 修复了为混合内存模式返回的不正确内存估计值 (CUDSS-669)

cuDSS v0.4.0#

新功能:

  • 除了 CUDSS_ALG_1CUDSS_ALG_2 之外,所有重新排序算法的性能都得到了显著提升

  • 通过新的 API(如 cudssMatrixCreateBatch<Dn|Csr>() 和其他类似于现有非批量矩阵对象 API 的 API)添加了对非均匀批处理(解决具有不同矩阵和右手边的多个系统)的支持,并扩展了 cudssExecute() 以支持批处理

  • 添加了通过 cudssDataGet()CUDSS_DATA_MEMORY_ESTIMATES 查询内存估计值的支持

  • 添加了对 Ubuntu 24.04 的安装程序支持

  • 添加了对 pypi.orgpypi.nvidia.com 上的 pip wheels 以及 conda 打包的支持

破坏性更改:

  • cudssDataParam_t 枚举中添加了一个新值 CUDSS_DATA_MEMORY_ESTIMATES

  • 从此版本开始,cuDSS 对 cuBLAS 具有运行时依赖性(通常作为 CUDA 工具包的一部分提供)

重要的错误修复:

  • 添加了 CMake 配置版本文件,并修复了用于系统范围安装的 CMake 配置

已知问题:

  • 为了正确进行系统范围的安装,cudss-config.cmake 使用了 REAL_PATH,该路径仅在 cmake 3.19 及更高版本中可用(这比 Ubuntu 20.04 等的默认 cmake 版本更新)

  • 由于 OpenMPI/UCX 中的错误,带有 OpenMPI 通信层的 cuDSS 的 MGMN 模式可能会耗尽 GPU 内存。如果您遇到此问题,请考虑设置 export UCX_MEMTYPE_CACHE=nexport UCX_TLS=^cuda_ipc 或切换到 NCCL 通信后端作为解决方法。这些解决方法可能会导致性能下降。如果发生这种情况,请报告它。

  • 由于 patchelf 0.18.0 中的 bug 错误,版本为 0.4.0.2 的 Linux + x86_64 的 PIP wheels 可能无法在某些旧操作系统上运行。在受影响的系统上,ldd libcudss.so.0 将返回错误 not a dynamic executable,并且使用共享库链接应用程序将产生错误 ELF load command address/offset not properly aligned。建议的解决方法是使用安装命令 pip install nvidia-cudss-cu12,这将安装修补后的 wheels nvidia-cudss-cu12 0.4.0.2.post1

cuDSS v0.3.0#

新功能:

  • 多 GPU 多节点 (MGMN) 模式,带有用于 NCCL 和 OpenMPI 的预构建独立通信层,以及自定义用户定义的 GPU 感知通信后端

  • 混合主机/设备内存模式,该模式允许将因子值保存在主机内存 (RAM) 中,并且仅使用较小的设备缓冲区作为临时存储

  • 扩展了对 Linux ARM(aarch64) 的支持(Ubuntu 22.04,仅在 Orin (SM 8.7) 设备上)

破坏性更改:

  • 从枚举 cudssStatus_t 中删除了值 CUDSS_STATUS_ARCH_MISMATCHCUDSS_STATUS_ZERO_PIVOT,因为这些值将不会被使用

  • 将主头文件 cuDSS.h 重命名为 cudss.h,以便更好地与其他 CUDA 数学库对齐

重要的错误修复:

  • 修复了当重新使用相同的 cudssData_t 解决多个微小矩阵(小于 16x16)时出现的执行失败问题

  • 修复了当因式分解阶段之后是使用 CUDSS_ALG_1CUDSS_ALG_2 重新排序算法的重新因式分解阶段时出现的不正确结果

已知问题:

在基于 RPM 的系统(RHEL、Rocky、SLES)上安装 cuDSS 期间会看到错误消息

failed to link /usr/lib/#INSTALL_TRIPLET#/libcudss_commlayer_nccl.so -> /etc/alternatives/libcudss_commlayer_nccl.so: No such file or directory
failed to link /usr/lib/#INSTALL_TRIPLET#/libcudss_commlayer_openmpi.so -> /etc/alternatives/libcudss_commlayer_openmpi.so: No such file or directory

尽管未能为 cuDSS 创建几个符号链接,但安装已完成。

要解决此问题,请仅在遇到上述问题后应用此解决方法。此问题及解决方法仅适用于基于 RPM 的系统(RHEL、Rocky、SLES)。此解决方法将删除并重新创建所有旨在用于 cudss alternatives 系统的符号链接。

update-alternatives --remove cudss /usr/lib64/libcudss/12/libcudss.so.0

/sbin/ldconfig

update-alternatives --install /usr/lib64/libcudss.so.0 cudss /usr/lib64/libcudss/12/libcudss.so.0 120 \
--slave /usr/lib64/libcudss.so libcudss.so /usr/lib64/libcudss/12/libcudss.so \
--slave /usr/lib64/libcudss_commlayer_nccl.so  libcudss_commlayer_nccl.so /usr/lib64/libcudss/12/libcudss_commlayer_nccl.so \
--slave /usr/lib64/libcudss_commlayer_openmpi.so  libcudss_commlayer_openmpi.so /usr/lib64/libcudss/12/libcudss_commlayer_openmpi.so \
--slave /usr/lib64/libcudss_static.a libcudss_static.a /usr/lib64/libcudss/12/libcudss_static.a \
--slave /usr/lib64/cmake/cudss cudss_cmake /usr/lib64/libcudss/12/cmake/cudss \
--slave /usr/include/cudss.h cudss.h /usr/include/libcudss/12/cudss.h \
--slave /usr/include/cudss_distributed_interface.h cudss_distributed_interface.h /usr/include/libcudss/12/cudss_distributed_interface.h

/sbin/ldconfig

完成这些步骤后,确认所有符号链接都存在。预期

# ls -l /usr/lib64/cmake/cudss
... /usr/lib64/cmake/cudss -> /etc/alternatives/cudss_cmake

# ls -l /usr/include/cudss*
... /usr/include/cudss.h -> /etc/alternatives/cudss.h
... /usr/include/cudss_distributed_interface.h -> /etc/alternatives/cudss_distributed_interface.h

# ls -l /usr/lib64/*cudss*
... /usr/lib64/libcudss.so -> /etc/alternatives/libcudss.so
... /usr/lib64/libcudss.so.0 -> /etc/alternatives/cudss
... /usr/lib64/libcudss_commlayer_nccl.so -> /etc/alternatives/libcudss_commlayer_nccl.so
... /usr/lib64/libcudss_commlayer_openmpi.so -> /etc/alternatives/libcudss_commlayer_openmpi.so
... /usr/lib64/libcudss_static.a -> /etc/alternatives/libcudss_static.a

# ls -l /etc/alternatives/*cudss*
... /etc/alternatives/cudss -> /usr/lib64/libcudss/12/libcudss.so.0
... /etc/alternatives/cudss.h -> /usr/include/libcudss/12/cudss.h
... /etc/alternatives/cudss_cmake -> /usr/lib64/libcudss/12/cmake/cudss
... /etc/alternatives/cudss_distributed_interface.h -> /usr/include/libcudss/12/cudss_distributed_interface.h
... /etc/alternatives/libcudss.so -> /usr/lib64/libcudss/12/libcudss.so
... /etc/alternatives/libcudss_commlayer_nccl.so -> /usr/lib64/libcudss/12/libcudss_commlayer_nccl.so
... /etc/alternatives/libcudss_commlayer_openmpi.so -> /usr/lib64/libcudss/12/libcudss_commlayer_openmpi.so
... /etc/alternatives/libcudss_static.a -> /usr/lib64/libcudss/12/libcudss_static.a

cuDSS v0.2.1#

重要的错误修复:

  • 修复了主机内存泄漏

  • 修复了设备内存簿记,当使用相同的 cudssHandle_tcudssData_t 对象重复调用 cuDSS 时,可能会导致读取违规错误和分段错误

  • 修复了基于 1 的输入矩阵的迭代细化的不正确结果

  • 修复了不正确的内部临时缓冲区大小,这可能会导致小矩阵的无效内存访问

cuDSS v0.2.0#

新功能:

  • CUDSS_ALG_1 重新排序算法的非对称和非埃尔米特矩阵的性能改进

  • 支持用户定义的设备内存分配器/内存池

  • 支持提取排列,这些排列考虑了重新排序和枢轴(通过枚举 cudssDataParam_t 中的新值 CUDSS_DATA_PERM_ROWCUDSS_DATA_PERM_COL),用于重新排序算法 CUDSS_ALG_1CUDSS_ALG_2

  • 扩展了对所有 SM 架构的支持,从 Pascal (SM 5.0) 开始

  • 扩展了对 Linux ARM(SBSA) 的支持(Ubuntu 20.04、Ubuntu 22.04、RHEL 8、RHEL 9、SLES 15)

破坏性更改:

  • 将枚举 cudssDataParam_t 中的值 CUDSS_DATA_PERM_REORDER 替换为 CUDSS_DATA_PERM_REORDER_ROWCUDSS_DATA_PERM_REORDER_COL,以分隔行和列重新排序排列,这对于非对称重新排序算法 CUDSS_ALG_1 可能是不同的

重要的错误修复:

  • 修复了具有非禁用枢轴的埃尔米特矩阵的不正确解

  • 修复了由于共享内存分配大小而导致 H100 上偶尔出现的不正确解

  • 修复了在 cudssExecute() 期间从 cudssConfig_t 不正确传播枢轴容差和 epsilon 的问题

  • 修复了在 SM 数量较少的 GPU 上偶尔发生的挂起

cuDSS v0.1.0#

新功能:

  • 初始版本

  • 支持单 GPU,SM 架构:SM 7.0 及更高版本

  • 支持 Linux x86-64(Ubuntu 20.04、Ubuntu 22.04、RHEL 8、RHEL 9、SLES 15)

  • 支持 Windows x86-64(Windows 10、11)

  • 支持单/双精度实/复数数据类型的值和 int 数据类型的索引

  • 同步 API

兼容性说明:

  • cuDSS 需要 CUDA 12.0 或更高版本