[SciPy-User] How to efficiently do dot(dot( A.T, diag(d) ), A ) ?
Pauli Virtanen
pav at iki.fi
Tue Sep 11 14:21:10 EDT 2012
11.09.2012 20:28, Hugh Perkins kirjoitti:
[clip]
> It makes me wonder though. There is an opensource project called
> 'Eigen', for C++.
> It seems to provide good performance for matrix-matrix multiplication,
> comparable to Intel MKL, and significantly better than ublas
> http://eigen.tuxfamily.org/index.php?title=Benchmark I'm not sure
> what the relationship is between ublas and BLAS?
Eigen doesn't provide a BLAS interface, so it would be quite a lot of
work to use it.
Moreover, it probably derives some of its speed for small matrices from
compile-time specialization, which is not available via a BLAS interface.
However, OpenBLAS/GotoBLAS could be better than ATLAS, it seems to be
also doing well in the benchmarks you linked to:
https://github.com/xianyi/OpenBLAS
If you are on Linux, you can easily swap the BLAS libraries used, like so:
*** OpenBLAS:
LD_PRELOAD=/usr/lib/openblas-base/libopenblas.so.0 ipython
...
In [11]: %timeit e = np.dot(d, c.T)
100 loops, best of 3: 14.8 ms per loop
*** ATLAS:
LD_PRELOAD=/usr/lib/atlas-base/atlas/libblas.so.3gf ipython
In [12]: %timeit e = np.dot(d, c.T)
10 loops, best of 3: 20.8 ms per loop
*** Reference BLAS:
LD_PRELOAD=/usr/lib/libblas/libblas.so.3gf:/usr/lib/libatlas.so ipython
...
In [11]: %timeit e = np.dot(d, c.T)
10 loops, best of 3: 89.3 ms per loop
Yet another thing to watch out is possible use of multiple processors at
once (although I'm not sure how much that will matter in this particular
case).
--
Pauli Virtanen
More information about the SciPy-User
mailing list