[Cython] OpenMP support
Francesc Alted
faltet at pytables.org
Tue Mar 8 20:16:02 CET 2011
A Tuesday 08 March 2011 18:50:15 Stefan Behnel escrigué:
> mark florisson, 08.03.2011 18:00:
> > What I meant was that the
> > wrapper returned by the decorator would have to call the closure
> > for every iteration, which introduces function call overhead.
> >
> >[...]
> >
> > I guess we just have to establish what we want to do: do we
> > want to support code with Python objects (and exceptions etc), or
> > just C code written in Cython?
>
> I like the approach that Sturla mentioned: using closures to
> implement worker threads. I think that's very pythonic. You could do
> something like this, for example:
>
> def worker():
> for item in queue:
> with nogil:
> do_stuff(item)
>
> queue.extend(work_items)
> start_threads(worker, count)
>
> Note that the queue is only needed to tell the thread what to work
> on. A lot of things can be shared over the closure. So the queue may
> not even be required in many cases.
I like this approach too. I suppose that you will need to annotate the
items so that they are not Python objects, no? Something like:
def worker():
cdef int item # tell that item is not a Python object!
for item in queue:
with nogil:
do_stuff(item)
queue.extend(work_items)
start_threads(worker, count)
--
Francesc Alted
More information about the cython-devel
mailing list