[Cython] CEP: prange for parallel loops

Robert Bradshaw robertwb at math.washington.edu
Tue Apr 5 16:53:33 CEST 2011


On Tue, Apr 5, 2011 at 3:51 AM, Stefan Behnel <stefan_ml at behnel.de> wrote:
> mark florisson, 04.04.2011 21:26:
>>
>> For clarity, I'll add an example:
>>
>> def f(np.ndarray[double] x, double alpha):
>>     cdef double s = 0
>>     cdef double tmp = 2
>>     cdef double other = 6.6
>>
>>     with nogil:
>>         for i in prange(x.shape[0]):
>>             # reading 'tmp' makes it firstprivate in addition to
>> lastprivate
>>             # 'other' is only ever read, so it's shared
>>             printf("%lf %lf %lf\n", tmp, s, other)
>
> So, adding a printf() to your code can change the semantics of your
> variables? That sounds like a really bad design to me.

That's what I was thinking. Basically, if you do an inlace operation,
then it's a reduction variable, no matter what else you do to it
(including possibly a direct assignment, though we could make that a
compile-time error).

- Robert


More information about the cython-devel mailing list