On 11 April 2011 12:08, Dag Sverre Seljebotn <d.s.seljeb...@astro.uio.no> wrote:
> On 04/11/2011 11:41 AM, mark florisson wrote:
>>
>> On 11 April 2011 11:10, Dag Sverre Seljebotn<d.s.seljeb...@astro.uio.no>
>>  wrote:
>>>
>>> On 04/11/2011 10:45 AM, mark florisson wrote:
>>>>
>>>> On 5 April 2011 22:29, Dag Sverre Seljebotn<d.s.seljeb...@astro.uio.no>
>>>>  wrote:
>>>>>
>>>>> I've done a pretty major revision to the prange CEP, bringing in a lot
>>>>> of
>>>>> the feedback.
>>>>>
>>>>> Thread-private variables are now split in two cases:
>>>>>
>>>>>  i) The safe cases, which really require very little technical
>>>>> knowledge
>>>>> ->
>>>>> automatically inferred
>>>>>
>>>>>  ii) As an advanced feature, unsafe cases that requires some knowledge
>>>>> of
>>>>> threading ->    must be explicitly declared
>>>>>
>>>>> I think this split simplifies things a great deal.
>>>>
>>>> Can't we obsolete the declaration entirely by assigning to variables
>>>> that need to have firstprivate behaviour inside the with parallel
>>>> block? Basically in the same way the scratch space is used. The only
>>>> problem with that is that it won't be lastprivate, so the value will
>>>> be undefined after the parallel block (but not after the worksharing
>>>> loop).
>>>>
>>>> cdef int myvariable
>>>>
>>>> with nogil, parallel:
>>>>     myvariable = 2
>>>>     for i in prange(...):
>>>>         use myvariable
>>>>         maybe assign to myvariable
>>>>
>>>>     # myvariable is well-defined here
>>>>
>>>> # myvariable is not well-defined here
>>>>
>>>> If you still desperately want lastprivate behaviour you can simply
>>>> assign myvariable to another variable in the loop body.
>>>
>>> I don't care about lastprivate, I don't think that is an issue, as you
>>> say.
>>>
>>> My problem with this is that it means going into an area where possibly
>>> tricky things are implicit rather than explicit. I also see this as a
>>> rather
>>> special case that will be seldomly used, and implicit behaviour is more
>>> difficult to justify because of that.
>>
>> Indeed, I actually considered if we should support firstprivate at
>> all, as it's really about "being firstprivate and lastprivate".
>> Without any declaration, you can have firstprivate or lastprivate, but
>> not both :) So I agree that supporting such a (probably) uncommon case
>> is better left explicit. On the other hand it seems silly to have
>> support for such a weird case.
>
> Well, I actually need to do the per-thread cache thing I described in the
> CEP in my own codes, so it's not *that* special; it'd be nice to support it.

You need 'old_ell' and 'alpha' after the loop?

> OTOH I *could* work around it by having an array of scalars
>
> cdef int[:] old_ell = int[:numthreads]()
>
> ...
>    if old_ell[threadid()] != ell: ...
>
>
> So I guess, it's at least on the bottom of list of priorities in that CEP.
>
> Dag Sverre
> _______________________________________________
> cython-devel mailing list
> cython-devel@python.org
> http://mail.python.org/mailman/listinfo/cython-devel
>
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to