10 de octubre de 2024, Suitesparse versión 7.8.3
Suitesparse es un conjunto de paquetes relacionados con la matriz escasa escrita o coautor de Tim Davis, disponible en https://github.com/drtimothyaldendavis/suitesparse.
Autor principal de Suitesparse (códigos y algoritmos, excl. Metis): Tim Davis
Coautores del Código, en orden alfabético (sin incluir a Metis o elgraph): 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 Lorene, Lorena, Lorena, Lorena, Lorenen Domenzain, Erick Moreno-Centeno, Markus Mützel, Corey Nolel, Ekanathan Palamadai, Sivasankaran Rajamanickam, Sanjay Ranka, Wissam Sid-Lakhdar y Nuri Yeralan.
Elgraph ha sido desarrollado por el mayor número de desarrolladores de cualquiera de los paquetes de Suitesparse y merece su propia lista. La lista también aparece en 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 es escrito por George Karypis.
Diseñadores de algoritmos adicionales: Esmond Ng y John Gilbert.
Consulte cada paquete para obtener información sobre licencia, derechos de autor e autor.
Consulte cada paquete para obtener la documentación en cada paquete, generalmente en la subcarpeta DOC.
Paquetes en suitesparse y archivos en este directorio:
AMD
ordenado de grado mínimo aproximado. Esta es la función AMD incorporada en MATLAB.
Autores: Tim Davis, Patrick Amestoy, Iain Duff
bin
donde se colocan los programas cuando se compilan, para make local
BTF
Permutación para bloquear la forma triangular
Autores: Tim Davis, Ekanathan Palamadai
build
Carpeta para el árbol de compilación predeterminado
CAMD
pedido de grado mínimo aproximado restringido
Autores: Tim Davis, Patrick Amestoy, Iain Duff, Yanqing Chen
CCOLAMD
Columna restringida Ordenamiento de grado mínimo aproximado
Autores: Tim Davis, Sivasankaran Rajamanickam, Stefan Larimore.
Colaboradores de diseño de algoritmo: Esmond NG, John Gilbert (para colamd)
ChangeLog
Un resumen de los cambios en Suitesparse. Consulte */Doc/ChangeLog para obtener detalles para cada paquete.
CHOLMOD
Factorización de cholesky escaso. Requiere AMD, Colamd, Ccolamd, The BLAS y Lapack. Opcionalmente usa Metis. Esto es chol y x=Ab en matlab.
Autor para todos los módulos: Tim Davis
CHOLMOD/MODIFICADO Autores del módulo: Tim Davis y William W. Hager
Cholmod/suitesparse_metis: una versión modificada de Metis, incrustada en la biblioteca Cholmod. Vea los archivos ReadMe.txt para más detalles. Autor: George Karypis. Esta es una copia ligeramente modificada incluida con Suitesparse a través de la licencia de código abierto proporcionada por George Karypis. Suitesparse no puede usar una copia no modificada de Metis.
CITATION.bib
Citas para paquetes de suites, en formato Bibtex.
CMakeLists.txt
Opcional, para compilar todo el suites. Vea abajo.
CODE_OF_CONDUCT.md
Directrices de la comunidad
COLAMD
Columna de pedido de grado mínimo de columna. Esta es la función COLAMD incorporada en MATLAB.
Autores (del código): Tim Davis y Stefan Larimore
Colaboradores de diseño de algoritmo: Esmond NG, John Gilbert
Contents.m
Una lista de contenidos para 'Ayuda Suitesparse' en Matlab.
CONTRIBUTING.md
cómo contribuir a suitesparse
CONTRIBUTOR-LICENSE.txt
Acuerdo de contribuyente requerido
CSparse
Un paquete de matriz disperso conciso, desarrollado para mi libro, "Métodos directos para sistemas lineales dispersos", publicado por Siam. Destinado principalmente a la enseñanza. Tenga en cuenta que el código es (c) Tim Davis, como se indica en el libro.
Para la producción, use CXSParse en su lugar. En particular, tanto CSPARSE como CXSPARSE tienen el mismo Nombre de archivo: cs.h Este paquete se utiliza para el DMPerm incorporado en MATLAB.
Autor: Tim Davis
CXSparse
CSPARSE extendido. Incluye soporte para matrices complejas y enteros int o largos. Use esto en lugar de CSPARSE para el uso de producción; Crea un libcsparse.so (o dylib en el Mac) con el mismo nombre que CSPARSE. Es un superconjunto de CSPARSE. Cualquier código que vincule con CSPARSE también debe poder vincular contra CXSPARSE.
Autor: Tim Davis, David Bateman
Example
Un paquete simple que se basa en casi todos los suitespársanos
.github
Flujos de trabajo para pruebas de CI en GitHub.
GraphBLAS
Algoritmos gráficos en el lenguaje de álgebra lineal.
https://graphblas.org
Autores: Tim Davis, Joe Eaton, Corey Nolet
include
make install lugares visibles para el usuario incluya archivos para cada paquete aquí, después de make local .
KLU
Factorización de Lu dispersa, principalmente para la simulación de circuito. Requiere AMD, Colamd y BTF. Opcionalmente usa Cholmod, CAMD, CCOLAMD y METIS.
Autores: Tim Davis, Ekanathan Palamadai
LAGraph
Una biblioteca de algoritmos gráficos basada en Graphblas. Ver también https://github.com/graphblas/lagraph
Autores: muchos.
LDL
un paquete de factorización LDL muy conciso
Autor: Tim Davis
lib
make install lugares bibliotecas compartidas para cada paquete aquí, después de make local .
LICENSE.txt
Licencias recolectadas para cada paquete.
Makefile
Opcional, para compilar todo el suites que usa make , que se usa como un envoltorio simple para cmake en cada subproyecto.
make
Compila las bibliotecas de suites. make install se instalará en CMAKE_INSTALL_PATH (podría predeterminarse a /usr/local/lib en Linux o Mac).
make local
Compila suitesparse. make install se instalará en ./lib , ./include . No se instala en CMAKE_INSTALL_PATH .
make global
Compila las bibliotecas de suites. make install Install In /usr/local/lib (o lo que sea el CMAKE_INSTALL_PREFIX configurado). No se instala en ./lib y ./include .
make install
Instala en el directorio actual ( ./lib , ./include ), o en /usr/local/lib y /usr/local/include , (este último definido por CMAKE_INSTALL_PREFIX ) dependiendo de si se ha make , make local o make global .
make uninstall
deshacer make install .
make distclean
Elimina todos los archivos no en distribución, incluyendo ./bin , ./share , ./lib y ./include .
make purge
Igual que make distclean .
make clean
Elimina todos los archivos no en distribución, pero mantiene bibliotecas y demostraciones compiladas, ./lib , ./share y ./include .
Cada subproyecto individual también tiene cada uno de los make anteriores.
Cosas que no necesitas hacer:
make docs
Crea guías de usuario a partir de archivos de látex
make cov
Ejecuta pruebas de cobertura de declaración (solo Linux)
MATLAB_Tools
Varios archivos M para usar en Matlab
Autor: Tim Davis (todas las partes)
Para spqr_rank : Autor Les Foster y Tim Davis
Contents.m
Lista de contenido
dimacs10
Matrices de carga para la colección DIMACS10
Factorize
x=Ab orientado a objetos para matlab
find_components
Encuentra componentes conectados en una imagen
GEE
Eliminación gaussiana simple
getversion.m
Determinar la versión MATLAB
gipper.m
Crear archivo de matlab
hprintf.m
Imprimir hipervínculos en la ventana de comando
LINFACTOR
Paquete predecesor para Factorize
MESHND
Orden de disección anidada de mallas regulares
pagerankdemo.m
ilustra cómo funciona PageRank
SFMULT
C=S*F donde S es escaso y F está lleno
shellgui
Mostrar una concha de mar
sparseinv
subconjunto inverso escaso
spok
Compruebe si una matriz escasa es válida
spqr_rank
Paquete SPQR_RANK. Matlab Toolbox para matrices dispersas deficientes en rango: espacios nulos, factorizaciones confiables, etc. con Leslie Foster, San José State Univ.
SSMULT
C=A*B donde A y B son escasos. Esta fue la base del C=A*B incorporado en Matlab, hasta que fue reemplazado por Graphblas en MATLAB R2021A.
SuiteSparseCollection
Para la colección de matriz Suitesparse
waitmex
Barra de espera para usar dentro de una Función Mex
Mongoose
Partición gráfica.
Autores: Nuri Yeralan, Scott Kolodziej, William Hager, Tim Davis
ParU
Un método multifrontal de patrón asimétrico paralelo.
Actualmente un prelanzamiento.
Autores: Mohsen Aznaveh y Tim Davis
RBio
Leer/escribir matrices dispersas en formato Rutherford/Boeing
Autor: Tim Davis
README.md
este archivo
SPEX
resuelve sistemas lineales dispersos en aritmética exacta.
Requiere las bibliotecas GNU GMP y MPRF.
Esto pronto será reemplazado por un paquete más general, SPEX V3 que incluye este método (Lu escaso exacto) y otros (cholesky exacto escaso y actualización/descendencia exacta escasa). La API de V3 cambiará significativamente.
Autores: Chris Lourenco, Jinhao Chen, Erick Moreno-Centeno, Lorena Lorena Mejia Domenzain y Tim Davis.
Consulte https://github.com/clouren/spex para obtener la última versión.
SPQR
Factorización QR escasa. Este es el qr incorporado y x=Ab en Matlab. También llamado Suitesparseqr.
Incluye dos bibliotecas de GPU: SPQR/GPUQREngine y SPQR/SuiteSparse_GPURuntime .
Autor del código de la CPU: Tim Davis
Autor de los módulos GPU: Tim Davis, Nuri Yeralan, Wissam Sid-Lakhdar, Sanjay Ranka
ssget
Interfaz de Matlab para la colección de matriz de suitespárseas
Autor: Tim Davis
SuiteSparse_config
Biblioteca con funciones y configuraciones comunes para todos los paquetes anteriores. CSparse , GraphBLAS , LAGraph y MATLAB_Tools no usan SuiteSparse_config .
Autor: Tim Davis
SuiteSparse_demo.m
Una demostración de suites para Matlab
SuiteSparse_install.m
instalar suitespársee para MATLAB
SuiteSparse_paths.m
Establezca rutas para suites Matlab Mexfunctions
SuiteSparse_test.m
Prueba exhaustiva para suites en matlab
UMFPACK
Factorización de Lu escaso. Requiere AMD y el BLAS .
Este es el lu y x=Ab incorporado en MATLAB.
Autor: Tim Davis
Colaboración de diseño de algoritmo: Iain Duff
Consulte cada paquete para obtener información sobre licencia, derechos de autor e autor. Todos los códigos son escritos o coautorados por Timothy A. Davis (correo electrónico: [email protected]), a excepción de Metis (por George Karypis), GraphBLAS/cpu_features (por Google), Graphblas/LZ4, ZSTD y XXHASH (por Yann Collet, ahora en Facebook) y Graphblas/Cuda/JITify.HPP (por NvidiAs (por NvidiAs. Las partes de Graphblas/CUDA son derechos de autor (c) por Nvidia. Consulte cada una de estas licencias.
¡Gracias por empacar suitesparse! Aquí hay algunas sugerencias:
Graphblas tarda mucho en compilar porque crea muchos "kernels de fábricas "rápidos en el tiempo de compilación. Si desea reducir el tiempo de compilación y el tamaño de la biblioteca, habilite el modo GRAPHBLAS_COMPACT , pero mantenga habilitado el compilador JIT. Luego, Graphblas compilará los núcleos que necesita en el tiempo de ejecución, a través de su compilador JIT. El rendimiento será el mismo que los Factorykernels una vez que se compilen los núcleos JIT. Los núcleos compilados del usuario se colocan en ~/.SuiteSparse , de forma predeterminada. No necesita distribuir la fuente de Graphblas para habilitar el compilador JIT: solo libgraphblas.so y GraphBLAS.h es suficiente.
Graphblas necesita OpenMP! Es fundamentalmente un código paralelo, así que distribílo con OpenMP habilitado. El rendimiento sufrirá de otra manera.
Aceleración de Cuda: Cholmod y SPQR pueden beneficiarse de sus núcleos Cuda. Si no tiene CUDA o no desea incluirlo en su distribución, esta versión de Suitesparse omite la construcción de las bibliotecas CHOLMOD_CUDA y SPQR_CUDA , y no se vincula contra las bibliotecas GPUQREngine y SuiteSparse_GPURuntime .
Suitesparse es un metaetaje de muchos paquetes, cada uno con sus propios artículos publicados. Para citar toda la colección, use las URL:
También cita los documentos específicos para los paquetes que usa. Esta es una lista larga; Si desea una lista más corta, simplemente cite el algoritmo más reciente "XXX:" Documentos en ACM Toms, para cada paquete.
Para el matlab x = a b, vea a continuación para AMD, Colamd, Cholmod, Umfpack y SuitesParseqr (SPQR).
para graflas, y c = AB en Matlab (escasez-modos-sparse):
Ta Davis. Algoritmo 1037: Suitesparse: Graphblas: Algoritmos de gráficos paralelos en el lenguaje de álgebra lineal dispersa. ACM Trans. Matemáticas. Softw. 49, 3, artículo 28 (septiembre de 2023), 30 páginas. https://doi.org/10.1145/3577195
T. Davis, Algoritmo 1000: Suitesparse: Graphblas: Algoritmos Graph en el lenguaje del álgebra lineal dispersa, ACM Trans en el software matemático, Vol 45, no 4, diciembre de 2019, Artículo no 44. Https://doi.org/10.1145/3322125.
Para el lagraph:
G. Szárnyas et al., "Lagraph: álgebra lineal, bibliotecas de análisis de redes y el estudio de algoritmos gráficos", 2021 Talleres de simposios de procesamiento paralelo y procesamiento de IEEE IEEE (IPDPSW), Portland, OR, EE. UU., 2021, pp. 243-252. https://doi.org/10.1109/ipdpsw52791.2021.00046.
Para CSPARSE/CXSPARSE:
Ta Davis, Métodos directos para sistemas lineales dispersos, Serie SIAM sobre los fundamentos de los algoritmos, Siam, Filadelfia, PA, 2006. Https://doi.org/10.1137/1.9780898718881
Para SuitesParseqr (SPQR): (también cita AMD, Colamd):
TA Davis, Algoritmo 915: Suitesparseqr: factorización QR dispersa de revelación multifrontal multifrontal, ACM Trans. en el software matemático, 38 (1), 2011, pp. 8: 1-8: 22. https://doi.org/10.1145/2049662.2049670
para suitesparseqr/gpu:
Sencer Nuri Yeralan, Ta Davis, Wissam M. Sid-Lakhdar y Sanjay Ranka. 2017. Algoritmo 980: factorización QR escasa en la GPU. ACM Trans. Matemáticas. Softw. 44, 2, artículo 17 (junio de 2018), 29 páginas. https://doi.org/10.1145/3065870
Para Cholmod: (también cita AMD, Colamd):
Y. Chen, Ta Davis, WW Hager y S. Rajamanickam, Algoritmo 887: Cholmod, Factorización de Cholesky dispersiva supernodal y actualización/descendencia, ACM Trans. en el software matemático, 35 (3), 2008, pp. 22: 1--22: 14. https://dl.acm.org/doi/abs/10.1145/1391989.1391995
Ta Davis y WW Hager, Supernodos dinámicos en SPARSE Cholesky Update/Downdate y Triangular Soluciones, ACM Trans. en Mathematical Software, 35 (4), 2009, pp. 27: 1--27: 23. https://doi.org/10.1145/1462173.1462176
Para el módulo Cholmod/Modify: (también cita AMD, Colamd):
Ta Davis y William W. Hager, Modificaciones de la fila de un escaso Cholesky Factorización SIAM Journal on Matrix Analysis and Applications 2005 26: 3, 621-639. https://doi.org/10.1137/s089547980343641x
Ta Davis y William W. Hager, Modificaciones de rango múltiple de un escaso Cholesky Factorization Siam Journal sobre análisis y aplicaciones de matriz 2001 22: 4, 997-1013. https://doi.org/10.1137/s0895479899357346
Ta Davis y William W. Hager, Modificando una factorización de cholesky escaso, SIAM Journal on Matrix Analysis and Applications 1999 20: 3, 606-627. https://doi.org/10.1137/s0895479897321076
Para módulos Cholmod/GPU:
Steven C. Rennich, Darko Stosic, Timothy A. Davis, acelerando la factorización de cholesky dispersos en GPU, Paralelo Computing, Vol 59, 2016, pp 140-150. https://doi.org/10.1016/j.parco.2016.06.004
para AMD y CAMD:
P. Amestoy, Ta Davis, y es Duff, Algoritmo 837: un algoritmo de pedido de grado mínimo aproximado, ACM Trans. en Mathematical Software, 30 (3), 2004, pp. 381-388. https://dl.acm.org/doi/abs/10.1145/1024074.1024081
P. Amestoy, Ta Davis, y es Duff, un algoritmo de pedido de grado mínimo aproximado, Análisis y aplicaciones de Siam J. Matrix, 17 (4), 1996, pp. 886-905. https://doi.org/10.1137/s0895479894278952
para Colamd, Symamd, Ccolamd y Csymamd:
Ta Davis, Jr Gilbert, S. Larimore, E. Ng, Algoritmo 836: Colamd, un algoritmo de pedido de grado mínimo de columna aproximada, ACM Trans. en Mathematical Software, 30 (3), 2004, pp. 377-380. https://doi.org/10.1145/1024074.1024080
Ta Davis, Jr Gilbert, S. Larimore, E. Ng, una columna Algoritmo de pedido de grado mínimo de columna, ACM Trans. en Mathematical Software, 30 (3), 2004, pp. 353-376. https://doi.org/10.1145/1024074.1024079
Para Umfpack: (también cita AMD y Colamd):
TA Davis, Algoritmo 832: UMFPACK: un método multifrontal de patrón de patrón asimétrico con una estrategia de pedido anticipado de columna, ACM Trans. en Mathematical Software, 30 (2), 2004, pp. 196-199. https://dl.acm.org/doi/abs/10.1145/992200.992206
TA Davis, una estrategia de pedido de columna para el método multifrontal de patrón de patrón asimétrico, ACM Trans. en Mathematical Software, 30 (2), 2004, pp. 165-195. https://dl.acm.org/doi/abs/10.1145/992200.992205
Ta Davis y es Duff, un método combinado no infrontal/multifrontal para matrices dispersas asimétricas, ACM Trans. en Mathematical Software, 25 (1), 1999, pp. 1-19. https://doi.org/10.1145/305658.287640
TA Davis y es Duff, un método multifrontal de patrón de patrón asimétrico para la factorización de LU dispersa, SIAM J. Matrix Analysis and Computations, 18 (1), 1997, pp. 140-158. https://doi.org/10.1137/s0895479894246905
Para el archivo M Factorize:
TA Davis, Algoritmo 930: Factorize, un solucionador de sistema lineal orientado a objetos para MATLAB, ACM Trans. en Mathematical Software, 39 (4), 2013, pp. 28: 1-28: 18. https://doi.org/10.1145/2491491.2491498
Para KLU y BTF (también cita AMD y Colamd):
Ta Davis y Ekanathan Palamadai Natarajan. 2010. Algoritmo 907: KLU, un solucionador disperso directo para los problemas de simulación de circuitos. ACM Trans. Matemáticas. Softw. 37, 3, artículo 36 (septiembre de 2010), 17 páginas. https://dl.acm.org/doi/abs/10.1145/1824801.1824814
para LDL:
Ta Davis. Algoritmo 849: Un paquete de factorización de cholesky disperso conciso. ACM Trans. Matemáticas. Softw. 31, 4 (diciembre de 2005), 587–591. https://doi.org/10.1145/1114268.1114277
Para SSGet y la colección de matriz Suitesparse:
Ta Davis y Yifan Hu. 2011. La colección de matriz dispersa de la Universidad de Florida. ACM Trans. Matemáticas. Softw. 38, 1, artículo 1 (noviembre de 2011), 25 páginas. https://doi.org/10.1145/2049662.2049663
Kolodziej et al., (2019). La interfaz del sitio web Suitesparse Matrix Collection. Journal of Open Source Software, 4 (35), 1244. Https://doi.org/10.21105/Joss.01244
para spqr_rank :
Leslie V. Foster y Ta Davis. 2013. Algoritmo 933: Cálculo confiable de rango numérico, bases espaciales nulas, soluciones pseudoinverse y soluciones básicas que utilizan SuitesParseqr. ACM Trans. Matemáticas. Softw. 40, 1, artículo 7 (septiembre de 2013), 23 páginas. https://doi.org/10.1145/2513109.2513116
Para la mangosta:
Ta Davis, William W. Hager, Scott P. Kolodziej y S. Nuri Yeralan. 2020. Algoritmo 1003: Mongoose, una biblioteca de gráficos engrosamiento y partición. ACM Trans. Matemáticas. Softw. 46, 1, artículo 7 (marzo de 2020), 18 páginas. https://doi.org/10.1145/3337792
Para SPEX:
Christopher Lourenco, Jinhao Chen, Erick Moreno-Centeno y Ta Davis. 2022. Algoritmo 1021: SPEX izquierdo LU, resolviendo exactamente sistemas lineales dispersos a través de una escasez de la factorización de LU que presenta a los enteros. ACM Trans. Matemáticas. Softw. Junio de 2022. Https://doi.org/10.1145/3519024
Nota: Si usa OpenBlas, asegúrese de usar la versión 0.3.27 o posterior.
Para seleccionar su BLAS/LAPACK, consulte las instrucciones en suitesparseblas.cmake en SuiteSparse_config/cmake_modules . Si SuiteSparse_config encuentra un BLAS con enteros de 64 bits (como el Intel MKL ILP64 BLAS), configura SuiteSparse_config.h con SUITESPARSE_BLAS_INT definido como int64_t . De lo contrario, si se encuentra un BLAS de 32 bits, este tipo se define como int32_t . Si más tarde, Umfpack, Cholmod o Spqr se compilan y se vinculan con un BLAS que tiene un tamaño entero diferente, debe anular la definición con -DBLAS64 (para afirmar el uso de enteros de 64 bits en el BLAS) o -DBLAS32 , (para afirmar el uso de 32 bits Integers en los BLA).
El tamaño del entero BLAS no tiene nada que ver con sizeof(void *) .
Cuando se distribuye en forma binaria (como un paquete Debian, Ubuntu, Spack o Brew), Suitesparse probablemente debería compilarse para esperar un BLAS de 32 bits, ya que este es el caso más común. El valor predeterminado es usar un BLAS de 32 bits, pero esto se puede cambiar configurando la variable Cmake SUITESPARSE_USE_64BIT_BLAS ON .
Por defecto, Suitesparse busca una biblioteca BLAS adecuada. Para hacer cumplir una biblioteca BLAS en particular, ya sea:
CMAKE_OPTIONS="-DBLA_VENDOR=OpenBLAS" make
cd Package ; cmake -DBLA_VENDOR=OpenBLAS .. make
Para usar el valor predeterminado (busca un BLAS), no configure BLA_VENDOR o estés en una cadena vacía. En este caso, si SUITESPARSE_USE_64BIT_BLAS está activado, se da preferencia a un BLAS de 64 bits, pero se utilizará una biblioteca BLAS de 32 bits si no se encuentra una biblioteca de 64 bits. Sin embargo, si tanto SUITESPARSE_USE_64BIT_BLAS como SUITESPARSE_USE_STRICT están activados, entonces solo se considera un BLAS de 64 bits.
Al seleccionar una biblioteca BLAS en particular, la configuración SUITESPARSE_USE_64BIT_BLAS se sigue estrictamente. Si se establece en True, solo se utilizará una biblioteca BLAS de 64 bits. Si False (el valor predeterminado), solo se utilizará una biblioteca BLAS de 32 bits. Si no se encuentra tales BLAS, la construcción fallará.
Escriba lo siguiente en este directorio (requiere el sistema priviledge para hacer la sudo make install ):
mkdir -p build && cd build
cmake ..
cmake --build .
sudo cmake --install .
Todas las bibliotecas se crearán e instalarán en la carpeta predeterminada de todo el sistema (/usr/local/lib en Linux). Todos los archivos que necesitan las aplicaciones que usan Suitesparse se instalan en/usr/local/include/suitesparse (en Linux).
Para construir solo un subconjunto de bibliotecas, configure SUITESPARSE_ENABLE_PROJECTS al configurar con cmake. Por ejemplo, para construir e instalar Cholmod y CXSParse (incluidas sus dependencias), use los siguientes comandos:
mkdir -p build && cd build
cmake -DSUITESPARSE_ENABLE_PROJECTS="cholmod;cxsparse" ..
cmake --build .
sudo cmake --install .
Para Windows (MSVC), importe el archivo CMakeLists.txt en MS Visual Studio. Asegúrese de especificar el tipo de compilación como lanzamiento; Por ejemplo, para construir Suitesparse en Windows en la ventana de comando, ejecute:
mkdir -p build && cd build
cmake ..
cmake --build . --config Release
cmake --install .
Asegúrese de instalar primero todas las bibliotecas requeridas: BLAS y LAPACK para UMFPACK, CHOLMOD y SPQR, y GMP y MPFR para SPEX. Asegúrese de usar las últimas bibliotecas; SPEX requiere MPFR 4.0.2 y GMP 6.1.2 (estos números de versión no corresponden al sufijo XYZ de libgmp.so.xyz y libmpfr.so.xyz; consulte la guía del usuario de SPEX para obtener detalles).
Para compilar las bibliotecas e instalarlas solo en suitesparse/lib (no/usr/local/lib), haga esto en el nivel superior de suitesparse:
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=.. ..
cmake --build .
cmake --install .
Si agrega/home/me/suitesparse/lib a la ruta de búsqueda de su biblioteca ( LD_LIBRARY_PATH en Linux), puede hacer lo siguiente (por ejemplo)::
S = /home/me/SuiteSparse
cc myprogram.c -I$(S)/include/suitesparse -lumfpack -lamd -lcholmod -lsuitesparseconfig -lm
Para cambiar los compiladores C y C ++ y compilar en uso paralelo:
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER==g++ ..
Por ejemplo, que cambia el compilador a GCC y G ++.
Esto funcionará en Linux/Unix y en Mac. Debe detectar automáticamente si tiene los compiladores Intel o no, y si tiene o no CUDA.
Consulte SuiteSparse_config/cmake_modules/SuiteSparsePolicy.cmake para seleccionar sus BLA.
También es posible que deba agregar suitesparse/lib a su camino. Si su copia de SuitesParse está en/home/me/suitesparse, por ejemplo, agregue esto a su archivo ~/.bashrc :
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
Para la Mac, usa esto en su lugar:
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
La ubicación de instalación predeterminada de los archivos está a continuación, donde el paquete es uno de los paquetes en 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
Supongamos que coloca suites en la carpeta /home/me/SuiteSparse .
Agregue la carpeta SuiteSparse/lib a su ruta de biblioteca de tiempo de ejecución. En Linux, agregue esto a su script ~/.bashrc , suponiendo /home/me/SuiteSparse es la ubicación de su copia de suitesparse:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
Para la Mac, use esto en su lugar, en su script ~/.zshrc , suponiendo que coloque suitesparse en /Users/me/SuiteSparse :
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
Compile todos los suites con make local .
A continuación, compile la biblioteca Graphblas Matlab. En el shell del sistema mientras está en la carpeta Suitesparse, escriba make gbmatlab si desea instalarlo en todo el sistema con make install , o make gblocal si desea usar la biblioteca en su propia Suitesparse/Lib.
Luego, en la ventana de comando MATLAB, CD al directorio de SuitesParse y escriba SuiteSparse_install . Se compilarán todos los paquetes y se ejecutarán varias demostraciones. Para ejecutar una prueba (¡larga!) Expendente, haz SuiteSparse_test .
Guarde su ruta MATLAB para futuras sesiones con los comandos MATLAB PathTool o SavePath. Si esos métodos fallan porque no tiene permiso en todo el sistema, agregue las nuevas rutas a su archivo startup.m, normalmente en documentos/matlab/startup.m. También puede usar el archivo m SuiteSparse_paths para configurar todas sus rutas al comienzo de cada sesión de MATLAB.
Puede establecer opciones específicas para Cmake con el comando (por ejemplo):
cmake -DCHOLMOD_PARTITION=OFF -DBUILD_STATIC_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug ..
Ese comando compilará todo el Parse de Suites, excepto el módulo Cholmod/Partition (debido a -DCHOLMOD_PARTITION=OFF ). Se utilizará el modo de depuración (el tipo de compilación). Las bibliotecas estáticas no se construirán (ya que -DBUILD_STATIC_LIBS=OFF está configurado).
SUITESPARSE_ENABLE_PROJECTS :
Lista de proyectos separados por semicolon para ser construidos o all . Valor predeterminado: all en cuyo caso se crean los siguientes proyectos:
suitesparse_config;mongoose;amd;btf;camd;ccolamd;colamd;cholmod;cxsparse;ldl;klu;umfpack;paru;rbio;spqr;spex;graphblas;lagraph
Además, csparse se puede incluir en esa lista para construir CSPARSE.
CMAKE_BUILD_TYPE :
Valor predeterminado: Release , use Debug para la depuración.
SUITESPARSE_USE_STRICT :
SuitesParse tiene muchas configuraciones definibles por el usuario del formulario SUITESPARSE_USE_* o (package)_USE_* para algún paquete particular. En general, estas configuraciones no son estrictas. Por ejemplo, si SUITESPARSE_USE_OPENMP está ON , entonces se prefiere OpenMP, pero SuitesParse se puede usar sin OpenMP, por lo que no se genera ningún error si no se encuentra OpenMP. Sin embargo, si SUITESPARSE_USE_STRICT está ON , todas las configuraciones *_USE_* se tratan estrictamente y se produce un error si se establece en el que ON pero el paquete o configuración correspondiente no está disponible. Las configuraciones *_USE_SYSTEM_* siempre se tratan como estrictas. Valor predeterminado: OFF .
SUITESPARSE_USE_CUDA :
Si se establece en ON , CUDA está habilitado para todos los suites. Valor predeterminado: ON ,
CUDA en Windows con MSVC parece estar funcionando con esta versión, pero debe considerarse como un prototipo y puede no ser completamente funcional. Tengo recursos limitados para probar CUDA en Windows. Si encuentra problemas, deshabilite CUDA y publique esto como un problema en GitHub.
CHOLMOD_USE_CUDA :
Valor predeterminado: ON . Tanto SUITESPARSE_USE_CUDA como CHOLMOD_USE_CUDA deben habilitarse para usar CUDA en Cholmod.
SPQR_USE_CUDA :
Valor predeterminado: ON . Tanto SUITESPARSE_USE_CUDA como SPQR_USE_CUDA deben habilitarse para usar CUDA en SPQR.
CMAKE_INSTALL_PREFIX :
Define la ubicación de instalación (predeterminado en Linux IS /usr/local ). Por ejemplo, este comando mientras está en una carpeta build en la carpeta Suitesparse de nivel superior establecerá el directorio de instalación en /stuff , utilizadas por el posterior sudo cmake --install . :
cmake -DCMAKE_INSTALL_PREFIX=/stuff ..
sudo cmake --install .
SUITESPARSE_PKGFILEDIR :
Directorio donde se instalarán los archivos CMAKE CONFIG y PKG-Config. De manera predeterminada, los archivos de configuración CMake se instalarán en la subcarpeta cmake del directorio donde se instalarán las bibliotecas (estáticas) (por ejemplo, lib ). Los archivos .pc para PKG-config se instalarán en la subcarpeta pkgconfig del directorio donde se instalarán las bibliotecas (estáticas).
Esta opción permite instalarlos en una ubicación diferente de las bibliotecas (estáticas). Esto permite instalar múltiples configuraciones de las bibliotecas de SuitesParse al mismo tiempo (por ejemplo, también estableciendo un CMAKE_RELEASE_POSTFIX diferente y CMAKE_INSTALL_LIBDIR para cada uno de ellos). Para elegir la configuración respectiva en proyectos posteriores, SET, EG, CMAKE_PREFIX_PATH (para CMAKE) o PKG_CONFIG_PATH (para sistemas de compilación utilizando PKG-Config) a la ruta que contiene los respectivos archivos de configuración CMake o archivos PKG-CONFIG.
SUITESPARSE_INCLUDEDIR_POSTFIX :
Postfix para el objetivo de instalación del encabezado de Suitesparse. Valor predeterminado: Suitesparse, por lo que el directorio de inclusión predeterminado es: CMAKE_INSTALL_PREFIX/include/suitesparse
BUILD_SHARED_LIBS :
Si ON , se construyen bibliotecas compartidas. Valor predeterminado: ON .
BUILD_STATIC_LIBS :
Si ON , se construyen bibliotecas estáticas. Valor predeterminado: ON , excepto Graphblas, que tarda mucho en compilar para que el valor predeterminado para Graphblas esté OFF a menos que BUILD_SHARED_LIBS esté OFF .
SUITESPARSE_CUDA_ARCHITECTURES :
Una cadena, como "all" o "35;50;75;80" que enumera las arquitecturas CUDA para usar al compilar núcleos CUDA con nvcc . La opción "all" requiere CMake 3.23 o posterior. Predeterminado: "52;75;80" .
BLA_VENDOR :
Una cuerda. Deje unset o use "ANY" para seleccionar cualquier biblioteca BLAS (el valor predeterminado). O establecer el nombre de un BLA_VENDOR definido por findblas.cmake. Ver: https://cmake.org/cmake/help/latest/module/findblas.html#blas-lapack-vendors
SUITESPARSE_USE_64BIT_BLAS :
Si ON , busque un BLAS de 64 bits. Si OFF : solo 32 bits. Valor predeterminado: OFF .
SUITESPARSE_USE_PYTHON :
Si ON , construya interfaces de Python para cualquier paquete en Suitesparse que tenga uno (actualmente solo SPEX). Si OFF : no construya ninguna interfaz Python. Valor predeterminado: ON .
SUITESPARSE_USE_OPENMP :
Si ON , OpenMP se usa de forma predeterminada si está disponible. Valor predeterminado: ON .
Graphblas, Lagraph y Paru serán mucho más lentos si no se usa OpenMP. Cholmod será algo más lento sin OpenMP (siempre que todavía tenga un BLAS/LAPACK paralelo). Tres paquetes (Umfpack, Cholmod y Spqr) dependen en gran medida de las bibliotecas BLAS/LAPACK paralelas y esas bibliotecas pueden usar OpenMP internamente. Si desea deshabilitar OpenMP en una aplicación completa, seleccione un BLAS/LAPACK único o un BLAS/LAPACK paralelo que no use OpenMP (como el marco de Acelerate de Apple). El uso de una biblioteca BLAS/LAPACK de un solo hilo causará que Umfpack, Cholmod y SPQR sean mucho más lentos.
ADVERTENCIA: Graphblas puede no ser seguros de subprocesos si se construyen sin OpenMP o PTHREADS (consulte la Guía del usuario de Graphblas para obtener más detalles).
SUITESPARSE_CONFIG_USE_OPENMP :
Si ON , SuiteSparse_config usa OpenMP si está disponible. Valor predeterminado: SUITESPARSE_USE_OPENMP . No es esencial y solo se usa para dejar que SuiteSparse_time llame omp_get_wtime .
CHOLMOD_USE_OPENMP :
Si ON , OpenMP se usa en Cholmod si está disponible. Valor predeterminado: SUITESPARSE_USE_OPENMP .
GRAPHBLAS_USE_OPENMP :
Si ON , OpenMP se usa en Graphblas si está disponible. Valor predeterminado: SUITESPARSE_USE_OPENMP .
LAGRAPH_USE_OPENMP :
Si ON , OpenMP se usa en elgraph si está disponible. Valor predeterminado: SUITESPARSE_USE_OPENMP .
PARU_USE_OPENMP :
Si ON , OpenMP se usa en PARU si está disponible. Valor predeterminado: SUITESPARSE_USE_OPENMP .
SPEX_USE_OPENMP :
Si ON , OpenMP se usa en SPEX si está disponible. Valor predeterminado: SUITESPARSE_USE_OPENMP .
SUITESPARSE_DEMOS :
Si ON , cree los programas de demostración para cada paquete. Valor predeterminado: OFF .
SUITESPARSE_USE_SYSTEM_BTF :
Si ON , use bibliotecas BTF instaladas en el sistema de compilación. Si OFF , construya automáticamente BTF como dependencia si es necesario. Valor predeterminado: OFF .
SUITESPARSE_USE_SYSTEM_CHOLMOD :
Si ON , use bibliotecas Cholmod instaladas en el sistema de compilación. Si OFF , construya automáticamente a Cholmod como dependencia si es necesario. Valor predeterminado: OFF .
SUITESPARSE_USE_SYSTEM_AMD :
Si ON , use bibliotecas AMD instaladas en el sistema de compilación. Si OFF , construya automáticamente la AMD como dependencia si es necesario. Valor predeterminado: OFF .
SUITESPARSE_USE_SYSTEM_COLAMD :
Si ON , use bibliotecas Colamd instaladas en el sistema de compilación. Si OFF , construya automáticamente colamd como dependencia si es necesario. Valor predeterminado: OFF .
SUITESPARSE_USE_SYSTEM_CAMD :
Si ON , use bibliotecas CAMD instaladas en el sistema de compilación. Si OFF , construya automáticamente CAMD como dependencia si es necesario. Valor predeterminado: OFF .
SUITESPARSE_USE_SYSTEM_CCOLAMD :
Si ON , use bibliotecas CCOLAMD instaladas en el sistema de compilación. Si OFF , construya automáticamente ccolamd como dependencia si es necesario. Valor predeterminado: OFF .
SUITESPARSE_USE_SYSTEM_GRAPHBLAS :
Si ON , use bibliotecas Graphblas instaladas en el sistema de compilación. Si OFF , construya automáticamente Graphblas como dependencia si es necesario. Valor predeterminado: OFF .
SUITESPARSE_USE_SYSTEM_SUITESPARSE_CONFIG :
Si ON , use bibliotecas SuiteSparse_config instaladas en el sistema de compilación. Si OFF , cree automáticamente SuiteSparse_config como dependencia si es necesario. Valor predeterminado: OFF .
SUITESPARSE_USE_FORTRAN
Si ON , use el compilador Fortran para determinar cómo C llama a Fortan y para construir varias rutinas de Fortran opcionales. Si OFF , use SUITESPARSE_C_TO_FORTRAN para definir cómo C llama a Fortran. Valor predeterminado: ON .
SUITESPARSE_C_TO_FORTRAN
Una cadena que define cómo C llama a Fortran (es decir, funciones exportadas por la Biblioteca BLAS). Esta configuración se usa si no se puede detectar ningún compilador de Fortran en funcionamiento o si SUITESPARSE_USE_FORTRAN está configurado en OFF . Esta cadena debe leerse como la lista de argumentos y el cuerpo de una macro preprocesador. El primer argumento a esa macro es cualquier nombre de función Fortran en letras minúsculas. El segundo argumento es el mismo nombre de función en las letras mayúsculas. El cuerpo define por el cual se llaman a las funciones de la función Fortran. Esto es necesario porque Fortran es insensible a casos, y los diferentes compiladores de Fortran usan diferentes convenciones de mangling de nombres. Si se usa un compilador MSVC C/C ++, este valor predeterminado a "(name,NAME) name" (es decir, minúsculas sin un subrayado). Esa es la convención de nombre para el compilador Intel Fortran en Windows. Si se usan otros compiladores C/C ++, este valor predeterminado es "(name,NAME) name##_" (es decir, minúsculas con un bajo valor bajo). Esa es la convención de nombre de nombre para la mayoría de los compiladores de Fortran comúnmente utilizados (como ifx en plataformas distintas de Windows, gfortran , flang , ...). OpenBlas también se usa de forma predeterminada por OpenBLas (independiente en la plataforma o en el compilador utilizado para construir 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.