# [Numpy-discussion] Question about Optimization (Inline, and Pyrex)

Sebastian Haase haase@msg.ucsf....
Wed Apr 18 11:48:29 CDT 2007

```On 4/17/07, Anne Archibald <peridot.faceted@gmail.com> wrote:
> On 18/04/07, Robert Kern <robert.kern@gmail.com> wrote:
> > Sebastian Haase wrote:
> >
> > > Hi,
> > > I don't know much about ATLAS -- would there be other numpy functions
> > > that *could*  or *should*  be implemented using ATLAS !?
> > > Any ?
> >
> > Not really, no.
>
> ATLAS is a library designed to implement linear algebra functions
> efficiently on many machines. It does things like reorder the
> multiplications and additions in matrix multiplication to make the
> best possible use of your cache, as measured by empirical testing.

So, this means that 'matrixmultiply'  could / should be using ATLAS
for the same reason as 'dot' does - right ?

-Seb.

> (FFTW does something similar for the FFT.) But ATLAS is only designed
> for linear algebra. If what you want to do is linear algebra, look at
> scipy for a full selection of linear algebra routines that make fairly
> good use of ATLAS where applicable.
>
> It would be perfectly possible, in principle, to implement an
> ATLAS-like library that handled a variety (perhaps all) of numpy's
> basic operations in platform-optimized fashion. But implementing ATLAS
> is not a simple process! And it's not clear how much gain would be
> available - it would almost certainly be noticeably faster only for
> very large numpy objects (where the python overhead is unimportant),
> and those objects can be very inefficient because of excessive
> copying. And the scope of improvement would be very limited; an
> expression like A*B+C*D would be much more efficient, probably, if the
> whole expression were evaluated at once for each element (due to
> memory locality and temporary allocation). But it is impossible for
> numpy, sitting inside python as it does, to do that.
```