[Numpy-discussion] Multiple Boolean Operations

Stéfan van der Walt stefan@sun.ac...
Sun May 25 14:59:45 CDT 2008


Hi Andrea

2008/5/25 Andrea Gavana <andrea.gavana@gmail.com>:
>> When you bench the Cython code, you'll have to take out the Python
>> calls (for checking dtype etc.), otherwise you're comparing apples and
>> oranges.  After I tweaked it, it ran roughly the same time as
>> Francesc's version.  But like I mentioned before, the Fortran results
>> should trump all, so what is going on here?
>
> I thought I had removed the Python checks from the Cython code (if you
> look at the attached files), but maybe I haven't removed them all...
> about Fortran, I have no idea: I have 6 different implementations in
> Fortran, and they are all slower than the pure NumPy ones. I don't
> know if I can optimiza them further (I have asked to a Fortran
> newsgroup too, but no faster solution has arisen). I am not even sure
> if the defaults f2py compiler options are already on "maximum
> optimization" for Fortran. Does anyone know if this is true? Maybe
> Pearu can shed some light on this issue...

Here are the timings on my machine.  You were right -- you did remove
the type checks in the Cython code.  It turns out the bottleneck was
the "for i in range" loop.  I was under the impression that loop was
correctly optimised; I'll have a chat with the Cython developers.  If
I change it to "for i in xrange" or "for i from 0 <= i < n" the speed
improves a lot.

I used gfortran 4.2.1, and as you can see below, the Fortran
implementation beat all the others.

---------------------------------------------------------------------
                       Number Of Cells: 300000
---------------------------------------------------------------------
| Rank |      Method Name      | Execution Time | Relative Slowness |
---------------------------------------------------------------------
   1       Fortran 5 (James)       0.01854820          1.00000
   2       Fortran 6 (James)       0.01882849          1.01511
   3        Fortran 1 (Mine)       0.01917751          1.03393
   4      Fortran 4 {Michael)      0.01927021          1.03893
   5        Fortran 2 (Mine)       0.01937311          1.04447
   6    NumPy 4 (Nathan-Vector)    0.02008982          1.08311
   7        NumPy 2 (Nathan)       0.02046990          1.10361
   8        NumPy 5 (Andrea)       0.02108521          1.13678
   9       NumPy 1 (Francesc)      0.02211959          1.19255
  10        Cython (Stefan)        0.02235680          1.20533
  11        Fortran 3 (Alex)       0.02486629          1.34063
  12        NumPy 3 (Peter)        0.05020461          2.70671
---------------------------------------------------------------------

Regards
Stéfan


More information about the Numpy-discussion mailing list