[Omp] A question about threadprivate

Marina Kraeva kraeva at iastate.edu
Wed Apr 11 09:49:49 PDT 2007


Dieter,

Alright, put update of the array into critical region.

The question is still the same. Larry said, that in the first example 
the values should persist, but it is not guaranteed in the second 
example. What do you think?

Marina.

Dieter an Mey wrote:

> Data race !
> 
> Dieter
> 
> Meadows, Lawrence F schrieb:
> 
>> I think that the standard specifies what you expect in the first
>> example. It makes no guarantee about the second example.
>>
>> -----Original Message-----
>> From: omp-bounces at openmp.org [mailto:omp-bounces at openmp.org] On Behalf
>> Of Marina Kraeva
>> Sent: Wednesday, April 11, 2007 9:16 AM
>> To: omp at openmp.org
>> Subject: [Omp] A question about threadprivate
>>
>> Hello,
>>
>> Could you please share your opinion on what will happen in the following
>>
>> two small examples.
>>
>> In the OpenMP API 2.5 (and in the earlier versions) it is said:
>> "The values of data in the threadprivate objects of threads other than 
>> the initial thread are guaranteed to persist between two consecutive 
>> active parallel regions only if all the following conditions hold:
>> * Neither parallel region is nested inside another parallel region..."
>>
>>
>> According to API, is it guaranteed that in the following example the 
>> values of 'i' will persist, so array will have values (0,1,2,3)?
>>
>> int i,array(0:3)
>> threadprivate(i)
>> !$omp parallel num_threads(4)
>>     i=omp_get_thread_num()
>>     !$omp parallel num_threads(2)
>>         ... ('i' is not referenced)
>>     !$omp end parallel
>> !$omp end parallel
>>
>> !$omp parallel num_threads(4) shared(array)
>>     array(omp_get_thread_num())=i
>> !$omp end parallel
>>
>>
>>
>> What if inside the nested parallel region 'i' was modified:
>>
>> int i,array(0:3)
>> threadprivate(i)
>> !$omp parallel num_threads(4)
>>     i=omp_get_thread_num()
>>     !$omp parallel num_threads(2)
>>                 i=-omp_get_thread_num()
>>     !$omp end parallel
>> !$omp end parallel
>>
>> !$omp parallel num_threads(4) shared(array)
>>     array(omp_get_thread_num())=i
>> !$omp end parallel
>>
>> Is it guaranteed, that array still will have values (0,1,2,3)?
>>
>> Thank you!
>> Marina Kraeva.
>> _______________________________________________
>> Omp mailing list
>> Omp at openmp.org
>> http://openmp.org/mailman/listinfo/omp
>> _______________________________________________
>> Omp mailing list
>> Omp at openmp.org
>> http://openmp.org/mailman/listinfo/omp
>>
> 


More information about the Omp mailing list