Elemental is C++11-based library that supports a wide collection of sequential and distributed-memory operations, including support for dense and sparse-direct linear algebra, Linear, Quadratic and Second-Order Cone Programming, and lattice reduction. Furthermore, it supports such functionality for real and complex single-precision, double-precision, “double-double”, “quad-double”, quad-precision, and arbitrary-precision floating-point arithmetic.
The project originally began as an object-oriented analogue and extension of the parallel dense linear algebra library [PLAPACK], which was designed around the idea of building a graph of different matrix distributions and providing simple API for moving a matrix from one such distribution to another throughout the course of a computation. Over time, the functionality of Elemental steadily expanded beyond its beginnings; at one point, Elemental was quite similar in scope to [ScaLAPACK], the most widely-used library for extending [LAPACK] to distributed-memory architectures, but Elemental now also supports a much wider scope (including sparse-direct linear and (generalized) least squares solvers, Interior Point Methods for Second-Order Cone Programs, and lattice reduction).
Elemental’s name is derived from the fact that, unlike PLAPACK and ScaLAPACK, its primary dense matrix distributions are designed to spread matrix entries in element-wise, as opposed to block-wise, fashions [PEtAl2013].
Elemental currently supports C++11, C, and Python interfaces, while an R interface is being maintained by Rodrigo Canales and a Julia interface is under development. Interfaces to other languages, such as Fortran 90, can be built on top of the C interface in a straightforward, if not tedious, manner. Ideally Elemental will eventually be hooked into LLVM in order to help automate the creation of external interfaces.
- Functioning C++11 and ANSI C compilers.
- A working MPI2 implementation
- BLAS and LAPACK (ideally version 3.3 or greater) implementations.
- CMake (version 2.8.12 or later for OS X and version 2.8.11 or later otherwise).
- For double-double and quad-double support, QD is required.
- For arbitrary-precision arithmetic, MPFR and MPC are required.
If a sufficiently up-to-date C++11 compiler is used (e.g., recent versions of
clang++), Elemental should be straightforward to build on
Unix-like platforms. There are still a few edges left to round to support
Microsoft Windows platforms.
License and copyright¶
While the vast majority of the project is licensed under the 2-clause BSD License, several components are modifications of external work that is under a different license. Please see the debian/copyright file for more details.
Further, note that Elemental optionally downloads and installs a number of libraries,such as:
- METIS, which is made available under the (equally permissive) Apache License, Version 2.0.
which can not be used for commercial purposes (it can be disabled with the
- OpenBLAS, which is available under the
New BSD License (it can be disabled with
- BLIS, which is available under the
New BSD License (it can be disabled with
-D EL_DISABLE_BLIS=TRUE), and
- ScaLAPACK, which is also available under the New BSD License (and is not built by default).
|[PEtAl2013]||Jack Poulson, Bryan Marker, Robert A. van de Geijn, Jeff R. Hammond, and Nichols A. Romero, Elemental: A new framework for distributed memory dense matrix computations, ACM Transactions on Mathematical Software, Vol. 39, Issue 2, Article No. 13, 2013. DOI: http://dx.doi.org/10.1145/2427023.2427030|
|[PLAPACK]||Robert A. van de Geijn, Using PLAPACK, The MIT Press, Cambridge, MA, 1997. Currently available from: https://mitpress.mit.edu/books/using-plapack|
|[ScaLAPACK]||L.S. Blackford, J. Choi, A. Cleary, E. D’Azevedo, J. Demmel, I. Dhillon, J. Dongarra, S. Hammarling, G. Henry, A. Petitet, K. Stanley, D. Walker, and C.R. Whaley, ScaLAPACK Users’ Guide, Society for Industrial and Applied Mathematics, Philadelphia, PA, 1997. Last accessed from: http://www.netlib.org/scalapack/slug/|