Elemental Changelog

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,* ]