===== FLENS [TOC] ===== FLENS is short for _Flexible Library for Efficient Numerical Solutions_. And that's exactly what it is: *A builing block for the implementation of other (higher-level) numerical libraries or numerical applications* Some key points - 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__. 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 ==================== - Real and complex matrix types with full storage and dense vector types, i.e. - __GeMatrix__, - __SyMatrix__, - __TrMatrix__, - __DenseVector__. - Sparse matrices are experimental at the moment. - 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*). We now use *restructured text*. Compiler Requirements ===================== FLENS uses some of the C++11 features and therefore requires a recent C++ compiler: - __clang__ version 3.0 (or higher) - __gcc__ version 4.7 (or higher) - __icc__ version 12.1.2 (or higher) Git It/Download =============== You can clone a public branch from __GitHub__ *--[BOX]------------------------------------------------------------------* | | | git clone git://github.com/michael-lehn/FLENS.git | | | *-------------------------------------------------------------------------* or download a __snapshot__. # Why Nobody Uses C++ in Scientific Computing # =========================================== # LAPACK is written in Fortran77. This is a very old programming language, not # object oriented and without generic programming features. LAPACK is tightly # coupled with BLAS. BLAS consists of a number of kernel routines that do all # the performance critical computations. The interface of BLAS is really # low-level. Does this sound bad to you? Do you think it is old fashioned and # out dated? # # People using Fortran/LAPACK/BLAS in scientific computing often deal with # problems where performance and memory resources really matter. This includes # such extreme cases where a numerical simulation runs for several months. And # where problem sizes (e.g. matrix dimensions) are chosen so big that it just # fits into memory. In this problem domains loosing a few percentages in # performance would really hurt. Furthermore, creating temporaries is a big # deal and instead one carefully plans how much extra workspace is needed in # total for the complete application. So managing and controlling resources like # memory and CPU time is crucial. This renders tools and techniques with obscure # side effects like the creation of temporaries useless. Transparency of what # is going on is also a key requirement for all computational routines. It is # important to know how things are done. This way you can exactly localize # routines that are critical for performance. # # # # # # C++ is a modern programming language. It allows object oriented programming # as well as generic programming. Beside the standard template library numerous # C++ libraries exist that further enhance the core capabilities of C++. Being # a little bit hyperbolic: every programming feature one possibly could imagine # is somehow provided by C++. Either directly or through an additional C++ # library. # # If you compare the Fortran77 LAPACK/BLAS combination with an arbitrary numerical # C++ library you would expect that LAPACK/BLAS has Mailing List ============ Join the mailing __list__! Contributors ============ - Michael Lehn - Klaus Pototzky - Alexander Stippler Contributors ============ - Iris Häcker - Michael Lehn - Klaus Pototzky - Alexander Stippler :links: __FLENS-LAPACK__ -> doc:flens/lapack/lapack __FLENS-BLAS__ -> doc:flens/blas/blas __DocTool__ -> http://www.mathematik.uni-ulm.de/~lehn/DocTool __BLAS__ -> http://www.netlib.org/blas/ __LAPACK__ -> http://www.netlib.org/lapack/ __tutorial__ -> doc:flens/examples/tutorial __Session (\d)__ -> doc:flens/examples/tutorial#$1 __GeMatrix__ -> doc:flens/matrixtypes/general/impl/gematrix __SyMatrix__ -> doc:flens/matrixtypes/symmetric/impl/symatrix __TrMatrix__ -> doc:flens/matrixtypes/triangular/impl/trmatrix __DenseVector__ -> doc:flens/vectortypes/impl/densevector __CXXBLAS__ -> doc:cxxblas/cxxblas __QD Library__ -> http://crd-legacy.lbl.gov/~dhbailey/mpdist __mpfr__ -> http://www.mpfr.org __ATLAS__ -> http://math-atlas.sourceforge.net __GotoBLAS__ -> http://www.tacc.utexas.edu/tacc-projects/gotoblas2 __GitHub__ -> http://github.com/michael-lehn/FLENS __clang__ -> http://clang.llvm.org/ __gcc__ -> http://gcc.gnu.org/ __icc__ -> http://software.intel.com/en-us/articles/intel-compilers/ __snapshot__ -> http://www.mathematik.uni-ulm.de/~lehn/FLENS/downloads/ __list__ -> https://imap.uni-ulm.de/lists/info/flens