forked from michael-lehn/FLENS
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.doc
170 lines (145 loc) · 7.19 KB
/
index.doc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
=====
FLENS [TOC]
=====
FLENS extends C++ for matrix/vector types that are ideally suited for numerical
linear algebra. That's it...
...but the consequences are immense!
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__.
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__.
*Note:* Sorry, at the moment we have problems we the department's file server.
Until we have fixed the problem please get FLENS from gitHub.
# 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
============
- 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