[Cython] Another CEP: Parallel block

Dag Sverre Seljebotn d.s.seljebotn at astro.uio.no
Tue Apr 5 11:08:43 CEST 2011


On 04/05/2011 11:01 AM, Stefan Behnel wrote:
> mark florisson, 05.04.2011 10:44:
>> On 5 April 2011 10:34, Stefan Behnel wrote:
>>> mark florisson, 05.04.2011 10:26:
>>>>
>>>> On 5 April 2011 09:21, Dag Sverre Seljebotn wrote:
>>>>>
>>>>> Justification for Cython-specific syntax: This is something that is
>>>>> really
>>>>> only useful if you can release the GIL *outside* of the loop. So I 
>>>>> feel
>>>>> this
>>>>> is an area where a custom Cython solution is natural, sort of like 
>>>>> "cdef
>>>>> extern", and the buffer access.
>>>>>
>>>>> Since a similar pure-Python solution is rather useless, I also think
>>>>> there's
>>>>> less incentive for making something that works well in pure-Python 
>>>>> mode.
>>>>
>>>> Which feature is Cython specific here? The 'with a, b as c:' thing?
>>>
>>> No, the syntax is just Python. It's the scoping that's Cython specific,
>>> including the local variable declarations inside of the "with" block.
>>
>> Hmm, but you can use cython.declare() for that, no?
>
> cython.declare() is a no-op (or just a plain assignment) in Python. 
> But the thread-local scoping of these variables cannot be emulated in 
> Python. So this would be a feature that cannot be used in pure Python 
> mode, unlike closures.

The intention of prange was certainly to fall back to a normal 
single-threaded range in Python mode.

Because of the GIL there would rarely be any benefit in running the loop 
in parallel -- only if you immediately dispatch to a long-running task 
that itself releases the GIL, but in those cases you should rather stick 
to pure Python in the first place and not bother with prange.

I think the chance of seeing real-life code that both requires prange to 
run optimally in Cython, and that would not be made slower by more than 
one thread in Python, is pretty close to zero.

Dag Sverre


More information about the cython-devel mailing list