[Cython] CEP: prange for parallel loops
Dag Sverre Seljebotn
d.s.seljebotn at astro.uio.no
Tue Apr 5 16:58:01 CEST 2011
On 04/05/2011 04:53 PM, Robert Bradshaw wrote:
> 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):
>>> # reading 'tmp' makes it firstprivate in addition to
>>> # '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).
-1, I think that's too obscure. Not being able to use inplace operators
for certain variables will be at the very least be nagging.
I think we need to explicitly declare something. Either a simple
prange(..., reduce="s:+"), or all-out declaration of thread-local variables.
Reduction isn't *that* common, so perhaps that is what should be
explicit, unlike my other proposal...
More information about the cython-devel