Boost logo

Ublas :

From: Gunter Winkler (guwi17_at_[hidden])
Date: 2005-06-13 10:21:11


Am Montag, 13. Juni 2005 15:43 schrieb christopher diggins:

> boost ublas performance, rows = 3, cols = 3, iters = 100000
> benchmarking element_access(m1) 406 msec elapsed
> benchmarking matrix_copy(m1, m2) 31 msec elapsed
> benchmarking scalar_arithmetic(m1) 266 msec elapsed
> benchmarking matrix_arithmetic(m1, m2) 2407 msec elapsed
> benchmarking multiply(m1, m2, m3) 234 msec elapsed
>
> boost ublas performance, rows = 100, cols = 100, iters = 100
> benchmarking element_access(m1) 390 msec elapsed
> benchmarking matrix_copy(m1, m2) 0 msec elapsed

zero time for copy?

> benchmarking scalar_arithmetic(m1) 266 msec elapsed
> benchmarking matrix_arithmetic(m1, m2) 796 msec elapsed
> benchmarking multiply(m1, m2, m3) 3828 msec elapsed

what compiler did you use? The cvs head of ublas is _very_ slow with
gcc-3.3 but fast as usual with gcc-3.4. Can you post or mail the
benchmark program? I'd like to check the times.

> k-matrix is a matrix implementation where rows and columns are known
> at compile-time. ultiplication was done using axpy_prod.

Does that mean "everything constant"? Then the compiler could compute
the result and the execution time would be zero.

> matrix<int> m;
> m *= 2;
> m += m;
> m[i][j] = 0;

> I can heare the chorus of screams, but you didn't using "noalias". In
> real code whether something is aliased or not is not trivially known.
> So it is not fair to use "noalias" in a straightforward comparion.
> Furthermore I am comparing "out-of-the-box" performance for naive
> users (the most common kind).

I disagree. If you compare (peak) perfmance, you should use the best
code, not the shortest.

@all: Do you think, that it is possible to autodetect aliasing at
compile time via the container_reference class?

Should we add new overloads of += and co. to vector and matrix types:

self_type & operator += (const self_type& rhs) {
  plus_assign(rhs);
  return (*this);
}

mfg
Gunter