SuiteSparse: 稀疏矩阵包套件
http://suitesparse.com
2026年2月5日,SuiteSparse 版本 7.12.2
SuiteSparse 是由 Tim Davis 编写或合著的一组稀疏矩阵相关软件包,可在 https://github.com/DrTimothyAldenDavis/SuiteSparse 获取。
SuiteSparse 主要作者(代码和算法,不包括 METIS):Tim Davis
代码合著者(按字母顺序排列,不包括 METIS 或 LAGraph):Patrick Amestoy, Mohsen Aznaveh, David Bateman, Jinhao Chen, Yanqing Chen, Iain Duff, Joe Eaton, Les Foster, William Hager, Raye Kimmerer, Scott Kolodziej, Chris Lourenco, Stefan Larimore, Lorena Mejia Domenzain, Erick Moreno-Centeno, Markus Mützel, Corey Nolet, Ekanathan Palamadai, Sivasankaran Rajamanickam, Sanjay Ranka, Wissam Sid-Lakhdar, 和 Nuri Yeralan。
LAGraph 是 SuiteSparse 中开发者数量最多的包,值得单独列出。该列表也出现在 LAGraph/Contributors.txt 中:
-
Janos B. Antal ------ 布达佩斯技术与经济大学,匈牙利
-
Mohsen Aznaveh ------ 德克萨斯农工大学
-
David A. Bader ------ 新泽西理工学院
-
Georgiy Belyanin ------ 圣彼得堡国立大学
-
Aydin Buluc ------ 劳伦斯伯克利国家实验室
-
Jinhao Chen ------ 德克萨斯农工大学
-
Tim Davis ------ 德克萨斯农工大学
-
Florentin Dorre ------ 德累斯顿工业大学,Neo4j
-
Marton Elekes ------ 布达佩斯技术与经济大学,匈牙利
-
Alexandra Goff ------ 德克萨斯农工大学
-
Gabriel Gomez ------ 德克萨斯农工大学
-
Semyon Grigoriev ------ 圣彼得堡国立大学
-
Balint Hegyi ------ 布达佩斯技术与经济大学,匈牙利
-
Tanner Hoke ------ 德克萨斯农工大学
-
James Kitchen ------ Anaconda
-
Scott Kolodziej ------ 德克萨斯农工大学
-
Ilhom Kombaev ------ 圣彼得堡国立大学
-
Pranav Konduri ------ 德克萨斯农工大学
-
Christina Koutsou ------ 塞萨洛尼基亚里士多德大学
-
Roi Lipman ------ Redis Labs
-
Tze Meng Low ------ 卡内基梅隆大学
-
Vidith Madhu ------ 德克萨斯农工大学
-
Tim Mattson ------ Intel
-
Scott McMillan ------ 卡内基梅隆大学
-
Markus Muetzel
-
Hemanth Mukesh ------ 德克萨斯农工大学
-
Olumayowa Olowomeye ------ 德克萨斯农工大学
-
Casey Pei ------ 德克萨斯农工大学
-
Michel Pelletier ------ Graphegon, OneSparse
-
Darin Peries ------ 德克萨斯农工大学
-
Cameron Quilici ------ 德克萨斯农工大学
-
Aurko Routh ------ 德克萨斯农工大学
-
Gabor Szarnyas ------ 荷兰国家数学与计算机科学研究中心,阿姆斯特丹
-
Erik Welch ------ Anaconda,后任职于 NVIDIA
-
Carl Yang ------ 加利福尼亚大学戴维斯分校,Waymo
-
Yongzhe Zhang ------ 日本综合研究大学院大学
METIS 的作者是 George Karypis。
其他算法设计者:Esmond Ng 和 John Gilbert。
关于许可证、版权和作者信息,请参阅各个软件包。
文档
关于每个软件包的文档,请参阅各软件包,通常位于 Doc 子文件夹中。
SuiteSparse 分支
-
dev:默认分支,包含下一个稳定版本中将出现的最新功能特性。旨在始终保持此分支的完全可用性,但功能特性在任何特定时间点都非最终版本。
-
stable:最新的稳定版本。
-
dev2:工作分支。所有提交的拉取请求都应提交到此分支。此分支可能并非始终可用。
SuiteSparse 软件包
SuiteSparse 中的软件包及本目录中的文件:
-
AMD
近似最小度排序算法。这是 MATLAB 内置的 AMD 函数。
作者:Tim Davis, Patrick Amestoy, Iain Duff
-
bin
make local编译后程序存放位置 -
BTF
块三角形式的排列
作者:Tim Davis, Ekanathan Palamadai
-
build
默认构建树的文件夹
-
CAMD
约束近似最小度排序
作者:Tim Davis, Patrick Amestoy, Iain Duff, Yanqing Chen
-
CCOLAMD
约束列近似最小度排序
作者:Tim Davis, Sivasankaran Rajamanickam, Stefan Larimore
算法设计合作者:Esmond Ng, John Gilbert(用于 COLAMD)
-
ChangeLog
SuiteSparse 的变更摘要。每个软件包的详细变更记录请参阅 */Doc/ChangeLog
-
CHOLMOD
稀疏 Cholesky 分解。需要 AMD、COLAMD、CCOLAMD、BLAS 和 LAPACK。可选使用 METIS。这是 MATLAB 中的 chol 和 x=A\b。
所有模块作者:Tim Davis
CHOLMOD/Modify 模块作者:Tim Davis 和 William W. Hager
CHOLMOD/SuiteSparse_metis:嵌入到 CHOLMOD 库中的 METIS 修改版。详见 README.txt 文件。作者:George Karypis。这是通过 George Karypis 提供的开源许可证包含在 SuiteSparse 中的略微修改副本。SuiteSparse 无法使用未经修改的 METIS 副本。
-
CITATION.bib
SuiteSparse 软件包的引用信息,bibtex 格式
-
CMakeLists.txt
可选,用于编译整个 SuiteSparse。详见下文。
-
CODE_OF_CONDUCT.md
社区准则
-
COLAMD
列近似最小度排序。这是 MATLAB 内置的 COLAMD 函数。
代码作者:Tim Davis 和 Stefan Larimore
算法设计合作者:Esmond Ng, John Gilbert
-
Contents.m
MATLAB 中
help SuiteSparse的内容列表 -
如何为 SuiteSparse 贡献代码
-
CONTRIBUTOR-LICENSE.txt
要求的贡献者协议
-
CSparse
简洁的稀疏矩阵软件包,为我所著《稀疏线性系统的直接方法》(SIAM 出版)一书开发。主要用于教学。注意,代码版权归 Tim Davis 所有,如书中所述。
生产环境请改用 CXSparse。特别地,CSparse 和 CXSparse 具有相同的包含文件名:cs.h。此软件包用于 MATLAB 内置的 DMPERM 函数。
作者:Tim Davis
-
CXSparse
CSparse 扩展版。支持复数矩阵和 int 或 long 整数。生产环境请使用此版本而非 CSparse;它创建与 CSparse 同名的 libcsparse.so(或 Mac 上的 dylib)。它是 CSparse 的超集。任何链接到 CSparse 的代码也应能改为链接到 CXSparse。
作者:Tim Davis, David Bateman
-
Example
依赖几乎所有 SuiteSparse 软件包的简单示例
-
.github
GitHub 持续集成测试的工作流
-
GraphBLAS
基于线性代数语言的图算法
https://graphblas.org作者:Tim Davis, Joe Eaton, Corey Nolet
-
include
make install会将各软件包用户可见的头文件安装到此目录(执行make local后) -
KLU
稀疏 LU 分解,主要用于电路仿真。需要 AMD、COLAMD 和 BTF。可选使用 CHOLMOD、CAMD、CCOLAMD 和 METIS。
作者:Tim Davis, Ekanathan Palamadai
-
LAGraph
基于 GraphBLAS 的图算法库。另见 https://github.com/GraphBLAS/LAGraph
作者:多人
-
LDL
非常简洁的 LDL' 分解软件包
作者:Tim Davis
-
lib
make install会将各软件包的共享库安装到此目录(执行make local后) -
LICENSE.txt
各软件包的许可证汇总
-
Makefile
可选,用于通过 make 编译整个 SuiteSparse,作为各子项目中 cmake 的简单包装器。
-
make:编译 SuiteSparse 库。后续make install将安装到 CMAKE_INSTALL_PATH(Linux 或 Mac 上默认为 /usr/local/lib)。 -
make local:编译 SuiteSparse。后续make install将安装到 ./lib、./include。不会安装到 CMAKE_INSTALL_PATH。 -
make global:编译 SuiteSparse 库。后续make install将安装到 /usr/local/lib(或配置的 CMAKE_INSTALL_PREFIX)。不会安装到 ./lib 和 ./include。 -
make install:根据之前执行的是make、make local还是make global,将库安装到当前目录(./lib、./include)或 /usr/local/lib 和 /usr/local/include(后者由 CMAKE_INSTALL_PREFIX 定义)。 -
make uninstall:撤销make install的操作。 -
make distclean:删除所有非发行版文件,包括 ./bin、./share、./lib 和 ./include。 -
make purge:同make distclean。 -
make clean:删除所有非发行版文件,但保留已编译的库和演示程序、./lib、./share 和 ./include。每个独立的子项目也都有上述各个 make 目标。
您不需要执行的操作:
-
make docs:从 LaTeX 文件创建用户指南 -
make cov:运行语句覆盖率测试(仅限 Linux)
-
-
MATLAB_Tools
用于 MATLAB 的各种 M 文件
所有部分作者:Tim Davis
spqr_rank 作者:Les Foster 和 Tim Davis
-
Contents.m:内容列表
-
dimacs10:加载 DIMACS10 集合的矩阵
-
Factorize:MATLAB 面向对象的 x=A\b
-
find_components:在图像中查找连通分量
-
GEE:简单高斯消元
-
getversion.m:确定 MATLAB 版本
-
gipper.m:创建 MATLAB 归档
-
hprintf.m:在命令窗口中打印超链接
-
LINFACTOR:Factorize 软件包的前身
-
MESHND:规则网格的嵌套剖分排序
-
pagerankdemo.m:说明 PageRank 的工作原理
-
SFMULT:C=S*F,其中 S 稀疏、F 稠密
-
shellgui:显示海贝壳
-
sparseinv:稀疏逆子集
-
spok:检查稀疏矩阵的有效性
-
spqr_rank:SPQR_RANK 软件包。MATLAB 工具箱,用于秩亏稀疏矩阵:零空间、可靠分解等。与圣何塞州立大学的 Leslie Foster 合作开发。
-
SSMULT:C=AB,A 和 B 均为稀疏矩阵。曾是 MATLAB 内置 C=AB 运算的基础,直到 MATLAB R2021a 中被 GraphBLAS 取代。
-
SuiteSparseCollection:用于 SuiteSparse 矩阵集合
-
waitmex:mexFunction 中使用的等待条
-
-
Mongoose
图划分
作者:Nuri Yeralan, Scott Kolodziej, William Hager, Tim Davis
-
ParU
并行非对称模式多波前方法
作者:Mohsen Aznaveh 和 Tim Davis
-
RBio
读写 Rutherford/Boeing 格式的稀疏矩阵
作者:Tim Davis
-
本文件
-
SPEX
精确算术求解稀疏线性系统。需要 GNU GMP 和 MPFR 库。
将很快被更通用的软件包 SPEX v3 取代,后者包含此方法(精确稀疏 LU)及其他方法(稀疏精确 Cholesky,以及稀疏精确更新/降级更新)。v3 的 API 将有重大变更。
作者:Chris Lourenco, Jinhao Chen, Erick Moreno-Centeno, Lorena Mejia Domenzain, 和 Tim Davis。
-
SPQR
稀疏 QR 分解。这是 MATLAB 内置的 qr 和 x=A\b 函数。也称为 SuiteSparseQR。
包含两个 GPU 库:SPQR/GPUQREngine 和 SPQR/SuiteSparse_GPURuntime。
CPU 代码作者:Tim Davis
GPU 模块作者:Tim Davis, Nuri Yeralan, Wissam Sid-Lakhdar, Sanjay Ranka
-
ssget
SuiteSparse 矩阵集合的 MATLAB 接口
作者:Tim Davis
-
SuiteSparse_config
包含上述所有软件包通用函数和配置的库。CSparse、GraphBLAS、LAGraph 和 MATLAB_Tools 不使用 SuiteSparse_config。
作者:Tim Davis
-
SuiteSparse_demo.m
SuiteSparse 的 MATLAB 演示
-
SuiteSparse_install.m
为 MATLAB 安装 SuiteSparse
-
SuiteSparse_paths.m
为 SuiteSparse MATLAB mexFunction 设置路径
-
SuiteSparse_test.m
SuiteSparse 在 MATLAB 中的详尽测试
-
UMFPACK
稀疏 LU 分解。需要 AMD 和 BLAS。
这是 MATLAB 内置的 lu 和 x=A\b 函数。
作者:Tim Davis
算法设计合作者:Iain Duff
关于许可证、版权和作者信息,请参阅各个软件包。除 METIS(作者 George Karypis)、GraphBLAS/cpu_features(作者 Google)、GraphBLAS/lz4、zstd 和 xxHash(作者 Yann Collet,现任职 Facebook)以及 GraphBLAS/CUDA/jitify.hpp(作者 NVIDIA)外,所有代码均由 Timothy A. Davis(邮箱:davis@tamu.edu)撰写或合著。GraphBLAS/CUDA 的部分版权归 NVIDIA 所有。请分别参阅这些许可证。
给发行版维护者的建议(Linux、homebrew、spack、R、Octave、Trilinos 等)
感谢您打包 SuiteSparse!以下是一些建议:
-
GraphBLAS 编译时间较长,因为它会在编译时创建许多快速的"工厂内核"。如果您希望减少编译时间和库体积,请启用 GRAPHBLAS_COMPACT 模式,但保持 JIT 编译器启用。这样,GraphBLAS 将通过其 JIT 编译器在运行时编译所需的内核。一旦 JIT 内核编译完成,性能将与工厂内核相同。用户编译的内核默认放置在 ~/.SuiteSparse 目录下。您无需分发 GraphBLAS 源代码即可启用 JIT 编译器:只需 libgraphblas.so 和 GraphBLAS.h 即可。
-
GraphBLAS 需要 OpenMP! 它本质上是并行代码,请务必在启用 OpenMP 的情况下分发。否则性能将严重受损。
-
CUDA 加速:CHOLMOD 和 SPQR 可利用其 CUDA 内核获得性能提升。如果您没有 CUDA 或不想将其包含在发行版中,本版本 SuiteSparse 将跳过 CHOLMOD_CUDA 和 SPQR_CUDA 库的构建,并且不会链接到 GPUQREngine 和 SuiteSparse_GPURuntime 库。
如何引用 SuiteSparse 元软件包及其组件包
SuiteSparse 是由许多软件包组成的元软件包,每个软件包都有自己的已发表论文。如需引用整个集合,请使用以下网址:
还请同时引用您所用具体软件包的对应论文。这是一个较长的列表;如果您希望缩短列表,只需为每个软件包引用最新的"算法 XXX:"(ACM TOMS 期刊)论文即可。
-
MATLAB 的 x=A\b:请参阅下方的 AMD、COLAMD、CHOLMOD、UMFPACK 和 SuiteSparseQR(SPQR)。
-
GraphBLAS 及 MATLAB 中的 C=AB(稀疏-稀疏乘法):
-
T. A. Davis. 算法 1037: SuiteSparse:GraphBLAS:稀疏线性代数语言中的并行图算法。ACM Trans. Math. Softw. 49, 3, 第28条 (2023年9月), 30页。https://doi.org/10.1145/3577195
-
T. Davis, 算法 1000: SuiteSparse:GraphBLAS:稀疏线性代数语言中的图算法,ACM Trans on Mathematical Software, 第45卷, 第4期, 2019年12月, 第44条。https://doi.org/10.1145/3322125
-
-
LAGraph:
- G. Szárnyas 等, "LAGraph: 线性代数、网络分析库及图算法研究," 2021 IEEE 国际并行与分布式处理研讨会工坊 (IPDPSW), 波特兰, OR, 美国, 2021, 第243-252页。https://doi.org/10.1109/IPDPSW52791.2021.00046
-
CSparse/CXSParse:
- T. A. Davis, 稀疏线性系统的直接方法, SIAM 算法基础系列, SIAM, 费城, PA, 2006。https://doi.org/10.1137/1.9780898718881
-
SuiteSparseQR (SPQR):(同时引用 AMD、COLAMD)
- T. A. Davis, 算法 915: SuiteSparseQR:多波前多线程秩揭示稀疏 QR 分解,ACM Trans. on Mathematical Software, 38(1), 2011, 第8:1-8:22页。https://doi.org/10.1145/2049662.2049670
-
SuiteSparseQR/GPU:
- Sencer Nuri Yeralan, T. A. Davis, Wissam M. Sid-Lakhdar, 和 Sanjay Ranka. 2017. 算法 980: GPU 上的稀疏 QR 分解。ACM Trans. Math. Softw. 44, 2, 第17条 (2018年6月), 29页。https://doi.org/10.1145/3065870
-
CHOLMOD:(同时引用 AMD、COLAMD)
-
Y. Chen, T. A. Davis, W. W. Hager, 和 S. Rajamanickam, 算法 887: CHOLMOD,超节点稀疏 Cholesky 分解与更新/降级更新,ACM Trans. on Mathematical Software, 35(3), 2008, 第22:1-22:14页。https://dl.acm.org/doi/abs/10.1145/1391989.1391995
-
T. A. Davis 和 W. W. Hager, 稀疏 Cholesky 更新/降级更新和三角求解中的动态超节点,ACM Trans. on Mathematical Software, 35(4), 2009, 第27:1-27:23页。https://doi.org/10.1145/1462173.1462176
-
-
CHOLMOD/Modify 模块:(同时引用 AMD、COLAMD)
-
T. A. Davis 和 William W. Hager, 稀疏 Cholesky 分解的行修改,SIAM Journal on Matrix Analysis and Applications 2005 26:3, 621-639。https://doi.org/10.1137/S089547980343641X
-
T. A. Davis 和 William W. Hager, 稀疏 Cholesky 分解的多秩修改,SIAM Journal on Matrix Analysis and Applications 2001 22:4, 997-1013。https://doi.org/10.1137/S0895479899357346
-
T. A. Davis 和 William W. Hager, 修改稀疏 Cholesky 分解,SIAM Journal on Matrix Analysis and Applications 1999 20:3, 606-627。https://doi.org/10.1137/S0895479897321076
-
-
CHOLMOD/GPU 模块:
- Steven C. Rennich, Darko Stosic, Timothy A. Davis, 在 GPU 上加速稀疏 Cholesky 分解,Parallel Computing, 第59卷, 2016, 第140-150页。https://doi.org/10.1016/j.parco.2016.06.004
-
AMD 和 CAMD:
-
P. Amestoy, T. A. Davis, 和 I. S. Duff, 算法 837: 一种近似最小度排序算法,ACM Trans. on Mathematical Software, 30(3), 2004, 第381-388页。https://dl.acm.org/doi/abs/10.1145/1024074.1024081
-
P. Amestoy, T. A. Davis, 和 I. S. Duff, 一种近似最小度排序算法,SIAM J. Matrix Analysis and Applications, 17(4), 1996, 第886-905页。https://doi.org/10.1137/S0895479894278952
-
-
COLAMD, SYMAMD, CCOLAMD, 和 CSYMAMD:
-
T. A. Davis, J. R. Gilbert, S. Larimore, E. Ng, 算法 836: COLAMD,一种近似列最小度排序算法,ACM Trans. on Mathematical Software, 30(3), 2004, 第377-380页。https://doi.org/10.1145/1024074.1024080
-
T. A. Davis, J. R. Gilbert, S. Larimore, E. Ng, 一种列近似最小度排序算法,ACM Trans. on Mathematical Software, 30(3), 2004, 第353-376页。https://doi.org/10.1145/1024074.1024079
-
-
UMFPACK:(同时引用 AMD 和 COLAMD)
-
T. A. Davis, 算法 832: UMFPACK - 一种具有列预排序策略的非对称模式多波前方法,ACM Trans. on Mathematical Software, 30(2), 2004, 第196-199页。https://dl.acm.org/doi/abs/10.1145/992200.992206
-
T. A. Davis, 一种用于非对称模式多波前方法的列预排序策略,ACM Trans. on Mathematical Software, 30(2), 2004, 第165-195页。https://dl.acm.org/doi/abs/10.1145/992200.992205
-
T. A. Davis 和 I. S. Duff, 一种用于非对称稀疏矩阵的单波前/多波前混合方法,ACM Trans. on Mathematical Software, 25(1), 1999, 第1-19页。https://doi.org/10.1145/305658.287640
-
T. A. Davis 和 I. S. Duff, 一种用于稀疏 LU 分解的非对称模式多波前方法,SIAM J. Matrix Analysis and Computations, 18(1), 1997, 第140-158页。https://doi.org/10.1137/S0895479894246905
-
-
FACTORIZE M 文件:
- T. A. Davis, 算法 930: FACTORIZE,MATLAB 面向对象线性系统求解器,ACM Trans. on Mathematical Software, 39(4), 2013, 第28:1-28:18页。https://doi.org/10.1145/2491491.2491498
-
KLU 和 BTF:(同时引用 AMD 和 COLAMD)
- T. A. Davis 和 Ekanathan Palamadai Natarajan. 2010. 算法 907: KLU,一种用于电路仿真问题的直接稀疏求解器。ACM Trans. Math. Softw. 37, 3, 第36条 (2010年9月), 17页。https://dl.acm.org/doi/abs/10.1145/1824801.1824814
-
LDL:
- T. A. Davis. 算法 849: 一种简洁的稀疏 Cholesky 分解软件包。ACM Trans. Math. Softw. 31, 4 (2005年12月), 587-591。https://doi.org/10.1145/1114268.1114277
-
ssget 和 SuiteSparse 矩阵集合:
-
T. A. Davis 和 Yifan Hu. 2011. 佛罗里达大学稀疏矩阵集合。ACM Trans. Math. Softw. 38, 1, 第1条 (2011年11月), 25页。https://doi.org/10.1145/2049662.2049663
-
Kolodziej 等, (2019). SuiteSparse 矩阵集合网站接口。Journal of Open Source Software, 4(35), 1244。https://doi.org/10.21105/joss.01244
-
-
spqr_rank:
- Leslie V. Foster 和 T. A. Davis. 2013. 算法 933: 使用 suitesparseQR 可靠计算数值秩、零空间基、伪逆解和基础解。ACM Trans. Math. Softw. 40, 1, 第7条 (2013年9月), 23页。https://doi.org/10.1145/2513109.2513116
-
Mongoose:
- T. A. Davis, William W. Hager, Scott P. Kolodziej, 和 S. Nuri Yeralan. 2020. 算法 1003: Mongoose,一个图粗化与划分库。ACM Trans. Math. Softw. 46, 1, 第7条 (2020年3月), 18页。https://doi.org/10.1145/3337792
-
SPEX:
- Christopher Lourenco, Jinhao Chen, Erick Moreno-Centeno, 和 T. A. Davis. 2022. 算法 1021: SPEX Left LU,通过稀疏左视整数保持 LU 分解精确求解稀疏线性系统。ACM Trans. Math. Softw. 2022年6月。https://doi.org/10.1145/3519024
关于 BLAS 和 LAPACK 库
注意:如果使用 OpenBLAS,请确保使用 0.3.27 或更高版本。
要选择 BLAS/LAPACK,请参阅 SuiteSparse_config/cmake_modules 中的 SuiteSparseBLAS.cmake 说明。如果 SuiteSparse_config 找到了使用 64 位整数的 BLAS(例如 Intel MKL ilp64 BLAS),它会将 SuiteSparse_config.h 中的 SUITESPARSE_BLAS_INT 定义为 int64_t。否则,如果找到 32 位 BLAS,此类型将定义为 int32_t。之后,如果 UMFPACK、CHOLMOD 或 SPQR 编译并链接到具有不同整数大小的 BLAS,您必须通过 -DBLAS64(断言使用 64 位整数 BLAS)或 -DBLAS32(断言使用 32 位整数 BLAS)覆盖该定义。
BLAS 整数的大小与 sizeof(void *) 无关。
当以二进制形式分发时(例如 Debian、Ubuntu、Spack 或 Brew 软件包),SuiteSparse 应编译为期望 32 位 BLAS,因为这是最常见的情况。默认使用 32 位 BLAS,但可以通过将 cmake 变量 SUITESPARSE_USE_64BIT_BLAS 设置为 ON 来更改。
默认情况下,SuiteSparse 会自动寻找合适的 BLAS 库。要强制使用特定的 BLAS 库,请使用:
bash
CMAKE_OPTIONS="-DBLA_VENDOR=OpenBLAS" make
cd Package ; cmake -DBLA_VENDOR=OpenBLAS .. make
要使用默认行为(自动寻找 BLAS),请勿设置 BLA_VENDOR,或将其设置为空字符串。在这种情况下,如果 SUITESPARSE_USE_64BIT_BLAS 为 ON,则优先使用 64 位 BLAS,但如果未找到 64 位库,则会使用 32 位 BLAS 库。但是,如果同时启用了 SUITESPARSE_USE_64BIT_BLAS 和 SUITESPARSE_USE_STRICT,则只考虑 64 位 BLAS。
当选择特定的 BLAS 库时,SUITESPARSE_USE_64BIT_BLAS 设置会被严格遵守。如果设置为 true,将只使用 64 位 BLAS 库。如果为 false(默认值),将只使用 32 位 BLAS 库。如果未找到此类 BLAS,构建将失败。
C/C++ 库快速入门
在此目录下执行以下命令(需要系统权限以执行 sudo make install):
bash
mkdir -p build && cd build
cmake ..
cmake --build .
sudo cmake --install .
所有库将被创建并安装到默认的系统级目录(Linux 上为 /usr/local/lib)。使用 SuiteSparse 的应用程序所需的所有头文件将安装到 /usr/local/include/suitesparse(Linux 上)。
要仅构建部分库,请在 CMake 配置时设置 SUITESPARSE_ENABLE_PROJECTS。例如,要构建并安装 CHOLMOD 和 CXSparse(包括其依赖项),请使用以下命令:
bash
mkdir -p build && cd build
cmake -DSUITESPARSE_ENABLE_PROJECTS="cholmod;cxsparse" ..
cmake --build .
sudo cmake --install .
对于 Windows(MSVC),将 CMakeLists.txt 文件导入 MS Visual Studio。请务必指定构建类型为 Release;例如,要在 Windows 命令窗口中构建 SuiteSparse,请运行:
bash
mkdir -p build && cd build
cmake ..
cmake --build . --config Release
cmake --install .
请务必首先安装所有必需的库:UMFPACK、CHOLMOD 和 SPQR 需要 BLAS 和 LAPACK,SPEX 需要 GMP 和 MPFR。请使用最新的库;SPEX 需要 MPFR 4.0.2 和 GMP 6.1.2(这些版本号不 对应 libgmp.so.X.Y.Z 和 libmpfr.so.X.Y.Z 的后缀;详情请参阅 SPEX 用户指南)。
要编译库并仅将其安装在 SuiteSparse/lib 目录下(而非 /usr/local/lib),请在 SuiteSparse 顶级目录下执行以下操作:
bash
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=.. ..
cmake --build .
cmake --install .
如果将 /home/me/SuiteSparse/lib 添加到库搜索路径(Linux 中的 LD_LIBRARY_PATH),则可以执行以下操作(例如):
bash
S=/home/me/SuiteSparse
cc myprogram.c -I$(S)/include/suitesparse -lumfpack -lamd -lcholmod -lsuitesparseconfig -lm
要更改 C 和 C++ 编译器并并行编译,请使用:
bash
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
例如,将编译器更改为 gcc 和 g++。
这将适用于 Linux/Unix 和 Mac。它应自动检测是否拥有 Intel 编译器以及是否拥有 CUDA。
请参阅 SuiteSparse_config/cmake_modules/SuiteSparsePolicy.cmake 以选择 BLAS。
您可能还需要将 SuiteSparse/lib 添加到路径中。例如,如果 SuiteSparse 副本位于 /home/me/SuiteSparse,请将其添加到 ~/.bashrc 文件中:
bash
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
对于 Mac,请改用:
bash
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
文件的默认安装位置如下,其中 PACKAGE 是 SuiteSparse 中的某个软件包:
-
CMAKE_INSTALL_PREFIX/include/suitesparse/:头文件 -
CMAKE_INSTALL_PREFIX/lib/:已编译库 -
CMAKE_INSTALL_PREFIX/lib/cmake/SuiteSparse/:整个 SuiteSparse 的*.cmake脚本 -
CMAKE_INSTALL_PREFIX/lib/cmake/PACKAGE/:特定软件包的*Config.cmake脚本 -
CMAKE_INSTALL_PREFIX/lib/pkgconfig/PACKAGE.pc:特定软件包的 pkgconfig.pc脚本
MATLAB 用户快速入门(Linux 或 Mac)
假设将 SuiteSparse 放置在 /home/me/SuiteSparse 文件夹中。
将 SuiteSparse/lib 文件夹添加到运行时库路径。在 Linux 上,将以下内容添加到 ~/.bashrc 脚本中,假设 /home/me/SuiteSparse 是 SuiteSparse 副本的位置:
bash
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
对于 Mac,请改用以下内容添加到 ~/.zshrc 脚本中,假设将 SuiteSparse 放置在 /Users/me/SuiteSparse:
bash
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
使用 make local 编译所有 SuiteSparse。
接下来,编译 GraphBLAS MATLAB 库。在 SuiteSparse 文件夹的系统 shell 中,如果要通过 make install 进行系统级安装,请键入 make gbmatlab;如果要在自己的 SuiteSparse/lib 中使用该库,请键入 make gblocal。
然后在 MATLAB 命令窗口中,切换到 SuiteSparse 目录并输入 SuiteSparse_install。所有软件包将被编译,并运行若干演示程序。要运行(非常长的)详尽测试,请执行 SuiteSparse_test。
使用 MATLAB 的 pathtool 或 savepath 命令保存 MATLAB 路径以供后续会话使用。如果这些方法因您没有系统级权限而失败,请将新路径添加到您的 startup.m 文件中,通常位于 Documents/MATLAB/startup.m。您还可以在每个 MATLAB 会话开始时使用 SuiteSparse_paths M 文件设置所有路径。
编译选项
您可以使用以下命令为 CMake 设置特定选项(例如):
bash
cmake -DCHOLMOD_PARTITION=OFF -DBUILD_STATIC_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug ..
该命令将编译除 CHOLMOD/Partition 模块外的所有 SuiteSparse(因 -DCHOLMOD_PARTITION=OFF)。将使用调试模式(构建类型)。不会构建静态库(因设置了 -DBUILD_STATIC_LIBS=OFF)。
-
SUITESPARSE_ENABLE_PROJECTS
要构建的项目列表(分号分隔),或"all"。默认值:all,此时构建以下项目:
suitesparse_config;mongoose;amd;btf;camd;ccolamd;colamd;cholmod;cxsparse;ldl;klu;umfpack;paru;rbio;spqr;spex;graphblas;lagraph此外,可将
csparse加入该列表以构建 CSparse。如果将此字符串放入另一个 cmake 脚本中的 cmake 命令内,可能需要将字