[Omp] A question about threadprivate
Dieter an Mey
anmey at rz.rwth-aachen.de
Wed Apr 11 09:35:56 PDT 2007
Hi,
In general in the nested case each thread of the inner teams will get
their own copies.
They will be initialized "at an unspecified point in the program porior
to the first reference to that copy".
To my understanding of the specs ...
In case 1 the threadprivate variable is not referenced, so it is not
specified whether the inner teams' slave thread's copy will be
initialized at all.
References by the inner team's master threads "will be to the copy of
the object in the thread which encountered the (remark: inner) parallel
region".
Therefore in case 2 I would expect that the inner teams' master threads'
copies will be modified in the inner parallel region.
Therefore array will be set to -0 for all indeces.
best regards
Dieter
Marina Kraeva schrieb:
> 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
>
--
--------------------------------------------------------------------
Dieter an Mey
High Performance Computing Hochleistungsrechnen
RWTH Aachen University Rechen- und Kommunikations-
Center for Computing and Communication zentrum der RWTH Aachen
phone: ++49-(0)241-80-24377 Seffenter Weg 23
fax: ++49-(0)241-80-22134 52074 Aachen, Germany
email: anmey at rz.rwth-aachen.de
--------------------------------------------------------------------
More information about the Omp
mailing list