What's new in Elemental 0.85
Nov 12, 2014
- Added functionality:
- Sparse-direct Cholesky and Bunch-Kaufman due to merging Clique into Elemental
- Sparse-direct least squares, ridge regression, and Tikhonov regularization
- Sparse Herk and various other BLAS1-like routines
- A (nearly full) manually-constructed C interface
- A (nearly full) manually-constructed Python interface, including extensions of Display functionality to matplotlib (for matrices) and networkx (for graphs)
- Support for Read, Write, and ReadWrite matrix proxies so that routines implemented for specific datatypes and/or data distributions can be extended to more general datatypes and arbitrary distribution choices
- Essentially all distributed routines in the library were generalized to AbstractDistMatrix for convenience (using proxies)
- Single-precision Hermitian eigensolvers are now supported (via proxies which convert to double-precision for PMRRR)
- Added Three-valued and Bernoulli, GEPPGrowth and Druinsky-Toledo, Fourier-Identity (“spikes and sines”) and Walsh-Identity (“spikes and Hadamard”) matrices
- Added ability to compute coherence
- Added ability to use operator() to extract contiguous submatrices (and converted library)
- Extended control of SVD and LDL via new SVDCtrl and LDLCtrl structures
- Improved performance of IO routines when ColStride() and/or RowStride() are 1
- Bug fixes:
- Fixed a variety of compilation errors which did not appear with g++
- Fixed an (uncommon) bug in distributed HermitianFrobeniusNorm
- Added missing shrink of the phase vector in qr::BusingerGolub
- Added missing scalar argument to Matrix::UpdateDiagonal
- Fixed Ehrenfest matrix generation
- Fixed indexing of Householder phases in sequential Bidiag
- Fixed offset used by rq::ExplicitTriang
- Fixed BlockDistMatrix version of MATRIX_MARKET Read
- Fixed BLAS wrappers for complex herk, her2k, her, and her2
- Fixed PURE/HYBRID CMake detection (thanks to Richard Boyd)
- Fixed Mac vecLib/Accelerate detection
- Refactoring:
- Removed MakeTriangular (due to the more general MakeTrapezoidal)
- Replaced AxpyTriangle with AxpyTrapezoid
- Added a control structure for Bisect
- Significantly refactored/simplified Trr2k
- Removed spurious integer argument to TriW
- Removed Riemann matrix due to vague definition (and overlap with Redheffer)
- Removed hyphens in directory names to avoid python conflict
- Name changes:
- Renamed namespace “elem” to “El”, and “elem.hpp” to “El.hpp”
- Moved auxiliary PMRRR headers into pmrrr/ subfolder
- “Pseudospectra” -> {“SpectralPortrait”,”SpectralWindow”,”SpectralCloud”}
- Better organization/naming for explicit QR/RQ/LQ factorizations
New in Elemental 0.84 RC 1 (May 12, 2014)
- New Functionality:
- Fundamental additions:
- Low-rank Cholesky up-/down-dating (CholMod)
- Rank-one updates to LU factorizations (LUMod)
- Added Generalized RQ and QR factorizations and associated Generalized Linear Model (GLM) and Equality-constrained Least Squares (LSE) solvers
- Pseudospectral computations can now be driven by various kernels, including multi-shift Hessenberg/(quasi-)triangular solves, and support a variety of configurations for outputting snapshots of the results
- Multi-shift Hessenberg solves (MultiShiftHessSolve)
- Multi-shift quasi-triangular solves (MultiShiftQuasiTrsm)
- Quasi-triangular solves (QuasiTrsv/QuasiTrsm)
- Hyperbolic Householder transforms
- Basic support for a block version of DistMatrix (BlockDistMatrix)
- Support for parallel Schur decompositions via ScaLAPACK’s Hessenberg QR algs.
- Support for redistributing between DistMatrix and BlockDistMatrix [MC,MR] dists.
- All user-level routines now use permutation vectors instead of pivot vectors
- Alternating Direction Method of Multipliers (ADMM) implementations of Basis Pursuit, Linear and Quadratic Programs, and Sparse Inverse Covariance Selection
- Minor/incremental improvements:
- Added {lq,rq,qr}::SolveAfter
- Added SymmetricSolve and HermitianSolve
- Support for converting real (quasi-triangular) Schur forms to complex (triangular) form
- Support for computing the eigenvalues of quasi-triangular matrices
- LQ/QR/RQ factorizations now force positive (or zero) diagonal entries in the resulting triangular matrix
- Grid now supports both row-major and column-major orderings
- Support for diagonal scalings of trapezoidal matrices (DiagonalScaleTrapezoid)
- Added Global{Col,Row} and Local{Col,Row}Offset member functions to DistMatrix
- Norm and Max now support more data distributions
- Min and Max implementations (which do not use the absolute values)
- Added Bull’s Head, Hatano-Nelson, random Helmholtz Green’s, Trefethen, Triangle, and Whale matrices.
- Instrumentation/visualization/testing:
- More file formats for Read and Write (e.g., ASCII and MATRIX_MARKET)
- Display windows are now strictly sized according to the size of the matrix
- Maintenance:
- Library bugfixes:
- Fixed several small memory leaks in Grid
- AbstractDistMatrix::Empty() now recomputes shifts to ensure the matrix is kept in a legal state
- Moves of non-views to views are now converted to copies
- Fixed deflation bug in PMRRR when no eigenvectors are requested
- Fixed bugs in ApplyPackedReflectors, QuasiDiagonalScale, TriangularInverse, Trr, and Trsv
- Maintenance/syntax:
- Algorithmic options are now handled via control structures with default constructors
- Preprocessor definitions and macros now namespaced with “ELEM”
- Grid argument to DistMatrix::[Locked]Attach was moved before the dependent alignment arguments
- Added a ‘Mod’ routine which supports modular arithmetic with negative integers
- Copy assignments now return non-const references
- Move constructors are now “noexcept”
- Checks were added to ensure DistMatrix views are not improperly aligned
- PMRRR (and therefore Elemental) no longer requires a Fortran compiler to build
- Renamed “ShiftedTrsm” to “MultiShiftTrsm” and placed in BLAS3
- Renamed “Min” and “Max” to “MinAbs” and “MaxAbs”
- Renamed “Inertia” to “InertiaType” and “HermitianInertia” to “Inertia”
- The unnecessary Orientation arguments were removed from QuasiDiagonal{Scale,Solve}
- All interfaces now assume the usage of ‘left’ diagonals, which use an offset relative to the diagonal which contains the upper-left entry
- Documentation:
- Documentation for BlockDistMatrix is currently missing
- Build system:
- Several bugs fixed in detection of support for C++11 random number generation
- Configuration tests moved into separate files
- Python interface:
- The python interface was removed due to SWIG’s lack of C++11 support, the lack of a maintainer for the interface, and the fact that a manual C interface is planned.
New in Elemental 0.83 (Apr 5, 2014)
- New Functionality:
- Fundamental additions:
- Preliminary routines for the high-performance computation of pseudospectra
- Distributed blocked reductions to lower/upper bidiagonal/Hessenberg form are now both fully supported
- Large redesign of the Matrix and DistMatrix classes which includes support for arbitrary submatrix manipulation
- Minor/incremental improvements:
- More performant and robust SDC via: try/catch guards around the matrix-sign functions, avoidance of unnatural process team splits, the introduction of many more accuracy and convergence tuning parameters, and the ability to optionally print status updates
- Support was added for pivot metadata caching (this will eventually have a large effect on the performance of Clique)
- Row and column pivot applications now support every matrix distribution
- The QuasiDiagonal{Scale,Solve} routines were greatly extended
- AlignWith no longer has an effect when the alignments are unchanged
- Added Demmel, Fox-Li, and Helmholtz PML matrices
- HermitianTridiagEig is now a routine
- Instrumentation/visualization/testing:
- Added support for BMP/JPG/PNG/etc. visualization via Qt5
- Colormaps can now be modified at runtime
- The -no-gui option is now supported so that Qt5 can be used to write images to file even when no display server is running
- Preliminary support for reading/writing matrices to/from file
- Maintenance:
- Library bugfixes:
- Fixed bugs in SymmetricInverse, QuasiDiagonal{Scale,Solve}, and HermitianInertia
- Fixed bug in Pseudoinverse scaling (also affected Skeleton)
- Fixed edgecases in TwoNormEstimate
- Fixed a bug in parallel one-norm computation
- Fixed bugs in Matrix::Conjugate and several diagonal alignments
- Fixed parallel Helmholtz matrix generation
- Avoided assumption that VCComm members have the same rank in the owning group
- Fixed bugs in {[VR,STAR],[STAR,VR]}
New in Elemental 0.73 Patch 1 (Apr 3, 2012)
- Fixed bug in Frobenius norm computation in HermitianNorm
- Fixed bug in [VR,* ]