[Numpy-discussion] Multiple Boolean Operations
Andrea Gavana
andrea.gavana@gmail....
Sun May 25 17:03:42 CDT 2008
Hi Stefan & All,
On Sun, May 25, 2008 at 8:59 PM, Stéfan van der Walt wrote:
> 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
> ---------------------------------------------------------------------
Thank you for the tests you have run. I have run mine with Compaq
Visual Fortran 6.6 on Windows XP, and I assume I can not use gfortran
with MS visual studio 2003 (which is the compiler Python is built
with). So the only option I have is to try Intel Visual Fortran, which
I will do tomorrow, or stick with the numpy implementation as it looks
like there is nothing more I can do (even with sorted arrays or using
another approach, and I can't think of anything else) to speed up my
problem.
A big thank you to everyone in this list, you have been very kind and helpful.
Andrea.
"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/
More information about the Numpy-discussion
mailing list