The official SuiteSparse library: a suite of sparse matrix algorithms authored or co-authored by Tim Davis, Texas A&M University

Overview

SuiteSparse: A Suite of Sparse matrix packages at http://suitesparse.com

May 17, 2021. SuiteSparse VERSION 5.10.1

Now includes GraphBLAS, SLIP_LU, and a new interface to the SuiteSparse
Matrix Collection (ssget), via MATLAB and a Java GUI, to
http://sparse.tamu.edu.

Primary author of SuiteSparse (codes and algorithms, excl. METIS): Tim Davis

Code co-authors, in alphabetical order (not including METIS):

Patrick Amestoy, David Bateman, Jinhao Chen.  Yanqing Chen, Iain Duff,
Les Foster, William Hager, Scott Kolodziej, Chris Lourenco, Stefan
Larimore, Erick Moreno-Centeno, Ekanathan Palamadai, Sivasankaran
Rajamanickam, Sanjay Ranka, Wissam Sid-Lakhdar, Nuri Yeralan.

Additional algorithm designers: Esmond Ng and John Gilbert.

Refer to each package for license, copyright, and author information. All codes are authored or co-authored by Timothy A. Davis.


About the BLAS and LAPACK libraries

NOTE: Use of the Intel MKL BLAS is strongly recommended. A recent OpenBLAS can result in severe performance degradation. The reason for this is being investigated, and this may be resolved in the near future. Ignore the comments about OpenBLAS in the various user guides; those are out of date.


SuiteSparse/README

Packages in SuiteSparse, and files in this directory:

GraphBLAS   graph algorithms in the language of linear algebra.
            https://graphblas.org
            A stand-alone package that uses cmake to compile; see
            GraphBLAS/README.txt.  The rest of SuiteSparse still uses
            'make'.  A cmake setup for all of SuiteSparse is in progress.
            author: Tim Davis

SLIP_LU     solves sparse linear systems in exact arithmetic.
            Requires the GNU GMP and MPRF libraries.

AMD         approximate minimum degree ordering.  This is the built-in AMD
            function in MATLAB.
            authors: Tim Davis, Patrick Amestoy, Iain Duff

bin         where the metis-5.1.0 programs are placed when METIS is compiled

BTF         permutation to block triangular form
            authors: Tim Davis, Ekanathan Palamadai

CAMD        constrained approximate minimum degree ordering
            authors: Tim Davis, Patrick Amestoy, Iain Duff, Yanqing Chen

CCOLAMD     constrained column approximate minimum degree ordering
            authors: Tim Davis, Sivasankaran Rajamanickam, Stefan Larimore.
                Algorithm design collaborators: Esmond Ng, John Gilbert
                (for COLAMD)

ChangeLog   a summary of changes to SuiteSparse.  See */Doc/ChangeLog
            for details for each package.

CHOLMOD     sparse Cholesky factorization.  Requires AMD, COLAMD, CCOLAMD,
            the BLAS, and LAPACK.  Optionally uses METIS.  This is chol and
            x=A\b in MATLAB.
            author for all modules: Tim Davis 
            CHOLMOD/Modify module authors: Tim Davis and William W. Hager

COLAMD      column approximate minimum degree ordering.  This is the
            built-in COLAMD function in MATLAB.
            authors (of the code): Tim Davis and Stefan Larimore
            Algorithm design collaborators: Esmond Ng, John Gilbert

Contents.m  a list of contents for 'help SuiteSparse' in MATLAB.

CSparse     a concise sparse matrix package, developed for my
            book, "Direct Methods for Sparse Linear Systems",
            published by SIAM.  Intended primarily for teaching.
            It does have a 'make install' but I recommend using
            CXSparse instead.  In particular, both CSparse and CXSparse
            have the same include filename: cs.h.

            This package is used for the built-in DMPERM in MATLAB.
            author: Tim Davis

CSparse_to_CXSparse
            a Perl script to create CXSparse from CSparse and
            CXSparse_newfiles
            author: David Bateman, Motorola

CXSparse    CSparse Extended.  Includes support for complex matrices
            and both int or long integers.  Use this instead of CSparse
            for production use; it creates a libcsparse.so (or *dylib on
            the Mac) with the same name as CSparse.  It is a superset
            of CSparse.  Any code that links against CSparse should
            also be able to link against CXSparse instead.
            author: Tim Davis, David Bateman

CXSparse_newfiles
            Files unique to CXSparse
            author: Tim Davis, David Bateman

share       'make' places documentation for each package here

include     'make' places user-visible include fomes for each package here

KLU         sparse LU factorization, primarily for circuit simulation.
            Requires AMD, COLAMD, and BTF.  Optionally uses CHOLMOD,
            CAMD, CCOLAMD, and METIS.
            authors: Tim Davis, Ekanathan Palamadai

LDL         a very concise LDL' factorization package
            author: Tim Davis

lib         'make' places shared libraries for each package here

Makefile    to compile all of SuiteSparse
            make            compiles SuiteSparse libraries and runs demos
            make install    compiles SuiteSparse and installs in the
                            current directory (./lib, ./include).
                            Use "sudo make INSTALL=/usr/local" to install
                            in /usr/local/lib and /usr/local/include.
            make uninstall  undoes 'make install'
            make library    compiles SuiteSparse libraries (not demos)
            make distclean  removes all files not in distribution, including
                            ./bin, ./share, ./lib, and ./include.
            make purge      same as 'make distclean'
            make clean      removes all files not in distribution, but
                            keeps compiled libraries and demoes, ./lib,
                            ./share, and ./include.
            make config     displays parameter settings; does not compile

            Each individual package also has each of the above 'make'
            targets.  Doing 'make config' in each package */Lib directory
            displays the exact shared and static library names.

            Things you don't need to do:
            make cx         creates CXSparse from CSparse
            make docs       creates user guides from LaTeX files
            make cov        runs statement coverage tests (Linux only)
            make metis      compiles METIS (also done by 'make')

MATLAB_Tools    various m-files for use in MATLAB
            author: Tim Davis (all parts)
            for spqr_rank: author Les Foster and Tim Davis

            Contents.m      list of contents
            dimacs10        loads matrices for DIMACS10 collection
            Factorize       object-oriented x=A\b for MATLAB
            find_components finds connected components in an image
            GEE             simple Gaussian elimination
            getversion.m    determine MATLAB version
            gipper.m        create MATLAB archive
            hprintf.m       print hyperlinks in command window
            LINFACTOR       predecessor to Factorize package
            MESHND          nested dissection ordering of regular meshes
            pagerankdemo.m  illustrates how PageRank works
            SFMULT          C=S*F where S is sparse and F is full
            shellgui        display a seashell
            sparseinv       sparse inverse subset
            spok            check if a sparse matrix is valid
            spqr_rank       SPQR_RANK package.  MATLAB toolbox for rank
                            deficient sparse matrices: null spaces,
                            reliable factorizations, etc.  With Leslie
                            Foster, San Jose State Univ.
            SSMULT          C=A*B where A and B are both sparse
            SuiteSparseCollection    for the SuiteSparse Matrix Collection
            waitmex         waitbar for use inside a mexFunction

            The SSMULT and SFMULT functions are the basis for the
            built-in C=A*B functions in MATLAB.

Mongoose    graph partitioning.
            authors: Nuri Yeralan, Scott Kolodziej, William Hager, Tim Davis

metis-5.1.0 a modified version of METIS.  See the README.txt files for
            details.
            author: George Karypis; not an integral component of
            SuiteSparse, however.  This is just a copy included with
            SuiteSparse via the open-source license provided by
            George Karypis

RBio        read/write sparse matrices in Rutherford/Boeing format
            author: Tim Davis

README.txt  this file

SPQR        sparse QR factorization.  This the built-in qr and x=A\b in
            MATLAB.
            author of the CPU code: Tim Davis
            author of GPU modules: Tim Davis, Nuri Yeralan,
                Wissam Sid-Lakhdar, Sanjay Ranka

            SPQR/GPUQREngine: GPU support package for SPQR
            (not built into MATLAB, however)
            authors: Tim Davis, Nuri Yeralan, Sanjay Ranka,
                Wissam Sid-Lakhdar

SuiteSparse_config    configuration file for all the above packages.  The
            SuiteSparse_config/SuiteSparse_config.mk is included in the
            Makefile's of all packages.  CSparse and MATLAB_Tools do not
            use SuiteSparse_config.
            author: Tim Davis

SuiteSparse_GPURuntime      GPU support package for SPQR and CHOLMOD
            (not builtin to MATLAB, however).

SuiteSparse_install.m       install SuiteSparse for MATLAB

SuiteSparse_test.m          exhaustive test for SuiteSparse in MATLAB

ssget       MATLAB interface to the SuiteSparse Matrix Collection
            (formerly called the UF Sparse Matrix Collection).
            Includes a UFget function for backward compatibility.
            author: Tim Davis

UMFPACK     sparse LU factorization.  Requires AMD and the BLAS.
            This is the built-in lu and x=A\b in MATLAB.
            author: Tim Davis
            algorithm design collaboration: Iain Duff

Some codes optionally use METIS 5.1.0. This package is located in SuiteSparse in the metis-5.1.0 directory. Its use is optional, so you can remove it before compiling SuiteSparse, if you desire. The use of METIS will improve the ordering quality. METIS has been slightly modified for use in SuiteSparse; see the metis-5.1.0/README.txt file for details. SuiteSparse can use the unmodified METIS 5.1.0, however. To use your own copy of METIS, or a pre-installed copy of METIS use 'make MY_METIS_LIB=-lmymetis' or 'make MY_METIS_LIB=/my/stuff/metis-5.1.0/whereeveritis/libmetis.so MY_METIS_INC=/my/stuff/metis-5.1.0/include'. If you want to use METIS in MATLAB, however, you MUST use the version provided here, in SuiteSparse/metis-5.1.0. The MATLAB interface to METIS required some small changes in METIS itself to get it to work. The original METIS 5.1.0 will segfault MATLAB.

Refer to each package for license, copyright, and author information. All codes are authored or co-authored by Timothy A. Davis. email: [email protected]

Licenses for each package are located in the following files, all in PACKAGENAME/Doc/License.txt:

AMD/Doc/License.txt
BTF/Doc/License.txt
CAMD/Doc/License.txt
CCOLAMD/Doc/License.txt
CHOLMOD/Doc/License.txt
COLAMD/Doc/License.txt
CSparse/Doc/License.txt
CXSparse/Doc/License.txt
GPUQREngine/Doc/License.txt
KLU/Doc/License.txt
LDL/Doc/License.txt
MATLAB_Tools/Doc/License.txt
Mongoose/Doc/License.txt
RBio/Doc/License.txt
SPQR/Doc/License.txt
SuiteSparse_GPURuntime/Doc/License.txt
ssget/Doc/License.txt
UMFPACK/Doc/License.txt
GraphBLAS/Doc/License.txt

These files are also present, but they are simply copies of the above license files for CXSparse and ssget:

CXSparse_newfiles/Doc/License.txt
CSparse/MATLAB/ssget/Doc/License.txt
CXSparse/MATLAB/ssget/Doc/License.txt

METIS 5.0.1 is distributed with SuiteSparse, and is Copyright (c) by George Karypis. Please refer to that package for its License.


QUICK START FOR MATLAB USERS (Linux, Mac, or Windows):

Uncompress the SuiteSparse.zip or SuiteSparse.tar.gz archive file (they contain the same thing). Next, compile the GraphBLAS library (see instructions in GraphBLAS/Doc). Then in the MATLAB Command Window, cd to the SuiteSparse directory and type SuiteSparse_install. All packages will be compiled, and several demos will be run. To run a (long!) exhaustive test, do SuiteSparse_test.


QUICK START FOR THE C/C++ LIBRARIES:

For just GraphBLAS, do this:

cd GraphBLAS/build ; cmake .. ; make ; cd ../Demo ; ./demo 
cd ../build ; sudo make install

For all other packages, type 'make' in this directory. All libraries will be created and copied into SuiteSparse/lib. All include files need by the applications that use SuiteSparse are copied into SuiteSparse/include. All user documenation is copied into SuiteSparse/share/doc.

Be sure to first install all required libraries: BLAS and LAPACK for UMFPACK, CHOLMOD, and SPQR, and GMP and MPFR for SLIP_LU. Be sure to use the latest libraries; SLIP_LU requires MPFR 4.0 for example.

When compiling the libraries, do NOT use the INSTALL=... options for installing. Just do:

make

or to compile just the libraries without running the demos, do:

make library

Any program that uses SuiteSparse can thus use a simpler rule as compared to earlier versions of SuiteSparse. If you add /home/myself/SuiteSparse/lib to your library search patch, you can do the following (for example):

S = /home/myself/SuiteSparse
cc myprogram.c -I$(S)/include -lumfpack -lamd -lcholmod -lsuitesparseconfig -lm

To change the C and C++ compilers, and to compile in parallel use:

AUTOCC=no CC=gcc CX=g++ JOBS=32 make

for example, which changes the compiler to gcc and g++, and runs make with 'make -j32', in parallel with 32 jobs.

Now you can install the libraries, if you wish, in a location other than SuiteSparse/lib, SuiteSparse/include, and SuiteSparse/share/doc, using 'make install INSTALL=...'

Do 'make install' if you want to install the libraries and include files in SuiteSparse/lib and SuiteSparse/include, and the documentation in SuiteSparse/doc/suitesparse-VERSION. This will work on Linux/Unix and the Mac. It should automatically detect if you have the Intel compilers or not, and whether or not you have CUDA. If this fails, see the SuiteSparse_config/SuiteSparse_config.mk file. There are many options that you can either list on the 'make' command line, or you can just edit that file. For example, to compile with your own BLAS:

make BLAS=-lmyblaslibraryhere

NOTE: Use of the Intel MKL BLAS is strongly recommended. The OpenBLAS can result in severe performance degradation, in CHOLMOD in particular.

To list all configuration options (but not compile anything), do:

make config

Any parameter you see in the output of 'make config' with an equal sign can be modified at the 'make' command line.

If you do "make install" by itself, then the packages are all installed in SuiteSparse/lib (libraries), SuiteSparse/include (include .h files), and SuiteSparse/doc/suitesparse-VERSION (documentation). To install in /usr/local, the default location for Linux, do:

make library
sudo make install INSTALL=/usr/local

If you want to install elsewhere, say in /my/path, first ensure that /my/path is in your LD_LIBRARY_PATH. How to do that depends on your system, but in the bash shell, add this to your ~/.bashrc file:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/path
export LD_LIBRARY_PATH

You may also need to add SuiteSparse/lib to your path. If your copy of SuiteSparse is in /home/me/SuiteSparse, for example, then add this to your ~/.bashrc file:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/SuiteSparse/lib:/my/path
export LD_LIBRARY_PATH

Then do the following (use "sudo make ..." if needed):

make library
make install INSTALL=/my/path

which puts the files in /my/path/lib, /my/path/include, and /my/path/doc. If you want to selectively put the libraries, include files, and doc files in different locations, do:

make install INSTALL_LIB=/my/libs INSTALL_INCLUDE=/myotherstuff/include INSTALL_DOC=/mydocs

for example. Any term not defined will be set to its default, so if you don't want to install the documentation, but wish to install the libraries and includes in /usr/local/lib and /usr/local/include, do:

make install INSTALL_DOC=/tmp/doc

which copies the documentation to /tmp/doc where you can then remove it later.

Both the static (.a) and shared (.so) libraries are compiled. The lib.a libraries are left in the package Lib folder (AMD/Lib/libamd.a for example). The main exception to this rule is the SuiteSparse_config library, which is in SuiteSparse/libsuiteSparseconfig.a. SuiteSparse_config is required by all packages. The (extremely) optional xerbla library is also an exception, but it is highly unlikely that you need that library.

The 'make uninstall' takes the same command-line arguments.


Step-by-step details:

(1) Use the right BLAS and LAPACK libraries. Determine where your BLAS and LAPACK libraries are. If the default 'make' does not find them, use 'make BLAS=-lmyblaslibraryhere LAPACK=-lmylapackgoeshere'

(2) Install Intel's Threading Building Blocks (TBB). This is optionally used by SuiteSparseQR. Refer to the User Guide in SuiteSparse/SPQR/Doc/spqr_user_guide.pdf for details.

(3) Determine what other command line options you need for 'make'. All options can be set at the 'make' command line without the need to edit this file. Browse that file to see what options you can control. If you choose different options and wish to recompile, be sure to do 'make distclean' in this directory first, to remove all files not in the original distribution.

(4) Type "make" in this directory. All packages will be be compiled. METIS 5.1.0 will be compiled if you have it (note that METIS require CMake to build it). Several demos will be run. To compile just the libraries, without running any demos, use "make library". The libraries will appear in /Lib/.so.* (*.dylib for the Mac). Include files, as needed by user programs that use CHOLMOD, AMD, CAMD, COLAMD, CCOLAMD, BTF, KLU, UMFPACK, LDL, etc. are in /Include/.h. The include files required by user programs are then copied into SuiteSparse/include, and the compiled libraries are copied into SuiteSparse/lib. Documentation is copied into SuiteSparse/doc. The GraphBLAS libraries are created by cmake and placed in GraphBLAS/build. NOTE: on Linux, you may see some errors when you compile METIS ('make: *** No rule to make target 'w'.). You can safely ignore those errors.

(6) To install, type "make install". This will place copies of all libraries in SuiteSparse/lib, and all include files in SuiteSparse/include, and all documentation in SuiteSparse/doc/suitesparse-VERSION. You can change the install location by "make install INSTALL=/my/path" which puts the libraries in /my/path/lib, the include files in /my/path/include, and documentation in /my/path/doc. These directories are created if they do not already exist.

(7) To uninstall, type "make uninstall", which reverses "make install" by removing the SuiteSparse libraries, include files, and documentation from the place they were installed. If you pass INSTALL_***= options to 'make install', you must pass the same to 'make uninstall'.

Comments
  • Issues regarding the new cmake-based build system for SuiteSparse 6.0.0

    Issues regarding the new cmake-based build system for SuiteSparse 6.0.0

    For starters I tried to build SuiteSparse_config individually with cmake. No matter what I do, a local installation is always enabled. Even if

    • I set CMAKE_INSTALL_PREFIX
    • remove 'lib' and 'include' from the source tree

    When I run cmake for SuiteSparse_config I always get the lines -- Installation in ../lib and ../include, -- with 'make local ; make install'. No 'sudo' required.

    Adding a line

    message ( STATUS "value of INSIDE_SUITESPARSE: ${INSIDE_SUITESPARSE}" )
    

    after the section setting INSIDE_SUITESPARSE in SuiteSparsePolicy.cmake reveals the problem. When you run cmake it displays

    -- value of INSIDE_SUITESPARSE: (;(;EXISTS;/home/portage/sci-libs/suitesparseconfig-6.0.0_beta1/work/SuiteSparse-6.0.0-beta1/SuiteSparse_config/../lib;);AND;(;EXISTS;/home/portage/sci-libs/suitesparseconfig-6.0.0_beta1/work/SuiteSparse-6.0.0-beta1/SuiteSparse_config/../include;);)
    

    which means that set ( INSIDE_SUITESPARSE ...) is certainly not behaving as the author intends it. It sets the variable to a string rather than a boolean expression. If I understand cmake's manual EXISTS statements should not be used outside of a if statement. A working as intended statement would probably be of the form

    if ( ( ( EXISTS ${CMAKE_SOURCE_DIR}/../../lib     ) AND
                (   EXISTS ${CMAKE_SOURCE_DIR}/../../include ) ) )
      set ( INSIDE_SUITESPARSE TRUE )
    endif
    
    opened by kiwifb 44
  • Allow building without Fortran compiler

    Allow building without Fortran compiler

    Some build systems don't have a (working) Fortran compiler (e.g., MSYS2 targeting Windows on ARM). Or some users might prefer not to install a Fortran compiler. If I'm reading the cmake build rules correctly, a Fortran compiler is only needed to build demo code. IIUC, it isn't actually needed to build the libraries.

    Would it be possible to add a build option that allows building without a Fortran compiler?

    See also this downstream PR for MSYS2: https://github.com/msys2/MINGW-packages/pull/14156

    enhancement 
    opened by mmuetzel 34
  • Beta tester required?

    Beta tester required?

    I very much appreciate the performance of cholmod!! Coupled with the availability!!! Thanks a lot for this and the active development!

    We optionally use cholmod for our free academic software.

    I was happy to read that version 6.0 beta is cmake based and want to volunteer to beta-test. However there is no root CMakeLists.txt but a Makefile.

    Is the CMakeLists.txt just missing or is not intended to have a pure cmake variant?

    opened by Fabian188 14
  • How to compile against MKL

    How to compile against MKL

    Hi, This s really a question rather than a bug, but I have a hard time understanding the documentation of how to compile suitesparse with MKL

    The ReadMe it says you can do

    make BLAS=-lmyblaslibraryhere
    
    

    But what is -lmyblaslibraryhere ??

    My MKL libs are in /opt/intel/oneapi/mkl/latest/lib/intel64, which is not seen by the dynamic linker, and what is myblas? libmkt-rt? or liblmkl_rt or -L/opt/intel/oneapi/mkl/latest/lib/intel64 -lmkl? ??

    so exactly what I should put there?

    The ReadMe said If I do the above I don't have to edit SuiteSparse_config.mk. But I figure it would be easier for me if I just edit it, but the ReadMe doesn't provide any info of how to do that if I want to. There is a stackoverflow thread but the config file looks different, there, must be from an old version of SuiteSparse.

    So, taking a cue from line 190 and 191 I edited he block between line 98 and 112 so it becomes

    ifeq ($(TCOV),yes)
            # Each package has a */Tcov directory for extensive testing, including
            # statement coverage.  The Tcov tests require Linux and gcc, and use
            # the vanilla BLAS.  For those tests, the packages use 'make TCOV=yes',
            # which overrides the following settings:
            MKLROOT = /opt/intel/oneapi/mkl/latest
            AUTOCC = no
            CC = gcc
            CXX = g++
            BLAS = -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm
            LAPACK = -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm
            CFLAGS += --coverage
            OPTIMIZATION = -g
            LDFLAGS += --coverage
        endif
    

    But when I do make config I still see

    BLAS library:             BLAS=            -lblas
    LAPACK library:           LAPACK=          -llapack
    

    So what is the right way to do it?

    Please help. Thanks!

    Edited: So if I do

    export MKLROOT=/opt/intel/oneapi/mkl/latest/
    

    make config produces (without editing SuiteSparse_config.mk)

    BLAS library:             BLAS=            -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm
    LAPACK library:           LAPACK=          
    

    But make failed because ld cannot find these libraries

    usr/bin/ld: cannot find -lmkl_intel_lp64
    /usr/bin/ld: cannot find -lmkl_core
    /usr/bin/ld: cannot find -lmkl_intel_thread
    /usr/bin/ld: cannot find -liomp5
    
    opened by beew 14
  • How to put maximum (in row) value on diagonal?

    How to put maximum (in row) value on diagonal?

    Is it possible to get R matrix with maximum (in row) value on diagonal? Small example: A= {{1 0 0},{1 1e-5 5}} spqr(A)->R R= {{1e-5 1 5}, {0,1,0}} So we get 1e-5 on diagonal, but there is 5 in this row. If we drop this row by tolerance we lose some valuable row. My actual matrixes A, R, in attachment. Problem is in rows 1318, 1328, 1337, 1347.. Matrices.zip

    opened by KukushkinAleksei 13
  • Fix dllimport/dllexport for libraries with MSVC

    Fix dllimport/dllexport for libraries with MSVC

    The dllimport/dllexport mechanism that is currently used doesn't look correct. The same macros are used for a number of different libraries. But it needs to be dealt with on a per library basis. E.g., for the functions exported by the suitesparse_config library: When a library that links to suitesparse_config is compiled, it must dllexport its own functions, but dllimport the functions from suitesparse_config. Additionally, for static libraries, the dllimport/dllexport mechanism mustn't be used. (Neither when compiling nor when consuming the static library.)

    The proposed changes use dedicated "API" flags for each library and deal with static libraries.

    I also took the opportunity to remove the (unused) SUITESPARSE_COMPILER_MINGW because MinGW isn't a compiler. Additionally, I stopped linking to libm on Windows in the CMakeLists.txt files that are touched by this PR.

    I tested with gcc/gfortran and also made sure that it compiles with clang/flang. I don't have MSVC. But I hope it should be working with that family of compilers now, too. (At least, for the libraries that were already using those "API" flags.)

    MinGW doesn't need dllimport/dllexport. So, I reverted to using that mechanism only for MSVC in a final commit.

    opened by mmuetzel 12
  • New paper that yields 12-24x faster runtime for BFS

    New paper that yields 12-24x faster runtime for BFS

    Is your feature request related to a problem? Please describe. Not a problem; just came across a recent paper (April 2021) that claims to dramatically increase the performance of BFS over current implementations of GraphBLAS. We're going to be using RedisGraph's BFS functionality, and RedisGraph uses SuiteSparse.

    Describe the solution you'd like Potentially implement the paper in question and thereby increase BFS performance.

    Describe alternatives you've considered N/A

    Additional context While I'm a software engineer, I'm not at all a specialist in BLAS or C programming, so if this paper is not implementable as written, or if it's too much of a refactoring effort, I understand. Just wanted to bring this to your attention if it's helpful!

    Also, let me know if this is a feature discussion that belongs upstream (e.g. the GraphBLAS C API). Again, not being a specialist in this, I'm not sure whether the paper suggests an overhaul in current GraphBLAS implementations or in the GraphBLAS API itself.

    opened by alexandergunnarson 12
  • Suggest clarification of release note for 6.0

    Suggest clarification of release note for 6.0

    It is stated

    * SuiteSparse/metis-5.1.0: renamed SuiteSparse_metis, to avoid confusion
        with the unmodified metis-5.1.0.  The compiled library is named
        libsuitesparse_metis.so.  The unmodified libmetis.so cannot be used
        with SuiteSparse.
    

    but I think I also read somewhere else, that the modified libmetis.so is only required for Matlab. If so, I suggest to clarify. We statically link cholmod to a C++ application which already has metis linked to, this statement indicates complications or not :)

    From the source I suggest, It would work without :)

    opened by Fabian188 11
  • Export all symbols also with MSVC

    Export all symbols also with MSVC

    This is an alternative approach to #228.

    Instead of using dllexport/dllimport attributes, this lets cmake create .def files by setting WINDOWS_EXPORT_ALL_SYMBOLS ON for shared libraries. This is working with GCC on Windows for me. But cmake doesn't seem to create the .def files for that compiler (and it doesn't need to). I hope it'll do the right thing with MSVC.

    I'm not sure if I found all variable declarations that still need to be extern. I only made changes concerning that in SuiteSparse_config and UMFPACK.

    opened by mmuetzel 9
  • build system: Support staged installs via `DESTDIR`

    build system: Support staged installs via `DESTDIR`

    Currenty, the variable INSTALL seems to be used as prefix, which for CMake is CMAKE_INSTALL_PREFIX.

    https://github.com/DrTimothyAldenDavis/SuiteSparse/blob/257b2ba2a5b40b893bff203626331b4b9c96d681/SuiteSparse_config/SuiteSparse_config.mk#L60-L86

    Packagers often require support for staged installs. From CMake documentation:

    On UNIX one can use the DESTDIR mechanism in order to relocate the whole installation. See DESTDIR for more information.

    It’d be great, if the install target could be extended to support the variable DESTDIR.

    enhancement 
    opened by paulmenzel 9
  • GraphBLAS/Source/Generated/GB_AxB__any_first_bool.c:278:5: error: this 'if' clause does not guard... [-Werror=misleading-indentation]

    GraphBLAS/Source/Generated/GB_AxB__any_first_bool.c:278:5: error: this 'if' clause does not guard... [-Werror=misleading-indentation]

    Using latest GCC 11, I can see the following error:

    /home/abuild/rpmbuild/BUILD/SuiteSparse-5.9.0/GraphBLAS/Source/Template/GB_bitmap_AxB_saxpy_A_bitmap_B_sparse_template.c: In function 'GB_Asaxpy3B__any_first_bool':
    /home/abuild/rpmbuild/BUILD/SuiteSparse-5.9.0/GraphBLAS/Source/Generated/GB_AxB__any_first_bool.c:278:5: error: this 'if' clause does not guard... [-Werror=misleading-indentation]
      278 |     if (exists && !cb) cx = (ax) ; cb |= exists
          |     ^~
    /home/abuild/rpmbuild/BUILD/SuiteSparse-5.9.0/GraphBLAS/Source/Template/GB_bitmap_AxB_saxpy_A_bitmap_B_sparse_template.c:327:33: note: in expansion of macro 'GB_BITMAP_MULTADD'
      327 |                                 GB_BITMAP_MULTADD (
          |                                 ^~~~~~~~~~~~~~~~~
    /home/abuild/rpmbuild/BUILD/SuiteSparse-5.9.0/GraphBLAS/Source/Template/GB_bitmap_AxB_saxpy_A_bitmap_B_sparse_template.c:328:37: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
      328 |                                     Hf [pH+ii], Hx [pH+ii],
          |                                     ^~
    /home/abuild/rpmbuild/BUILD/SuiteSparse-5.9.0/GraphBLAS/Source/Generated/GB_AxB__any_first_bool.c:278:36: note: in definition of macro 'GB_BITMAP_MULTADD'
      278 |     if (exists && !cb) cx = (ax) ; cb |= exists
          |                                    ^~
    

    I see the project intentionally enables it with:

    GraphBLAS/Demo/Include/graphblas_demos.h:#pragma GCC diagnostic error "-Wmisleading-indentation"
    GraphBLAS/Source/GB_warnings.h:#pragma GCC diagnostic error "-Wmisleading-indentation"
    
    opened by marxin 9
  • Compile Error in CCOLAMD with MSVC

    Compile Error in CCOLAMD with MSVC

    Compiling 6.0.3 in Win10 with MSVC fails for CCOLAMD with the error

    16%] Building C object CMakeFiles/ccolamd.dir/Source/ccolamd.c.obj ...\CCOLAMD\Source\ccolamd.c(1080): error C2491: "ccolamd_recommended": definition of dllimport function not allowed ...\CCOLAMD\Source\ccolamd.c(1109): error C2491: "ccolamd_set_defaults": definition of dllimport function not allowed ...\CCOLAMD\Source\ccolamd.c(1150): error C2491: "csymamd": definition of dllimport function not allowed ...\CCOLAMD\Source\ccolamd.c(1478): error C2491: "ccolamd": definition of dllimport function not allowed ...\CCOLAMD\Source\ccolamd.c(1519): error C2491: "ccolamd2": definition of dllimport function not allowed ...\CCOLAMD\Source\ccolamd.c(1965): error C2491: "ccolamd_report": definition of dllimport function not allowed ...\CCOLAMD\Source\ccolamd.c(1978): error C2491: "csymamd_report": definition of dllimport function not allowed ...

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce In a clean 6.0.3 I do the following steps after setvars to initialize Intel oneAPI cd Suitesparse_config\build cmake .. -G "NMake Makefiles" nmake

    repeat for AMD and CAMD and all works for CCOLAMD I get the above error

    This is the configure vor CCOLAMD

    -- Building CCOLAMD version: v3.0.2 (Dec 9, 2022)
    -- Source:        C:/Users/fabia/code/master/release_msvc/cfsdeps/suitesparse/src/suitesparse/CCOLAMD 
    -- Build:         C:/Users/fabia/code/master/release_msvc/cfsdeps/suitesparse/src/suitesparse/CCOLAMD/build
    -- The C compiler identification is MSVC 19.34.31937.0
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe - skipped
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Install rpath:  
    -- Build   rpath: C:/Users/fabia/code/master/release_msvc/cfsdeps/suitesparse/src/suitesparse/CCOLAMD/build
    -- Build type:    Debug
    -- Looking for a Fortran compiler
    -- Looking for a Fortran compiler - C:/Program Files (x86)/Intel/oneAPI/compiler/latest/windows/bin/ifx.exe
    -- The Fortran compiler identification is IntelLLVM 2023.0.0 with MSVC-like command-line
    -- Detecting Fortran compiler ABI info
    -- Detecting Fortran compiler ABI info - done
    -- Check for working Fortran compiler: C:/Program Files (x86)/Intel/oneAPI/compiler/latest/windows/bin/ifx.exe - skipped
    -- Fortran: IntelLLVM
    -- CUDA: not enabled
    -- Found SuiteSparse_config: C:/Users/fabia/code/master/release_msvc/cfsdeps/suitesparse/src/suitesparse/SuiteSparse_config/build/suitesparseconfig.lib (found 
    suitable version "6.0.3", minimum required is "6.0.2")
    -- SuiteSparse_config version: 6.0.3
    -- SuiteSparse_config include: C:/Users/fabia/code/master/release_msvc/cfsdeps/suitesparse/src/suitesparse/SuiteSparse_config
    -- SuiteSparse_config library: C:/Users/fabia/code/master/release_msvc/cfsdeps/suitesparse/src/suitesparse/SuiteSparse_config/build/suitesparseconfig.lib      
    -- SuiteSparse_config static:  C:/Users/fabia/code/master/release_msvc/cfsdeps/suitesparse/src/suitesparse/SuiteSparse_config/build/suitesparseconfig.lib      
    -- Installation will be system-wide (requires 'sudo make install')
    -- Skipping the demos in CCOLAMD/Demo
    -- ------------------------------------------------------------------------
    -- SuiteSparse CMAKE report for: ccolamd
    -- ------------------------------------------------------------------------
    -- install in C:/Users/fabia/code/master/release_msvc/cfsdeps/suitesparse/install: true
    -- install in SuiteSparse/lib and SuiteSparse/include: false
    -- build type:           Debug
    -- NSTATIC:              false (build static library)
    -- use OpenMP:           no
    -- C compiler:           MSVC
    -- C flags:              /DWIN32 /D_WINDOWS
    -- C++ compiler:
    -- C++ flags:
    -- C Flags debug:        /Zi /Ob0 /Od /RTC1
    -- C++ Flags debug:
    -- compile definitions:
    -- ------------------------------------------------------------------------
    -- Configuring done
    -- Generating done
    -- Build files have been written to: 
    

    I want to add, that it compiles on Windows with icx, Intel's C-Compiler from oneAPI. But probably someone was able to compile it also with MSVC.

    bug 
    opened by Fabian188 11
  • Support for 32-bit platforms broken?

    Support for 32-bit platforms broken?

    In versions prior to 6.0, there was a data type SuiteSparse_long. That data type was long on all platforms but WIN64 where it was __int64. That means that the data type had a size of 32 bit on 32-bit platforms and a size of 64 bit on 64-bit platforms (Linux and Windows alike).

    For version 6.0, that was replaced with int64_t unconditionally. That means the type has now a size of 64 bit on 32-bit and 64-bit platforms.

    IIUC, that type is used when indexing into arrays. But those can't be larger than 32 bit on 32-bit platforms. Would it make sense to replace that type with intptr_t instead of int64_t?

    I'm seeing crashes when using SPQR/CHOLMOD with 32-bit Octave on Windows. Could that be related to that change? Are 32-bit platforms no longer supported by SuiteSparse?

    The top of a backtrace from a segmentation fault caught with gdb when using 32-bit Octave with the libraries from SuiteSparse 6.0.2 (on WoW64):

    Thread 7 received signal SIGSEGV, Segmentation fault.
    [Switching to Thread 7636.0x4b00]
    0x5baf2a86 in cholmod_l_postorder (Parent=Parent@entry=0x1f875938, n=<optimized out>, n@entry=0, Weight=Weight@entry=0x0, Post=Post@entry=0x1f875938, Common=Common@entry=0x1f1e5510) at D:/mingw-w64-suitesparse/src/build-MINGW32/CHOLMOD/Cholesky/cholmod_postorder.c:202
    warning: Source file is more recent than executable.
    202                 p = Parent [j] ;
    (gdb) bt
    #0  0x5baf2a86 in cholmod_l_postorder (Parent=Parent@entry=0x1f875938, n=<optimized out>, n@entry=0,
        Weight=Weight@entry=0x0, Post=Post@entry=0x1f875938, Common=Common@entry=0x1f1e5510)
        at D:/mingw-w64-suitesparse/src/build-MINGW32/CHOLMOD/Cholesky/cholmod_postorder.c:202
    #1  0x5baeff7f in cholmod_l_analyze_ordering (A=A@entry=0x1f8759a8, ordering=ordering@entry=0,
        Perm=Perm@entry=0x1a62ddd8, fset=fset@entry=0x0, fsize=fsize@entry=0, Parent=Parent@entry=0x1f875938,
        Post=Post@entry=0x1f875938, ColCount=ColCount@entry=0x1a62df38, First=First@entry=0x1f875938,
        Level=Level@entry=0x1f875938, Common=Common@entry=0x1f1e5510)
        at D:/mingw-w64-suitesparse/src/build-MINGW32/CHOLMOD/Cholesky/cholmod_analyze.c:344
    #2  0x5baf09d4 in cholmod_l_analyze_p2 (for_whom=0, A=0x1f8759a8, UserPerm=0x0, fset=0x0, fsize=0, Common=0x1f1e5510)
        at D:/mingw-w64-suitesparse/src/build-MINGW32/CHOLMOD/Cholesky/cholmod_analyze.c:729
    #3  0x5cef238e in spqr_analyze (A=0x1f875868, ordering=ordering@entry=0, Quser=Quser@entry=0x0, do_rank_detection=1,
        keepH=keepH@entry=1, cc=cc@entry=0x1f1e5510)
        at D:/mingw-w64-suitesparse/src/build-MINGW32/SPQR/Source/spqr_analyze.cpp:286
    #4  0x5cf073d8 in spqr_1factor<double> (ordering=ordering@entry=0, tol=6.8389738316909643e-14, tol@entry=-2,
        bncols=0, keepH=keepH@entry=1, A=<optimized out>, A@entry=0x1e0aa558, ldb=0, Bp=Bp@entry=0x0, Bi=Bi@entry=0x0,
        Bx=<optimized out>, Bx@entry=0x0, cc=cc@entry=0x1f1e5510)
        at D:/mingw-w64-suitesparse/src/build-MINGW32/SPQR/Source/spqr_1factor.cpp:642
    #5  0x5cf0cfca in SuiteSparseQR<double> (ordering=ordering@entry=0, tol=tol@entry=-2, econ=5, getCTX=getCTX@entry=-1,
        A=A@entry=0x1e0aa558, Bsparse=Bsparse@entry=0x0, Bdense=<optimized out>, Bdense@entry=0x0,
        p_Zsparse=p_Zsparse@entry=0x0, p_Zdense=p_Zdense@entry=0x0, p_R=p_R@entry=0x1f1e5d68, p_E=p_E@entry=0x1f1e5d6c,
        p_H=p_H@entry=0x1f1e5d70, p_HPinv=p_HPinv@entry=0x1f1e5d78, p_HTau=p_HTau@entry=0x1f1e5d74,
        cc=cc@entry=0x1f1e5510)
        at D:/mingw-w64-suitesparse/src/build-MINGW32/SPQR/Source/SuiteSparseQR.cpp:265
    #6  0x5cf0c74f in SuiteSparseQR<double> (ordering=0, tol=-2, econ=5, A=0x1e0aa558, R=0x1f1e5d68, E=0x1f1e5d6c,
        H=0x1f1e5d70, HPinv=0x1f1e5d78, HTau=0x1f1e5d74, cc=0x1f1e5510)
        at D:/mingw-w64-suitesparse/src/build-MINGW32/SPQR/Source/SuiteSparseQR.cpp:1404--Type <RET> for more, q to quit, c to continue without paging--
    

    The remainder of the backtrace is in functions in Octave.

    bug 
    opened by mmuetzel 20
  • Use `suitesparse` prefix for include directories in 6.0.0

    Use `suitesparse` prefix for include directories in 6.0.0

    Is your feature request related to a problem? Please describe.

    Hi, I'm testing the new 6.0.0 version (using hash d42beebdcc6b98c7fb2f7f2927f32c19e0f602d0). I noticed that when building it, the header files get installed to paths like /usr/local/include/cholmod.h. On the other hand, when installing older versions from debian packages (i.e. sudo apt-get install libsuitesparse-dev), they would get installed as /usr/include/suitesparse/cholmod.h.

    Describe the solution you'd like

    IMO it would be preferred to keep the suitesparse prefix, rather than dumping all the headers in the "global" /usr/local/include directory. Besides breaking compatibility with the debian package version, the current approach results in setting CMake variables such as CHOLMOD_INCLUDE_DIR to /usr/local/include. This means that when in my project I do target_include_directories(my_target PUBLIC ${CHOLMOD_INCLUDE_DIR}) I'm potentially including also a lot of unrelated stuffs (i.e. everything that is in /usr/local/include; the lack of a suitesparse directory does not allow for any more fine-grained control).

    This should be a simple enough improvement.

    An even better, although more complex, improvement would be using modern CMake targets and separate (per-project) include directories.

    This would result, eventually, in allowing users to do in their CMakeLists.txt

    find_package(CHOLMOD REQUIRED)
    target_link_libraries(my_target PUBLIC CHOLMOD::CHOLMOD)
    

    and in their source code

    #include <CHOLMOD/cholmod.h>
    

    See how by linking with a "modern cmake target", I automatically get access to its include directories. Moreover, using per-project include directories we would allow users to build everything that is in suitesparse, but control with per-target precision which header files are accessible.

    Describe alternatives you've considered

    Note that I tried to install the header files to a suitesparse subdirectory, but this caused issues with the Find* cmake modules, which failed to find the header files.

    Let me know what do you think and I'm willing to try to implement some of these features.

    opened by alsora 5
  • Suggestion for root CMakeLists.txt

    Suggestion for root CMakeLists.txt

    I propose a simple CMakeLists.txt

    It makes use of the SuiteSparse CMake files via cmake external projects and just adds the root CMakeLists.txt.

    This is just a template with a small selection of options to demonstrate how it could be re realized.

    I'm far from a CMake guru but it appears as an appropriate way for a simple wrapper for the original SuiteSparse CMake structure.

    Please feel free to use and modify the file as you like. I wrote it myself and as it is so small and easy I put it into public domain without any restrictions - no need to mention me.

    Example usage for an empty SuiteSparse folder: mkdir mybuild; cd mybuild; ccmake ..

    When changing the CMakeLists.txt for some major changes it is necessary to clean the build directory (here mybuild) and call make clean of SuiteSparse. I testet it with dev2 from Nov 10

    CMakeLists.txt

    enhancement 
    opened by Fabian188 16
  • Support building with CMAKE_RELEASE_POSTFIX

    Support building with CMAKE_RELEASE_POSTFIX

    Fedora builds 3 versions of suitesparse - 32-bit BLAS and 64-bit BLAS with and without trailing "_"'s on symbols. I'd like to use CMAKE_RELEASE_POSTFIX to do this, but we need to change the name of the libraries that suitesparse looks for accordingly.

    opened by opoplawski 1
Releases(v6.0.4.beta1)
  • v6.0.4.beta1(Dec 30, 2022)

    Dec 29, 2022: SuiteSparse 6.0.4

    * NFORTRAN: option added to disable Fortran entirely
    * GraphBLAS v7.4.1:  global free pool disabled, and GrB_mxm heuristics
        revised.
    
    Source code(tar.gz)
    Source code(zip)
  • v6.0.3(Dec 25, 2022)

    Dec 23, 2022: SuiteSparse 6.0.3

    * GraphBLAS v7.4.0:  added non-va_arg get/set methods.
    * Mongoose v3.0.3:  change in build for test coverage
    
    Source code(tar.gz)
    Source code(zip)
  • v6.0.2(Dec 12, 2022)

    Dec 9, 2022: SuiteSparse 6.0.2

    * minor change to build system for nearly all packages: (except CSparse,
        ssget, and MATLAB_Tools):  allows static linkage of all libraries.
        Fortran no longer required.
    * AMD 3.0.2: Fortran no longer required (amd.f and amdbar.f skipped);
        minor change to build system
    * BTF 2.0.2: minor change to build system
    * CAMD 3.0,2: minor change to build system
    * CCOLAMD 3.0.2: minor change to build system
    * CHOLMOD 4.0.2: Fortran no longer required; minor change to build system
    * CXSparse 4.0.2: minor change to build system
    * GPUQREngine 2.0.2: minor change to build system
    * GraphBLAS 7.3.3: -latomic added if needed, using ANSI C11 atomic functions
        for gcc (atomic_compare_exachange_weak instead of __atomic_* variants),
        chunk factor revised for GrB_mxm (generic saxpy3 method);
        minor change to build system
    * KLU 2.0.2: Fortran no longer required; minor change to build system
    * LDL 3.0.2: minor change to build system
    * Mongoose 3.0.2: fixed matrix download in python test scripts (no change
        to the compiled library itself, other than the version/date);
        minor change to build system
    * RBio 3.0.2: minor change to build system
    * SPEX 2.0.2: minor change to build system
    * SPQR 3.0.2: Fortran no longer required; minor change to build system
    * SuiteSparse_GPURuntime 2.0.2: minor change to build system
    * SuiteSparse_config 6.0.2: override C-to-Fortran interface handling if
        no Fortran compiler found; minor change to build system
    * UMFPACK 6.0.2: Fortran no longer required; minor change to build system
    * Example: simple package that illustrates how to use SuiteSparse
        Find*.cmake modules in cmake.
    * not changed from SuiteSparse v6.0.1: ssget, CSparse, MATLAB_Tools
    
    Source code(tar.gz)
    Source code(zip)
  • v6.0.2.beta1(Dec 9, 2022)

    Dec 9, 2022: SuiteSparse 6.0.2

    * minor change to build system for nearly all packages: (except CSparse,
        ssget, and MATLAB_Tools):  allows static linkage of all libraries.
        Fortran no longer required.
    * AMD 3.0.2: Fortran no longer required (amd.f and amdbar.f skipped);
        minor change to build system
    * BTF 2.0.2: minor change to build system
    * CAMD 3.0,2: minor change to build system
    * CCOLAMD 3.0.2: minor change to build system
    * CHOLMOD 4.0.2: Fortran no longer required; minor change to build system
    * CXSparse 4.0.2: minor change to build system
    * GPUQREngine 2.0.2: minor change to build system
    * GraphBLAS 7.3.3: -latomic added if needed, using ANSI C11 atomic functions
        for gcc (atomic_compare_exachange_weak instead of __atomic_* variants),
        chunk factor revised for GrB_mxm (generic saxpy3 method);
        minor change to build system
    * KLU 2.0.2: Fortran no longer required; minor change to build system
    * LDL 3.0.2: minor change to build system
    * Mongoose 3.0.2: fixed matrix download in python test scripts (no change
        to the compiled library itself, other than the version/date);
        minor change to build system
    * RBio 3.0.2: minor change to build system
    * SPEX 2.0.2: minor change to build system
    * SPQR 3.0.2: Fortran no longer required; minor change to build system
    * SuiteSparse_GPURuntime 2.0.2: minor change to build system
    * SuiteSparse_config 6.0.2: override C-to-Fortran interface handling if
        no Fortran compiler found; minor change to build system
    * UMFPACK 6.0.2: Fortran no longer required; minor change to build system
    * Example: simple package that illustrates how to use SuiteSparse
        Find*.cmake modules in cmake.
    * not changed from SuiteSparse v6.0.1: ssget, CSparse, MATLAB_Tools
    

    Note that SPEX fails to build using the MINGW32 and MINGW64 compilers, because of a linking problem with GMP. The CI system was added after v6.0.1 was released, and it's likely that SPEX didn't build for that version of SuiteSparse either.

    Source code(tar.gz)
    Source code(zip)
  • v6.0.1(Nov 14, 2022)

    Nov 12, 2022: SuiteSparse 6.0.1

    * BLAS: C prototypes for the Fortan BLAS were unintentionally exposed to
        the user application.  Removed.  If you want to use them, see the
        instructions in SuiteSparse_config.h.
    
    Source code(tar.gz)
    Source code(zip)
  • v6.0.0(Nov 10, 2022)

    Nov 12, 2022: SuiteSparse 6.0.0

    * major update: using CMake build system for all packages
    * CMake Find*: all packages now have a Find*.cmake.  See
        SuiteSparse_config/cmake_modules.
    * integers: int (32-bit) and SuiteSparse_long (nominally 64-bit) replaced
        with int32_t and int64_t.  The SuiteSparse_long #define has been
        deprecated and removed.  Replace its use with int64_t in any code that
        uses SuiteSparse v6.0.0 or later.  This is unlikely to change any
        use of any SuiteSparse package, but since it's possible that
        SuiteSparse_long was 32-bits on some platforms, the SO_VERSIION of
        all packages has been increased by one.
    * UMFPACK: new options to support ParU.  Single umfpack.h include file.
    * CHOLMOD: Single cholmod.h include file.
    * SuiteSparse/metis-5.1.0: now embedded into CHOLMOD, in a different
        name space.  No longer an independent library.
    * SPDX License Identifier: added to each file. No change in license.
    * BLAS/LAPACK interface: now supports any Fortran BLAS/LAPACK, with
        either 32-bit (default) or 64-bit integers, via FindBLAS.cmake.
    * SPEX: replaces SLIP_LU
    
    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta9(Nov 9, 2022)

    Added NOPENMP option to disable OpenMP for UMFPACK, CHOLMOD, SPQR, SuiteSparse_config (where it was just using omp_get_wtime) and GraphBLAS. Note the comments in the GraphBLAS userguide about thread-safety. If GraphBLAS is compiled without OpenMP, the #pragma omp flush in GrB_wait cannot guarantee thread safety if one user thread writes to a GrB_Matrix, does a GrB_wait, and another user thread reads that same matrix. The user application would have to ensure that the 1st thread's cache is properly flushed (perhaps with a pthreads construct). In this case, without OpenMP, thread safety is the responsibility of the user application, not GraphBLAS. Details and caveats are in the GraphBLAS user guide.

    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta8(Nov 9, 2022)

  • v6.0.0-beta7(Nov 6, 2022)

  • v6.0.0-beta6(Nov 6, 2022)

    Changes to build system. METIS now integrated into the CHOLMOD library with all functions renamed so there can be no conflict with any non-modified METIS package. Added Fortran functions to AMD library

    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta5(Nov 5, 2022)

  • v6.0.0-beta4(Nov 4, 2022)

  • v6.0.0-beta3(Nov 4, 2022)

    v6.0.0-beta3: adding NSTATIC option to disable the build of static libraries, and adding the installation of the SuiiteSparse_config/cmake_modules in /usr/local/lib/cmake/SuiteSparse (where /usr/local is CMAKE_INSTALL_PREFIX, in general).

    For most packages, NSTATIC defaults to false (so static libraries are built). For GraphBLAS, the compilation takes a long time so the default is true (do not build the static libgraphblas.a). For Mongoose, the option is always false and ignored if set to true, since the static library is needed by the mongoose program.

    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta2(Nov 4, 2022)

    Revised CMake / Makefile install rules. For the Makefiles:

    • make: installs in /usr/local (or whatever CMAKE_INSTALL_PREFIX says). This is the default. Normally would require "sudo make install"
    • make local: installs in SuiteSparse/lib, ./include, ./bin (ignoring CMAKE_INSTALL_PREFIX)
    • make global: same as "make", but can be done after "make local" to reset what "make install" does
    • make both: installs in both places

    These are handled by CMake options: -DGLOBAL_INSTALL=(true or false, 0 or 1), and -DLOCAL_INSTALL=(ditto). By default, GLOBAL_INSTALL is true (like "make global", install in CMAKE_INSTALL_PREFIX) and LOCAL_INSTALL (install in SuiteSparse/lib, SuiteSparse/include) is false.

    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta1(Nov 3, 2022)

    Nov 4, 2022: SuiteSparse 6.0.0 (beta1 release)

    * major update: using CMake build system for all packages
    * CMake Find*: all packages now have a Find*.cmake.  See
        SuiteSparse_config/cmake_modules.
    * integers: int (32-bit) and SuiteSparse_long (nominally 64-bit) replaced
        with int32_t and int64_t.  The SuiteSparse_long #define has been
        deprecated and removed.  Replace its use with int64_t in any code that
        uses SuiteSparse v6.0.0 or later.  This is unlikely to change any
        use of any SuiteSparse package, but since it's possible that
        SuiteSparse_long was 32-bits on some platforms, the SO_VERSION of
        all packages has been increased by one.
    * UMFPACK: new options to support ParU.  Single umfpack.h include file.
    * CHOLMOD: Single cholmod.h include file.
    * SuiteSparse/metis-5.1.0: renamed SuiteSparse_metis, to avoid confusion
        with the unmodified metis-5.1.0.  The compiled library is named
        libsuitesparse_metis.so.  The unmodified libmetis.so cannot be used
        with SuiteSparse.
    * SPDX License Identifier: added to each file. No change in license.
    * BLAS/LAPACK interface: now supports any Fortran BLAS/LAPACK, with
        either 32-bit (default) or 64-bit integers.
    * SPEX: replaces SLIP_LU
    
    Source code(tar.gz)
    Source code(zip)
  • v5.13.0(Aug 31, 2022)

    Includes GraphBLAS v7.2.0.

    * GraphBLAS v7.2.0:  see GraphBLAS/Doc/ChangeLog for details.
        * performance:  more compact serialization (ZSTD added, now the
            default compression method).
        * MATLAB interface: faster linear indexing, reshape, bandwidth,
            istril, istriu, isbanded, isdiag.  C(I,J)=A can now grow the
            size of C.
        * features: reshape methods, cube root operator, isStoredElement
        * bugs: a minor bug; user-defined types were incorrectly limited to
            128 bytes in size in v7.0.3.
    
    Source code(tar.gz)
    Source code(zip)
  • v5.12.0(Apr 10, 2022)

  • v5.11.0(Mar 15, 2022)

  • v5.10.1(May 24, 2021)

    May 17, 2021, SuiteSparse 5.10.1

    * CUDA: remove sm_30 from SuiteSparse_config.mk
    * GraphBLAS v5.0.5: minor bug fix
    * minor changes to Makefiles
    
    Source code(tar.gz)
    Source code(zip)
  • v5.10.0(May 17, 2021)

  • v5.9.0(Mar 3, 2021)

    GraphBLAS upgraded from v3.3 to v4.0.3 with many new features, and increased performance. Betweeness Centrality about 2x faster, and now faster than the GAP benchmark for larger matrices. BFS about 5x faster. For the very latest versions of GraphBLAS, see https://github.com/DrTimothyAldenDavis/GraphBLAS where stable releases are more frequent. Those updates are added to this SuiteSparse meta-package on a slower release cycle.

    Source code(tar.gz)
    Source code(zip)
  • v5.8.1(Jul 14, 2020)

  • v5.8.0(Jul 3, 2020)

    SuiteSparse 5.8.0, July 3, 2020:

    * SLIP_LU v1.0.1 added: for solving Ax=b exactly.  Requires
        the GNU GMP and MPRF libraries.
    * GraphBLAS v3.3.1: see the GraphBLAS/Doc/Changlog
    * replaced UFget with ssget: affects nearly all packages:
        UMFPACK, KLU, CHOLMOD, CXSparse/CSparse, etc,
        but their version numbers are left unchanged since it affects
        the MATLAB tests only, not the compiled libraries.
    * ssget v2.2.0: better URL redirects
    * updates to SuiteSparse build system
    
    Source code(tar.gz)
    Source code(zip)
  • v5.8.0-draft(Jul 1, 2020)

  • v5.7.2(Apr 8, 2020)

  • v5.7.1(Feb 20, 2020)

    Feb 20, 2020, SuiteSparse 5.7.1

    * SuiteSparse_config: update version number
    * Makefile: fixed install issue with README.txt
    

    Feb 20, 2020, SuiteSparse 5.7.0

    * GraphBLAS 3.2.0: better performance, new ANY and PAIR operators,
        structural mask, GrB_DESC_* from 1.3 C API Specification.
    * CHOLMOD 3.0.14: minor update to cholmod_check to print a matrix
    * added: CONTRIBUTIING.md, CODE_OF_CONDUCT.md, README.md.
    
    Source code(tar.gz)
    Source code(zip)
  • v5.7.0(Feb 20, 2020)

    Feb 20, 2020, SuiteSparse 5.7.0

    * GraphBLAS 3.2.0: better performance, new ANY and PAIR operators,
        structural mask, GrB_DESC_* from 1.3 C API Specification.
    * CHOLMOD 3.0.14: minor update to cholmod_check to print a matrix
    * added: CONTRIBUTIING.md, CODE_OF_CONDUCT.md, README.md.
    
    Source code(tar.gz)
    Source code(zip)
  • v5.6.0(Oct 21, 2019)

    SuiteSparse v5.6.0, Oct 21, 2019, with GraphBLAS v3.1.1.

    Release notes for GraphBLAS, since v2.3.5 in SuiteSparse v5.5.0:

    GraphBLAS Version 3.1.1, Oct 21, 2019

    * minor edits: user guide and comments in code
    

    GraphBLAS Version 3.1.0, Oct 2, 2019

    * added MATLAB interface: GraphBLAS/GraphBLAS is new.  In Source/, added
        global pointer to printf for MATLAB mexPrintf, pointer to
        mexMakeMemoryPersistent for Sauna workspace.  Changed how GraphBLAS
        objects are printed with GxB_print.  Changed how duplicate indices are
        handled in assign and extract, to match the MATLAB stadard.  Added
        helper functions for MATLAB (GB_matlab_helper.[ch]).
        Code size: @GrB is 9.7KLOC, test/ is 4.5KLOC).
    * bug counter added to this ChangeLog: to count # of bugs that appeared
        in formal releases that affect production code.  The count excludes
        bug fixes for test code, bugs in the demo codes, bugs introduced
        in beta versions that were fixed before any formal release, and
        bugs prior to version 1.0.  Code size of Source/, Include/ excluding
        Source/Generated, and Config/*.m4, is 42,659 lines (not including the
        new MATLAB interface).  13 bugs / 42K lines is a bug rate of 0.3 bugs
        per KLOC, much lower than most commercial software, but higher than
        UMFPACK, CHOLMOD, etc (with about 0.1 bug per KLOC).  GraphBLAS is a
        much more complex library, from the external view, than solving Ax=b.
        If UMFPACK has a bug, then Ax-b is typically large; there is no
        'residual' to check for GraphBLAS.  Also, in GraphBLAS, the test suite
        has about the same size as the main library (32K lines in Test/ and
        Tcov/).  For UMFPACK, etc, the test suite is always about 1/3 the size
        of the library itself.
    * 'make dox': for doxygen removed (not really that useful)
    * (13) bug fix to GB_reduce_to_vector: to avoid integer divide-by-zero for
        a matrix with n=0 columns.
    * (12) bug fix to GB_accum_mask: when C+=T if C has no entries except
        pending tuples
    * (11) bug fix to GB_resize: when pending tuples exist and vdim is growing
        from vdim <= 1 to vdim > 1, GB_WAIT(A) is required first.
    * (10) bug fix to GB_subref_phase1: "int nI" parameter should be int64_t.
    

    GraphBLAS Version 3.0.1, July 26, 2019

    * version number: Three changes to the user-visible API are not
        backward-compatible with V2.x: the added parameters to GxB_init and
        GxB_SelectOp_new, and the change in the type of the Thunk argument for
        GxB_select.  Thus, the SO version of SuiteSparse:GraphBLAS is now 3, no
        longer 2.  This change only affects SuiteSparse:GraphBLAS GxB_*
        extenstions, not any GrB_* functions or definitions.
    * added GxB_Scalar: acts like a GrB_Vector of length 1.
    * OpenMP parallelism: added nthreads and chunk parameters to GxB_set/get.
    * added parameter to GxB_init: bool user_malloc_is_thread_safe,
        for the MATLAB mexFunction interface, or any other malloc library that
        might not be thread-safe.  mxMalloc is not thread-safe.
        This change is not backward compatible with Version 2.x.
    * changed thunk parameter of GxB_select:  was (void *), now GxB_Scalar.
        This change is not backward compatible with Version 2.x.
    * added parameter to GxB_SelectOp_new: to specify the type of the Thunk.
        This change is not backward compatible with Version 2.x.
    * added options to GxB_get: determine if a matrix is hypersparse or not,
        global library, API information, nthreads, and chunk.
    * added options to GxB_set: nthreads, and chunk.
    * new operators and semirings: RDIV (f(x,y)=y/x) and RMINUS (y-x)
        binary operators.
    
    Source code(tar.gz)
    Source code(zip)
  • v5.5.0(Oct 21, 2019)

    SuiteSparse v5.5.0, Oct 20, 2019.

    This release includes v2.3.5 of GraphBLAS, for the Collected Algorithms of the ACM.

    Release notes for SuiteSparse v5.5.0:

    * GraphBLAS 2.3.5: Collected Algorithm of the ACM
    * UMFPACK 5.7.9: fix for compiling in MATLAB R2018b; BLAS library
    * SPQR, CHOLMOD: fix to *_make.m for compiling in MATLAB; same version
    * KLU: fix to Tcov/Makefile; no change to version number
    * CXSparse 3.2.0: version was incorrect in CXSparse/Include/cs.h;
        the corresponding CSparse v3.2.0 had the correct version information
        in its cs.h include file.
    * ssget and MATLAB_Tools/SuiteSparseCollection: update to sparse.tamu.edu
    * Mongoose 2.0.4: update to sparse.tamu.edu
    
    Source code(tar.gz)
    Source code(zip)
  • v5.4.0(Oct 19, 2019)

    SuiteSparse v5.4.0, Dec 28, 2018.

    * GraphBLAS 2.2.2: many upgrades and new features, a few bug fixes
    * CHOLMOD 3.0.13: fix to cholmod_core.h (for latest CUDA)
    * SPQR 2.0.9: fix to SuiteSparseQR.hpp (for latest CUDA)
    * UMFPACK 5.7.8: minor change to umf_analyze.h (not a bug, but the
        parameter names in the *.h did not match the *.c.
    * ssget: new matrices
    * Mongoose 2.0.3: simpler cmake
    * SuiteSparse_config: added JOBS option for parallel make, also added to
        GraphBLAS, CHOLMOD, SPQR, UMFPACK, Mongoose, and metis-5.1.0
    
    Source code(tar.gz)
    Source code(zip)
Owner
Tim Davis
Faculty member at Texas A&M University, Department of Computer Science and Engineering. You can also reach me at [email protected].
Tim Davis
An FPGA accelerator for general-purpose Sparse-Matrix Dense-Matrix Multiplication (SpMM).

Sextans Sextans is an accelerator for general-purpose Sparse-Matrix Dense-Matrix Multiplication (SpMM). One exciting feature is that we only need to p

linghao.song 30 Dec 29, 2022
very simple matrix library, int addition to a recreation of DCM attitude estimation in the form of matrix of C.

matrix very simple matrix library, int addition to a recreation of DCM attitude estimation in the form of matrix of C. the lib include matrix inversio

null 4 Mar 21, 2022
matrix-effect This is a dumb matrix effect type thing

matrix-effect This is a dumb matrix effect type thing. It's only like one source file which should compile... Define __POSIX or __WIN though, for posi

null 42 Sep 23, 2022
This is official repository of the course Industrial Informatics LT, Year 2021/22, at University of Modena and Reggio Emilia, held at Fondazione Universitaria di Mantova

Industrial informatics LT - Mantova - 2021/22 This is official repository of the course Industrial Informatics LT, Year 2020/21, at University of Mode

High-Performance Real-Time Lab 4 Jun 27, 2022
The QPEP-Enhanced Direct Sparse Odometry (DSO) with Loop Closure

QPEP-DSO: Quadratic Pose Estimation Problems (QPEP) Enhanced Direct Sparse Odometry with Loop Closure Code Arch The codes are motivated by DSO (https:

Jin Wu 8 Jun 23, 2022
Fast, hierarchical, sparse Voxel Grid

Treexy is a library that implements a compact hierarchical data structure that can store and manipulate volumetric data, discretized on a three-dimens

Davide Faconti 323 Dec 21, 2022
Implementation of Monocular Direct Sparse Localization in a Prior 3D Surfel Map (DSL)

Implementation of Monocular Direct Sparse Localization in a Prior 3D Surfel Map (DSL)

Haoyang Ye 93 Nov 30, 2022
Fast, hierarchical, sparse Voxel Grid

Treexy is a library that implements a compact hierarchical data structure that can store and manipulate volumetric data, discretized on a three-dimens

Davide Faconti 323 Dec 21, 2022
OpenVDB - Sparse volume data structure and tools

OpenVDB AX Nano Houdini Website | Discussion Forum | Documentation OpenVDB is an open source C++ library comprising a novel hierarchical data structur

Academy Software Foundation 1.9k Jan 6, 2023
CPU Sparse Voxel Octree Implementation

Sparse Voxel Octrees This project provides a multithreaded, CPU Sparse Voxel Octree implementation in C++, capable of raytracing large datasets in rea

Benedikt Bitterli 628 Dec 19, 2022
the ares multi-system console emulation suite

ares ares is a multi-system emulator that began development on October 14th, 2004. It is a descendent of higan and bsnes, and focuses on accuracy and

higan 437 Jan 7, 2023
Test suite for evaluating C code on 42 Basecamp

Joãonette Test suite based on Moulinette, made by "Iniciativa João" ⛺️ Setup Clone this repo ( I suggest cloning to the root and calling it joaonette

Lucas Kuhn 14 Sep 29, 2022
Violent Fungus is a command and control (C2) software suite, providing red teams post-exploitation persistence and other juicy stuff.

Violent Fungus is a command and control (C2) software suite, providing red teams post-exploitation persistence and other juicy stuff.

Chris Humphries 34 Sep 7, 2022
the ares multi-system console emulation suite

ares is a multi-system emulator that began development on October 14th, 2004. It is a descendent of higan and bsnes, and focuses on accuracy and prese

ares 430 Jan 2, 2023
A combined suite of utilities for exporting images to retro formats.

ImageTools A combined suite of utilities for exporting images to retro formats. It was developed for use on Windows but might compile on other systems

David Walters 4 Dec 6, 2021
AWS Ambit Scenario Designer for Unreal Engine 4 (Ambit) is a suite of tools to streamline content creation at scale for autonomous vehicle and robotics simulation applications.

AWS Ambit Scenario Designer for Unreal Engine 4 Welcome to AWS Ambit Scenario Designer for Unreal Engine 4 (Ambit), a suite of tools to streamline 3D

AWS Samples 77 Jan 2, 2023
Suite of C++ libraries for radio astronomy data processing

Casacore A suite of C++ libraries for radio astronomy data processing. Installation Debian / Ubuntu Casacore is now part of Debian and Ubuntu, use apt

null 100 Jan 7, 2023
Blender is the free and open source 3D creation suite

Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.

Blender 7.4k Jan 1, 2023
The FLIP Fluids addon is a tool that helps you set up, run, and render high quality liquid fluid effects all within Blender, the free and open source 3D creation suite.

FLIP Fluids The FLIP Fluids addon is a tool that helps you set up, run, and render liquid simulation effects. Our custom built fluid engine is based a

Ryan Guy 1.4k Dec 22, 2022