Content |
FLENS
FLENS extends C++ for matrix/vector types that are ideally suited for numerical linear algebra. That's it ...
...but the consequences are immense. The simplicity of its design makes the combination FLENS/C++ a powerful tool for the development of high-performance applications and libraries in scientific computing.
Features
-
C++ library (requires a C++11 conform compiler)
-
Easy install as FLENS is headers only
-
FLENS gives you
-
Matrix/vector types for dense linear algebra
-
Generic implementation of BLAS (see CXXBLAS)
-
Generic reimplementation of LAPACK (see FLENS-LAPACK)
-
Generic implementation means that you can use any element type for your matrices/vectors that “acts like a double”. So in particular types from the QD Library, mpfr, ...
-
-
If high performance BLAS libraries like ATLAS or GotoBLAS are available:
-
compile with -DWITH_ATLAS or -DWITH_GOTOBLAS respectively,
-
link against them and boost performance.
FLENS does not introduce any overhead due to abstraction. You get all the performance.
-
-
FLENS-BLAS is a high-level and easy-to-use BLAS interface
-
FLENS-LAPACK is a high-level and easy-to-use C++ implementation of LAPACK.
-
FLENS also allows using overloaded operators for accessing BLAS. Most important in this respect:
-
Overloaded operators come without performance penalty!
-
In a special debug mode you can exactly trace what is happening and how you linear algebra expressions gets evaluated through BLAS calls
-
More features are explained in the tutorial.
-
-
The combination C++/FLENS is not only competitive with Fortran or C: With respect to performance it is absolutely equivalent. There are not obscure runtime overheads or secretly created temporaries. You are as much in control as you would be with Fortran or C. However, life is so much easier with C++/FLENS.
Examples and Tutorial
-
Overview of all driver functions currently implemented in FLENS-LAPACK
-
We just started with a tutorial:
-
Session 1: General matrices and dense vectors.
-
Session 2: BLAS, CXXBLAS, FLENS-BLAS and Overloaded Operators.
-
Session 3: More on matrices: Triangular and symmetric matrices, matrix views, ...
-
Session 4: Using FLENS-LAPACK.
-
Session 5: Using an external LAPACK implementation.
-
Session 6: Sparse Matrices (Experimental).
-
Session 7: User Defined Matrix Types.
-
Scope of this Branch
-
Support of all matrix/vector types one knows from BLAS. This means real and complex matrix types with full, band and packed storage as well as dense vector types:
-
Sparse matrices are experimental at the moment (but they work very well).
-
Our generic BLAS implementation CXXBLAS.
-
Support for high and multipecission types from QD Library and mpfr.
-
Support for native BLAS implementations like ATLAS or GotoBLAS.
-
FLENS-BLAS and FLENS-LAPACK.
-
Overloaded operators for BLAS working ontop of the FLENS-BLAS layer.
-
We improved our DocTool (look at the bottom of each page for document source).
Compiler Requirements
FLENS uses some of the C++11 features and therefore requires a recent C++ compiler:
Git It/Download
You can clone a public branch from GitHub
git clone git://github.com/michael-lehn/FLENS.git
or download a snapshot.
Mailing List
Join the mailing list!
Contributors
-
Iris Häcker
-
Klaus Pototzky
-
Alexander Stippler
FLENS Legacy (2003-2011)
Here's the site of the old FLENS (pre-C++11). It needs an update but otherwise Everything You Always Wanted to Know About FLENS, But Were Afraid to Ask (PDF) still gives a good introduction to FLENS, LAPACK and BLAS. Furthermore, it shows how FLENS can be used for the development of higher-level numerical applications.