Re: Matrix multiplication performance

Michael Lehn <[email protected]>
Newsgroups gmane.comp.lib.boost.ublas
Message-ID <[email protected]>
Hi Palik and Oswin,

I attached a simple implementation of a matrix-matrix product (gemm.hpp) which has less
then 250 lines of code.  I also attached a simple test programm (matprod.cc).  The test
Programm has a simple wrapper for the implementation in gemm.hpp.  For a real applications
you should use traits like for the BLAS bindings.  You can compile it with

g++ -O3 -Wall -std=c++11 -I $BOOST_PATH matprod.cc

where BOOST_PATH contains your boost implementation.  Let me know if this works
for you.


Cheers,

Michael










-----------------------------------------------------------------------------------
Dr. Michael Lehn
University of Ulm, Institute for Numerical Mathematics
Helmholtzstr. 20
D-89069 Ulm, Germany
Phone: (+49) 731 50-23534, Fax: (+49) 731 50-23548
-----------------------------------------------------------------------------------

On 18 Jan 2016, at 09:25, Oswin Krause <[email protected]> wrote:

> Hi Palik,
> 
> this is a known problem. In your case you should already get better performance when using axpy_prod instead of prod. There are currently moves towards a ublas 2.0 which should make this a non-problem in the future.
> 
> 
> On 2016-01-17 21:23, palik imre wrote:
>> Hi all,
>> It seems that the matrix multiplication in ublas ends up with the
>> trivial algorithm.  On my machine, even the following function
>> outperforms it for square matrices bigger than 173*173 (by a huge
>> margin for matrices bigger than 190*190), while not performing
>> considerably worse for smaller matrices:
>> matrix<double>
>> matmul_byrow(const matrix<double> &lhs, const matrix<double> &rhs)
>> {
>>  assert(lhs.size2() == rhs.size1());
>>  matrix<double> rv(lhs.size1(), rhs.size2());
>>  matrix<double> r = trans(rhs);
>>  for (unsigned c = 0; c < rhs.size2(); c++)
>>    {
>>      matrix_column<matrix<double> > out(rv, c);
>>      matrix_row<matrix<double> > in(r, c);
>>      out = prod(lhs, in);
>>    }
>>  return rv;
>> }
>> Is there anybody working on improving the matrix multiplication performance?
>> If not, then I can try to find some spare cycles ...
>> Cheers,
>> Imre Palik
>> _______________________________________________
>> ublas mailing list
>> [email protected]
>> http://lists.boost.org/mailman/listinfo.cgi/ublas
>> Sent to: [email protected]
> _______________________________________________
> ublas mailing list
> [email protected]
> http://lists.boost.org/mailman/listinfo.cgi/ublas
> Sent to: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.