[SciPy-User] numpy.histogram is slow

Sturla Molden sturla@molden...
Mon Oct 22 06:59:23 CDT 2012

On 18.10.2012 09:26, Jerome Kieffer wrote:

> I implemented a 1D and 2D histogram, weighted and unweighted using cython (>=0.17) in parallel.
> It is much faster than the one provided by numpy:
> 4ms vs 25ms in your case on my computer
> https://github.com/kif/pyFAI/blob/master/src/histogram.pyx

Is there a reason why you set cdivision to True in a code that has no 
integer division?


Cython prange scales badly unless you do a lot of work on each 
iteration. That is, each iteration of a prange loop does a barrier 
synchronization through an OpenMP flush. Don't use it the way you do 
here. A Cython prange loop is not nearly as cheap as a C loop with 
"#pragma omp parallel for". If you really want to use OpenMP, let your 
Cython code call C code.

NumPy does not have a build system for OpenMP. Python threads works fine 
too. It takes some more coding, but if you use closures in Cython it 
will not be nearly as difficult as the "Java threads" coding style.


More information about the SciPy-User mailing list