Fortran - THREADPRIVATE Directive Example
PROGRAM THREADPRIV
INTEGER A, B, I, TID, OMP_GET_THREAD_NUM
REAL*4 X
COMMON /C1/ A
!$OMP THREADPRIVATE(/C1/, X)
C Explicitly turn off dynamic threads
CALL OMP_SET_DYNAMIC(.FALSE.)
PRINT *, '1st Parallel Region:'
!$OMP PARALLEL PRIVATE(B, TID)
TID = OMP_GET_THREAD_NUM()
A = TID
B = TID
X = 1.1 * TID + 1.0
PRINT *, 'Thread',TID,': A,B,X=',A,B,X
!$OMP END PARALLEL
PRINT *, '************************************'
PRINT *, 'Master thread doing serial work here'
PRINT *, '************************************'
PRINT *, '2nd Parallel Region: '
!$OMP PARALLEL PRIVATE(TID)
TID = OMP_GET_THREAD_NUM()
PRINT *, 'Thread',TID,': A,B,X=',A,B,X
!$OMP END PARALLEL
END
Output:
1st Parallel Region:
Thread 0 : A,B,X= 0 0 1.000000000
Thread 1 : A,B,X= 1 1 2.099999905
Thread 3 : A,B,X= 3 3 4.300000191
Thread 2 : A,B,X= 2 2 3.200000048
************************************
Master thread doing serial work here
************************************
2nd Parallel Region:
Thread 0 : A,B,X= 0 0 1.000000000
Thread 2 : A,B,X= 2 0 3.200000048
Thread 3 : A,B,X= 3 0 4.300000191
Thread 1 : A,B,X= 1 0 2.099999905
|