[Omp] A question about threadprivate

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


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.


More information about the Omp mailing list