[Numpy-discussion] Matlab/Numeric/numarray benchmarks
Todd Miller
jmiller at stsci.edu
Thu Jan 6 08:18:59 EST 2005
On Wed, 2005-01-05 at 19:23, Simon Burton wrote:
> Todd Miller wrote:
>
> >Hi Simon,
> >
> >I found a benchmark bug which explains the performance difference in +.
> >Here are my times with the modified benchmark (Python-2.4 gcc version
> >3.2.2 20030222 (Red Hat Linux 3.2.2-5) on 1.7 GHz P-IV w/ 2G):
> >
> >numarray + : 0.0540893316269
> >numarray matrixmultiply : 16.9448821545
> >numarray eigenvalues : 9.67254910469
> >
> >Numeric + : 0.0653991508484
> >Numeric matrixmultiply : 33.0565470934
> >Numeric eigenvalues : 9.44225819111
> >
> >So, for large arrays with a simple to install / built-in linear algebra
> >system, numarray is doing just fine.
> >
> >Looking at your results, I think you may have been comparing numarray
> >built using a built-in blas_lite versus Numeric using ATLAS. There, I
> >think numarray *is* behind but that is fixable with some effort. The
> >key is porting and integrating the Numeric dotblas package with
> >numarray. I've been looking at that some today... err, yesterday,
> >apparently I forgot to hit "send".
> >
> >
>
> Wow, those results look great, Todd.
>
> I have double checked my install. However, the numarray multiply is
> still x10 slower.
>
> This is set in addons:
> lapack_libs = ['lapack', 'f77blas', 'cblas', 'atlas', 'blas']
>
> and, at runtime, python has loaded:
> 40771000-40cb6000 r-xp 00000000 00:0c 783245
> /usr/lib/atlas/liblapack.so.3.0
> 40cb6000-40cb9000 rw-p 00545000 00:0c 783245
> /usr/lib/atlas/liblapack.so.3.0
> 40cb9000-40dbd000 rw-p 00000000 00:00 0
> 40dbd000-40dd7000 r-xp 00000000 00:0c 783242 /usr/lib/libf77blas.so.3.0
> 40dd7000-40dd8000 rw-p 00019000 00:0c 783242 /usr/lib/libf77blas.so.3.0
> 40dd8000-40df7000 r-xp 00000000 00:0c 783241 /usr/lib/libcblas.so.3.0
> 40df7000-40df8000 rw-p 0001e000 00:0c 783241 /usr/lib/libcblas.so.3.0
> 40df8000-4110b000 r-xp 00000000 00:0c 783240 /usr/lib/libatlas.so.3.0
> 4110b000-4110f000 rw-p 00312000 00:0c 783240 /usr/lib/libatlas.so.3.0
> 4110f000-41454000 r-xp 00000000 00:0c 783244
> /usr/lib/atlas/libblas.so.3.0
> 41454000-41458000 rw-p 00345000 00:0c 783244
> /usr/lib/atlas/libblas.so.3.0
> 41458000-41472000 r-xp 00000000 00:0c 17227 /usr/lib/libg2c.so.0.0.0
> 41472000-41473000 rw-p 0001a000 00:0c 17227 /usr/lib/libg2c.so.0.0.0
> ( as well as lapack_lite2.so )
>
> So I assumed that since the eigenvalues came in fast ATLAS was alive and
> well.
> Also, the above libs are exactly what Numeric uses:
> 4033b000-40880000 r-xp 00000000 00:0c 783245
> /usr/lib/atlas/liblapack.so.3.0
> 40880000-40883000 rw-p 00545000 00:0c 783245
> /usr/lib/atlas/liblapack.so.3.0
> 40883000-40987000 rw-p 00000000 00:00 0
> 40987000-409a6000 r-xp 00000000 00:0c 783241 /usr/lib/libcblas.so.3.0
> 409a6000-409a7000 rw-p 0001e000 00:0c 783241 /usr/lib/libcblas.so.3.0
> 409a7000-409c1000 r-xp 00000000 00:0c 783242 /usr/lib/libf77blas.so.3.0
> 409c1000-409c2000 rw-p 00019000 00:0c 783242 /usr/lib/libf77blas.so.3.0
> 409c2000-40cd5000 r-xp 00000000 00:0c 783240 /usr/lib/libatlas.so.3.0
> 40cd5000-40cd9000 rw-p 00312000 00:0c 783240 /usr/lib/libatlas.so.3.0
> 40cd9000-40cf3000 r-xp 00000000 00:0c 17227 /usr/lib/libg2c.so.0.0.0
> 40cf3000-40cf4000 rw-p 0001a000 00:0c 17227 /usr/lib/libg2c.so.0.0.0
> 40cf4000-40cf7000 rw-p 00000000 00:00 0
> 40cf7000-4103c000 r-xp 00000000 00:0c 783244
> /usr/lib/atlas/libblas.so.3.0
> 4103c000-41040000 rw-p 00345000 00:0c 783244
> /usr/lib/atlas/libblas.so.3.0
>
>
> Any ideas ?
<slow drawling prison warden voice from Cool Hand Luke>
What we've got here is... a'falya to communicate.
</slow drawling prison warden voice from Cool Hand Luke>
numarray's dot/matrixmultiply() and innerproduct() have never been
implemented in terms of a BLAS. *That's* the problem. Numeric has the
"dotblas" extension which augments the the built-in versions of these
functions with ones that are souped up using external libraries.
I ported dotblas yesterday and checked it into numarray CVS yesterday
afternoon. I fixed the last doctest artifact and re-arranged a little
this morning.
If you're working from CVS you should be able to see the new performance
optimization now by doing an update and building/linking against the
right libraries. To do that I:
setenv USE_LAPACK 1
setenv LINALG_LIB <where my libraries are>
setenv LINALG_INCLUDE <where my includes are>
Have a look. I think numarray is slightly ahead now.
Todd
More information about the NumPy-Discussion
mailing list