mirror of
https://github.com/boostorg/ublas.git
synced 2026-02-15 01:22:10 +00:00
325 lines
13 KiB
HTML
325 lines
13 KiB
HTML
<html>
|
|
|
|
<head>
|
|
<meta http-equiv="Content-Type"
|
|
content="text/html; charset=iso-8859-1">
|
|
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
|
|
<title>Boost Basic Linear Algebra</title>
|
|
</head>
|
|
|
|
<body bgcolor="#FFFFFF">
|
|
|
|
<h1><img src="c++boost.gif" alt="c++boost.gif" align="center"
|
|
width="277" height="86"> Basic Linear Algebra</h1>
|
|
|
|
<p>uBLAS is a C++ template class library that provides <a
|
|
href="http://www.netlib.org/blas">BLAS</a> level 1, 2, 3
|
|
functionality for dense, packed and sparse matrices. The design
|
|
and implementation unify mathematical notation via operator
|
|
overloading and efficient code generation via expression
|
|
templates. </p>
|
|
|
|
<h2>Functionality</h2>
|
|
|
|
<p>uBLAS provides templated C++ classes for dense, unit and
|
|
sparse vectors, dense, identity, triangular, banded, symmetric,
|
|
hermitian and sparse matrices. Views into vectors and matrices
|
|
can be constructed via ranges or slices and adaptor classes. The
|
|
library covers the usual basic linear algebra operations on
|
|
vectors and matrices: reductions like different norms, addition
|
|
and subtraction of vectors and matrices and multiplication with a
|
|
scalar, inner and outer products of vectors, matrix vector and
|
|
matrix matrix products and triangular solver. The glue between
|
|
containers, views and expression templated operations is a mostly
|
|
<a href="http://www.sgi.com/tech/stl">STL</a> conforming iterator
|
|
interface.</p>
|
|
|
|
<p>Dense, packed and sparse matrix classes are being tested with the <a
|
|
href="http://www.netlib.org/clapack">CLAPACK</a> test suite.</p>
|
|
|
|
<p>Known limitations:</p>
|
|
|
|
<ul type="disc">
|
|
<li>The implementation assumes a linear memory address model.</li>
|
|
<li>Tuning was focussed on dense matrices.</li>
|
|
</ul>
|
|
|
|
<h2>Documentation</h2>
|
|
|
|
<ul>
|
|
<li><a href="overview.htm">Overview</a></li>
|
|
<li><a href="expression.htm">Expression Concepts</a><ul
|
|
type="circle">
|
|
<li><a href="expression.htm#scalar_expression">Scalar
|
|
Expression</a></li>
|
|
<li><a href="expression.htm#vector_expression">Vector
|
|
Expression</a></li>
|
|
<li><a href="expression.htm#matrix_expression">Matrix
|
|
Expression</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="container.htm">Container Concepts</a><ul
|
|
type="circle">
|
|
<li><a href="container.htm#vector">Vector</a></li>
|
|
<li><a href="container.htm#matrix">Matrix</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="iterator.htm">Iterator Concepts</a><ul
|
|
type="circle">
|
|
<li><a
|
|
href="iterator.htm#indexed_bidirectional_iterator">Indexed
|
|
Bidirectional Iterator</a></li>
|
|
<li><a
|
|
href="iterator.htm#indexed_random_access_iterator">Indexed
|
|
Random Access Iterator</a></li>
|
|
<li><a
|
|
href="iterator.htm#indexed_bidirectional_cr_iterator">Indexed
|
|
Bidirectional Column/Row Iterator</a></li>
|
|
<li><a
|
|
href="iterator.htm#indexed_random_access_cr_iterator">Indexed
|
|
Random Access Column/Row Iterator</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="storage.htm">Storage</a><ul type="circle">
|
|
<li><a href="storage.htm#unbounded_array">Unbounded
|
|
Array</a></li>
|
|
<li><a href="storage.htm#bounded_array">Bounded Array</a></li>
|
|
<li><a href="storage.htm#range">Range</a></li>
|
|
<li><a href="storage.htm#slice">Slice</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="storage_sparse.htm">Sparse Storage</a><ul
|
|
type="circle">
|
|
<li><a href="storage_sparse.htm#map_array">Map Array</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="vector.htm">Vector</a><ul type="circle">
|
|
<li><a href="vector.htm#vector">Vector</a></li>
|
|
<li><a href="vector.htm#unit_vector">Unit Vector</a></li>
|
|
<li><a href="vector.htm#zero_vector">Zero Vector</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="vector_sparse.htm">Sparse Vector</a><ul
|
|
type="circle">
|
|
<li><a href="vector_sparse.htm#sparse_vector">Sparse
|
|
Vector</a></li>
|
|
<li><a href="vector_sparse.htm#compressed_vector">Compressed
|
|
Vector</a></li>
|
|
<li><a href="vector_sparse.htm#coordinate_vector">Coordinate
|
|
Vector</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="vector_proxy.htm">Vector Proxies</a><ul
|
|
type="circle">
|
|
<li><a href="vector_proxy.htm#vector_range">Vector
|
|
Range</a></li>
|
|
<li><a href="vector_proxy.htm#vector_slice">Vector
|
|
Slice</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="vector_expression.htm">Vector Expressions</a><ul
|
|
type="circle">
|
|
<li><a href="vector_expression.htm#vector_expression">Vector
|
|
Expression</a></li>
|
|
<li><a href="vector_expression.htm#vector_references">Vector
|
|
References</a></li>
|
|
<li><a href="vector_expression.htm#vector_operations">Vector
|
|
Operations</a></li>
|
|
<li><a href="vector_expression.htm#vector_reductions">Vector
|
|
Reductions</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="matrix.htm">Matrix</a><ul type="circle">
|
|
<li><a href="matrix.htm#matrix">Matrix</a></li>
|
|
<li><a href="matrix.htm#identity_matrix">Identity
|
|
Matrix</a></li>
|
|
<li><a href="matrix.htm#zero_matrix">Zero Matrix</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="triangular.htm">Triangular Matrix</a><ul
|
|
type="circle">
|
|
<li><a href="triangular.htm#triangular_matrix">Triangular
|
|
Matrix</a></li>
|
|
<li><a href="triangular.htm#triangular_adaptor">Triangular
|
|
Adaptor</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="symmetric.htm">Symmetric Matrix</a><ul
|
|
type="circle">
|
|
<li><a href="symmetric.htm#symmetric_matrix">Symmetric
|
|
Matrix</a></li>
|
|
<li><a href="symmetric.htm#symmetric_adaptor">Symmetric
|
|
Adaptor</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="hermitian.htm">Hermitian Matrix</a><ul
|
|
type="circle">
|
|
<li><a href="hermitian.htm#hermitian_matrix">Hermitian
|
|
Matrix</a></li>
|
|
<li><a href="hermitian.htm#hermitian_adaptor">Hermitian
|
|
Adaptor</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="banded.htm">Banded Matrix</a><ul type="circle">
|
|
<li><a href="banded.htm#banded_matrix">Banded Matrix</a></li>
|
|
<li><a href="banded.htm#banded_adaptor">Banded
|
|
Adaptor</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="matrix_sparse.htm">Sparse Matrix</a><ul
|
|
type="circle">
|
|
<li><a href="matrix_sparse.htm#sparse_matrix">Sparse
|
|
Matrix</a></li>
|
|
<li><a href="matrix_sparse.htm#compressed_matrix">Compressed
|
|
Matrix</a></li>
|
|
<li><a href="matrix_sparse.htm#coordinate_matrix">Coordinate
|
|
Matrix</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="matrix_proxy.htm">Matrix Proxies</a><ul
|
|
type="circle">
|
|
<li><a href="matrix_proxy.htm#matrix_row">Matrix Row</a></li>
|
|
<li><a href="matrix_proxy.htm#matrix_column">Matrix
|
|
Column</a></li>
|
|
<li><a href="matrix_proxy.htm#vector_range">Vector
|
|
Range</a></li>
|
|
<li><a href="matrix_proxy.htm#vector_slice">Vector
|
|
Slice</a></li>
|
|
<li><a href="matrix_proxy.htm#matrix_range">Matrix
|
|
Range</a></li>
|
|
<li><a href="matrix_proxy.htm#matrix_slice">Matrix
|
|
Slice</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="matrix_expression.htm">Matrix Expressions</a><ul
|
|
type="circle">
|
|
<li><a href="matrix_expression.htm#matrix_expression">Matrix
|
|
Expression</a></li>
|
|
<li><a href="matrix_expression.htm#matrix_references">Matrix
|
|
References</a></li>
|
|
<li><a href="matrix_expression.htm#matrix_operations">Matrix
|
|
Operations</a></li>
|
|
<li><a href="matrix_expression.htm#matrix_reductions">Matrix
|
|
Reductions</a></li>
|
|
<li><a
|
|
href="matrix_expression.htm#matrix_vector_operations">Matrix
|
|
Vector Operations</a></li>
|
|
<li><a
|
|
href="matrix_expression.htm#matrix_matrix_operations">Matrix
|
|
Matrix Operations</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<h2>Supported Platforms</h2>
|
|
|
|
<p>As main development platform for uBLAS we used MSVC 6.0 with
|
|
Dinkumware STL. Other compilers known to accept the library are</p>
|
|
|
|
<ul>
|
|
<li>MSVC 6.0 with STLPort-4.5.3</li>
|
|
<li>BCC 5.5</li>
|
|
<li>GCC 2.95.x, 3.0.x, 3.1</li>
|
|
<li>ICC 5.0, 6.0</li>
|
|
<li>Comeau 4.2.x</li>
|
|
<li>MWCW</li>
|
|
</ul>
|
|
|
|
<h2>Download</h2>
|
|
|
|
<p>You can download the current stable release of the source code
|
|
from <a href="http://www.genesys-e.org/ublas/downloads/ublas.zip">here</a>.
|
|
Prerequisite is the latest stable release of the <a
|
|
href="http://www.boost.org">Boost</a> libraries Configuration,
|
|
Timer and optionally SmartPointer.</p>
|
|
|
|
<h2>CVS Access</h2>
|
|
|
|
<p>You can also check out the latest version via anonymous CVS.
|
|
Here's how: </p>
|
|
|
|
<pre> cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost login
|
|
(password is empty)
|
|
cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost checkout boost/boost/numeric/ublas
|
|
cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost checkout boost/libs/numeric/ublas</pre>
|
|
|
|
<p>If you have gzip installed on your system, you can speed up
|
|
the transfer using</p>
|
|
|
|
<pre> cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost -z9 checkout boost/boost/numeric/ublas
|
|
cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost -z9 checkout boost/libs/numeric/ublas</pre>
|
|
|
|
<p>You can also <a
|
|
href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost">view</a>
|
|
the CVS archive. You may find the library <a
|
|
href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost/boost/boost/numeric/ublas/">here</a>.
|
|
Documentation and test programs reside <a
|
|
href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost/boost/libs/numeric/ublas/">here</a>.</p>
|
|
|
|
<h2>Mailing lists</h2>
|
|
|
|
<p>uBLAS has no dedicated mailing list. Feel free to use the
|
|
mailing lists of <a href="http://www.boost.org">Boost</a>.</p>
|
|
|
|
<h2>Authors and Credits</h2>
|
|
|
|
<p>uBLAS initially was written by Joerg Walter and Mathias Koch.
|
|
We would like to thank all, which supported the development of
|
|
this library: David Abrahams, Ed Brey, Fernando Cacciola, Beman Dawes,
|
|
Bob Fletcher, Kresimir Fresl, Joachim Kessel, Toon Knapen,
|
|
Jens Maurer, Gary Powell, Joachim Pyras, Peter Schmitteckert, Jeremy
|
|
Siek, Markus Steffl, Michael Stevens, Benedikt Weber, Martin Weiser,
|
|
Marc Zimmermann and the members of <a
|
|
href="http://www.boost.org">Boost</a></p>
|
|
|
|
<h2>Frequently Asked Questions</h2>
|
|
|
|
<p>Q: I'm running the uBLAS dense vector and matrix benchmarks.
|
|
Why do I see a significant performance difference between the
|
|
native C and library implementations?<br>
|
|
A: uBLAS distinguishes debug mode (size and type conformance
|
|
checks enabled, expression templates disabled) and release mode
|
|
(size and type conformance checks disabled, expression templates
|
|
enabled). Please check, if the preprocessor symbol <code>NDEBUG</code>
|
|
of <code>cassert</code> is defined. <code>NDEBUG</code> enables
|
|
release mode, which in turn uses expression templates.</p>
|
|
|
|
<p>Q: I've written some uBLAS tests, which try to incorrectly
|
|
assign different matrix types or overrun vector and matrix
|
|
dimensions. Why don't I get a compile time or runtime diagnostic?<br>
|
|
A: uBLAS distinguishes debug mode (size and type conformance
|
|
checks enabled, expression templates disabled) and release mode
|
|
(size and type conformance checks disabled, expression templates
|
|
enabled). Please check, if the preprocessor symbol <code>NDEBUG</code>
|
|
of <code>cassert</code> is defined. <code>NDEBUG</code> disables
|
|
debug mode, which is needed to get size and type conformance
|
|
checks.</p>
|
|
|
|
<p>Q: I've written some uBLAS benchmarks to measure the
|
|
performance of matrix chain multiplications like <code>prod (A,
|
|
prod (B, C))</code> and see a significant performance penalty due
|
|
to the use of expression templates. How can I disable expression
|
|
templates?<br>
|
|
A: You do not need to disable expression templates. Please try
|
|
reintroducing temporaries using either <code>prod (A, </code><code><em>matrix_type</em></code><code>
|
|
(prod (B, C)))</code> or <code>prod (A, prod<</code><code><em>matrix_type</em></code><code>>
|
|
(B, C))</code>.</p>
|
|
|
|
<h2>Contact Information</h2>
|
|
|
|
<p>If you have a problem, or have found a bug, please send us a <a
|
|
href="mailto:ublas@genesys-e.org">note</a>. </p>
|
|
|
|
<hr>
|
|
|
|
<p>Copyright (©) 2000-2002 Joerg Walter, Mathias Koch <br>
|
|
Permission to copy, use, modify, sell and distribute this
|
|
document is granted provided this copyright notice appears in all
|
|
copies. This document is provided ``as is'' without express or
|
|
implied warranty, and with no claim as to its suitability for any
|
|
purpose.</p>
|
|
|
|
<p>Last revised: 8/3/2002</p>
|
|
</body>
|
|
</html>
|