Boost logo

Ublas :

From: Gunter Winkler (guwi17_at_[hidden])
Date: 2005-02-04 14:21:56


Am Freitag, 4. Februar 2005 16:32 schrieben Sie:
> I do not understand this message. Does uBLAS use the same algorithm
> for multiplying matrices independent of if the storage is row major
> or column major ? This would be inefficient.
>
> On Fri, 4 Feb 2005, Gunter Winkler wrote:
> > But a large matrix vector multiplication using row major matrix is
> > always faster than using a column major matrix, because the latter
> > has a worse memory access pattern. (Except you call a specialized
> > dgemm() )

No. uBlas uses 2 different algorithms.

Let A be a n-by-n matrix, x and y n-vectors. We compute y = Ax.

case 1) row major storage

 -> use scalar products
 for each row i do
  y(i) = row(A, i) * x

 each y(i) is updated exactly once.

case 2) column major storage

 -> add up scaled vectors
 for each column j do
  y = x(j) * column(A, j)

 each y(i) is updated n times

Case 1 makes much better use of (read-)pipelines and has less memory
writes than case 2. A much more comprehensive discussion can be found
in the ATLAS paper at

http://math-atlas.sourceforge.net/

If your are not convinced try yourself. My times are
size of matrix - 5000x5000
R 0.31 C 2.21

mfg
Gunter