2024年10月10日,套房7.8.3版
Suitesparse是一组由Tim Davis编写或合着的稀疏Matrix相关软件包,可在https://github.com/drtimothyaldendavis/suitesparse上找到。
SuiteSparse的主要作者(代码和算法,Dorfer。Metis):蒂姆·戴维斯(Tim Davis)
Code co-authors, in alphabetical order (not including METIS or 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,MarkusMützel,Corey Nolel,Ekanathan Palamadai,Sivasankaran Rajamanickam,Sanjay Ranka,Wissam Sid-Sid-Lakhdar和Nuri Yeralan。
lagraph是由Suitesparse中任何包裹的开发人员数量最多开发的,应该得到自己的清单。该列表也出现在lagraph/contibutors.txt中:
Janos B. Antal, Budapest University of Technology and Economics, Hungary
Mohsen Aznaveh, Texas A&M University
David A. Bader New Jersey Institute of Technology
Aydin Buluc, Lawrence Berkeley National Lab
Jinhao Chen, Texas A&M University
Tim Davis, Texas A&M University
Florentin Dorre, Technische Univeritat Dresden, Neo4j
Marton Elekes, Budapest University of Technology and Economics, Hungary
Balint Hegyi, Budapest University of Technology and Economics, Hungary
Tanner Hoke, Texas A&M University
James Kitchen, Anaconda
Scott Kolodziej, Texas A&M University
Pranav Konduri, Texas A&M University
Roi Lipman, Redis Labs (now FalkorDB)
Tze Meng Low, Carnegie Mellon University
Tim Mattson, Intel
Scott McMillan, Carnegie Mellon University
Markus Muetzel
Michel Pelletier, Graphegon
Gabor Szarnyas, CWI Amsterdam, The Netherlands
Erik Welch, Anaconda, NVIDIA
Carl Yang, University of California at Davis, Waymo
Yongzhe Zhang, SOKENDAI, Japan
梅蒂斯由乔治·卡里皮斯(George Karypis)撰写。
其他算法设计师:Esmond Ng和John Gilbert。
请参阅每个软件包以获取许可证,版权和作者信息。
请参阅每个软件包的每个软件包,通常在DOC子文件夹中。
套件中的包装,并在此目录中归档:
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
套房更改的摘要。有关每个软件包的详细信息,请参见*/Doc/ChangeLog 。
CHOLMOD
稀疏的Cholesky分解。需要AMD,Colamd,Ccolamd,Blas和Lapack。 (可选)使用METIS。这是Matlab中的chol和x=Ab
所有模块的作者:蒂姆·戴维斯
Cholmod/修改模块作者:Tim Davis和William W. Hager
Cholmod/Suitesparse_Metis:METIS的修改版本,嵌入到Cholmod库中。有关详细信息,请参见readme.txt文件。作者:乔治·卡里皮斯(George Karypis)。这是通过乔治·卡里皮斯(George Karypis)提供的开源许可,其中包括套件稍有修改的副本。 Suitesparse不能使用未修改的Metis副本。
CITATION.bib
Bibtex格式的套件包装的引用。
CMakeLists.txt
可选,以编译所有套房。见下文。
CODE_OF_CONDUCT.md
社区准则
COLAMD
列大约最低度排序。这是MATLAB中的内置Colamd功能。
作者(代码):蒂姆·戴维斯(Tim Davis)和斯特凡·拉里莫尔(Stefan Larimore)
算法设计合作者:Esmond Ng,John Gilbert
Contents.m
MATLAB中“帮助Suitesparse”的内容列表。
CONTRIBUTING.md
如何为套房做出贡献
CONTRIBUTOR-LICENSE.txt
要求的贡献者协议
CSparse
SIAM出版的简洁稀疏矩阵软件包,它是为我的书“稀疏线性系统的直接方法”开发的。主要用于教学。请注意,如书中所述,代码为(c)蒂姆·戴维斯(Tim Davis)。
为了生产,请改用CXSPARSE。特别是,CSPARSE和CXSPARSE都具有相同的文件名: cs.h 。此软件包用于MATLAB的内置DMPERM。
作者:蒂姆·戴维斯(Tim Davis)
CXSparse
csparse扩展。包括对复杂矩阵以及int或长整数的支持。将其代替CSPARSE用于生产使用;它以与csparse相同的名称创建一个libcsparse.so(或Mac上的Dylib)。它是CSPARSE的超集。任何针对CSPARSE链接的代码也应能够链接到CXSPARSE。
作者:蒂姆·戴维斯,大卫·贝特曼
Example
一个简单的包装,几乎依靠所有套房
.github
在GitHub上进行CI测试的工作流程。
GraphBLAS
线性代数语言中的图形算法。
https://graphblas.org
作者:蒂姆·戴维斯,乔·伊顿,科里·诺雷特
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 local后,在此处为每个软件包共享make install位置。
LICENSE.txt
为每个软件包收集许可证。
Makefile
可选的,使用make来编译所有套件,该cmake用作每个子标记中的简单包装器。
make
编译套房库。随后的make install将在CMAKE_INSTALL_PATH中安装(可能默认为Linux或Mac上的/usr/local/lib )。
make local
编译套房。随后的make install将安装在./lib ./include不安装在CMAKE_INSTALL_PATH中。
make global
编译套房库。随后的make install将在/usr/local/lib (或配置已配置的CMAKE_INSTALL_PREFIX为)中安装。不安装./lib和./include 。
make install
在当前目录( ./lib ) ./include /usr/local/lib和/usr/local/include中安装(后者CMAKE_INSTALL_PREFIX定义的后者),具体取决于make , make local还是make global 。
make uninstall
撤消make install 。
make distclean
删除./lib未发行的文件,包括./bin和./include ./share
make purge
与make distclean相同。
make clean
删除所有没有分发文件的文件,而是保留编译的库和演示, ./lib , ./share share和./include 。
每个单独的子项目还具有上述每个make 。
您不需要做的事情:
make docs
从乳胶文件中创建用户指南
make cov
运行语句覆盖测试(仅限Linux)
MATLAB_Tools
用于MATLAB的各种M文件
作者:蒂姆·戴维斯(所有零件)
对于spqr_rank :作者Les Foster和Tim Davis
Contents.m
目录列表
dimacs10
负载DIMACS10收集的矩阵
Factorize
面向对象的x=Ab用于matlab
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,San Jose State Univ一起使用。
SSMULT
C=A*B ,其中A和B都稀疏。这是MATLAB中内置C=A*B基础,直到被MATLAB R2021A中的Graphblas取代。
SuiteSparseCollection
对于套房矩阵收藏
waitmex
等待和在MexFunction中使用
Mongoose
图形分区。
作者:Nuri Yeralan,Scott Kolodziej,William Hager,Tim Davis
ParU
平行的未对称模式多额定方法。
目前是预发行。
作者:Mohsen Aznaveh和Tim Davis
RBio
读/编写卢瑟福/波音格式的稀疏矩阵
作者:蒂姆·戴维斯(Tim Davis)
README.md
这个文件
SPEX
解决精确算术中的稀疏线性系统。
需要GNU GMP和MPRF库。
这将很快被一个更通用的软件包替换,即Spex V3,其中包括此方法(确切的稀疏LU)和其他方法(稀疏精确的Cholesky,以及稀疏的精确更新/Downdate)。 V3的API将发生重大变化。
作者:Chris Lourenco,Jinhao Chen,Erick Moreno-Centeno,Lorena Lorena Lorena Mejia Domenzain和Tim Davis。
有关最新版本,请参见https://github.com/clouren/spex。
SPQR
稀疏的QR分解。这是MATLAB中的内置qr和x=Ab也称为Suitesparseqr。
包括两个GPU库: SPQR/GPUQREngine和SPQR/SuiteSparse_GPURuntime 。
CPU代码的作者:蒂姆·戴维斯(Tim Davis)
GPU模块的作者:蒂姆·戴维斯(Tim Davis),纳里·伊拉斯(Nuri Yeralan),威萨姆·西德·拉克达(Wissam Sid-Lakhdar)
ssget
MATLAB接口到Suitesparse Matrix Collection
作者:蒂姆·戴维斯(Tim Davis)
SuiteSparse_config
具有上述所有软件包的通用功能和配置的库。 CSparse , GraphBLAS , LAGraph和MATLAB_Tools不使用SuiteSparse_config 。
作者:蒂姆·戴维斯(Tim Davis)
SuiteSparse_demo.m
MATLAB的套房演示
SuiteSparse_install.m
为MATLAB安装套件
SuiteSparse_paths.m
设定套件Matlab Mexfunctions的路径
SuiteSparse_test.m
MATLAB中的套房的详尽测试
UMFPACK
稀疏的lu分解。需要AMD和BLAS 。
这是MATLAB中的内置lu和x=Ab 。
作者:蒂姆·戴维斯(Tim Davis)
算法设计合作:Iain Duff
请参阅每个软件包以获取许可证,版权和作者信息。所有代码均由Timothy A. Davis(电子邮件:[email protected])撰写或合着,除了Metis(由George Karypis), GraphBLAS/cpu_features (Google),Graphblas/lz4,ZSTD和XXHASH(由Yann Collet,在Facebook/jitia/jit)(Yann collet)(由Graphblas/lz4,ZSTD和XXHASH)(Yann/jitiia)(by)/cuda。 Graphblas/Cuda的一部分是NVIDIA的版权(C)。请参考这些许可证中的每一个。
感谢您的包装套件!这里有一些建议:
Graphblas需要很长时间来编译,因为它在编译时会创建许多快速的“ FactoryKernels”。如果要减少编译时间和库大小,请启用GRAPHBLAS_COMPACT模式,但请保持启用JIT编译器。然后,Graphblas将通过其JIT编译器在运行时编译所需的内核。汇编JIT内核后,性能将与FactoryKernels相同。默认情况下,用户编译的内核放置在~/.SuiteSparse中。您无需分发Graphblas的源即可启用JIT编译器:Just libgraphblas.so和GraphBLAS.h就足够了。
Graphblas需要OpenMP!从根本上讲,这是一个并行代码,因此请使用启用OpenMP进行分配。表现会遭受否则。
CUDA加速度:Cholmod和SPQR可以从其CUDA内核中受益。如果您没有CUDA或不想将其包含在发行版中,则此版本的Suitesparse跳过了CHOLMOD_CUDA和SPQR_CUDA库的建造,并且不链接到GPUQREngine和SuiteSparse_GPURuntime库。
Suitesparse是许多包装的元包装,每个包装都有自己的发表论文。要引用整个收藏,请使用URL:
还请引用您使用的包装的特定论文。这是一个长列表;如果您想要一个较短的列表,只需引用最新的“算法xxx:” ACM TOMS中的论文。
对于MATLAB X = A B,请参见下文有关AMD,Colamd,Cholmod,umfpack和Suitesparseqr(SPQR)。
对于Graphblas,MATLAB中的C = AB(稀疏时间 - sparse):
戴维斯。算法1037:Suitesparse:Graphblas:稀疏线性代数语言中的平行图算法。 ACM Trans。数学。软件。 49,3,第28条(2023年9月),30页。 https://doi.org/10.1145/3577195
T. Davis,算法1000:Suitesparse:Graphblas:稀疏线性代数语言中的图形算法,数学软件上的ACM Trans,第45卷,第4卷,第4期,2019年12月,第44条,第44条。https://doi./doi.org/10.1145/33222225。
lagraph:
G.Szárnyas等人,“ lagraph:线性代数,网络分析库和图算法的研究,” 2021 IEEE国际平行和分布式处理研讨会研讨会(IPDPSW),波特兰,俄勒冈州,俄勒冈州,俄勒冈州,美国,美国,2021年,2021年,第2021页,第243-25252页。 https://doi.org/10.1109/ipdpsw52791.2021.00046。
对于CSPARSE/CXSPARSE:
Ta Davis,《稀疏线性系统的直接方法》,《暹罗》系列算法基础知识,暹罗,费城,宾夕法尼亚州,2006年。https://doi.org/10.1137/1.97808987188881
对于Suitesparseqr(SPQR):(也引用AMD,Colamd):
TA Davis,算法915:SuitesParseQR:多额定多线程级别浏览稀疏QR分解,ACM Trans。关于数学软件,38(1),2011年,第8:1--8:22。 https://doi.org/10.1145/2049662.2049670
适用于Suitesparseqr/GPU:
Sencer Nuri Yeralan,Ta Davis,Wissam M. Sid-Lakhdar和Sanjay Ranka。 2017。算法980:GPU上的QR稀疏分解。 ACM Trans。数学。软件。 44,2,第17条(2018年6月),第29页。 https://doi.org/10.1145/3065870
对于Cholmod :(也引用AMD,Colamd):
Y. Chen,Ta Davis,WW Hager和S. Rajamanickam,算法887:Cholmod,SuperNodal稀疏Cholesky分解和更新/Downdate,ACM Trans。关于数学软件,35(3),2008年,第22:1--22:14。 https://dl.acm.org/doi/abs/10.1145/1391989.1391995
Ta Davis和WW Hager,稀疏Cholesky更新/Downdate和三角形溶液中的动态超节,ACM Trans。关于数学软件,35(4),2009年,第27:1--27:23。 https://doi.org/10.1145/1462173.1462176
对于Cholmod/修改模块:(也引用AMD,Colamd):
Ta Davis和William W. Hager,《矩阵分析与应用2005 26:3,621-639》中稀疏的chelesky分解siam杂志的行修改。 https://doi.org/10.1137/s089547980343641x
Ta Davis和William W. Hager,《矩阵分析和应用2001 22:4,997-1013 on Siam siam journal siam journal siam journal siam journal siam journal》的多级修改。 https://doi.org/10.1137/S0895479899357346
Ta Davis和William W. Hager修改了稀疏的Cholesky分解,《暹罗分析与应用》 1999 20:3,606-627。 https://doi.org/10.1137/S0895479897321076
对于Cholmod/GPU模块:
史蒂文·C·雷尼奇(Steven C. https://doi.org/10.1016/j.parco.2016.06.004
对于AMD和CAMD:
P. Amestoy,Ta Davis,是Duff,算法837:大约最低度排序算法,ACM Trans。关于数学软件,30(3),2004年,第381--388页。 https://dl.acm.org/doi/abs/10.1145/1024074.1024081
P. Amestoy,Ta Davis,是Duff,这是一个大约最低度订购算法的Duff,Siam J. Matrix Analysis and Applications,17(4),1996年,第886---905页。 https://doi.org/10.1137/S0895479894278952
对于Colamd,Symamd,Ccolamd和Csymamd:
Ta Davis,Jr Gilbert,S。Larimore,E。Ng,算法836:Colamd,近似柱的最低度订购算法,ACM Trans。关于数学软件,30(3),2004年,第377---380页。 https://doi.org/10.1145/1024074.1024080
Ta Davis,Jr Gilbert,S。Larimore,E。Ng,一列大约最低度排序算法,ACM Trans。关于数学软件,30(3),2004年,第353---376页。 https://doi.org/10.1145/1024074.1024079
对于umfpack :(也引用AMD和Colamd):
TA Davis,算法832:UMFPACK-一种具有列预订策略的不对称模式多额定方法,ACM Trans。关于数学软件,30(2),2004年,第196--199页。 https://dl.acm.org/doi/abs/10.1145/992200.992206
TA戴维斯(Ta Davis),一种无对称模式多帧方法的列预订策略,ACM Trans。关于数学软件,30(2),2004年,第165---195页。 https://dl.acm.org/doi/abs/10.1145/992200.992205
ta戴维斯(Ta Davis)和达夫(Duff),这是一种用于非对称稀疏矩阵的联合统一/多额定方法,ACM Trans。关于数学软件,25(1),1999年,第1--19页。 https://doi.org/10.1145/305658.287640
Ta Davis和Duff,这是一种用于稀疏LU分解的不对称模式多尺度方法,Siam J. Matrix分析和计算,18(1),1997年,第140---158页。 https://doi.org/10.1137/s0895479894246905
对于分解m文件:
TA Davis,算法930:分解,用于MATLAB的面向对象的线性系统求解器,ACM Trans。关于数学软件,39(4),2013年,第28:1-28:18。 https://doi.org/10.1145/2491491.2491498
对于Klu和BTF(也引用AMD和Colamd):
Ta Davis和Ekanathan Palamadai Natarajan。 2010。算法907:KLU,用于电路模拟问题的直接稀疏求解器。 ACM Trans。数学。软件。 37,3,第36条(2010年9月),第17页。 https://dl.acm.org/doi/abs/10.1145/1824801.1824814
对于LDL:
戴维斯。算法849:简洁的稀疏Cholesky分解软件包。 ACM Trans。数学。软件。 31,4(2005年12月),587–591。 https://doi.org/10.1145/1114268.1114277
用于SSGET和Suitesparse Matrix Collection:
Ta Davis和Yifan Hu。 2011年。佛罗里达大学稀疏矩阵集合。 ACM Trans。数学。软件。 38,1,第1条(2011年11月),25页。 https://doi.org/10.1145/2049662.2049663
Kolodziej等,(2019年)。 Suitesparse Matrix Collection网站接口。开源软件杂志,4(35),1244。https://doi.org/10.21105/joss.01244
对于spqr_rank :
Leslie V. Foster和Ta Davis。 2013。算法933:使用SuiteSparseqr的数值等级,空空间基库,伪溶液和基本解决方案的可靠计算。 ACM Trans。数学。软件。 40,1,第7条(2013年9月),第23页。 https://doi.org/10.1145/2513109.2513116
对于猫鼬:
Ta Davis,William W. Hager,Scott P. Kolodziej和S. Nuri Yeralan。 2020年。算法1003:猫鼬,图形和分区库。 ACM Trans。数学。软件。 46,1,第7条(2020年3月),第18页。 https://doi.org/10.1145/3337792
对于SPEX:
克里斯托弗·劳伦科(Christopher Lourenco),金豪·陈(Jinhao Chen),埃里克·莫雷诺(Erick Moreno-Centeno)和塔·戴维斯(Ta Davis)。 2022。算法1021:Spex左LU,通过稀疏的左侧左整数lu分解来求解稀疏的线性系统。 ACM Trans。数学。软件。 2022年6月。https://doi.org/10.1145/3519024
注意:如果使用OpenBlas,请确保使用0.3.27版或更高版本。
要选择您的Blas/Lapack,请参阅SuiteSparse_config/cmake_modules中的说明。如果SuiteSparse_config找到了带有64位整数的Blas(例如Intel Mkl ILP64 Blas),则它将用SUITESPARSE_BLAS_INT配置SuiteSparse_config.h ,定义为int64_t 。否则,如果发现了32位Blas,则将此类型定义为int32_t 。如果以后,将UMFPACK,CHOLMOD或SPQR编译并与具有不同整数大小的Blas链接在一起,则必须使用-DBLAS64 (断言Blas中的64位整数)或-dblas32或-DBLAS32 ,(要断言在Blas中使用32位全体)。
Blas整数的大小与sizeof(void *)无关。
当以二进制形式分发(例如Debian,Ubuntu,Spack或Brew套件)时,套件可能应该被编译为期望有32位的Blas,因为这是最常见的情况。默认值是使用32位Blas,但是可以通过将CMAKE变量SUITESPARSE_USE_64BIT_BLAS设置为ON来更改。
默认情况下,套房可以寻找合适的Blas库。执行特定的Blas库都使用:
CMAKE_OPTIONS="-DBLA_VENDOR=OpenBLAS" make
cd Package ; cmake -DBLA_VENDOR=OpenBLAS .. make
要使用默认值(狩猎Blas),请勿设置BLA_VENDOR ,或将其设置为空字符串。在这种情况下,如果SUITESPARSE_USE_64BIT_BLAS打开,则优先考虑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,则构建将失败。
在此目录中键入以下内容(要求系统privilEdge进行sudo make install ):
mkdir -p build && cd build
cmake ..
cmake --build .
sudo cmake --install .
所有库将创建并安装到默认的系统范围文件夹(Linux上的/usr/local/lib)中。所有这些都包括使用Suitesparse的应用程序所需的文件,该文件已安装到/usr/local/includs/suitesparse(在Linux上)中。
要仅构建库的子集,请在使用CMAKE配置时设置SUITESPARSE_ENABLE_PROJECTS 。例如,要构建和安装Cholmod和Cxsparse(包括其依赖项),请使用以下命令:
mkdir -p build && cd build
cmake -DSUITESPARSE_ENABLE_PROJECTS="cholmod;cxsparse" ..
cmake --build .
sudo cmake --install .
对于Windows(MSVC),将CMakeLists.txt文件导入MS Visual Studio。确保将构建类型指定为发行版;例如,要在命令窗口中的窗口上构建套件,请运行:
mkdir -p build && cd build
cmake ..
cmake --build . --config Release
cmake --install .
请确保首先安装所有必需的库:umfpack,cholmod和spqr的大麻和拉帕克,以及SPEX的GMP和MPFR。确保使用最新的库; SPEX需要MPFR 4.0.2和GMP 6.1.2(这些版本编号与libgmp.so.so.xyz和libmpfr.so.xyz的XYZ后缀不符;有关详细信息,请参见SPEX用户指南)。
要编译库并仅在Suitesparse/lib(非/usr/local/lib)中安装它们,请在套件的顶级层中执行此操作:
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=.. ..
cmake --build .
cmake --install .
如果将/home/me/suitesparse/lib添加到库搜索路径(Linux中的LD_LIBRARY_PATH ),则可以执行以下操作(例如):
S = /home/me/SuiteSparse
cc myprogram.c -I$(S)/include/suitesparse -lumfpack -lamd -lcholmod -lsuitesparseconfig -lm
更改C和C ++编译器,并并行使用:
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER==g++ ..
例如,将编译器更改为GCC和G ++。
这将在Linux/Unix和Mac上使用。它应该自动检测您是否有英特尔编译器,以及您是否有CUDA。
请参阅SuiteSparse_config/cmake_modules/SuiteSparsePolicy.cmake选择您的blas。
您可能还需要在路径中添加套房/lib。例如,如果您的Suitesparse副本在/Home/ME/Suitesparse中,请将其添加到您的~/.bashrc文件中:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
对于Mac,请改用此信息:
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
文件的默认安装位置在下面,其中软件包是Suitesparse中的软件包之一:
* `CMAKE_INSTALL_PREFIX/include/suitesparse/`: include files
* `CMAKE_INSTALL_PREFIX/lib/`: compiled libraries
* `CMAKE_INSTALL_PREFIX/lib/cmake/SuiteSparse/`: `*.cmake` scripts
for all of SuiteSparse
* `CMAKE_INSTALL_PREFIX/lib/cmake/PACKAGE/`: `*Config.cmake` scripts for a
specific package
* `CMAKE_INSTALL_PREFIX/lib/pkgconfig/PACKAGE.pc`: `.pc` scripts for
a specific package pkgconfig
假设您将Suitesparse放在/home/me/SuiteSparse文件夹中。
将SuiteSparse/lib文件夹添加到您的运行时库路径中。在Linux上,将其添加到您的~/.bashrc脚本中,假设/home/me/SuiteSparse是您的Suitesparse副本的位置:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
对于Mac,请在您的~/.zshrc脚本中使用它,假设您将Suitesparse放入/Users/me/SuiteSparse :
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
用make local编译所有套件。
接下来,编译Graphblas Matlab库。在SuteesParse文件夹中的系统外壳中,如果要使用make install进行系统范围内安装系统,请键入make gbmatlab ,或者如果要在自己的Suitesparse/lib中使用库, make gblocal 。
然后在MATLAB命令窗口中,CD到SuitesParse目录并键入SuiteSparse_install 。所有软件包将被编译,并将运行几个演示。要运行(长!)详尽的测试,请SuiteSparse_test 。
使用MATLAB PATHTOOL或SAVEPATH命令保存MATLAB路径以获取将来的会话。如果这些方法由于没有系统范围的权限而失败,请将新路径添加到您的startup.m文件,通常在文档/matlab/startup.m中。您还可以使用SuiteSparse_paths m文件在每个MATLAB会话开始时设置所有路径。
您可以使用命令为CMAKE设置特定选项(例如):
cmake -DCHOLMOD_PARTITION=OFF -DBUILD_STATIC_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug ..
该命令将编译除cholmod/partition模块(因为-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_BUILD_TYPE :
默认值: Release ,使用Debug进行调试。
SUITESPARSE_USE_STRICT :
SuitesParse具有许多特定软件包的形式的SUITESPARSE_USE_*或(package)_USE_*的用户定义设置。通常,这些设置并不严格。例如,如果SUITESPARSE_USE_OPENMP在ON ,则首选OpenMP,但是可以在没有OpenMP的情况下使用套件,因此如果找不到OpenMP,则不会生成错误。但是,如果SUITESPARSE_USE_STRICT在ON ,则严格处理所有*_USE_*设置,并且如果ON有任何设置,则发生错误,但不可用的包裹或设置。 *_USE_SYSTEM_*设置始终被视为严格。默认值: OFF 。
SUITESPARSE_USE_CUDA :
如果设置为ON ,则为所有套件启用CUDA。默认: ON ,
Windows上有MSVC的CUDA似乎正在使用此版本,但应将其视为原型,并且可能无法完全实用。我在Windows上测试CUDA的资源有限。如果您遇到问题,请禁用CUDA并将其作为Github上的问题发布。
CHOLMOD_USE_CUDA :
默认值: ON 。 SUITESPARSE_USE_CUDA和CHOLMOD_USE_CUDA都必须启用CHOLMOD中的CUDA。
SPQR_USE_CUDA :
默认值: ON 。 SUITESPARSE_USE_CUDA和SPQR_USE_CUDA都必须启用SPQR中的CUDA。
CMAKE_INSTALL_PREFIX :
定义安装位置(Linux上的默认位置是/usr/local )。例如,此命令在顶级套件文件夹中的文件夹中build时将安装目录设置为/stuff ,随后的sudo cmake --install . :
cmake -DCMAKE_INSTALL_PREFIX=/stuff ..
sudo cmake --install .
SUITESPARSE_PKGFILEDIR :
将安装CMAKE CONFIG和PKG-CONFIG文件的目录。默认情况下,CMAKE配置文件将安装在目录的cmake夹中,其中将安装(静态)库(例如, lib )。 PKG-Config的.pc文件将安装在目录的子文件夹pkgconfig中,其中将安装(静态)库。
此选项允许将它们安装在不同于(静态)库的位置。这允许同时安装套件库的多个配置(例如,还为每个CMAKE_RELEASE_POSTFIX和CMAKE_INSTALL_LIBDIR设置了不同的配置)。要在下游项目中获取相应的配置,例如,例如, CMAKE_PREFIX_PATH (用于CMAKE)或PKG_CONFIG_PATH (使用PKG-CONFIG构建系统)到包含相应的CMAKE CONFICCONFIC文件或PKG-Config文件的路径。
SUITESPARSE_INCLUDEDIR_POSTFIX :
套房的标题安装目标的后缀。默认值:Suitesparse,因此默认值包括目录为: CMAKE_INSTALL_PREFIX/include/suitesparse
BUILD_SHARED_LIBS :
如果ON ,则建立共享库。默认值: ON 。
BUILD_STATIC_LIBS :
如果ON ,则建立静态库。默认值: ON ,除了Graphblas之外,Graphblas需要很长时间才能编译,因此Graphblas的默认值是OFF ,除非BUILD_SHARED_LIBS OFF 。
SUITESPARSE_CUDA_ARCHITECTURES :
一个字符串,例如"all"或"35;50;75;80" ,列出了使用nvcc编译CUDA内核时要使用的CUDA架构。 "all"选项需要CMAKE 3.23或更高版本。默认值: "52;75;80" 。
BLA_VENDOR :
字符串。留下未设置,或使用"ANY"选择任何BLAS库(默认值)。或设置为Findblas.cmake定义的BLA_VENDOR的名称。请参阅:https://cmake.org/cmake/help/latest/module/findblas.html#blas-lapack-vendors
SUITESPARSE_USE_64BIT_BLAS :
如果ON ,请寻找一个64位的Blas。如果OFF :仅32位。默认值: OFF 。
SUITESPARSE_USE_PYTHON :
如果ON ,请在具有一个包装的任何包装中构建Python接口(目前仅是SPEX)。如果OFF :请勿构建任何Python接口。默认值: ON 。
SUITESPARSE_USE_OPENMP :
如果ON ,则默认情况下使用OpenMP(如果可用)。默认值: ON 。
如果不使用OpenMP,Graphblas,Lagraph和Paru将会大大慢。如果没有OpenMP,Cholmod就会慢一点(只要它仍然具有平行的Blas/Lapack)。三个软件包(UMFPACK,CHOLMOD和SPQR)在很大程度上依赖于平行的Blas/Lapack库,这些库可能在内部使用OpenMP。如果您希望在整个应用程序中禁用OpenMP,请选择一个单线读取Blas/lapack或不使用OpenMP的并行Blas/Lapack(例如Apple Apple Accelerate Framework)。使用单线读取BLAS/LAPACK库将导致UMFPACK,CHOLMOD和SPQR的速度较慢。
警告:如果没有OpenMP或Pthreads构建,Graphblas可能不会是线程安全的(有关详细信息,请参见《 Graphblas用户指南》)。
SUITESPARSE_CONFIG_USE_OPENMP :
如果ON , SuiteSparse_config如果可用,请使用OpenMP。默认值: SUITESPARSE_USE_OPENMP 。它不是必需的,并且仅用于让SuiteSparse_time Call omp_get_wtime 。
CHOLMOD_USE_OPENMP :
如果ON ,则在Cholmod中使用OpenMP(如果可用)。默认值: SUITESPARSE_USE_OPENMP 。
GRAPHBLAS_USE_OPENMP :
如果ON ,则在Graphblas中使用OpenMP(如果可用)。默认值: SUITESPARSE_USE_OPENMP 。
LAGRAPH_USE_OPENMP :
如果ON ,则在lagraph中使用OpenMP(如果可用)。默认值: SUITESPARSE_USE_OPENMP 。
PARU_USE_OPENMP :
如果ON ,则在PARU中使用OpenMP,如果可用。默认值: SUITESPARSE_USE_OPENMP 。
SPEX_USE_OPENMP :
如果ON ,则在SPEX中使用OpenMP(如果可用)。默认值: SUITESPARSE_USE_OPENMP 。
SUITESPARSE_DEMOS :
如果ON ,请为每个软件包构建演示程序。默认值: OFF 。
SUITESPARSE_USE_SYSTEM_BTF :
如果ON ,请使用构建系统上安装的BTF库。如果OFF ,则在需要时自动构建BTF作为依赖关系。默认值: OFF 。
SUITESPARSE_USE_SYSTEM_CHOLMOD :
如果ON ,请使用构建系统上安装的Cholmod库。如果OFF ,则在需要时自动构建Cholmod作为依赖关系。默认值: OFF 。
SUITESPARSE_USE_SYSTEM_AMD :
如果ON ,请使用构建系统上安装的AMD库。如果OFF ,则在需要时自动构建AMD为依赖关系。默认值: OFF 。
SUITESPARSE_USE_SYSTEM_COLAMD :
如果ON ,请使用构建系统上安装的Colamd库。如果OFF ,则在需要时自动构建colamd作为依赖关系。默认值: OFF 。
SUITESPARSE_USE_SYSTEM_CAMD :
如果ON ,请使用构建系统上安装的CAMD库。如果OFF ,则在需要时自动构建CAMD为依赖关系。默认值: OFF 。
SUITESPARSE_USE_SYSTEM_CCOLAMD :
如果ON ,请使用构建系统上安装的CCOLAMD库。如果OFF ,请自动构建CCOLAMD作为依赖关系。默认值: OFF 。
SUITESPARSE_USE_SYSTEM_GRAPHBLAS :
如果ON ,请使用构建系统上安装的GraphBlas库。如果OFF ,则在需要时自动构建Graphblas作为依赖关系。默认值: OFF 。
SUITESPARSE_USE_SYSTEM_SUITESPARSE_CONFIG :
如果ON ,请使用构建系统上安装的SuiteSparse_config库。如果OFF ,请自动构建SuiteSparse_config作为依赖关系。默认值: OFF 。
SUITESPARSE_USE_FORTRAN
如果ON ,请使用Fortran编译器来确定C调用Fortan的方式,并构建几个可选的fortran例程。如果OFF ,请使用SUITESPARSE_C_TO_FORTRAN定义C调用Fortran的方式。默认值: ON 。
SUITESPARSE_C_TO_FORTRAN
一个定义C调用fortran的字符串(即,Blas库导出的功能)。如果无法检测到无法SUITESPARSE_USE_FORTRAN OFF的fortran编译器,则使用此设置。该字符串应读为参数列表和预处理宏的正文。宏的第一个论点是小写字母中的任何fortran函数名称。第二个参数是大写字母中相同的函数名称。身体定义了调用函数名称fortran函数的函数。这是必要的,因为fortran是不敏感的,并且不同的fortran编译器使用不同的名称杂交约定。如果使用了MSVC C/C ++编译器,则此默认为"(name,NAME) name" (即,下部案件而无需落后)。这是Windows上Intel Fortran编译器的杂交约定的名称。如果使用任何其他C/C ++编译器,则此默认为"(name,NAME) name##_" (即,较低的情况,带有尾随下划线)。这是大多数常用fortran编译器的杂交约定的名称(例如Windows, gfortran , flang等平台上的ifx )。默认情况下,OpenBlas(平台上的独立或用于构建OpenBlas的编译器)也使用了后一个名称混合约定。如果您想使用MSVC编译器并链接到OpenBlas,则可能需要使用-DSUITESPARSE_C_TO_FORTRAN="(name,NAME) name##_"配置。
Additional options are available for specific packages:
UMFPACK_USE_CHOLMOD :
If ON , UMFPACK uses CHOLMOD for additional (optional) ordering options. Default: ON .
KLU_USE_CHOLMOD :
If ON , KLU uses CHOLMOD for additional (optional) ordering options. Default: ON .
CHOLMOD is composed of a set of Modules that can be independently selected; all options default to ON :
CHOLMOD_GPL
If OFF , do not build any GPL-licensed module (MatrixOps, Modify, Supernodal, and GPU modules)
CHOLMOD_CHECK
If OFF , do not build the Check module.
CHOLMOD_MATRIXOPS
If OFF , do not build the MatrixOps module.
CHOLMOD_CHOLESKY If OFF , do not build the Cholesky module. This also disables the Supernodal and Modify modules.
CHOLMOD_MODIFY
If OFF , do not build the Modify module.
CHOLMOD_CAMD
If OFF , do not link against CAMD and CCOLAMD. This also disables the Partition module.
CHOLMOD_PARTITION
If OFF , do not build the Partition module.
CHOLMOD_SUPERNODAL
If OFF , do not build the Supernodal module.
One common issue can affect all packages: getting the right #include files that match the current libraries being built. It's possible that your Linux distro has an older copy of SuiteSparse headers in /usr/include or /usr/local/include, or that Homebrew has installed its suite-sparse bundle into /opt/homebrew/include or other places. Old libraries can appear in in /usr/local/lib, /usr/lib, etc. When building a new copy of SuiteSparse, the cmake build system is normally (or always?) able to avoid these, and use the right header for the right version of each library.
As an additional guard against this possible error, each time one SuiteSparse package #include's a header from another one, it checks the version number in the header file, and reports an #error to the compiler if a stale version is detected. In addition, the Example package checks both the header version and the library version (by calling a function in each library). If the versions mismatch in any way, the Example package reports an error at run time.
For example, CHOLMOD 5.1.0 requires AMD 3.3.0 or later. If it detects an older one in amd.h , it will report an #error :
#include "amd.h"
#if ( ... AMD version is stale ... )
#error "CHOLMOD 5.1.0 requires AMD 3.3.0 or later"
#endif
and the compilation will fail. The Example package makes another check, by calling amd_version and comparing it with the versions from the amd.h header file.
If this error or one like it occurs, check to see if you have an old copy of SuiteSparse, and uninstall it before compiling your new copy of SuiteSparse.
There are other many possible build/install issues that are covered by the corresponding user guides for each package, such as finding the right BLAS, OpenMP, and other libraries, and how to compile on the Mac when using GraphBLAS inside MATLAB, and so on. Refer to the User Guides for more details.
MATLAB/Octave/R/Mathematica interfaces:
Many built-in methods in MATLAB and Octave rely on SuiteSparse, including C=A*B x=Ab , L=chol(A) , [L,U,P,Q]=lu(A) , R=qr(A) , dmperm(A) , p=amd(A) , p=colamd(A) , ... See also Mathematica, R, and many many more.列表太长了。
Julia interface:
https://github.com/JuliaSparse/SparseArrays.jl
Python interface to GraphBLAS by Anaconda and NVIDIA:
https://pypi.org/project/python-graphblas
Intel's Go interface to GraphBLAS:
https://pkg.go.dev/github.com/intel/forGraphBLASGo
See scikit-sparse and scikit-umfpack for the Python interface via SciPy:
https://github.com/scikit-sparse/scikit-sparse https://github.com/scikit-umfpack/scikit-umfpack
See math.js by Jos de Jong for a JavaScript port of CSparse:
https://github.com/josdejong/mathjs
See russell for a Rust interface:
https://github.com/cpmech/russell
Markus Mützel contributed the most recent update of the SuiteSparse build system for all SuiteSparse packages, extensively porting it and modernizing it.
I would also like to thank François Bissey, Sebastien Villemot, Erik Welch, Jim Kitchen, and Fabian Wein for their valuable feedback on the SuiteSparse build system and how it works with various Linux / Python distros and other package managers. If you are a maintainer of a SuiteSparse packaging for a Linux distro, conda-forge, R, spack, brew, vcpkg, etc, please feel free to contact me if there's anything I can do to make your life easier. I would also like to thank Raye Kimmerer for adding support for 32-bit row/column indices in SPQR v4.2.0.
See also the various Acknowledgements within each package.