10 de outubro de 2024, Suitesparse versão 7.8.3
A Suitesparse é um conjunto de pacotes relacionados à matriz esparsa escritos ou em co-autoria por Tim Davis, disponível em https://github.com/drimothyaldendavis/suitaparse.
Autor primário de Suitesparse (códigos e algoritmos, excl. Metis): Tim Davis
Code co-authors, in alphabetical order (not including METIS or LAGraph): Patrick Amestoy, Mohsen Aznaveh, David Bateman, Jinhao Chen, Yanqing Chen, Iain Duff, Joe Eaton, Les Foster, William Hager, Raye Kimmerer, Scott Kolodziej, Chris Lourenco, Stefan Larimore, Lorena Mejia Domenzain, Erick Moreno-Centeno, Markus Mützel, Corey Nolel, Ekanathan Palamadai, Sivasankaran Rajamanickam, Sanjay Ranka, Wissam Sid-Lakhdar e Nuri Yeralan.
O LAGRAPH foi desenvolvido pelo maior número de desenvolvedores de qualquer um dos pacotes da SuitesParse e merece sua própria lista. A lista também aparece em lagraph/contribuadores.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 é de autoria de George Karypis.
Designers de algoritmos adicionais: Esmond Ng e John Gilbert.
Consulte cada pacote para obter informações de licença, direitos autorais e autor.
Consulte cada pacote para obter a documentação em cada pacote, normalmente na subpasta Doc.
Pacotes em suitesparse e arquivos neste diretório:
AMD
Pedido de grau mínimo aproximado. Esta é a função AMD embutida no MATLAB.
Autores: Tim Davis, Patrick Amestoy, Iain Duff
bin
onde os programas são colocados quando compilados, para make local
BTF
permutação para bloquear a forma triangular
Autores: Tim Davis, Ekanathan Palamadai
build
pasta para árvore de construção padrão
CAMD
Pedido de grau mínimo aproximado restrito
Autores: Tim Davis, Patrick Amestoy, Iain Duff, Yanqing Chen
CCOLAMD
coluna restrita aproximar a ordem de grau mínimo
Autores: Tim Davis, Sivasankaran Rajamanickam, Stefan Larimore.
Colaboradores de design de algoritmo: Esmond NG, John Gilbert (para Colamd)
ChangeLog
Um resumo das mudanças no SuitesPparse. Consulte */Doc/ChangeLog para obter detalhes para cada pacote.
CHOLMOD
Fatoração esparsa de Cholesky. Requer AMD, Colamd, CColamd, The Blas e Laback. Opcionalmente usa Metis. Este é chol e x=Ab no Matlab.
Autor para todos os módulos: Tim Davis
Cholmod/Modify Module Autores: Tim Davis e William W. Hager
CHOLMOD/SUITESPARSE_METIS: Uma versão modificada do Metis, incorporada à biblioteca Cholmod. Consulte os arquivos readme.txt para obter detalhes. Autor: George Karypis. Esta é uma cópia ligeiramente modificada incluída no SuitesParse através da licença de código aberto fornecido por George Karypis. O SuitesParse não pode usar uma cópia não modificada do Metis.
CITATION.bib
Citações para pacotes Suitesparse, em formato Bibtex.
CMakeLists.txt
Opcional, para compilar todo o SuitesParse. Veja abaixo.
CODE_OF_CONDUCT.md
Diretrizes da comunidade
COLAMD
Pedido de grau mínimo aproximado da coluna. Esta é a função de colamd embutida no MATLAB.
Autores (do código): Tim Davis e Stefan Larimore
Colaboradores de design de algoritmo: Esmond Ng, John Gilbert
Contents.m
Uma lista de conteúdo para 'Ajuda SuitesParse' no MATLAB.
CONTRIBUTING.md
Como contribuir para o SUITESPARSE
CONTRIBUTOR-LICENSE.txt
Contrato de colaborador exigido
CSparse
Um pacote de matriz esparsa concisa, desenvolvido para o meu livro, "Direct Methods for Sparse Linear Systems", publicado por Siam. Destinado principalmente ao ensino. Observe que o código é (c) Tim Davis, conforme declarado no livro.
Para produção, use o CXSPARSE. Em particular, o CSPARSE e o CXSPARSE têm o mesmo incluem o nome do arquivo: cs.h Este pacote é usado para o DMPERM embutido no MATLAB.
Autor: Tim Davis
CXSparse
CSPARSE estendido. Inclui suporte para matrizes complexas e INT ou números inteiros longos. Use isso em vez de CSPARSE para uso da produção; Ele cria um libcsparse.so (ou dylib no Mac) com o mesmo nome que CSPARSE. É um superconjunto de CSPARSE. Qualquer código que vincule a CSPARSE também deve ser capaz de vincular o CXSPARSE.
Autor: Tim Davis, David Bateman
Example
um pacote simples que se baseia em quase toda a suitesparse
.github
Fluxos de trabalho para teste de IC no Github.
GraphBLAS
Algoritmos de gráfico na linguagem da álgebra linear.
https://graphblas.org
Autores: Tim Davis, Joe Eaton, Corey Nolet
include
make install os locais visíveis do usuário incluem arquivos para cada pacote aqui, depois de make local .
KLU
Fator de Lu esparsa, principalmente para simulação de circuito. Requer AMD, Colamd e BTF. Opcionalmente usa Cholmod, CAMD, CCOLAMD e METIS.
Autores: Tim Davis, Ekanathan Palamadai
LAGraph
uma biblioteca de algoritmos de gráfico baseada em graphblas. Veja também https://github.com/graphblas/lagraph
Autores: Muitos.
LDL
Um pacote de fatorização LDL muito conciso
Autor: Tim Davis
lib
make install os locais de bibliotecas compartilhadas para cada pacote aqui, depois de make local .
LICENSE.txt
Licenças coletadas para cada pacote.
Makefile
Opcional, para compilar todo o SuitesParse usando make , que é usado como um invólucro simples para cmake em cada subprojeto.
make
Compila Bibliotecas de SuitesParse. make install será instalada em CMAKE_INSTALL_PATH (pode padrão para /usr/local/lib no Linux ou Mac).
make local
Compila SuitesParse. make install subsequente será instalada em ./lib , ./include . Não é instalado em CMAKE_INSTALL_PATH .
make global
Compila Bibliotecas de SuitesParse. make install subsequente instalará em /usr/local/lib (ou qualquer que seja o CMAKE_INSTALL_PREFIX configurado). Não instala em ./lib e ./include .
make install
Instala no diretório atual ( ./lib , ./include ), ou in /usr/local/lib e /usr/local/include ((este último definido por CMAKE_INSTALL_PREFIX ), dependendo de make , make local ou make global foi feito.
make uninstall
Os desfiladeiros make install .
make distclean
Remove todos os arquivos que não estão em distribuição, incluindo ./bin , ./share , ./lib e ./include .
make purge
O mesmo que make distclean .
make clean
Remove todos os arquivos não em distribuição, mas mantém bibliotecas e demos compiladas, ./lib , ./share e ./include .
Cada subprojeto individual também possui make acima.
Coisas que você não precisa fazer:
make docs
cria guias de usuário a partir de arquivos de látex
make cov
Executa testes de cobertura da declaração (somente Linux)
MATLAB_Tools
Vários arquivos M para uso no MATLAB
Autor: Tim Davis (todas as partes)
Para spqr_rank : Autor Les Foster e Tim Davis
Contents.m
lista de conteúdo
dimacs10
Carrega matrizes para a coleção DIMACS10
Factorize
Orientado a objetos x=Ab para matlab
find_components
encontra componentes conectados em uma imagem
GEE
eliminação gaussiana simples
getversion.m
Determine a versão do MATLAB
gipper.m
Crie Arquivo Matlab
hprintf.m
Imprima hiperlinks na janela de comando
LINFACTOR
antecessor para Factorize o pacote
MESHND
Dissecção aninhada Ordenação de malhas regulares
pagerankdemo.m
ilustra como o PageRank funciona
SFMULT
C=S*F onde S é escasso e F está cheio
shellgui
exibir uma concha
sparseinv
subconjunto inverso esparso
spok
Verifique se uma matriz esparsa é válida
spqr_rank
Pacote spqr_rank. Caixa de ferramentas Matlab para matrizes esparsas deficientes em classificação: espaços nulos, fatorizações confiáveis, etc. Com Leslie Foster, San Jose State Univ.
SSMULT
C=A*B onde A e B são escassos. Essa foi a base para o interno C=A*B no MATLAB, até que foi substituído pelo GraphBlas no MATLAB R2021A.
SuiteSparseCollection
para a coleção de matrizes suitesparse
waitmex
Waitbar para uso dentro de uma função mex
Mongoose
Particionamento de gráficos.
Autores: Nuri Yeralan, Scott Kolodziej, William Hager, Tim Davis
ParU
um método multifrontal de padrão anti -simétrico paralelo.
Atualmente um pré-lançamento.
Autores: Mohsen Aznaveh e Tim Davis
RBio
Leia/escreva matrizes esparsas no formato Rutherford/Boeing
Autor: Tim Davis
README.md
este arquivo
SPEX
Resolve sistemas lineares esparsos na aritmética exata.
Requer as bibliotecas GMP e MPRF GNU.
Em breve, isso será substituído por um pacote mais geral, o Spex V3 que inclui esse método (exato Lu Sparse Lu) e outros (Cholesky exatos esparsos e atualização exata exata e escassa). A API de V3 mudará significativamente.
Autores: Chris Lourenco, Jinhao Chen, Erick Moreno-Centeno, Lorena Lorena Mejia Domenzain e Tim Davis.
Consulte https://github.com/clouren/spex para obter a versão mais recente.
SPQR
fatoração qr esparsa. Este é o qr e x=Ab embutidos no MATLAB. Também chamado de Suitesparseqr.
Inclui duas bibliotecas de GPU: SPQR/GPUQREngine e SPQR/SuiteSparse_GPURuntime .
Autor do Código da CPU: Tim Davis
Autor de Módulos GPU: Tim Davis, Nuri Yeralan, Wissam Sid-Lakhdar, Sanjay Ranka
ssget
Interface MATLAB para a coleção de matrizes SuitesParse
Autor: Tim Davis
SuiteSparse_config
Biblioteca com funções e configurações comuns para todos os pacotes acima. CSparse , GraphBLAS , LAGraph e MATLAB_Tools não usam SuiteSparse_config .
Autor: Tim Davis
SuiteSparse_demo.m
Uma demonstração de SuitesParse para Matlab
SuiteSparse_install.m
Instale o SuitesParse para Matlab
SuiteSparse_paths.m
Defina caminhos para suitesparse matlab mexfunctions
SuiteSparse_test.m
Teste exaustivo para SuitesParse em Matlab
UMFPACK
Fator de Lu esparsa. Requer AMD e as BLAS .
Este é o lu e x=Ab embutidos no MATLAB.
Autor: Tim Davis
Colaboração de design de algoritmo: iain duff
Consulte cada pacote para obter informações de licença, direitos autorais e autor. Todos os códigos são de autoria ou co-autor de Timothy A. Davis (e-mail: [email protected]), exceto Metis (por George Karypis), GraphBLAS/cpu_features (pelo Google), por facebook/lz4, zstd e xxhash (por Jann Collet, agora no Facebook), e Graphblas, GRAPHLA, Partes do GraphBlas/CUDA são direitos autorais (C) por Nvidia. Consulte cada uma dessas licenças.
Obrigado por embalar SuitesParse! Aqui estão algumas sugestões:
O GraphBlas leva muito tempo para compilar, porque cria muitos "fábricas" rápidas em tempo de compilação. Se você deseja reduzir o tempo de compilação e o tamanho da biblioteca, ative o modo GRAPHBLAS_COMPACT , mas mantenha o compilador JIT ativado. Em seguida, o GraphBlas compilará os kernels de que precisa em tempo de execução, através do compilador JIT. O desempenho será o mesmo que os fábricas quando os grãos JIT forem compilados. Os kernels compilados do usuário são colocados em ~/.SuiteSparse , por padrão. Você não precisa distribuir a fonte para o GraphBlas para ativar o compilador JIT: apenas libgraphblas.so e GraphBLAS.h é suficiente.
O GraphBlas precisa do OpenMP! É fundamentalmente um código paralelo, por isso, distribua -o com o OpenMP ativado. O desempenho sofrerá de outra forma.
Aceleração de CUDA: Cholmod e SPQR podem se beneficiar de seus núcleos Cuda. Se você não possui CUDA ou não deseja incluí -lo em sua distro, esta versão do SuitesParse pula a construção das bibliotecas CHOLMOD_CUDA e SPQR_CUDA e não se vincula às bibliotecas GPUQREngine e SuiteSparse_GPURuntime .
A Suitesparse é uma meta-package de muitos pacotes, cada um com seus próprios artigos publicados. Para citar toda a coleção, use os URLs:
Cite também os documentos específicos para os pacotes que você usa. Esta é uma lista longa; Se você deseja uma lista mais curta, apenas cite os papéis mais recentes do "algoritmo xxx:" no ACM TOMS, para cada pacote.
Para o matlab x = a b, veja abaixo para AMD, colamd, cholmod, umfpack e suitesparseqr (spqr).
para graphblas e c = ab no matlab (esparso-times sparse):
Ta Davis. Algoritmo 1037: SuitesParse: GraphBlas: Algoritmos de gráficos paralelos na linguagem da álgebra linear esparsa. ACM Trans. Matemática. Softw. 49, 3, artigo 28 (setembro de 2023), 30 páginas. https://doi.org/10.1145/3577195
T. Davis, Algoritmo 1000: SuitesParse: GraphBlas: Algoritmos gráficos na linguagem da álgebra linear esparsa, ACM Trans em software matemático, vol 45, n.
Para Lagraph:
G. Szárnyas et al., "Lagraph: Álgebra linear, bibliotecas de análise de rede e o estudo de algoritmos de gráfico", Workshops de Simpósio de Processamento Internacional IEEE IEEE Parallel and Distributed Workshops (IPDPSW), Portland, OR, EUA, 2021, pp. 243-252. https://doi.org/10.1109/IPDPSW52791.2021.00046.
Para CSPARSE/CXSPARSE:
TA Davis, Métodos diretos para sistemas lineares esparsos, SIAM Series sobre os Fundamentos dos Algoritmos, Siam, Filadélfia, PA, 2006. https://doi.org/10.1137/1.9780898718881
Para Suitesparseqr (SPQR): (também cite a AMD, colamd):
Ta Davis, Algoritmo 915: SuitesParseqr: Fator de qR esparso de revelação multithread multifrontal, ACM Trans. em 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 e Sanjay Ranka. 2017. Algoritmo 980: fatoração QR esparsa na GPU. ACM Trans. Matemática. Softw. 44, 2, artigo 17 (junho de 2018), 29 páginas. https://doi.org/10.1145/3065870
para cholmod: (também cite a AMD, colamd):
Y. Chen, Ta Davis, WW Hager e S. Rajamanickam, Algoritmo 887: Cholmod, Sobrenodal fatorização de Cholesky e Atualização/Atualização, ACM Trans. em Software Matemático, 35 (3), 2008, pp. 22: 1--22: 14. https://dl.acm.org/doi/abs/10.1145/1391989.1391995
Ta Davis e WW Hager, Supernodos Dinâmicos em Atualização Sparsa Cholesky/Downdate e resolves triangulares, ACM Trans. em Software Matemático, 35 (4), 2009, pp. 27: 1--27: 23. https://doi.org/10.1145/1462173.1462176
Para o módulo Cholmod/Modify: (também cite a AMD, colamd):
Ta Davis e William W. Hager, Modificações de fila de um Siam Journal Sam Mournal Samix On Matrix Applions 2005 26: 3, 621-639. https://doi.org/10.1137/s089547980343641x
Ta Davis e William W. Hager, modificações de vários rank de um diário esparso da fatorização Cholesky SIAM On Matrix Analysis and Applications 2001 22: 4, 997-1013. https://doi.org/10.1137/s0895479899357346
Ta Davis e William W. Hager, modificando uma fatorização escassa de Cholesky, 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 a fatorização esparsa de Cholesky em GPUs, Computação Paralela, Vol 59, 2016, pp 140-150. https://doi.org/10.1016/j.parco.2016.06.004
para AMD e CAMD:
P. Amestoy, Ta Davis, e é Duff, algoritmo 837: um algoritmo de ordem de grau mínimo aproximado, ACM Trans. em Software Matemático, 30 (3), 2004, pp. 381--388. https://dl.acm.org/doi/abs/10.1145/1024074.1024081
P. Amestoy, Ta Davis, e é Duff, um algoritmo de ordem mínima aproximada de grau, Siam J. Matrix Analysis and Applications, 17 (4), 1996, pp. 886--905. https://doi.org/10.1137/s0895479894278952
Para Colamd, Symamd, CColamd e CSymamd:
Ta Davis, Jr Gilbert, S. Larimore, E. Ng, Algoritmo 836: Colamd, um algoritmo de pedidos de grau mínimo da coluna aproximada, ACM Trans. em Software Matemático, 30 (3), 2004, pp. 377--380. https://doi.org/10.1145/1024074.1024080
Ta Davis, Jr Gilbert, S. Larimore, E. Ng, um algoritmo de ordem mínima aproximada da coluna, ACM Trans. em Software Matemático, 30 (3), 2004, pp. 353--376. https://doi.org/10.1145/1024074.1024079
para umfpack: (também cite a AMD e colamd):
Ta Davis, Algoritmo 832: UMFPACK-Um método multifrontal de padrão assimétrico com uma estratégia de pré-encomenda de coluna, ACM Trans. em Software Matemático, 30 (2), 2004, pp. 196--199. https://dl.acm.org/doi/abs/10.1145/992200.992206
Ta Davis, uma estratégia de pré-encomenda de colunas para o método multifrontal de padrões assimétricos, ACM Trans. em Software Matemático, 30 (2), 2004, pp. 165--195. https://dl.acm.org/doi/abs/10.1145/992200.992205
Ta Davis e é Duff, um método unifrontal/multifrontal combinado para matrizes esparsas não simétricas, ACM Trans. em Software Matemático, 25 (1), 1999, pp. 1--19. https://doi.org/10.1145/305658.287640
Ta Davis e é Duff, um método multifrontal de padrão assimétrico para fatorização esparsa da LU, SIAM J. Matrix Analysis and Computations, 18 (1), 1997, pp. 140--158. https://doi.org/10.1137/s0895479894246905
Para o arquivo M fatorizado:
Ta Davis, Algoritmo 930: fatorize, um solucionador de sistema linear orientado a objetos para Matlab, ACM Trans. em Software Matemático, 39 (4), 2013, pp. 28: 1-28: 18. https://doi.org/10.1145/2491491.2491498
para KLU e BTF (também citam AMD e Colamd):
Ta Davis e Ekanathan Palamadai Natarajan. 2010. Algoritmo 907: KLU, um solucionador escasso direto para problemas de simulação de circuito. ACM Trans. Matemática. Softw. 37, 3, artigo 36 (setembro de 2010), 17 páginas. https://dl.acm.org/doi/abs/10.1145/1824801.1824814
para LDL:
Ta Davis. Algoritmo 849: um pacote conciso de fatorização escassa de Cholesky. ACM Trans. Matemática. Softw. 31, 4 (dezembro de 2005), 587-591. https://doi.org/10.1145/1114268.1114277
Para SSGET e a coleção Matrix Suitesparse:
Ta Davis e Yifan Hu. 2011. Coleção da Matriz Sparsa da Universidade da Flórida. ACM Trans. Matemática. Softw. 38, 1, artigo 1 (novembro de 2011), 25 páginas. https://doi.org/10.1145/2049662.2049663
Kolodziej et al., (2019). A interface do site da coleção Matrix Suitesparse. Journal of Open Source Software, 4 (35), 1244. https://doi.org/10.21105/joss.01244
para spqr_rank :
Leslie V. Foster e Ta Davis. 2013. Algoritmo 933: Cálculo confiável de classificação numérica, bases espaciais nulas, soluções pseudoinversas e soluções básicas usando o SuitesParseqr. ACM Trans. Matemática. Softw. 40, 1, artigo 7 (setembro de 2013), 23 páginas. https://doi.org/10.1145/2513109.2513116
Para Mongoose:
Ta Davis, William W. Hager, Scott P. Kolodziej e S. Nuri Yeralan. 2020. Algoritmo 1003: Mongoose, uma biblioteca de gráficos que atinge e particionamento. ACM Trans. Matemática. Softw. 46, 1, artigo 7 (março de 2020), 18 páginas. https://doi.org/10.1145/33337792
Para Spex:
Christopher Lourenco, Jinhao Chen, Erick Moreno-Centeno e Ta Davis. 2022. Algoritmo 1021: Spex deixou Lu, resolvendo exatamente sistemas lineares esparsos por meio de uma fatoração Lu de preservação inteira de aparência inteira esparsa. ACM Trans. Matemática. Softw. Junho de 2022. Https://doi.org/10.1145/3519024
NOTA: Se você usar o OpenBlas, use a versão 0.3.27 ou posterior.
Para selecionar o seu blas/lapack, consulte as instruções em suitesparseblas.cmake em SuiteSparse_config/cmake_modules . Se SuiteSparse_config encontrar um blas com números inteiros de 64 bits (como o Intel mkl ilp64 blas), ele configura SuiteSparse_config.h com o SUITESPARSE_BLAS_INT definido como int64_t . Caso contrário, se um blas de 32 bits for encontrado, esse tipo será definido como int32_t . Se posteriormente, UMFPack, Cholmod ou SPQR estiverem compilados e vinculados a um blas que possui um tamanho inteiro diferente, você deve substituir a definição com -DBLAS64 (para afirmar o uso de inteiros de 64 bits nos blas) ou -DBLAS32 (para reivindicar o uso de inteiros de 32 bits nos blas).
O tamanho do número inteiro de blas não tem nada a ver com sizeof(void *) .
Quando distribuído em uma forma binária (como um pacote Debian, Ubuntu, Spack ou Brew), o SuitesParse provavelmente deve ser compilado para esperar um blas de 32 bits, pois esse é o caso mais comum. O padrão é usar um blas de 32 bits, mas isso pode ser alterado definindo a variável cmake SUITESPARSE_USE_64BIT_BLAS para ON .
Por padrão, Suitesparse caça para uma biblioteca BLAS adequada. Para aplicar uma biblioteca de blas específica: use:
CMAKE_OPTIONS="-DBLA_VENDOR=OpenBLAS" make
cd Package ; cmake -DBLA_VENDOR=OpenBLAS .. make
Para usar o padrão (Hunt para um blas), não defina BLA_VENDOR ou defina -o como uma string vazia. Nesse caso, se SUITESPARSE_USE_64BIT_BLAS estiver ligado, a preferência será dada a um blas de 64 bits, mas uma biblioteca blas de 32 bits será usada se nenhuma biblioteca de 64 bits for encontrada. No entanto, se SUITESPARSE_USE_64BIT_BLAS e SUITESPARSE_USE_STRICT estiverem ativados, apenas um blas de 64 bits será considerado.
Ao selecionar uma biblioteca BLAS específica, a configuração SUITESPARSE_USE_64BIT_BLAS é seguida estritamente. Se definido como true, apenas uma biblioteca blas de 64 bits será usada. Se false (o padrão), apenas uma biblioteca blas de 32 bits será usada. Se nenhum blas for encontrado, a construção falhará.
Digite o seguinte neste diretório (requer privilégio do sistema para fazer o sudo make install ):
mkdir -p build && cd build
cmake ..
cmake --build .
sudo cmake --install .
Todas as bibliotecas serão criadas e instaladas na pasta padrão em todo o sistema (/usr/local/lib no Linux). Todos incluem arquivos necessários para os aplicativos que usam o SuitesParse são instalados em/usr/local/incluir/suitesparse (no Linux).
Para construir apenas um subconjunto de bibliotecas, defina SUITESPARSE_ENABLE_PROJECTS ao configurar com cmake. Por exemplo, para construir e instalar Cholmod e CXSPARSE (incluindo suas dependências), use os seguintes comandos:
mkdir -p build && cd build
cmake -DSUITESPARSE_ENABLE_PROJECTS="cholmod;cxsparse" ..
cmake --build .
sudo cmake --install .
Para Windows (MSVC), importe o arquivo CMakeLists.txt para o MS Visual Studio. Certifique -se de especificar o tipo de compilação como liberação; Por exemplo, para construir o SuitesParse no Windows na janela de comando, execute:
mkdir -p build && cd build
cmake ..
cmake --build . --config Release
cmake --install .
Certifique -se de instalar todas as bibliotecas necessárias: blas e labar para umfpack, cholmod e spqr e gmp e mpfr para spex. Certifique -se de usar as mais recentes bibliotecas; O SPEX requer MPFR 4.0.2 e GMP 6.1.2 (esses números de versão não correspondem ao sufixo XYZ de libgmp.so.xyz e libmpfr.so.xyz; consulte o Guia do usuário do SPEX para obter detalhes).
Para compilar as bibliotecas e instalá-las apenas em SuitesParse/Lib (não/usr/local/lib), faça isso no nível superior do SuitesParse:
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=.. ..
cmake --build .
cmake --install .
Se você adicionar/home/me/suitesparse/lib ao seu caminho de pesquisa da biblioteca ( LD_LIBRARY_PATH no Linux), poderá fazer o seguinte (por exemplo):
S = /home/me/SuiteSparse
cc myprogram.c -I$(S)/include/suitesparse -lumfpack -lamd -lcholmod -lsuitesparseconfig -lm
Para alterar os compiladores C e C ++ e compilar em uso paralelo:
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER==g++ ..
Por exemplo, que altera o compilador para GCC e G ++.
Isso funcionará no Linux/Unix e no Mac. Ele deve detectar automaticamente se você possui os compiladores da Intel ou não e se você tem ou não CUDA.
Consulte SuiteSparse_config/cmake_modules/SuiteSparsePolicy.cmake para selecionar seus blas.
Você também pode precisar adicionar SuitesParse/Lib ao seu caminho. Se sua cópia do Suitesparse estiver em/home/me/suitesparse, por exemplo, adicione -a ao seu arquivo ~/.bashrc :
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
Para o Mac, use isso:
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
A localização padrão de instalação dos arquivos está abaixo, onde o pacote é um dos pacotes no 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
Suponha que você coloque o SuitesParse na pasta /home/me/SuiteSparse .
Adicione a pasta SuiteSparse/lib ao seu caminho da biblioteca de tempo de execução. No Linux, adicione isso ao seu script ~/.bashrc , assumindo /home/me/SuiteSparse é a localização da sua cópia do SuitesParse:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib
export LD_LIBRARY_PATH
Para o Mac, use isso em seu script ~/.zshrc , assumindo que você coloque o SuitesParse in /Users/me/SuiteSparse :
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/me/SuiteSparse/lib
export DYLD_LIBRARY_PATH
Compile todo o SuitesParse com make local .
Em seguida, compila a biblioteca GraphBlas Matlab. No shell do sistema enquanto estiver na pasta SuitesParse, o Type make gbmatlab se você quiser instalá-lo em todo o sistema com make install ou make gblocal se desejar usar a biblioteca em seu próprio SuitesParse/Lib.
Em seguida, na janela de comando MATLAB, CD para o diretório do SuitesParse e digite SuiteSparse_install . Todos os pacotes serão compilados e várias demos serão executadas. Para executar um teste exaustivo (longo!), Faça SuiteSparse_test .
Salve seu caminho MATLAB para sessões futuras com os comandos Matlab PathTool ou SavePath. Se esses métodos falharem porque você não tiver permissão em todo o sistema, adicione os novos caminhos ao seu arquivo Startup.m, normalmente em documentos/matlab/startup.m. Você também pode usar o arquivo M SuiteSparse_paths para definir todos os seus caminhos no início de cada sessão do MATLAB.
Você pode definir opções específicas para cmake com o comando (por exemplo):
cmake -DCHOLMOD_PARTITION=OFF -DBUILD_STATIC_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug ..
Esse comando compilará todo o SuitesParse, exceto o módulo Cholmod/Partition (por causa de -DCHOLMOD_PARTITION=OFF ). O modo de depuração será usado (o tipo de compilação). As bibliotecas estáticas não serão construídas (já que -DBUILD_STATIC_LIBS=OFF está definido).
SUITESPARSE_ENABLE_PROJECTS :
Lista de projetos separados por Semicolon a serem construídos ou all . Padrão: all os casos, os seguintes projetos são construídos:
suitesparse_config;mongoose;amd;btf;camd;ccolamd;colamd;cholmod;cxsparse;ldl;klu;umfpack;paru;rbio;spqr;spex;graphblas;lagraph
Além disso, csparse pode ser incluído nessa lista para criar o CSPARSE.
CMAKE_BUILD_TYPE :
Padrão: Release , use Debug para depuração.
SUITESPARSE_USE_STRICT :
O Suitesparse possui muitas configurações definidas pelo usuário do formulário SUITESPARSE_USE_* ou (package)_USE_* para algum pacote específico. Em geral, essas configurações não são rigorosas. Por exemplo, se SUITESPARSE_USE_OPENMP estiver ON , o OpenMP será preferido, mas o SuitesParse pode ser usado sem o OpenMP, portanto nenhum erro será gerado se o OpenMP não for encontrado. No entanto, se SUITESPARSE_USE_STRICT estiver ON , todas as configurações *_USE_* forem tratadas estritamente e ocorre um erro, se houver, está ON , mas o pacote ou configuração correspondente não está disponível. As configurações *_USE_SYSTEM_* são sempre tratadas como rigorosas. Padrão: OFF .
SUITESPARSE_USE_CUDA :
Se ON , o CUDA está ativado para toda a SuitesParse. Padrão: ON ,
O CUDA no Windows com MSVC parece estar trabalhando com esta versão, mas deve ser considerado como um protótipo e pode não estar totalmente funcional. Tenho recursos limitados para testar o CUDA no Windows. Se você encontrar problemas, desative o CUDA e publique isso como um problema no Github.
CHOLMOD_USE_CUDA :
Padrão: ON . SUITESPARSE_USE_CUDA e CHOLMOD_USE_CUDA devem estar ativados para usar o CUDA em cholmod.
SPQR_USE_CUDA :
Padrão: ON . Ambos SUITESPARSE_USE_CUDA e SPQR_USE_CUDA devem estar ativados para usar o CUDA no spqr.
CMAKE_INSTALL_PREFIX :
Define o local de instalação (o padrão no Linux é /usr/local ). Por exemplo, este comando enquanto estiver em uma pasta build na pasta SuitesParse de nível superior definirá o diretório de instalação como /stuff , usado pelo subsequente sudo cmake --install . :
cmake -DCMAKE_INSTALL_PREFIX=/stuff ..
sudo cmake --install .
SUITESPARSE_PKGFILEDIR :
Diretório em que os arquivos CMake Config e PKG-Config serão instalados. Por padrão, os arquivos de configuração do CMake serão instalados no cmake da subpasta do diretório, onde as bibliotecas (estáticas) serão instaladas (por exemplo, lib ). Os arquivos .pc para PKG-Config serão instalados na subpasta pkgconfig do diretório onde as bibliotecas (estáticas) serão instaladas.
Esta opção permite instalá -los em um local diferente das bibliotecas (estáticas). Isso permite instalar várias configurações das bibliotecas do SuitesParse ao mesmo tempo (por exemplo, definindo também um CMAKE_RELEASE_POSTFIX diferente e CMAKE_INSTALL_LIBDIR para cada um deles). Para captar a respectiva configuração em projetos a jusante, set, por exemplo, CMAKE_PREFIX_PATH (para cmake) ou PKG_CONFIG_PATH (para sistemas de construção usando PKG-Config) para o caminho que contém os respectivos arquivos de configuração cmake ou arquivos pkg-config.
SUITESPARSE_INCLUDEDIR_POSTFIX :
Postfix para o alvo de instalação do cabeçalho da Suitesparse. Padrão: SuitesParse, então o Diretório de Incluir Padrão é: CMAKE_INSTALL_PREFIX/include/suitesparse
BUILD_SHARED_LIBS :
Se ON , bibliotecas compartilhadas são construídas. Padrão: ON .
BUILD_STATIC_LIBS :
Se ON , as bibliotecas estáticas são construídas. Padrão: ON , exceto o GraphBlas, que leva muito tempo para compilar, de modo que o padrão para GraphBlas está OFF , a menos que BUILD_SHARED_LIBS esteja OFF .
SUITESPARSE_CUDA_ARCHITECTURES :
Uma corda, como "all" ou "35;50;75;80" , que lista as arquiteturas CUDA a serem usadas ao compilar os núcleos CUDA com nvcc . A opção "all" requer cmake 3.23 ou posterior. Padrão: "52;75;80" .
BLA_VENDOR :
Uma corda. Deixe Unset ou use "ANY" para selecionar qualquer biblioteca blas (o padrão). Ou defina o nome de um BLA_VENDOR definido por findblas.cmake. Veja: https://cmake.org/cmake/help/latest/module/findblas.html#blas-lapack-vendors
SUITESPARSE_USE_64BIT_BLAS :
Se ON , procure um blas de 64 bits. Se OFF : apenas 32 bits. Padrão: OFF .
SUITESPARSE_USE_PYTHON :
Se ON , construa interfaces Python para qualquer pacote no SuitesParse que possua um (atualmente apenas SPEX). Se OFF : não crie nenhuma interface Python. Padrão: ON .
SUITESPARSE_USE_OPENMP :
Se ON , o OpenMP é usado por padrão se estiver disponível. Padrão: ON .
GraphBlas, Lagraph e Paru serão muito mais lentos se o OpenMP não for usado. O cholmod será um pouco mais lento sem o OpenMP (desde que ainda tenha um blas/lapack paralelo). Três pacotes (UMFPACK, Cholmod e SPQR) dependem muito das bibliotecas paralelas de blas/lapack e essas bibliotecas podem usar o OpenMP internamente. Se você deseja desativar o OpenMP em um aplicativo inteiro, selecione um blas/lapack de thread único ou um blas/lapack paralelo que não usa o OpenMP (como a estrutura Apple Acelereate). O uso de uma biblioteca blas/lapack de thread única causará UMFPack, Cholmod e SPQR a ser muito mais lento.
AVISO: O GraphBlas pode não ser seguro se for criado sem o OpenMP ou PTHREADS (consulte o Guia do usuário do GraphBlas para obter detalhes).
SUITESPARSE_CONFIG_USE_OPENMP :
Se ON , SuiteSparse_config usa o OpenMP, se estiver disponível. Padrão: SUITESPARSE_USE_OPENMP . Não é essencial e usado apenas para permitir que SuiteSparse_time ligue omp_get_wtime .
CHOLMOD_USE_OPENMP :
Se ON , o OpenMP será usado no Cholmod, se estiver disponível. Padrão: SUITESPARSE_USE_OPENMP .
GRAPHBLAS_USE_OPENMP :
Se ON , o OpenMP será usado no GraphBlas se estiver disponível. Padrão: SUITESPARSE_USE_OPENMP .
LAGRAPH_USE_OPENMP :
Se ON , o OpenMP é usado no Lagraph, se estiver disponível. Padrão: SUITESPARSE_USE_OPENMP .
PARU_USE_OPENMP :
Se ON , o OpenMP será usado em Paru se estiver disponível. Padrão: SUITESPARSE_USE_OPENMP .
SPEX_USE_OPENMP :
Se ON , o OpenMP será usado no SPEX se estiver disponível. Padrão: SUITESPARSE_USE_OPENMP .
SUITESPARSE_DEMOS :
Se ON , construa os programas de demonstração para cada pacote. Padrão: OFF .
SUITESPARSE_USE_SYSTEM_BTF :
Se ON , use as bibliotecas BTF instaladas no sistema de construção. Se OFF , crie automaticamente o BTF como dependência, se necessário. Padrão: OFF .
SUITESPARSE_USE_SYSTEM_CHOLMOD :
Se ON , use as bibliotecas Cholmod instaladas no sistema de construção. Se OFF , crie automaticamente o cholmod como dependência, se necessário. Padrão: OFF .
SUITESPARSE_USE_SYSTEM_AMD :
Se ON , use as bibliotecas AMD instaladas no sistema de construção. Se OFF , construa automaticamente a AMD como dependência, se necessário. Padrão: OFF .
SUITESPARSE_USE_SYSTEM_COLAMD :
Se ON , use as bibliotecas do Colamd instaladas no sistema de construção. Se OFF , construa automaticamente o Colamd como dependência, se necessário. Padrão: OFF .
SUITESPARSE_USE_SYSTEM_CAMD :
Se ON , use as bibliotecas CAMD instaladas no sistema de construção. Se OFF , crie automaticamente o CAMD como dependência, se necessário. Padrão: OFF .
SUITESPARSE_USE_SYSTEM_CCOLAMD :
Se ON , use as bibliotecas CCOLAMD instaladas no sistema de construção. Se OFF , construa automaticamente o CCOLAMD como dependência, se necessário. Padrão: OFF .
SUITESPARSE_USE_SYSTEM_GRAPHBLAS :
Se ON , use as bibliotecas GraphBlas instaladas no sistema de construção. Se OFF , crie automaticamente o GraphBlas como dependência, se necessário. Padrão: OFF .
SUITESPARSE_USE_SYSTEM_SUITESPARSE_CONFIG :
Se ON , use as bibliotecas SuiteSparse_config instaladas no sistema de construção. Se OFF , crie automaticamente SuiteSparse_config como dependência, se necessário. Padrão: OFF .
SUITESPARSE_USE_FORTRAN
Se ON , use o compilador fortran para determinar como C chama o Fortan e para criar várias rotinas opcionais para o Fortran. Se OFF , use SUITESPARSE_C_TO_FORTRAN para definir como C chama o Fortran. Padrão: ON .
SUITESPARSE_C_TO_FORTRAN
Uma string que define como C chama o Fortran (ou seja, funções exportadas pela biblioteca blas). Essa configuração é usada se nenhum compilador para o FORTRAN pode ser detectado ou SUITESPARSE_USE_FORTRAN estiver definido como OFF . Essa string deve ser lida como a lista de argumentos e o corpo de uma macro pré -processadora. O primeiro argumento para que a macro é qualquer nome de função fortran em letras minúsculas. O segundo argumento é o mesmo nome de função nas letras maiúsculas. O corpo define pelo qual as funções do nome da função são chamadas. Isso é necessário porque o Fortran é insensível a minúsculas e diferentes compiladores fortran usam diferentes convenções de gerenciamento de nomes. Se um compilador MSVC C/C ++ for usado, esse padrão é "(name,NAME) name" (ou seja, minúsculas sem o sublinhamento traseiro). Esse é o nome da Convenção de Motivo para o Compilador Intel Fortran no Windows. Se houver outros compiladores C/C ++, esse padrão é "(name,NAME) name##_" (ou seja, minúsculas com o sublinhado à direita). Esse é o nome da Convenção de Motivo para a maioria dos compiladores Fortran comumente usados (como ifx em plataformas que não sejam o Windows, gfortran , flang , ...). A última convenção de mangueira de nome também é usada por padrão pelo OpenBlas (independente na plataforma ou pelo compilador usado para criar o 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.