LLVM OpenMP* Runtime Library
|
Functions | |
void | __kmpc_copyprivate (ident_t *loc, kmp_int32 gtid, size_t cpy_size, void *cpy_data, void(*cpy_func)(void *, void *), kmp_int32 didit) |
void | __kmpc_threadprivate_register (ident_t *loc, void *data, kmpc_ctor ctor, kmpc_cctor cctor, kmpc_dtor dtor) |
void * | __kmpc_threadprivate_cached (ident_t *loc, kmp_int32 global_tid, void *data, size_t size, void ***cache) |
void | __kmpc_threadprivate_register_vec (ident_t *loc, void *data, kmpc_ctor_vec ctor, kmpc_cctor_vec cctor, kmpc_dtor_vec dtor, size_t vector_length) |
typedef void *(* | kmpc_ctor) (void *) |
typedef void(* | kmpc_dtor) (void *) |
typedef void *(* | kmpc_cctor) (void *, void *) |
typedef void *(* | kmpc_ctor_vec) (void *, size_t) |
typedef void(* | kmpc_dtor_vec) (void *, size_t) |
typedef void *(* | kmpc_cctor_vec) (void *, void *, size_t) |
These functions support copyin/out and thread private data.
typedef void*(* kmpc_cctor) (void *, void *) |
typedef void*(* kmpc_cctor_vec) (void *, void *, size_t) |
typedef void*(* kmpc_ctor) (void *) |
typedef void*(* kmpc_ctor_vec) (void *, size_t) |
typedef void(* kmpc_dtor) (void *) |
typedef void(* kmpc_dtor_vec) (void *, size_t) |
void __kmpc_copyprivate | ( | ident_t * | loc, |
kmp_int32 | gtid, | ||
size_t | cpy_size, | ||
void * | cpy_data, | ||
void(*)(void *, void *) | cpy_func, | ||
kmp_int32 | didit | ||
) |
loc | source location information |
gtid | global thread number |
cpy_size | size of the cpy_data buffer |
cpy_data | pointer to data to be copied |
cpy_func | helper function to call for copying data |
didit | flag variable: 1=single thread; 0=not single thread |
__kmpc_copyprivate implements the interface for the private data broadcast needed for the copyprivate clause associated with a single region in an OpenMP* program (both C and Fortran). All threads participating in the parallel region call this routine. One of the threads (called the single thread) should have the didit
variable set to 1 and all other threads should have that variable set to 0. All threads pass a pointer to a data buffer (cpy_data) that they have built.
The OpenMP specification forbids the use of nowait on the single region when a copyprivate clause is present. However, __kmpc_copyprivate implements a barrier internally to avoid race conditions, so the code generation for the single region should avoid generating a barrier after the call to __kmpc_copyprivate.
The gtid
parameter is the global thread id for the current thread. The loc
parameter is a pointer to source location information.
Internal implementation: The single thread will first copy its descriptor address (cpy_data) to a team-private location, then the other threads will each call the function pointed to by the parameter cpy_func, which carries out the copy by copying the data using the cpy_data buffer.
The cpy_func routine used for the copy and the contents of the data area defined by cpy_data and cpy_size may be built in any fashion that will allow the copy to be done. For instance, the cpy_data buffer can hold the actual data to be copied or it may hold a list of pointers to the data. The cpy_func routine must interpret the cpy_data buffer appropriately.
The interface to cpy_func is as follows:
where void *destination is the cpy_data pointer for the thread being copied to and void *source is the cpy_data pointer for the thread being copied from.
Definition at line 2168 of file kmp_csupport.cpp.
void* __kmpc_threadprivate_cached | ( | ident_t * | loc, |
kmp_int32 | global_tid, | ||
void * | data, | ||
size_t | size, | ||
void *** | cache | ||
) |
loc | source location information |
global_tid | global thread number |
data | pointer to data to privatize |
size | size of data to privatize |
cache | pointer to cache |
Allocate private storage for threadprivate data.
Definition at line 614 of file kmp_threadprivate.cpp.
void __kmpc_threadprivate_register | ( | ident_t * | loc, |
void * | data, | ||
kmpc_ctor | ctor, | ||
kmpc_cctor | cctor, | ||
kmpc_dtor | dtor | ||
) |
loc | source location information |
data | pointer to data being privatized |
ctor | pointer to constructor function for data |
cctor | pointer to copy constructor function for data |
dtor | pointer to destructor function for data |
Register constructors and destructors for thread private data. This function is called when executing in parallel, when we know the thread id.
Definition at line 504 of file kmp_threadprivate.cpp.
void __kmpc_threadprivate_register_vec | ( | ident_t * | loc, |
void * | data, | ||
kmpc_ctor_vec | ctor, | ||
kmpc_cctor_vec | cctor, | ||
kmpc_dtor_vec | dtor, | ||
size_t | vector_length | ||
) |
loc | source location information |
data | pointer to data being privatized |
ctor | pointer to constructor function for data |
cctor | pointer to copy constructor function for data |
dtor | pointer to destructor function for data |
vector_length | length of the vector (bytes or elements?) Register vector constructors and destructors for thread private data. |
Definition at line 746 of file kmp_threadprivate.cpp.