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
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to