[Cython] OpenMP support
Stefan Behnel
stefan_ml at behnel.de
Fri Mar 11 12:43:30 CET 2011
Sturla Molden, 11.03.2011 12:13:
> OpenMP is a specification, not a particular implementation. Implementation
> for Cython should either be compiler pragmas or a library.
>
> I'd like it to be a library, as it should also be usable from Python. I
> have made some progress on the library route, depending on Cython's closures.
>
> nogil makes things feel a bit awkward, though.
>
> We could for example imagine code like this:
>
> with openmp.ordered(i):
> <suite>
>
> Context managers are forbidden in nogil AFAIK. So we end up with ugly hacks
> like this:
>
> with nogil:
> if openmp._ordered(i): # always returns 1, but will synchronize
> <suite>
>
> Would it be possible to:
>
> - Make context managers that are allowed without the GIL? We don't need to
> worry about exceptions, but it should be possible to short-circuit from
> __enter__ to __exit__.
The two special methods are Python methods. There is no way to call them
without holding the GIL. If we wanted to enable something like a context
manager inside of a nogil block, it would necessarily be a different protocol.
> - Have cpdefs that are callable without the GIL?
"cpdef" functions are meant to be overridable from Python code, so, no, you
cannot call them from within a nogil block as they may actually have been
overridden.
What's your use actual case for this?
Stefan
More information about the cython-devel
mailing list