Elemental 0.79-p1 documentation

Introduction

«  Welcome to Elemental’s documentation!   ::   Contents   ::   Build system  »

Introduction

Overview

Elemental is a library for distributed-memory dense linear algebra that is essentially a careful combination of the following:

  • A PLAPACK-like framework of matrix distributions that are trivial for users to redistribute between.
  • A FLAME approach to tracking submatrices within (blocked) algorithms.
  • Element-wise distribution of matrices. One of the major benefits to this approach is the much more convenient handling of submatrices, relative to block distribution schemes.

Just like ScaLAPACK and PLAPACK, Elemental’s primary goal is in extending BLAS and LAPACK-like functionality into distributed-memory environments.

Though Elemental already contains high-quality implementations of a large portion of BLAS and LAPACK-like routines, there are a few important reasons why ScaLAPACK or PLAPACK might be more appropriate:

  • Elemental does not yet support non-Hermitian eigenvalue problems, but ScaLAPACK does.
  • Elemental does not yet provide routines for narrowly banded linear systems, though ScaLAPACK does (though you may want to consider the sparse-direct solver, Clique, which is built on top of Elemental.
  • Some applications exploit the block distribution format used by ScaLAPACK and PLAPACK in order to increase the efficiency of matrix construction. Though it is clearly possible to redistribute the matrix into an element-wise distribution format after construction, this might add an unnecessary level of complexity.

Note

At this point, the vast majority of Elemental’s source code is in header files, so do not be surprised by the sparsity of the src/ folder; please also look in include/. There were essentially two reasons for moving as much of Elemental as possible into header files:

  1. In practice, most executables only require a small subset of the library, so avoiding the overhead of compiling the entire library beforehand can be significant. On the other hand, if one naively builds many such executables with overlapping functionality, then the mainly-header approach becomes slower.
  2. Though Elemental does not yet fully support computation over arbitrary fields, the vast majority of its pieces do. Moving templated implementations into header files is a necessary step in the process and also allowed for certain templating techniques to exploited in order to simplify the class hierarchy.

Dependencies

  • Functioning C++03 and ANSI C compilers.
  • A working MPI implementation.
  • BLAS and LAPACK (ideally version 3.3 or greater) implementations. If a sufficiently up-to-date LAPACK implementation is not provided, then a working F90 compiler is required in order to build Elemental’s eigensolvers (the tridiagonal eigensolver, PMRRR, requires recent LAPACK routines).
  • CMake (version 2.8.5 or later).

Elemental should successfully build on nearly every platform, as it has been verified to build on most major desktop platforms (including Linux, Mac OS X, Microsoft Windows, and Cygwin), as well as a wide variety of Linux clusters (including Blue Gene/P).

«  Welcome to Elemental’s documentation!   ::   Contents   ::   Build system  »