10 octobre 2024, Suitesparse version 7.8.3
SuitesParse est un ensemble de packages liés à la matrice clairsemés écrits ou co-écrits par Tim Davis, disponibles sur https://github.com/drtimothyaldendavis/Suittesparse.
Auteur principal de SuitesParse (codes et algorithmes, excl. Métis): 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, Markus Mützel, Corey Nolel, Ekanathan Palamadai, Sivasankaran Rajamanickam, Sanjay Ranka, Wissam Sid-Lakhdar et Nuri Yeralan.
Lagraph a été développé par le plus grand nombre de développeurs de l'un des packages de SuitesParse et mérite sa propre liste. La liste apparaît également dans LaGraph / CUTIBUTors.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 est rédigé par George Karypis.
Concepteurs d'algorithmes supplémentaires: Esmond Ng et John Gilbert.
Reportez-vous à chaque package pour les informations de licence, de droit d'auteur et d'auteur.
Reportez-vous à chaque package pour la documentation sur chaque package, généralement dans le sous-dossier DOC.
Packages dans SuitesParse et fichiers dans ce répertoire:
AMD
Commande minimum de degré approximative. Il s'agit de la fonction AMD intégrée dans MATLAB.
Auteurs: Tim Davis, Patrick Amestoy, Iain Duff
bin
où les programmes sont placés lorsqu'ils sont compilés, pour make local
BTF
permutation pour bloquer la forme triangulaire
Auteurs: Tim Davis, Ekanathan Palamadai
build
dossier pour l'arbre de construction par défaut
CAMD
COMMANDE MINIMUM MINIMUM CONTRAIN
Auteurs: Tim Davis, Patrick Amestoy, Iain Duff, Yanqing Chen
CCOLAMD
colonne contrainte approximativement de degré minimum
Auteurs: Tim Davis, Sivasankaran Rajamanickam, Stefan Larimore.
Algorithm Design Collaborateurs: Esmond NG, John Gilbert (pour COLAMD)
ChangeLog
Un résumé des modifications à Suitesparse. Voir */Doc/ChangeLog pour plus de détails pour chaque package.
CHOLMOD
Factorisation cholesky clairsemée. Nécessite AMD, COLAMD, CCOLAMD, le BLAS et LAPACK. Utilise éventuellement les métis. Ceci est chol et x=Ab dans matlab.
Auteur pour tous les modules: Tim Davis
Modules Cholmod / Modifier: Tim Davis et William W. Hager
Cholmod / Suitesparse_metis: une version modifiée de Métis, intégrée dans la bibliothèque Cholmod. Voir les fichiers readme.txt pour plus de détails. Auteur: George Karypis. Il s'agit d'une copie légèrement modifiée incluse avec SuitesParse via la licence open source fournie par George Karypis. SuitesParse ne peut pas utiliser une copie non modifiée des Métis.
CITATION.bib
Citations pour les forfaits SuitesParse, au format Bibtex.
CMakeLists.txt
Facultatif, pour compiler tous les suitesparse. Voir ci-dessous.
CODE_OF_CONDUCT.md
Lignes directrices communautaires
COLAMD
colonne approximativement de degré minimum de commande. Il s'agit de la fonction COLAMD intégrée dans MATLAB.
auteurs (du code): Tim Davis et Stefan Larimore
Algorithm Design Collaborateurs: Esmond NG, John Gilbert
Contents.m
Une liste de contenus pour «Help Suitesparse» dans Matlab.
CONTRIBUTING.md
Comment contribuer à Suitesparse
CONTRIBUTOR-LICENSE.txt
Contrat de contributeur requis
CSparse
Un package de matrice clairsemée concise, développé pour mon livre, "Direct Methods for Sparse Linear Systems", publié par Siam. Destiné principalement à l'enseignement. Notez que le code est (c) Tim Davis, comme indiqué dans le livre.
Pour la production, utilisez CXSParse à la place. En particulier, CSParse et CXSparse ont le même incluent le nom de fichier: cs.h Ce package est utilisé pour le DMPERM intégré dans MATLAB.
Auteur: Tim Davis
CXSparse
CSParse étendu. Comprend le support pour les matrices complexes et les entiers int ou longs. Utilisez-le au lieu de CSParse pour une utilisation en production; Il crée un libcsparse.so (ou dylib sur le Mac) avec le même nom que csparse. C'est un superset de CSParse. Tout code qui se lie à CSParse devrait également être en mesure de lier à CXSparse à la place.
Auteur: Tim Davis, David Bateman
Example
Un package simple qui repose sur presque tous les suitesparse
.github
Flows de travail pour les tests CI sur GitHub.
GraphBLAS
Algorithmes graphiques dans la langue de l'algèbre linéaire.
https://graphblas.org
Auteurs: Tim Davis, Joe Eaton, Corey Nolet
include
make install des lieux utilisateur inclut les fichiers pour chaque package ici, après make local .
KLU
Factorisation Lu clairsemée, principalement pour la simulation de circuit. Nécessite AMD, COLAMD et BTF. Utilise éventuellement Cholmod, CAMD, CCOLAMD et Metis.
Auteurs: Tim Davis, Ekanathan Palamadai
LAGraph
Une bibliothèque d'algorithmes graphiques basée sur Graphblas. Voir aussi https://github.com/graphblas/lagraph
Auteurs: beaucoup.
LDL
un package de factorisation LDL très concis
Auteur: Tim Davis
lib
make install des bibliothèques partagées pour chaque package ici, après make local .
LICENSE.txt
permis collectés pour chaque package.
Makefile
Facultatif, pour compiler tous les suitesparse à l'aide de make , qui est utilisé comme un simple wrapper pour cmake dans chaque sous-projet.
make
Compile les bibliothèques SuitesParse. make install ultérieure sera installée dans CMAKE_INSTALL_PATH (pourrait par défaut à /usr/local/lib sur Linux ou Mac).
make local
Compile SuitesParse. make install suivante sera installée dans ./lib , ./include . N'installe pas dans CMAKE_INSTALL_PATH .
make global
Compile les bibliothèques SuitesParse. make install ultérieure sera installée dans /usr/local/lib (ou quel que soit le CMAKE_INSTALL_PREFIX configuré). Ne s'installe pas dans ./lib et ./include .
make install
Installation dans le répertoire actuel ( ./lib , ./include ), ou dans /usr/local/lib et /usr/local/include , (ce dernier défini par CMAKE_INSTALL_PREFIX ) selon que make , make local ou make global a été fait.
make uninstall
Rendez-vous make install .
make distclean
Supprime tous les fichiers non en distribution, y compris ./bin , ./share , ./lib et ./include .
make purge
Identique make distclean .
make clean
Supprime tous les fichiers non dans la distribution, mais maintient les bibliothèques et démos compilées, ./lib , ./share et ./include .
Chaque sous-projet individuel a également chacun des make ci-dessus.
Des choses que vous n'avez pas besoin de faire:
make docs
Crée des guides d'utilisateur à partir de fichiers de latex
make cov
Effectue des tests de couverture de l'instruction (Linux uniquement)
MATLAB_Tools
Divers M-Files à utiliser dans Matlab
Auteur: Tim Davis (toutes les parties)
Pour spqr_rank : l'auteur Les Foster et Tim Davis
Contents.m
liste des contenus
dimacs10
Matrices de chargement pour la collection DIMACS10
Factorize
x=Ab orienté objet pour matlab
find_components
trouve des composants connectés dans une image
GEE
Élimination gaussienne simple
getversion.m
Déterminer la version MATLAB
gipper.m
Créer des archives MATLAB
hprintf.m
Imprimer les hyperliens dans la fenêtre de commande
LINFACTOR
Prédécesseur pour Factorize le package
MESHND
Ordonnance de dissection imbriquée de mailles régulières
pagerankdemo.m
illustre comment fonctionne Pagerank
SFMULT
C=S*F où S est clairsemé et F est plein
shellgui
Afficher un coquillage
sparseinv
sous-ensemble inverse clairsemé
spok
Vérifiez si une matrice clairsemée est valide
spqr_rank
Package SPQR_RANK. Matlab Toolbox pour les matrices clairsemées déficientes en rang: espaces nuls, facteurs fiables, etc. avec Leslie Foster, San Jose State Univ.
SSMULT
C=A*B où A et B sont tous deux clairsemés. C'était la base du C=A*B intégré dans MATLAB, jusqu'à ce qu'il soit remplacé par Graphblas dans MATLAB R2021A.
SuiteSparseCollection
pour la collection de matrice Suitesparse
waitmex
waitbar pour une utilisation à l'intérieur d'un mexfunction
Mongoose
Partionnement du graphique.
Auteurs: Nuri Yeralan, Scott Kolodziej, William Hager, Tim Davis
ParU
Une méthode multifontal de motif non symétrique parallèle.
Actuellement une pré-libération.
Auteurs: Mohsen Aznaveh et Tim Davis
RBio
Lire / écrire des matrices clairsemées au format Rutherford / Boeing
Auteur: Tim Davis
README.md
ce fichier
SPEX
résout les systèmes linéaires clairsemés en arithmétique exacte.
Nécessite les bibliothèques GMP GMP et MPRF.
Cela sera bientôt remplacé par un package plus général, Spex V3 qui inclut cette méthode (Exact SweetSe LU) et autres (Crates Exact Cholesky, et une mise à jour / downdate exacte clairsemée). L'API de V3 changera considérablement.
Auteurs: Chris Lourenco, Jinhao Chen, Erick Moreno-Centeno, Lorena Lorena Mejia Domenzain et Tim Davis.
Voir https://github.com/clouren/spex pour la dernière version.
SPQR
Factorisation QR clairsemée. C'est le qr intégré et x=Ab dans Matlab. Également appelé SuitesParseqr.
Comprend deux bibliothèques GPU: SPQR/GPUQREngine et SPQR/SuiteSparse_GPURuntime .
Auteur du CPU Code: Tim Davis
Auteur des modules GPU: Tim Davis, Nuri Yeralan, Wissam Sid-Lakhdar, Sanjay Ranka
ssget
Interface MATLAB à la collection de matrice SuitesParse
Auteur: Tim Davis
SuiteSparse_config
Bibliothèque avec des fonctions et une configuration communes pour tous les packages ci-dessus. CSparse , GraphBLAS , LAGraph et MATLAB_Tools n'utilisent pas SuiteSparse_config .
Auteur: Tim Davis
SuiteSparse_demo.m
Une démo de Suitesparse pour Matlab
SuiteSparse_install.m
Installez SuitesParse pour Matlab
SuiteSparse_paths.m
Définir des chemins pour SuitesParse Matlab Mexfunctions
SuiteSparse_test.m
Test exhaustif pour SuitesParse dans Matlab
UMFPACK
Factorisation Lu clairsemée. Nécessite AMD et le BLAS .
Ceci est le lu et x=Ab intégrés dans Matlab.
Auteur: Tim Davis
Collaboration de conception d'algorithme: Iain Duff
Reportez-vous à chaque package pour les informations de licence, de droit d'auteur et d'auteur. Tous les codes sont rédigés ou co-écrits par Timothy A. Davis (e-mail: [email protected]), à l'exception des Metis (par George Karypis), GraphBLAS/cpu_features (par Google), Graphblas / LZ4, ZSTD et XXHASH (par Yann Collet, maintenant chez Facebook), et Graphblas / Cuda / Jity.Hpp (par Nvidia). Les parties de Graphblas / Cuda sont des droits d'auteur (C) par Nvidia. Veuillez vous référer à chacune de ces licences.
Merci pour l'emballage SuitesParse! Voici quelques suggestions:
Graphblas prend beaucoup de temps à compiler car il crée de nombreux "FactoryKernels" rapides au moment de la compilation. Si vous souhaitez réduire le temps de compilation et la taille de la bibliothèque, activez le mode GRAPHBLAS_COMPACT , mais gardez le compilateur JIT activé. Ensuite, Graphblas compilera les noyaux dont il a besoin au moment de l'exécution, via son compilateur JIT. Les performances seront les mêmes que les FactoryKernels une fois les noyaux Jit compilés. Les noyaux compilés par l'utilisateur sont placés dans ~/.SuiteSparse , par défaut. Vous n'avez pas besoin de distribuer la source de Graphblas pour activer le compilateur JIT: juste libgraphblas.so et GraphBLAS.h suffit.
Graphblas a besoin d'OpenMP! Il s'agit fondamentalement d'un code parallèle, veuillez donc le distribuer avec OpenMP activé. La performance en souffrira autrement.
Accélération CUDA: Cholmod et SPQR peuvent bénéficier de leurs noyaux Cuda. Si vous n'avez pas CUDA ou ne voulez pas l'inclure dans votre distribution, cette version de SuitesParse saute la construction des bibliothèques CHOLMOD_CUDA et SPQR_CUDA et ne se lie pas aux bibliothèques GPUQREngine et SuiteSparse_GPURuntime .
SuitesParse est un méta-package de nombreux packages, chacun avec ses propres articles publiés. Pour citer toute la collection, utilisez les URL:
Veuillez également citer les papiers spécifiques des packages que vous utilisez. Ceci est une longue liste; Si vous voulez une liste plus courte, citez simplement le plus récent "Algorithm XXX:" Papiers dans ACM Toms, pour chaque package.
Pour le MATLAB X = A B, voir ci-dessous pour AMD, COLAMD, CHOLMOD, UMFPACK et SuitesParseqr (SPQR).
pour Graphblas et C = AB dans Matlab (clairsemé-temps-temps):
Ta Davis. Algorithme 1037: SuitesParse: Graphblas: Algorithmes graphiques parallèles dans la langue de l'algèbre linéaire clairsemée. ACM trans. Mathématiques. Softw. 49, 3, article 28 (septembre 2023), 30 pages. https://doi.org/10.1145/3577195
T. Davis, Algorithm 1000: SuitesParse: Graphblas: Algorithmes graphiques dans le langage de l'algèbre linéaire clairsemée, ACM Trans on Mathematical Software, Vol 45, No 4, déc. 2019, article n ° 44. Https://doi.org/10.1145/3322125.
Pour Lagraph:
G. Szárnyas et al., "Lagraph: Linear Algebra, Network Analysis Libraries, and the Study of Graph Algorithms", 2021 IEEE International Parallel and Distributed Processing Symposium Atelishops (IPDPSW), Portland, OR, USA, 2021, pp. 243-252. https://doi.org/10.1109/IPDPSW52791.2021.00046.
pour csparse / cxsparse:
Ta Davis, Méthodes directes pour les systèmes linéaires clairsemés, Siam Series on the Fundamentals of Algorithms, Siam, Philadelphia, PA, 2006. Https://doi.org/10.1137/1.9780898718881
pour SuitesParseqr (SPQR): (citez également AMD, COLAMD):
TA Davis, Algorithme 915: SuitesParseqr: Factorisation QR clairsemée multipartite-réventaire multifrontal, ACM Trans. Sur les logiciels mathématiques, 38 (1), 2011, pp. 8: 1-8: 22. https://doi.org/10.1145/2049662.2049670
Pour SuitesParseqr / GPU:
Sencer Nuri Yeralan, Ta Davis, Wissam M. Sid-Lakhdar et Sanjay Ranka. 2017. Algorithme 980: Factorisation QR clairsemée sur le GPU. ACM trans. Mathématiques. Softw. 44, 2, article 17 (juin 2018), 29 pages. https://doi.org/10.1145/3065870
Pour Cholmod: (cite également AMD, COLAMD):
Y. Chen, Ta Davis, WW Hager et S. Rajamanickam, Algorithme 887: Cholmod, Factorisation et mise à jour / descente / descente, ACM Trans. Sur les logiciels mathématiques, 35 (3), 2008, pp. 22: 1-22: 14. https://dl.acm.org/doi/abs/10.1145/1391989.1391995
Ta Davis et WW Hager, Supernodes dynamiques dans la mise à jour / dompte et les résolus triangulaires et triangulaires de Cholesky clairsemé, ACM Trans. Sur les logiciels mathématiques, 35 (4), 2009, p. 27: 1-27: 23. https://doi.org/10.1145/1462173.1462176
Pour le module Cholmod / Modifier: (citez également AMD, COLAMD):
Ta Davis et William W. Hager, Row Modifications of a clairse cholesky factorisation Siam Journal on Matrix Analysis and Applications 2005 26: 3, 621-639. https://doi.org/10.1137/s089547980343641x
Ta Davis et William W. Hager, Modifications de rang multiple d'un journal de factorisation Cholesky SIAM sur l'analyse et applications de la matrice 2001 22: 4, 997-1013. https://doi.org/10.1137/s0895479899357346
Ta Davis et William W. Hager, Modification d'une facteur de Cholesky clairsemé, SIAM Journal on Matrix Analysis and Applications 1999 20: 3, 606-627. https://doi.org/10.1137/s0895479897321076
Pour les modules Cholmod / GPU:
Steven C. Rennich, Darko Stosic, Timothy A. Davis, accélération de la factorisation cholesky clairsemée sur les GPU, parallèle informatique, Vol 59, 2016, pp 140-150. https://doi.org/10.1016/j.parco.2016.06.004
Pour AMD et CAMD:
P. Amestoy, Ta Davis, et est Duff, algorithme 837: un algorithme de commande minimum de degré approximatif, ACM Trans. on Mathematical Software, 30 (3), 2004, pp. 381--388. https://dl.acm.org/doi/abs/10.1145/1024074.1024081
P. Amestoy, Ta Davis, et est Duff, un algorithme de commande minimum de degré approximatif, Siam J. Matrix Analysis and Applications, 17 (4), 1996, pp. 886--905. https://doi.org/10.1137/S0895479894278952
Pour COLAMD, SYMAMD, CCOLAMD et CSYMAMD:
Ta Davis, Jr Gilbert, S. Larimore, E. Ng, Algorithme 836: Colamd, une colonne approximative de degré minimum de degré algorithme, ACM Trans. on Mathematical Software, 30 (3), 2004, pp. 377--380. https://doi.org/10.1145/1024074.1024080
Ta Davis, Jr Gilbert, S. Larimore, E. Ng, une colonne ALGORIHME DE COMMANDE MINIMUM MINIMUM MINIMUM, ACM Trans. Sur les logiciels mathématiques, 30 (3), 2004, pp. 353--376. https://doi.org/10.1145/1024074.1024079
pour umfpack: (citez également AMD et COLAMD):
TA Davis, Algorithme 832: UMFPACK - Une méthode multifrontal-motif non symétrique avec une stratégie de précommande de colonne, ACM Trans. on Mathematical Software, 30 (2), 2004, pp. 196--199. https://dl.acm.org/doi/abs/10.1145/992200.992206
Ta Davis, une stratégie de précommandation de colonne pour la méthode multifontal-motif non symétrique, ACM Trans. Sur les logiciels mathématiques, 30 (2), 2004, pp. 165-195. https://dl.acm.org/doi/abs/10.1145/992200.992205
Ta davis et est Duff, une méthode combinée unifrontal / multifrontal pour les matrices clairsemées non symétriques, ACM Trans. Sur les logiciels mathématiques, 25 (1), 1999, p. 1-19. https://doi.org/10.1145/305658.287640
Ta Davis et Is Duff, une méthode multifrontal de motifs non sabitriques pour la factorisation Lu clairsemée, Siam J. Matrix Analysis and Computations, 18 (1), 1997, pp. 140--158. https://doi.org/10.1137/s0895479894246905
Pour la facteur m-fichier:
TA Davis, Algorithme 930: Facteur, un solveur de système linéaire orienté objet pour MATLAB, ACM Trans. Sur les logiciels mathématiques, 39 (4), 2013, pp. 28: 1-28: 18. https://doi.org/10.1145/2491491.2491498
pour KLU et BTF (cite également AMD et COLAMD):
Ta Davis et Ekanathan Palamadai Natarajan. 2010. Algorithme 907: KLU, un solveur direct clairsemé pour les problèmes de simulation de circuit. ACM trans. Mathématiques. Softw. 37, 3, article 36 (septembre 2010), 17 pages. https://dl.acm.org/doi/abs/10.1145/1824801.1824814
pour LDL:
Ta Davis. Algorithme 849: un package de factorisation Cholesky clairsemé concis. ACM trans. Mathématiques. Softw. 31, 4 (décembre 2005), 587–591. https://doi.org/10.1145/1114268.1114277
Pour SSGET et la collection de matrice Suitesparse:
Ta Davis et Yifan Hu. 2011. Collection de matrice clairsemée de l'Université de Floride. ACM trans. Mathématiques. Softw. 38, 1, article 1 (novembre 2011), 25 pages. https://doi.org/10.1145/2049662.2049663
Kolodziej et al., (2019). L'interface du site Web de la collection Matrix Suitesparse. Journal of Open Source Software, 4 (35), 1244. Https://doi.org/10.21105/joss.01244
pour spqr_rank :
Leslie V. Foster et Ta Davis. 2013. Algorithme 933: calcul fiable du rang numérique, bases d'espace nul, solutions pseudoinverse et solutions de base à l'aide de SuitesParseqr. ACM trans. Mathématiques. Softw. 40, 1, article 7 (septembre 2013), 23 pages. https://doi.org/10.1145/2513109.2513116
pour la mangouste:
Ta Davis, William W. Hager, Scott P. Kolodziej et S. Nuri Yeralan. 2020. Algorithme 1003: Mongoose, une bibliothèque de grossissement et de partitionnement de graphiques. ACM trans. Mathématiques. Softw. 46, 1, article 7 (mars 2020), 18 pages. https://doi.org/10.1145/3337792
pour Spex:
Christopher Lourenco, Jinhao Chen, Erick Moreno-Centeno et Ta Davis. 2022. Algorithme 1021: SPEX gauche LU, résolvant exactement les systèmes linéaires clairsemés via une factorisation LU préservant en entier gauche clairsemé. ACM trans. Mathématiques. Softw. Juin 2022. Https://doi.org/10.1145/3519024
Remarque: Si vous utilisez OpenBlas, assurez-vous d'utiliser la version 0.3.27 ou version ultérieure.
Pour sélectionner votre Blas / Lapack, consultez les instructions dans SuitesParseblas.cmake dans SuiteSparse_config/cmake_modules . Si SuiteSparse_config trouve un BLAS avec des entiers 64 bits (tels que l'Intel MKL ILP64 BLAS), il configure SuiteSparse_config.h avec le SUITESPARSE_BLAS_INT défini comme int64_t . Sinon, si un BLAS 32 bits est trouvé, ce type est défini comme int32_t . Si plus tard, UMFPACK, Cholmod ou SPQR sont compilés et liés à un BLAS qui a une taille entière différente, vous devez remplacer la définition avec -DBLAS64 (pour affirmer l'utilisation des entiers 64 bits dans les Blas) ou -DBLAS32 , (pour affirmer l'utilisation d'intégres 32 bits dans les Blas).
La taille de l'entier BLAS n'a rien à voir avec sizeof(void *) .
Lorsqu'il est distribué sous une forme binaire (comme un package Debian, Ubuntu, Spack ou Brew), SuitesParse devrait probablement être compilé pour s'attendre à un BLAS 32 bits, car il s'agit du cas le plus courant. La valeur par défaut consiste à utiliser un BLAS 32 bits, mais cela peut être modifié en définissant la variable cmake SUITESPARSE_USE_64BIT_BLAS sur ON .
Par défaut, SuitesParse chasse pour une bibliothèque BLAS appropriée. Pour appliquer une bibliothèque BLAS particulière, utilisez:
CMAKE_OPTIONS="-DBLA_VENDOR=OpenBLAS" make
cd Package ; cmake -DBLA_VENDOR=OpenBLAS .. make
Pour utiliser la valeur par défaut (Hunt pour un BLAS), ne définissez pas BLA_VENDOR ou définissez-le sur une chaîne vide. Dans ce cas, si SUITESPARSE_USE_64BIT_BLAS est activé, la préférence est donnée à un BLAS 64 bits, mais une bibliothèque BLAS 32 bits sera utilisée si aucune bibliothèque 64 bits n'est trouvée. Cependant, si SUITESPARSE_USE_64BIT_BLAS et SUITESPARSE_USE_STRICT sont activés, alors seul un BLAS 64 bits est considéré.
Lors de la sélection d'une bibliothèque BLAS particulière, le paramètre SUITESPARSE_USE_64BIT_BLAS est strictement suivi. S'il est défini sur true, seule une bibliothèque BLAS 64 bits sera utilisée. Si false (la valeur par défaut), seule une bibliothèque BLAS 32 bits sera utilisée. Si aucun BLAS n'est trouvé, la construction échouera.
Tapez ce qui suit dans ce répertoire (nécessite le privilège du système pour effectuer l' sudo make install ):
mkdir -p build && cd build
cmake ..
cmake --build .
sudo cmake --install .
Toutes les bibliothèques seront créées et installées dans le dossier par défaut à l'échelle du système (/ usr / local / lib sur Linux). Tous incluent les fichiers nécessaires aux applications qui utilisent SuitesParse sont installées dans / usr / local / include / suitesparse (sur Linux).
Pour créer uniquement un sous-ensemble de bibliothèques, définissez SUITESPARSE_ENABLE_PROJECTS lors de la configuration avec CMake. Par exemple, pour construire et installer Cholmod et Cxsparse (y compris leurs dépendances), utilisez les commandes suivantes:
mkdir -p build && cd build
cmake -DSUITESPARSE_ENABLE_PROJECTS="cholmod;cxsparse" ..
cmake --build .
sudo cmake --install .
Pour Windows (MSVC), importez le fichier CMakeLists.txt dans MS Visual Studio. Assurez-vous de spécifier le type de build en tant que version; Par exemple, pour construire SuitesParse sur Windows dans la fenêtre de commande, exécutez:
mkdir -p build && cd build
cmake ..
cmake --build . --config Release
cmake --install .
Assurez-vous d'installer d'abord toutes les bibliothèques requises: Blas et Lapack pour UMFPack, Cholmod et SPQR, et GMP et MPFR pour Spex. Assurez-vous d'utiliser les dernières bibliothèques; SPEX nécessite MPFR 4.0.2 et GMP 6.1.2 (ces numéros de version ne correspondent pas au suffixe XYZ de libgmp.so.xyz et libmpfr.so.xyz; voir le guide de l'utilisateur SPEX pour plus de détails).
Pour compiler les bibliothèques et les installer uniquement dans SuitesParse / Lib (Not / usr / local / lib), faites-le à la place au niveau supérieur de SuitesParse:
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=.. ..
cmake --build .
cmake --install .
Si vous ajoutez / home / me / suitesparse / lib sur votre chemin de recherche de bibliothèque ( LD_LIBRARY_PATH dans Linux), vous pouvez effectuer ce qui suit (par exemple):
S = /home/me/SuiteSparse
cc myprogram.c -I$(S)/include/suitesparse -lumfpack -lamd -lcholmod -lsuitesparseconfig -lm
Pour changer les compilateurs C et C ++, et pour compiler en parallèle:
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER==g++ ..
Par exemple, qui modifie le compilateur en GCC et G ++.
Cela fonctionnera sur Linux / Unix et le Mac. Il doit détecter automatiquement si vous avez les compilateurs Intel ou non, et si vous avez ou non CUDA.
Voir SuiteSparse_config/cmake_modules/SuiteSparsePolicy.cmake pour sélectionner votre Blas.
Vous devrez peut-être également ajouter SuitesParse / Lib sur votre chemin. Si votre copie de SuitesParse est dans / home / me / suitesparse, par exemple, ajoutez ceci à votre fichier ~/.bashrc :
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
Pour le Mac, utilisez-le à la place:
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
L'emplacement d'installation par défaut des fichiers est ci-dessous, où le package est l'un des packages dans 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
Supposons que vous placiez Suitesparse dans le dossier /home/me/SuiteSparse .
Ajoutez le dossier SuiteSparse/lib à votre chemin de bibliothèque d'exécution. Sur Linux, ajoutez ceci à votre script ~/.bashrc , en supposant /home/me/SuiteSparse est l'emplacement de votre copie de SuitesParse:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
Pour le Mac, utilisez-le à la place, dans votre script ~/.zshrc , en supposant que vous placez SuitesParse dans /Users/me/SuiteSparse :
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
Compilez tous les suitesparse avec make local .
Ensuite, compilez la bibliothèque Graphblas Matlab. Dans le shell système, dans le dossier SuitesParse, tapez make gbmatlab si vous souhaitez l'installer à l'échelle du système avec make install , ou make gblocal si vous souhaitez utiliser la bibliothèque dans votre propre SuitesParse / Lib.
Ensuite, dans la fenêtre de commande MATLAB, CD dans le répertoire SuitesParse et tapez SuiteSparse_install . Tous les packages seront compilés et plusieurs démos seront exécutées. Pour exécuter un test (long!) Exhaustif, faites SuiteSparse_test .
Enregistrez votre chemin MATLAB pour les séances futures avec les commandes MATLAB Pathtool ou SavePath. Si ces méthodes échouent parce que vous n'avez pas d'autorisation à l'échelle du système, ajoutez les nouveaux chemins de temps à votre fichier startup.m, normalement dans Documents / Matlab / Startup.m. Vous pouvez également utiliser le fichier m SuiteSparse_paths m pour définir tous vos chemins au début de chaque session MATLAB.
Vous pouvez définir des options spécifiques pour CMake avec la commande (par exemple):
cmake -DCHOLMOD_PARTITION=OFF -DBUILD_STATIC_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug ..
Cette commande compilera tout SuitesParse à l'exception du module cholmod / partition (en raison de -DCHOLMOD_PARTITION=OFF ). Le mode de débogage sera utilisé (le type de construction). Les bibliothèques statiques ne seront pas construites (puisque -DBUILD_STATIC_LIBS=OFF est définie).
SUITESPARSE_ENABLE_PROJECTS :
Liste des projets séparés par les demi-colonies à construire ou all . Par défaut: all dans lesquels les projets suivants sont construits:
suitesparse_config;mongoose;amd;btf;camd;ccolamd;colamd;cholmod;cxsparse;ldl;klu;umfpack;paru;rbio;spqr;spex;graphblas;lagraph
De plus, csparse peut être inclus dans cette liste pour construire CSParse.
CMAKE_BUILD_TYPE :
Par défaut: Release , utilisez Debug pour le débogage.
SUITESPARSE_USE_STRICT :
SuitesParse possède de nombreux paramètres définissables par l'utilisateur du formulaire SUITESPARSE_USE_* ou (package)_USE_* pour un package particulier. En général, ces paramètres ne sont pas stricts. Par exemple, si SUITESPARSE_USE_OPENMP est ON alors OpenMP est préféré, mais SuitesParse peut être utilisé sans OpenMP, donc aucune erreur n'est générée si OpenMP n'est pas trouvé. Cependant, si SUITESPARSE_USE_STRICT est ON , tous les paramètres *_USE_* sont traités strictement et une erreur se produit si elles sont définies sur ON mais le package ou le paramètre correspondant n'est pas disponible. Les paramètres *_USE_SYSTEM_* sont toujours traités comme stricts. Par défaut: OFF .
SUITESPARSE_USE_CUDA :
Si réglé sur ON , CUDA est activé pour tout SuitesParse. Par défaut: ON ,
CUDA sur Windows avec MSVC semble travailler avec cette version, mais il doit être considéré comme un prototype et peut ne pas être entièrement fonctionnel. J'ai des ressources limitées pour tester CUDA sur Windows. Si vous rencontrez des problèmes, désactivez CUDA et publiez cela comme un problème sur GitHub.
CHOLMOD_USE_CUDA :
Par défaut: ON . SUITESPARSE_USE_CUDA et CHOLMOD_USE_CUDA doivent être autorisés à utiliser CUDA dans Cholmod.
SPQR_USE_CUDA :
Par défaut: ON . SUITESPARSE_USE_CUDA et SPQR_USE_CUDA doivent être autorisés à utiliser CUDA dans SPQR.
CMAKE_INSTALL_PREFIX :
Définit l'emplacement d'installation (par défaut sur Linux est /usr/local ). Par exemple, cette commande dans une build de dossiers dans le dossier SuitesParse de niveau supérieur définira le répertoire d'installation sur /stuff , utilisé par le sudo cmake --install . :
cmake -DCMAKE_INSTALL_PREFIX=/stuff ..
sudo cmake --install .
SUITESPARSE_PKGFILEDIR :
Répertoire où les fichiers CMake Config et PKG-Config seront installés. Par défaut, les fichiers de configuration CMake seront installés dans le sous-dossier cmake du répertoire où les bibliothèques (statiques) seront installées (par exemple, lib ). Les fichiers .pc pour PKG-Config seront installés dans le sous-dossier pkgconfig du répertoire où les bibliothèques (statiques) seront installées.
Cette option permet de les installer à un emplacement différent des bibliothèques (statiques). Cela permet d'installer plusieurs configurations des bibliothèques SuitesParse en même temps (par exemple, en définissant également un autre CMAKE_RELEASE_POSTFIX et CMAKE_INSTALL_LIBDIR pour chacun d'eux). Pour ramasser la configuration respective dans les projets en aval, set, par exemple, CMAKE_PREFIX_PATH (pour cmake) ou PKG_CONFIG_PATH (pour les systèmes de construction à l'aide de pkg-config) sur le chemin contenant les fichiers de configuration CMake respectifs ou les fichiers PKG-Config.
SUITESPARSE_INCLUDEDIR_POSTFIX :
Postfix pour la cible d'installation de l'en-tête de SuitesParse. Par défaut: SuitesParse, donc le répertoire par défaut inclut est: CMAKE_INSTALL_PREFIX/include/suitesparse
BUILD_SHARED_LIBS :
Si ON , des bibliothèques partagées sont construites. Par défaut: ON .
BUILD_STATIC_LIBS :
Si ON , des bibliothèques statiques sont construites. Par défaut: ON , sauf pour Graphblas, qui prend beaucoup de temps à compiler, de sorte que la valeur par défaut pour Graphblas est OFF à moins que BUILD_SHARED_LIBS ne soit OFF .
SUITESPARSE_CUDA_ARCHITECTURES :
Une chaîne, telle que "all" ou "35;50;75;80" qui répertorie les architectures CUDA à utiliser lors de la compilation des grains Cuda avec nvcc . L'option "all" nécessite Cmake 3.23 ou ultérieure. Par défaut: "52;75;80" .
BLA_VENDOR :
Une chaîne. Laissez unset ou utilisez "ANY" pour sélectionner n'importe quelle bibliothèque BLAS (la valeur par défaut). Ou défini sur le nom d'un BLA_VENDOR défini par Findblas.cmake. Voir: https://cmake.org/cmake/help/latest/module/findblas.html#blas-lapack-videurs
SUITESPARSE_USE_64BIT_BLAS :
Si ON , recherchez un BLAS 64 bits. Si OFF : 32 bits uniquement. Par défaut: OFF .
SUITESPARSE_USE_PYTHON :
Si ON , créez des interfaces Python pour n'importe quel package dans SuitesParse qui en a un (actuellement uniquement SPEX). Si OFF : ne créez aucune interface Python. Par défaut: ON .
SUITESPARSE_USE_OPENMP :
Si ON , OpenMP est utilisé par défaut s'il est disponible. Par défaut: ON .
Graphblas, LaGraph et PARU seront beaucoup plus lents si OpenMP n'est pas utilisé. Cholmod sera un peu plus lent sans OpenMP (tant qu'il a encore un Blas / Lapack parallèle). Trois packages (UMFPack, Cholmod et SPQR) reposent fortement sur des bibliothèques BLAS / LAPACK parallèles et ces bibliothèques peuvent utiliser OpenMP en interne. Si vous souhaitez désactiver OpenMP dans une application entière, sélectionnez un BLAS / LAPACK unique unique, ou un Blas / Lapack parallèle qui n'utilise pas OpenMP (comme le framework Apple Accelerate). L'utilisation d'une bibliothèque BLAS / LAPACK unique unique rendra Umfpack, Cholmod et SPQR plus lentement.
AVERTISSEMENT: Graphblas peut ne pas être en filetage s'il est construit sans OpenMP ou PTHEADS (voir le Graphblas Guide de l'utilisateur pour plus de détails).
SUITESPARSE_CONFIG_USE_OPENMP :
Si ON , SuiteSparse_config utilise OpenMP s'il est disponible. Par défaut: SUITESPARSE_USE_OPENMP . Il n'est pas essentiel et utilisé uniquement pour laisser SuiteSparse_time Call omp_get_wtime .
CHOLMOD_USE_OPENMP :
Si ON , OpenMP est utilisé dans Cholmod s'il est disponible. Par défaut: SUITESPARSE_USE_OPENMP .
GRAPHBLAS_USE_OPENMP :
Si ON , OpenMP est utilisé dans Graphblas s'il est disponible. Par défaut: SUITESPARSE_USE_OPENMP .
LAGRAPH_USE_OPENMP :
Si ON , OpenMP est utilisé dans LaGraph s'il est disponible. Par défaut: SUITESPARSE_USE_OPENMP .
PARU_USE_OPENMP :
Si ON , OpenMP est utilisé dans PARU s'il est disponible. Par défaut: SUITESPARSE_USE_OPENMP .
SPEX_USE_OPENMP :
Si ON , OpenMP est utilisé dans Spex s'il est disponible. Par défaut: SUITESPARSE_USE_OPENMP .
SUITESPARSE_DEMOS :
Si ON , créez les programmes de démonstration pour chaque package. Par défaut: OFF .
SUITESPARSE_USE_SYSTEM_BTF :
Si ON , utilisez les bibliothèques BTF installées sur le système de construction. Si OFF , créez automatiquement BTF en fonction de la dépendance si nécessaire. Par défaut: OFF .
SUITESPARSE_USE_SYSTEM_CHOLMOD :
Si ON , utilisez les bibliothèques Cholmod installées sur le système de construction. Si OFF , créez automatiquement Cholmod en fonction de la dépendance si nécessaire. Par défaut: OFF .
SUITESPARSE_USE_SYSTEM_AMD :
Si ON , utilisez des bibliothèques AMD installées sur le système de construction. Si OFF , créez automatiquement AMD en fonction de la dépendance si nécessaire. Par défaut: OFF .
SUITESPARSE_USE_SYSTEM_COLAMD :
Si ON , utilisez des bibliothèques COLAMD installées sur le système de construction. Si OFF , créez automatiquement COLAMD en fonction de la dépendance si nécessaire. Par défaut: OFF .
SUITESPARSE_USE_SYSTEM_CAMD :
Si ON , utilisez les bibliothèques CAMD installées sur le système de construction. Si OFF , créez automatiquement la CAMD en fonction de la dépendance si nécessaire. Par défaut: OFF .
SUITESPARSE_USE_SYSTEM_CCOLAMD :
Si ON , utilisez les bibliothèques CCOLAMD installées sur le système de construction. Si OFF , créez automatiquement CCOLAMD en fonction de la dépendance si nécessaire. Par défaut: OFF .
SUITESPARSE_USE_SYSTEM_GRAPHBLAS :
Si ON , utilisez des bibliothèques Graphblas installées sur le système de construction. Si OFF , créez automatiquement Graphblas en tant que dépendance si nécessaire. Par défaut: OFF .
SUITESPARSE_USE_SYSTEM_SUITESPARSE_CONFIG :
Si ON , utilisez des bibliothèques SuiteSparse_config installées sur le système de construction. Si OFF , créez automatiquement SuiteSparse_config en tant que dépendance si nécessaire. Par défaut: OFF .
SUITESPARSE_USE_FORTRAN
Si ON , utilisez le compilateur FORTRAN pour déterminer comment C appelle Fortan et pour créer plusieurs routines FORTRAN en option. Si OFF , utilisez SUITESPARSE_C_TO_FORTRAN pour définir comment C appelle FORTRAN. Par défaut: ON .
SUITESPARSE_C_TO_FORTRAN
Une chaîne qui définit comment C appelle FORTRAN (c'est-à-dire des fonctions exportées par la bibliothèque BLAS). Ce paramètre est utilisé si aucun compilateur FORTRAN fonctionnant ne peut être détecté ou SUITESPARSE_USE_FORTRAN est défini sur OFF . Cette chaîne doit être lue comme la liste des arguments et le corps d'une macro de préprocesseur. Le premier argument de cette macro est tout nom de fonction Fortran dans les lettres minuscules. Le deuxième argument est le même nom de fonction dans les lettres majuscules. Le corps définit par quel nom de fonction Fortran Fonctions est appelée. Cela est nécessaire car FORTRAN est insensible à la casse et que différents compilateurs de Fortran utilisent des conventions de mangeage différents. Si un compilateur MSVC C / C ++ est utilisé, cela par défaut "(name,NAME) name" (c'est-à-dire en bas de cas sans trait de trait de soulignement). C'est le nom de la convention de mangling pour le compilateur Intel Fortran sur Windows. Si d'autres compilateurs C / C ++ sont utilisés, cela est par défaut "(name,NAME) name##_" (c'est-à-dire en minuscules avec sous-traitant). C'est le nom de la convention de mangling pour la plupart des compilateurs FORTRAN couramment utilisés (comme ifx sur des plates-formes autres que Windows, gfortran , flang , ...). Ce dernier nom de convention de mangling est également utilisé par défaut par OpenBlas (indépendant sur la plate-forme ou le compilateur utilisé pour construire 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. La liste est trop longue.
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.