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##_"配置。
其他選項可用於特定軟件包:
UMFPACK_USE_CHOLMOD :
如果ON ,則UMFPACK使用Cholmod進行其他(可選)訂購選項。默認值: ON 。
KLU_USE_CHOLMOD :
如果ON ,KLU使用Cholmod作為其他(可選)訂購選項。默認值: ON 。
Cholmod由一組可以獨立選擇的模塊組成;所有選項默認為ON :
CHOLMOD_GPL
如果OFF ,請勿構建任何GPL許可的模塊(矩陣,修改,超節日和GPU模塊)
CHOLMOD_CHECK
如果OFF ,請勿構建檢查模塊。
CHOLMOD_MATRIXOPS
如果OFF ,請勿構建矩陣模塊。
CHOLMOD_CHOLESKY如果OFF ,請勿構建Cholesky模塊。這也可以禁用上節並修改模塊。
CHOLMOD_MODIFY
如果OFF ,請勿構建修改模塊。
CHOLMOD_CAMD
如果OFF ,請勿與CAMD和CCOLAMD鏈接。這也禁用分區模塊。
CHOLMOD_PARTITION
如果OFF ,請勿構建分區模塊。
CHOLMOD_SUPERNODAL
如果OFF ,請勿構建超節點模塊。
一個常見的問題可能會影響所有軟件包:獲取與當前庫構建的正確的#include文件。您的Linux發行版可能在/usr/include/ussr/usr/local/include中擁有較舊的套件標頭副本,或者是自製的套房套件已將其Suite-sparse捆綁包裝到/opt/opt/homebrew/inclage或其他地方。舊庫可以出現在/usr/local/lib,/usr/lib等中。建立套件的新副本時,Cmake Build System通常(或總是?)可以避免使用這些系統,並為每個庫的正確版本使用正確的標頭。
作為針對此可能錯誤的額外警衛,每次一個套件包#Include unclus a的標題都會從另一個套件中添加到標頭時,它會檢查標頭文件中的版本編號,並在檢測到陳舊版本時向編譯器報告#Error。此外,示例軟件包同時檢查標題版本和庫版本(通過在每個庫中調用一個函數)。如果版本以任何方式不匹配,則示例軟件包在運行時報告錯誤。
例如,Cholmod 5.1.0需要AMD 3.3.0或更高版本。如果它檢測到amd.h中的較舊的,它將報告一個#error :
#include "amd.h"
#if ( ... AMD version is stale ... )
#error "CHOLMOD 5.1.0 requires AMD 3.3.0 or later"
#endif
彙編將失敗。示例軟件包通過調用amd_version並將其與amd.h標頭文件中的版本進行比較,進行了另一個檢查。
如果此錯誤或類似的錯誤發生,請檢查您是否有Suitesparse的舊副本,並在編譯新的Suitesparse副本之前將其卸載。
每個軟件包的相應用戶指南涵蓋了其他許多可能的構建/安裝問題,例如查找正確的Blas,OpenMP和其他庫,以及在MATLAB中使用Graphblas時如何在Mac上編譯,等等。有關更多詳細信息,請參閱用戶指南。
MATLAB/八度/R/Mathematica接口:
MATLAB和OCTAVE中的許多內置方法都取決於套件,包括C=A*B x=Ab , L=chol(A) , [L,U,P,Q]=lu(A) , R=qr(A) , dmperm(A) A), p=amd(A) , p=colamd(A) ,...,也參見Mathematica,Mathematica,r和多眾多。列表太長了。
朱莉婭界面:
https://github.com/juliasparse/sparsearrays.jl
Anaconda和Nvidia與Graphblas的Python接口:
https://pypi.org/project/python-graphblas
英特爾的Go Graphblas接口:
https://pkg.go.dev/github.com/intel/forgraphblasgo
請參閱Scipy的Scikit-Sparse和Scikit-umfpack有關Python界面的信息:
https://github.com/scikit-sparse/scikit-sparse https://github.com/scikit-umfpack/scikit-umfpack
請參閱Jos de Jong的Math.js,以了解CSPARSE的JavaScript港口:
https://github.com/josdejong/mathjs
請參閱Russell的銹接口:
https://github.com/cpmech/russell
MarkusMützel為所有Suitesparse軟件包的套件構建系統提供了最新更新,並將其廣泛移植並進行現代化。
我還要感謝FrançoisBissey,Sebastien Villemot,Erik Welch,Jim Kitchen和Fabian Wein對Suitesparse Build System的寶貴反饋以及它如何與各種Linux / Python發行版和其他包裝管理人員一起工作。如果您是Linux發行版,Conda-Forge,R,Spack,Brew,VCPKG等的套件包裝的維護者,請隨時與我聯繫,如果我能做的任何事情使您的生活更輕鬆。我還要感謝Raye Kimmerer在SPQR v4.2.0中添加了對32位行/列指數的支持。
另請參閱每個軟件包中的各種確認。