Requirements of the GLAS library
To attain the goals as described above, GLAS needs to fulfill at
least following requirements:
Types of matrices
GLAS must provide both dense and sparse matrices. Dense matrices
can be considered a special case of sparse matrix that have a fixed
structure and with the number of non-zeros equal to the number of
rows times the number of columns. Dense matrices thus do not
allow to change the structure. But sparse matrices neither always
allow to change the structure. Some types of sparse matrices might
be optimised by freezing their structure at a specific moment.
Additionally also structured matrices will be supported such as
symmetric, hermitian, skew-symmetric etc.
Containers and views
Vectors and matrices 'own' their values. But many different types
of views will be made available that implement the same interfaces.
Storage
The containers need to be able to store their data on the stack or
on the heap. They also need to be able to store (part of) their
data on disk (to support out-of-core algorithms). Additionally it
should be possible to distribute data over multiple memory spaces
(to support parallel algorithms).
Efficient expression evaluation
Within this project we focus on evaluating expressions containing
operations on vectors, matrices and other expressions in a minimal
amount of time. An example of such and expression is y = a*x + b.
These expressions should be evaluated as efficiently as possible
taking into account possible memory-footprint constraints.
Therefore it needs to minimise the necessary amount of floating
point operations and the data access patterns. Additionally, the
expression might be best evaluated without or using some
strategically placed temporaries. Again these temporaries need an
optimal layout to reduce the required number of flops and optimise
the data-access patterns. For instance D=(A+B)*(C+D) is best
evaluated using a temporaries. The goal of the project is to
analyse the order of the evaluation of elements of an expression
depending on the data in this expression. Generics should also
support mixing different data types (e.g. multiplication of real
matrix with complex vector).
3rd party backends
This project is about (an interface for) a generic linear algebra
library and to provide a reference implementation. To attain
optimal performance with this reference implementation, the
generics should certainly allow to plugin multiple optimised
backends such as Netlib-BLAS, ATLAS etc. Whenever such a backend is
plugged in, the library should be able to map (parts of)
expressions to these backends and request to calculate them. Of
course, the (parts of) expressions that can not be mapped must be
calculated by the library itself.
Multi-platform
Linear algebra intensive applications are run on a wide variety of
platforms. Therefore GLAS aims to support all these platforms. It
is however required that are reasoneably standard conforming C++
compiler is available for each of supported platforms. Efforts to
be compatible with non-conforming compilers however may not cripple
the design.