2024年10月10日、SuitesParseバージョン7.8.3
SuiteSparseは、ティムデイビスによって書かれた、または共著されるスパースマトリックス関連のパッケージのセットであり、https://github.com/drtimothyaldendavis/suitesparseで入手可能です。
SuiteSparse(コードとアルゴリズム、除外メティス)の主な著者:ティムデイビス
コードの共著者、アルファベット順の順序で(メティまたはラグラフを含まない):パトリック・アメストイ、モーセン・アズナベ、デビッド・ベイトマン、ジンハオ・チェン、ヤンカー・チェン、イアン・ダフ、ジョー・イートン、レス・フォスター、ウィリアム・ヘイガー、レイ・キミーラー、スコット・コット・コット・コロジエジ、スコット・コット・コット・コット・コット・クロジエジ、ドメンザイン、エリック・モレノ・センテノ、マルクス・ミュッツェル、コーリー・ノレル、エカナサン・パラマダイ、シヴァサンカラン・ラジャマニカム、サンジェイ・ランカ、ウィサム・シド・ラクダール、ヌリ・イェララン。
ラグラフは、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
MetisはGeorge Karypisによって執筆されています。
追加のアルゴリズムデザイナー:Esmond NgとJohn Gilbert。
ライセンス、著作権、および著者情報については、各パッケージを参照してください。
各パッケージのドキュメントについては、通常はDoc Subfolderのドキュメントについては、各パッケージを参照してください。
SuiteSparseのパッケージ、およびこのディレクトリのファイル:
AMD
おおよその最小度順序。これは、MATLABの組み込みAMD関数です。
著者:ティム・デイビス、パトリック・アメストイ、イアン・ダフ
bin
コンパイルされたときにプログラムが配置されている場合、 make localため
BTF
三角形の形式をブロックするための順列
著者:ティム・デイビス、エカナサン・パラマダイ
build
デフォルトのビルドツリー用のフォルダー
CAMD
制約されたおおよその最小度順序
著者:ティム・デイビス、パトリック・アメストイ、イアン・ダフ、ヤンカー・チェン
CCOLAMD
制約付き列概算最小度順序
著者:ティム・デイビス、シヴァサンカラン・ラジャマニカム、ステファン・ラリモア。
アルゴリズムのデザインコラボレーター:エスモンドNG、ジョンギルバート(コラムのため)
ChangeLog
SuiteSparseの変更の概要。各パッケージの詳細については*/Doc/ChangeLog参照してください。
CHOLMOD
まばらな胆嚢因数分解。 AMD、Colamd、Ccolamd、Blas、およびLapackが必要です。オプションでMetisを使用します。これは、matlabのcholとx=Abです。
すべてのモジュールの著者:ティムデイビス
Cholmod/Modify Module Authors:Tim DavisとWilliam W. Hager
cholmod/suitesparse_metis:Cholmodライブラリに埋め込まれたメチスの修正バージョン。詳細については、readme.txtファイルを参照してください。著者:ジョージ・カリピス。これは、George Karypisが提供するオープンソースライセンスを介してSuiteSparseに含まれるわずかに変更されたコピーです。 SuiteSparseは、変更されていないMetisのコピーを使用できません。
CITATION.bib
Bibtex形式のSuiteSparseパッケージの引用。
CMakeLists.txt
オプション、すべてのsuiteSparseをコンパイルします。以下を参照してください。
CODE_OF_CONDUCT.md
コミュニティのガイドライン
COLAMD
列概算最小度順序。これは、Matlabに組み込まれたColamd関数です。
著者(コードの):ティム・デイビスとステファン・ラリモア
アルゴリズムデザインコラボレーター:エスモンドNG、ジョンギルバート
Contents.m
Matlabの「ヘルプスイートスパルス」のコンテンツのリスト。
CONTRIBUTING.md
SuiteSparseに貢献する方法
CONTRIBUTOR-LICENSE.txt
必要な貢献者契約
CSparse
私の本のために開発された簡潔なスパースマトリックスパッケージ、「Sparse Linear Systemsの直接的な方法」、Siamが発行しました。主に教えることを目的としています。コードは、本に記載されているように、(c)ティム・デイビスであることに注意してください。
生産には、代わりにcxsparseを使用してください。特に、CsparseとCxsparseの両方に、Filename: cs.hが含まれます。このパッケージは、Matlabの組み込みDmpermに使用されます。
著者:ティム・デイビス
CXSparse
csparseは拡張されました。複雑なマトリックスとINTまたは長い整数の両方のサポートが含まれています。生産用にCSParseの代わりにこれを使用します。 csparseと同じ名前でlibcsparse.so(またはMac上のディリブ)を作成します。 CSParseのスーパーセットです。 CSParseに対してリンクするコードは、代わりにCXSParseに対してリンクできるはずです。
著者:ティム・デイビス、デビッド・ベイトマン
Example
ほぼすべてのsuitesparseに依存するシンプルなパッケージ
.github
GitHubでのCIテストのワークフロー。
GraphBLAS
線形代数の言語のグラフアルゴリズム。
https://graphblas.org
著者:ティム・デイビス、ジョー・イートン、コーリー・ノレット
include
make install Placesユーザー可視性は、 make localた後、各パッケージのファイルを含めます。
KLU
主に回路シミュレーション用のスパースLU因数分解。 AMD、Colamd、およびBTFが必要です。オプションでは、Cholmod、Camd、Ccolamd、およびMetisを使用します。
著者:ティム・デイビス、エカナサン・パラマダイ
LAGraph
GraphBlasに基づくグラフアルゴリズムライブラリ。 https://github.com/graphblas/lagraphも参照してください
著者:多く。
LDL
非常に簡潔なLDL 'Factorizationパッケージ
著者:ティム・デイビス
lib
make localた後、ここで各パッケージの共有ライブラリmake install 。
LICENSE.txt
各パッケージのライセンスを収集しました。
Makefile
オプションでは、各サブプロジェクトのcmakeのシンプルなラッパーとして使用されるmakeを使用してすべてのsuiteSparseをコンパイルするため。
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
現在のディレクトリ( ./lib )、またはin /usr/local/libおよび/usr/local/include (後者( CMAKE_INSTALL_PREFIXで定義されている)に./include make 、 make local 、またはmake globalが完了したかどうかに応じて。
make uninstall
元に戻すmake install 。
make distclean
./bin 、および./includeなど、配布されてい./shareすべてのファイル./lib削除します。
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
Matlabのオブジェクト指向x=Ab
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ツールボックス:ヌル空間、信頼できる因数化など。レスリーフォスター、サンノゼ州立大学。
SSMULT
C=A*Bここで、 AとB両方ともまばらです。これは、MATLAB R2021AのGraphBlasに取って代わるまで、Matlabの組み込みC=A*Bの基礎でした。
SuiteSparseCollection
SuiteSparse Matrixコレクション用
waitmex
MexFunction内で使用するのは待機です
Mongoose
グラフパーティション化。
著者:Nuri Yeralan、Scott Kolodziej、William Hager、Tim Davis
ParU
並行していない非音声パターン多室周波数。
現在、プレリリースです。
著者:モーセン・アズナベとティム・デイビス
RBio
ラザフォード/ボーイング形式でスパースマトリックスを読み取ります
著者:ティム・デイビス
README.md
このファイル
SPEX
まばらな線形システムを正確な算術で解決します。
GNU GMPおよびMPRFライブラリが必要です。
これはすぐに、この方法(正確なスパースLU)などを含むより一般的なパッケージ、SPEX V3(スパースの正確な胆汁、およびスパースの正確な更新/ダウンデート)に置き換えられます。 V3のAPIは大幅に変化します。
著者:Chris Lourenco、Jinhao Chen、Erick Moreno-Centeno、Lorena Lorena Mejia Domenzain、およびティムデイビス。
最新バージョンについては、https://github.com/clouren/spexを参照してください。
SPQR
まばらなQR因数分解。これは、MATLABの組み込みqrとx=Ab 。 suitesparseqrとも呼ばれます。
2つのGPUライブラリが含まれています: SPQR/GPUQREngineとSPQR/SuiteSparse_GPURuntime含まれます。
CPUコードの著者:ティムデイビス
GPUモジュールの著者:Tim Davis、Nuri Yeralan、Wissam Sid-Lakhdar、Sanjay Ranka
ssget
SuiteSparse MatrixコレクションへのMATLABインターフェース
著者:ティム・デイビス
SuiteSparse_config
上記のすべてのパッケージに共通の機能と構成を備えたライブラリ。 CSparse 、 GraphBLAS 、 LAGraph 、およびMATLAB_Toolsは、 SuiteSparse_configを使用しません。
著者:ティム・デイビス
SuiteSparse_demo.m
MatlabのSuiteSparseのデモ
SuiteSparse_install.m
Matlabのsuitesparseをインストールします
SuiteSparse_paths.m
SuiteSparse Matlab MexFunctionsのパスを設定します
SuiteSparse_test.m
MatlabのSuiteSparseの徹底的なテスト
UMFPACK
まばらなLu因数分解。 AMDとBLASが必要です。
これは、MATLABの内蔵luおよびx=Abです。
著者:ティム・デイビス
アルゴリズムの設計コラボレーション:Iain Duff
ライセンス、著作権、および著者情報については、各パッケージを参照してください。すべてのコードは、Metis(George Karypisによる)、 GraphBLAS/cpu_features (Google)、Graphblas/LZ4、ZSTD、およびXXHash(Yann Collet、Now at Facebook/Cuda/Jitiia/jitaife.iitie.jitaife.iatia)を除き、Timothy A. Davis(email:[email protected])によって執筆または共著されています。 Graphblas/Cudaの一部は、Nvidiaによる著作権(c)です。これらの各ライセンスを参照してください。
パッケージングスイーツパッケージをありがとう!ここにいくつかの提案があります:
GraphBlasはコンパイル時に多くの高速な「FactoryKernels」を作成するため、コンパイルに長い時間がかかります。コンパイル時間とライブラリサイズを短縮する場合は、 GRAPHBLAS_COMPACTモードを有効にしますが、JITコンパイラを有効にしてください。その後、Graphblasは、JITコンパイラを介して、実行時に必要なカーネルをコンパイルします。 JITカーネルがコンパイルされると、パフォーマンスはFactoryKernelsと同じです。ユーザーコンパイルされたカーネルは、デフォルトで~/.SuiteSparseに配置されます。 jitコンパイラlibgraphblas.so有効にするためにGraphblas GraphBLAS.hソースを配布する必要はありません。
GraphblasにはOpenMPが必要です!基本的に並列コードなので、OpenMPが有効になって配布してください。そうでなければパフォーマンスは苦しみます。
Cuda Acceleration:CholmodとSPQRは、Cuda Kernelsの恩恵を受けることができます。 CUDAを持っていないか、ディストリビューションに含めたくない場合、SuiteSparseのこのバージョンはCHOLMOD_CUDAおよびSPQR_CUDAライブラリの建物をスキップし、 GPUQREngineおよびSuiteSparse_GPURuntimeライブラリとリンクしていません。
SuiteSparseは、多くのパッケージのメタパッケージであり、それぞれに独自の公開された論文があります。コレクション全体を引用するには、URLを使用してください。
また、使用するパッケージの特定の論文も引用してください。これは長いリストです。より短いリストが必要な場合は、各パッケージについて、ACM TOMSの論文を最新の「アルゴリズムXXX:」を引用してください。
Matlab x = a bについては、AMD、Colamd、Cholmod、Umfpack、およびSuitesParseQR(SPQR)については以下を参照してください。
graphblasの場合、およびmatlabのc = ab(スパースタイムスパルス):
TAデイビス。アルゴリズム1037:suitesparse:graphblas:並列グラフアルゴリズムのスパース線形代数の言語。 ACMトランス。数学。 Softw。 49、3、第28条(2023年9月)、30ページ。 https://doi.org/10.1145/3577195
T. Davis、Algorithm 1000:SuiteSparse:Graphblas:Sparse Linear Algebraの言語のグラフアルゴリズム、数学ソフトウェアのACMトランス、Vol 45、No 4、12月、記事No44。https://doi.org/10.1145/3322125。
ラグラフの場合:
G.Szárnyaset al。、「ラグラフ:線形代数、ネットワーク分析ライブラリ、およびグラフアルゴリズムの研究」、2021 IEEE International Paralallel and分散処理シンポジウムワークショップ(IPDPSW)、ポートランド、オレゴン州、米国、2021年、243-252ページ。 https://doi.org/10.1109/IPDPSW52791.2021.00046。
csparse/cxsparseの場合:
TA Davis、スパース線形システムの直接的な方法、アルゴリズムの基礎に関するSIAMシリーズ、サイアム、ペンシルベニア州フィラデルフィア、2006年。
suitesparseqr(spqr):(また、amd、colamdを引用します):
Ta Davis、アルゴリズム915:SuiteSparseQR:多極性マルチスレッドランクレビールスパースQR因子化、ACM Trans。数学ソフトウェア、38(1)、2011、pp。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トランス。数学。 Softw。 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 Sparse Cholesky Factorsization and Update/Downdate、ACM Trans。数学ソフトウェア、35(3)、2008、pp。22:1--22:14。 https://dl.acm.org/doi/abs/10.1145/1391989.1391995
Ta DavisとWW Hager、Sparse Cholesky Update/Downdate and Triangular Solvesのダイナミックスーパーノード、ACM Trans。数学ソフトウェア、35(4)、2009、pp。27:1--27:23。 https://doi.org/10.1145/1462173.1462176
Cholmod/Modify Moduleの場合:(また、AMD、Colamdを引用します):
Ta DavisとWilliam W. Hager、マトリックス分析とアプリケーションに関するまばらなCholesky Factorization Siam Journalの列変更2005 26:3、621-639。 https://doi.org/10.1137/S089547980343641X
Ta DavisとWilliam W. Hager、マトリックス分析とアプリケーションに関するまばらなCholesky Factorization Siam Journalの複数ランク変更2001 22:4、997-1013。 https://doi.org/10.1137/S0895479899357346
Ta DavisとWilliam W. Hager、まばらな胆道要因化の変更、Matrix分析とアプリケーションに関するSiam Journal 1999 20:3、606-627。 https://doi.org/10.1137/S0895479897321076
cholmod/gpuモジュールの場合:
Steven C. Rennich、Darko Stosic、Timothy A. Davis、GPUでのまばらな胆嚢因数分解の加速、Parallel Computing、Vol 59、2016、PP 140-150。 https://doi.org/10.1016/j.parco.2016.06.004
AMDとCAMDの場合:
P. Amestoy、Ta Davis、およびIS Duff、Algorithm 837:An Acm Trans。数学ソフトウェア、30(3)、2004、pp。381--388。 https://dl.acm.org/doi/abs/10.1145/1024074.1024081
P. Amestoy、Ta Davis、およびDuff、近似最小度順序アルゴリズム、Siam J. Matrix Analysis and Applications、17(4)、1996、pp。886--905。 https://doi.org/10.1137/S0895479894278952
Colamd、Symamd、Ccolamd、およびCsymamdの場合:
Ta Davis、Jr Gilbert、S。Larimore、E。NG、Algorithm 836:Colamd、An Am Motimmation Minimut Regution Algorithm、ACM Trans。数学ソフトウェア、30(3)、2004、pp。377--380。 https://doi.org/10.1145/1024074.1024080
Ta Davis、Jr Gilbert、S。Larimore、E。Ng、列近似最小度順序アルゴリズム、ACM Trans。数学ソフトウェア、30(3)、2004、pp。353--376。 https://doi.org/10.1145/1024074.1024079
umfpackの場合:(また、AMDとColamdを引用します):
Ta Davis、Algorithm 832:Umfpack-Column Pre-Ordering Strategy、ACM Transを備えた非スメットパターン多色の方法。数学ソフトウェア、30(2)、2004、pp。196--199。 https://dl.acm.org/doi/abs/10.1145/992200.992206
Ta Davis、非スメットパターン多球菌法、ACM Trans。数学ソフトウェア、30(2)、2004、pp。165--195。 https://dl.acm.org/doi/abs/10.1145/992200.992205
Ta Davis and Is Duffは、非音声スパースマトリックス、ACM Transのための統一/多極性法を組み合わせています。数学ソフトウェア、25(1)、1999、pp。1--19。 https://doi.org/10.1145/305658.287640
Ta Davis and Is Duff、スパースLu因数分解のための非音声パターン多球菌方法、Siam J.マトリックス分析と計算、18(1)、1997、pp。140--158。 https://doi.org/10.1137/S0895479894246905
Factorize M-fileの場合:
Ta Davis、アルゴリズム930:MATLABのオブジェクト指向線形システムソルバー、ACM Trans。数学ソフトウェア、39(4)、2013、pp。28:1-28:18。 https://doi.org/10.1145/2491491.2491498
KLUとBTF(AMDとColamdも引用):
TA DavisとEkanathan Palamadai Natarajan。 2010年。アルゴリズム907:KLU、回路シミュレーションの問題のための直接的なスパースソルバー。 ACMトランス。数学。 Softw。 37、3、第36条(2010年9月)、17ページ。 https://dl.acm.org/doi/abs/10.1145/1824801.1824814
LDLの場合:
TAデイビス。アルゴリズム849:簡潔なまばらな胆汁因数分解パッケージ。 ACMトランス。数学。 Softw。 31、4(2005年12月)、587–591。 https://doi.org/10.1145/1114268.114277
SSGETおよびSUITESPARSE MATRIXコレクションの場合:
TAデイビスとイファンフー。 2011年。フロリダ大学スパースマトリックスコレクション。 ACMトランス。数学。 Softw。 38、1、第1条(2011年11月)、25ページ。 https://doi.org/10.1145/2049662.2049663
Kolodziej et al。、(2019)。 SuiteSparse Matrix Collection Webサイトインターフェイス。 Journal of Open Source Software、4(35)、1244。https://doi.org/10.21105/joss.01244
spqr_rankの場合:
レスリーV.フォスターとTAデイビス。 2013。アルゴリズム933:数値ランク、ヌルスペースベース、擬似逆ソリューション、およびSuiteSparseQrを使用した基本ソリューションの信頼できる計算。 ACMトランス。数学。 Softw。 40、1、第7条(2013年9月)、23ページ。 https://doi.org/10.1145/2513109.2513116
Mongooseの場合:
TAデイビス、ウィリアムW.ヘイガー、スコットP.コロジエジ、およびS.ヌリエララン。 2020年。アルゴリズム1003:マングース、グラフの粗大化と分割ライブラリ。 ACMトランス。数学。 Softw。 46、1、第7条(2020年3月)、18ページ。 https://doi.org/10.1145/3337792
spexの場合:
クリストファー・ルーレンコ、ジンハオ・チェン、エリック・モレノ・センテノ、タ・デイビス。 2022。アルゴリズム1021:Spexは左lu、まばらな左に見える整数測定Lu因数分解を介してまばらな線形システムを正確に解く。 ACMトランス。数学。 Softw。 2022年6月。https://doi.org/10.1145/3519024
注:Openblasを使用する場合は、バージョン0.3.27以降を必ず使用してください。
Blas/Lapackを選択するには、 SuiteSparse_config/cmake_modulesのsuitesparseblas.cmakeの指示を参照してください。 SuiteSparse_config 64ビットの整数(Intel MKL ILP64 BLAなど)を備えたBLAを見つけた場合、 SuiteSparse_config.hをSUITESPARSE_BLAS_INTでint64_tとして定義します。それ以外の場合、32ビットのBLAが見つかった場合、このタイプはint32_tとして定義されます。後で、umfpack、cholmod、またはspqrがコンパイルされ、整数サイズの異なるBLAにリンクさ-DBLAS32ている場合、 -DBLAS64で定義をオーバーライドする必要があります(BLAで64ビット整数の使用を主張する)
Blas Integerのサイズはsizeof(void *)とは何の関係もありません。
バイナリ形式(Debian、Ubuntu、Spack、Brew Packageなど)で配布する場合、SuiteSparseはおそらく最も一般的なケースであるため、32ビットBLAを期待するようにコンパイルする必要があります。デフォルトは32ビットBLAを使用することですが、これはCmake変数SUITESPARSE_USE_64BIT_BLAS ONに設定することで変更できます。
デフォルトでは、SuiteSparseは適切なBLASライブラリを探しています。特定のBlasライブラリを実施するには、次のいずれかを使用します。
CMAKE_OPTIONS="-DBLA_VENDOR=OpenBLAS" make
cd Package ; cmake -DBLA_VENDOR=OpenBLAS .. make
デフォルト(BLAのハント)を使用するには、 BLA_VENDORを設定しないでください。または空の文字列に設定しません。この場合、 SUITESPARSE_USE_64BIT_BLASがオンになっている場合、64ビットのBLAが優先されますが、64ビットライブラリが見つからない場合は32ビットBLASライブラリが使用されます。ただし、 SUITESPARSE_USE_64BIT_BLASとSUITESPARSE_USE_STRICTの両方がオンになっている場合、64ビットのBLAのみが考慮されます。
特定のBLASライブラリを選択すると、 SUITESPARSE_USE_64BIT_BLAS設定が厳密に守られています。 Trueに設定すると、64ビットBLASライブラリのみが使用されます。 false(デフォルト)の場合、32ビットBLASライブラリのみが使用されます。そのようなBLAが見つからない場合、ビルドは失敗します。
このディレクトリに次のように入力します( sudo make installを行うにはシステムの特権が必要です):
mkdir -p build && cd build
cmake ..
cmake --build .
sudo cmake --install .
すべてのライブラリが作成され、デフォルトのシステム全体のフォルダー(/usr/local/lib on linux)にインストールされます。すべてが、SuiteSparseが/usr/local/include/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にインポートします。リリースとしてビルドタイプを必ず指定してください。たとえば、コマンドウィンドウでWindowsにSuiteSparseを構築するには、実行します。
mkdir -p build && cd build
cmake ..
cmake --build . --config Release
cmake --install .
必ず必要なすべてのライブラリをインストールしてください:umfpack、cholmod、およびspqr、およびspex用のGMPおよびMPFRにはBLAとLAPACK。必ず最新のライブラリを使用してください。 SPEXにはMPFR 4.0.2およびGMP 6.1.2が必要です(これらのバージョン番号は、libgmp.so.xyzとlibmpfr.so.xyzのxyzサフィックスに対応していません。詳細についてはSPEXユーザーガイドを参照してください)。
ライブラリをコンパイルし、suitesparse/lib(/usr/local/libではない)にのみインストールするには、代わりにsuitesparseのトップレベルでこれを行います。
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=.. ..
cmake --build .
cmake --install .
ライブラリ検索パス(LinuxのLD_LIBRARY_PATH )に追加/home/me/suitesparse/libを追加すると、次のことを行うことができます(たとえば)。
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で機能します。 Intelコンパイラがあるかどうか、およびCUDAを持っているかどうかは自動的に検出する必要があります。
SuiteSparse_config/cmake_modules/SuiteSparsePolicy.cmakeを参照してください。
また、SuiteSparse/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のパッケージの1つです。
* `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
/home/me/SuiteSparseフォルダーにsuitesparseを配置するとします。
SuiteSparse/libフォルダーをランタイムライブラリパスに追加します。 Linuxでは、これを~/.bashrcスクリプトに追加します/home/me/SuiteSparse
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
Macについては、代わりにこれを~/.zshrcスクリプトで使用して、 /Users/me/SuiteSparseにsuiteSparseを配置すると仮定します。
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
make localですべてのSuiteSparseをコンパイルします。
次に、GraphBlas Matlabライブラリをコンパイルします。 SuteSparseフォルダーにいる間にシステムシェルで、 make gbmatlabを作成したい場合は、 make installでシステム全体にインストールするか、自分のsuiteSparse/libでライブラリを使用する場合はmake gblocal 。
次に、MATLABコマンドウィンドウで、suiteSparseディレクトリにCDを使用し、 SuiteSparse_installを入力します。すべてのパッケージがコンパイルされ、いくつかのデモが実行されます。 (長い!)徹底的なテストを実行するには、 SuiteSparse_test実行します。
Matlab PathToolまたはSavePathコマンドで将来のセッションのためにMATLABパスを保存します。システム全体の許可がないためにこれらのメソッドが失敗した場合は、startup.mファイルに新しいパスをドキュメント/matlab/startup.mに追加します。また、各MATLABセッションの開始時にすべてのパスを設定するために、 SuiteSparse_paths Mファイルを使用することもできます。
CMAKEの特定のオプションをコマンドで設定できます(たとえば):
cmake -DCHOLMOD_PARTITION=OFF -DBUILD_STATIC_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug ..
そのコマンドは、Cholmod/Partition Moduleを除くすべての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_BUILD_TYPE :
デフォルト: Release 、 Debugを使用してデバッグを使用します。
SUITESPARSE_USE_STRICT :
SuiteSParseには、特定のパッケージのフォームSUITESPARSE_USE_*または(package)_USE_*のユーザー定義可能な設定がたくさんあります。一般に、これらの設定は厳格ではありません。たとえば、 SUITESPARSE_USE_OPENMPがONなっている場合、openmpが推奨されますが、suiteSparseをOpenMPなしで使用できるため、OpenMPが見つからない場合はエラーが発生しません。ただし、 SUITESPARSE_USE_STRICTがONている場合、すべての*_USE_*設定が厳密に扱われ、エラーが発生しますが、対応するパッケージまたは設定はONできません。 *_USE_SYSTEM_*設定は常に厳格として扱われます。デフォルト: OFF 。
SUITESPARSE_USE_CUDA :
ONに設定すると、CudaはすべてのSuiteSparseに対して有効になります。デフォルト: ON 、
MSVCを使用してWindowsのCudaはこのリリースで動作しているようですが、プロトタイプと見なされるべきであり、完全に機能しない可能性があります。 WindowsでCUDAをテストするためのリソースは限られています。問題に遭遇した場合は、CUDAを無効にし、GitHubの問題としてこれを投稿してください。
CHOLMOD_USE_CUDA :
デフォルト: ON 。 SUITESPARSE_USE_CUDAとCHOLMOD_USE_CUDA両方を有効にする必要があります。
SPQR_USE_CUDA :
デフォルト: ON 。 SUITESPARSE_USE_CUDAとSPQR_USE_CUDA両方を、spqrでcudaを使用することを有効にする必要があります。
CMAKE_INSTALL_PREFIX :
インストールの場所を定義します(Linuxのデフォルト/usr/local )。たとえば、このコマンドは、トップレベルのsuiteSparseフォルダーにあるフォルダーbuild中に、インストールディレクトリを/stuffに設定しますsudo cmake --install . :
cmake -DCMAKE_INSTALL_PREFIX=/stuff ..
sudo cmake --install .
SUITESPARSE_PKGFILEDIR :
Cmake ConfigおよびPKG-Configファイルがインストールされるディレクトリ。デフォルトでは、(静的)ライブラリがインストールされるディレクトリのサブフォルダーcmake (例えば、 lib )にCmake Configファイルがインストールされます。 pkg-configの.pcファイルは、(静的)ライブラリがインストールされるディレクトリのサブフォルダーpkgconfigにインストールされます。
このオプションにより、(静的)ライブラリとは異なる場所にインストールできます。これにより、SuiteSparseライブラリの複数の構成を同時にインストールできます(たとえば、それぞれのCMAKE_RELEASE_POSTFIXとCMAKE_INSTALL_LIBDIRも設定します)。ダウンストリームプロジェクトでそれぞれの構成をピックアップするには、 CMAKE_PREFIX_PATH (cmake用)またはPKG_CONFIG_PATH (pkg-configを使用したビルドシステム用)をそれぞれのCmake構成ファイルまたはPKG-Configファイルを含むパスに設定します。
SUITESPARSE_INCLUDEDIR_POSTFIX :
SuiteSparseのヘッダーのインストールターゲットのためのPostFix。デフォルト:suiteSparseなので、デフォルトにはディレクトリが含まれます: CMAKE_INSTALL_PREFIX/include/suitesparse
BUILD_SHARED_LIBS :
ON場合、共有ライブラリが構築されます。デフォルト: ON 。
BUILD_STATIC_LIBS :
ON場合、静的ライブラリが構築されます。デフォルト: ON :graphblasを除き、コンパイルするのに長い時間がかかるので、 BUILD_SHARED_LIBS OFFない限り、graphblasのデフォルトがOFF 。
SUITESPARSE_CUDA_ARCHITECTURES :
nvccでCUDAカーネルをコンパイルするときに使用するCUDAアーキテクチャをリストする"all"または"35;50;75;80"などの文字列。 "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ビットのBLAを探してください。 OFFの場合:32ビットのみ。デフォルト: OFF 。
SUITESPARSE_USE_PYTHON :
ON場合は、1つの(現在はSPEXのみ)を備えたSuiteSparseの任意のパッケージのPythonインターフェイスを構築します。 OFF場合:Pythonインターフェイスを構築しないでください。デフォルト: ON 。
SUITESPARSE_USE_OPENMP :
ON場合、OpenMPはデフォルトで使用可能である場合に使用されます。デフォルト: ON 。
OpenMPが使用されない場合、Graphblas、Lagraph、およびParuは非常に遅くなります。 Cholmodは、OpenMPなしではやや遅くなります(まだ平行なBLA/ラパックがある限り)。 3つのパッケージ(UMFPack、Cholmod、およびSPQR)は、並列BLA/LAPACKライブラリに大きく依存しており、それらのライブラリはOpenMPを内部で使用できます。アプリケーション全体でOpenMPを無効にする場合は、単一のスレッドBLA/ラパック、またはOpenMPを使用していない平行BLA/ラパック(Apple Accelerate Frameworkなど)を選択します。単一の読み取りBlas/Lapackライブラリを使用すると、Umfpack、Cholmod、およびSPQRが非常に遅くなります。
警告:GraphBlasは、OpenMPまたはPTHREADSなしで構築された場合、スレッドセーフではない場合があります(詳細については、GraphBlasユーザーガイドを参照してください)。
SUITESPARSE_CONFIG_USE_OPENMP :
ON場合、 SuiteSparse_config利用可能な場合はopenMPを使用します。デフォルト: SUITESPARSE_USE_OPENMP 。それは不可欠ではなく、 SuiteSparse_time omp_get_wtime呼び出すためにのみ使用されます。
CHOLMOD_USE_OPENMP :
ON場合、OpenMPが利用可能な場合はCholmodで使用されます。デフォルト: SUITESPARSE_USE_OPENMP 。
GRAPHBLAS_USE_OPENMP :
ON場合、OpenMPが利用可能な場合はGraphBlasで使用されます。デフォルト: SUITESPARSE_USE_OPENMP 。
LAGRAPH_USE_OPENMP :
ON場合、OpenMPが使用可能な場合はラグラフで使用されます。デフォルト: SUITESPARSE_USE_OPENMP 。
PARU_USE_OPENMP :
ON場合、OpenMPが利用可能な場合はParuで使用されます。デフォルト: SUITESPARSE_USE_OPENMP 。
SPEX_USE_OPENMP :
ON場合、OpenMPはSPEXで使用可能である場合に使用されます。デフォルト: 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の呼び出し方法を定義します。デフォルト: ON 。
SUITESPARSE_C_TO_FORTRAN
cがfortranを呼び出す方法を定義する文字列(つまり、BLASライブラリによってエクスポートされる機能)。作業中のFortranコンパイラを検出できない場合、またはSUITESPARSE_USE_FORTRANがOFFに設定されている場合、この設定が使用されます。この文字列は、引数リストとプリプロセッサマクロの本文として読み取られます。そのマクロに対する最初の議論は、小文字の任意のfortran関数名です。 2番目の引数は、大文字の同じ関数名です。本体は、どの関数名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の構築に使用されるコンパイラ)で使用されます。 You might need to configure with -DSUITESPARSE_C_TO_FORTRAN="(name,NAME) name##_" if you'd like to build SuiteSparse using a MSVC compiler and link to OpenBLAS.
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. The list is too long.
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.