发行说明#
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()
的函数签名,为具有批量标量参数的数组的整数类型添加了一个额外的参数(如nrows
、ncols
或ld
)更改了
cudssMatrixFormat_t
和cudssMatrixGetFormat()
的定义,使矩阵格式枚举值变为位标志(可以组合),并添加了一个标志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_1
和CUDSS_ALG_2
之外,所有重新排序算法的性能都得到了显著提升通过新的 API(如
cudssMatrixCreateBatch<Dn|Csr>()
和其他类似于现有非批量矩阵对象 API 的 API)添加了对非均匀批处理(解决具有不同矩阵和右手边的多个系统)的支持,并扩展了cudssExecute()
以支持批处理添加了通过
cudssDataGet()
和CUDSS_DATA_MEMORY_ESTIMATES
查询内存估计值的支持添加了对
Ubuntu 24.04
的安装程序支持添加了对 pypi.org 和 pypi.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=n
或export 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
,这将安装修补后的 wheelsnvidia-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_MISMATCH
和CUDSS_STATUS_ZERO_PIVOT
,因为这些值将不会被使用将主头文件
cuDSS.h
重命名为cudss.h
,以便更好地与其他 CUDA 数学库对齐
重要的错误修复:
修复了当重新使用相同的
cudssData_t
解决多个微小矩阵(小于 16x16)时出现的执行失败问题修复了当因式分解阶段之后是使用
CUDSS_ALG_1
和CUDSS_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_t
和cudssData_t
对象重复调用 cuDSS 时,可能会导致读取违规错误和分段错误修复了基于 1 的输入矩阵的迭代细化的不正确结果
修复了不正确的内部临时缓冲区大小,这可能会导致小矩阵的无效内存访问
cuDSS v0.2.0#
新功能:
CUDSS_ALG_1 重新排序算法的非对称和非埃尔米特矩阵的性能改进
支持用户定义的设备内存分配器/内存池
支持提取排列,这些排列考虑了重新排序和枢轴(通过枚举
cudssDataParam_t
中的新值CUDSS_DATA_PERM_ROW
和CUDSS_DATA_PERM_COL
),用于重新排序算法CUDSS_ALG_1
和CUDSS_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_ROW
和CUDSS_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 或更高版本