Sparse Matrix Converter features
Supported platforms
-
Tested on GNU/Linux, Solaris (UltraSparc / Niagara), AIX,
and Windows (Cygwin)
-
Easily ported to any reasonably POSIX-compliant platform (such as
*BSD); can easily remove thread-safety features if platform does not
support POSIX Threads (e.g., the operating system on the compute
nodes of the IBM BlueGene/L)
Supported file formats
Internal storage formats
-
Support for the following internal storage formats:
- CSC (compressed sparse column, a.k.a. compressed column storage),
- CSR (compressed sparse row, a.k.a. compressed row storage),
-
COO (coordinate, a.k.a. "ijk"), either as three arrays or a single
array of structs
-
Block CSR (BCSR),
-
Block COO (BCOO),
-
Jagged diagonal (JAD)
-
Conversion between any of CSC, CSR and COO to any other of these
types. Conversion between block CSR and block COO. Conversion
from CSR to JAD.
-
Can expand symmetric, skew-symmetric and hermitian storage into full storage
Interface
-
Either simple executable binary that converts between file storage
formats, or C API that gives access to all SMC functionality. Both
are built by default.
-
C API allows both high-level encapsulation and low-level access to
underlying sparse matrix data structures
-
Shell interface available for interactive manipulation of sparse
matrix files
-
Common Lisp interface (similar to the shell interface) using
CFFI
Thread safety
- Thread safe by default
- We avoid use of shared data and nonreentrant routines
- Any unavoidable use of shared data or nonreentrant routines
is protected by mutual exclusion, using POSIX standard mutexes
-
Users can disable POSIX Threads thread-safety support at build time if
your platform does not support PThreads (Cygwin does support it)
C language compatibility
- Platform-independent ANSI C99 whenever possible
- Can turn off C99-specific features at build time
- Some recourse to POSIX standard routines
Supported matrix entry value types
-
Matrix entries may be real or complex (we currently only support
double-precision values)
-
Pattern matrices (no values, only the sparsity pattern) also supported
- The SMC uses C99's complex value types if available. Otherwise,
it uses its own struct which is binary-compatible with C99's complex
type, and supplies a subset of complex arithmetic which suffices for
SMC functionality.