[SciPy-user] Multithreading cookbook entry
Anne Archibald
peridot.faceted at gmail.com
Thu Feb 21 13:43:21 EST 2008
On 21/02/2008, Anand Patil <anand.prabhakar.patil at gmail.com> wrote:
> On Thu, Feb 21, 2008 at 8:30 AM, Anne Archibald
> <peridot.faceted at gmail.com> wrote:
>
> > It would be useful to go through the code looking at which ones
> > do and don't release the GIL, and put it in their docstrings; it might
> > be possible to make more release the GIL. It's a pretty safe bet that
> > the ufuncs do; I would guess that the linear algebra functions do too.
> > Probably not much else.
>
>
> I second that suggestion. In fact I'd be willing to help out if it's a
> tedious but simple job.
Well, what needs to happen is that someone needs to go through and
track down occurrences of Py_BEGIN_ALLOW_THREADS ..
Py_END_ALLOW_THREADS in numpy.
A brute-force way of finding code that probably doesn't do it would be
to simply run each function in a foreach() with two threads and then
with one and see if there's any speedup. Messy and crude; probably
better just to look at the code, but numpy can be labyrinthine.
> Makes sense. Does anyone know about f2py extensions with 'cf2py
> threadsafe' set? From the f2py user's guide, the threadsafe option
> will
>
> Use Py_BEGIN_ALLOW_THREADS .. Py_END_ALLOW_THREADS block around the
> call to Fortran/C function.
>
> Is that sufficien to release the GIL? What if the functions have callbacks??
That's exactly what is needed to release the GIL.
I think, from looking at the code, that F2PY does nothing to reacquire
the GIL if it's entering a callback; this would mean that using
callbacks in a "threadsafe" function would cause a crash. So Don't Do
That. (But I'm not totally sure; maybe try generating one just to
check.)
Anne
More information about the SciPy-User
mailing list