copyin Clause
10.11. copyin Clause#
The copyin clause is used to initialize threadprivate data upon entry to a parallel region. The value of the threadprivate variable in the primary thread is copied to the threadprivate variable of each other team member.
//%compiler: clang
//%cflags: -fopenmp
/*
* name: copyin.1
* type: C
*/
#include <stdlib.h>
float* work;
int size;
float tol;
#pragma omp threadprivate(work,size,tol)
void build()
{
int i;
work = (float*)malloc( sizeof(float)*size );
for( i = 0; i < size; ++i ) work[i] = tol;
}
void copyin_example( float t, int n )
{
tol = t;
size = n;
#pragma omp parallel copyin(tol,size)
{
build();
}
}
!!%compiler: gfortran
!!%cflags: -fopenmp
! name: copyin.1
! type: F-fixed
MODULE M
REAL, POINTER, SAVE :: WORK(:)
INTEGER :: SIZE
REAL :: TOL
!$OMP THREADPRIVATE(WORK,SIZE,TOL)
END MODULE M
SUBROUTINE COPYIN_EXAMPLE( T, N )
USE M
REAL :: T
INTEGER :: N
TOL = T
SIZE = N
!$OMP PARALLEL COPYIN(TOL,SIZE)
CALL BUILD
!$OMP END PARALLEL
END SUBROUTINE COPYIN_EXAMPLE
SUBROUTINE BUILD
USE M
ALLOCATE(WORK(SIZE))
WORK = TOL
END SUBROUTINE BUILD