[SciPy-user] Multithreading cookbook entry

Anand Patil anand.prabhakar.patil at gmail.com
Wed Feb 20 23:22:39 EST 2008


Hi all,

I have a question primarily for Anne Archibald, the author of the
cookbook entry on multithreading,
http://www.scipy.org/Cookbook/Multithreading.

I tried replacing the 'if name=='__main__' clause in the attachment
handythread.py with

    from numpy import ones, exp
    def f(x):
        print x
        y = ones(10000000)
        exp(y)

and the wall-clock time with foreach was 4.72s vs 6.68s for a simple for-loop.

First of all, that's amazing! I've been internally railing against the
GIL for months. But it looks like only a portion of f is being done
concurrently. In fact if I comment out the 'exp(y)', I don't see any
speedup at all.

It makes sense that you can't malloc simultaneously from different
threads... but if I replace 'ones' with 'empty', the time drops
precipitously, indicating that most of the time taken by 'ones' is
spent actually filling the array with ones. It seems like you should
be able to do that concurrently.

So my question is, what kinds of numpy functions tend to release the
GIL? Is there a system to it, so that one can figure out ahead of time
where a speedup is likely, or do you have to try and see? Do
third-party f2py functions with the 'threadsafe' option release the
GIL?

Thanks,
Anand



More information about the SciPy-User mailing list