LLVM OpenMP 19.0.0git
Classes | Enumerations | Functions
Work Sharing

These functions are used for implementing #pragma omp for, #pragma omp sections, #pragma omp single and #pragma omp master constructs. More...

Classes

struct  bounds_infoXX_template< T >
 Describes the structure for rectangular nested loops. More...
 
struct  bounds_info_t
 Interface struct for rectangular nested loops. More...
 

Enumerations

enum  sched_type : kmp_int32 {
  kmp_sch_lower = 32 , kmp_sch_static_chunked = 33 , kmp_sch_static = 34 , kmp_sch_dynamic_chunked = 35 ,
  kmp_sch_guided_chunked = 36 , kmp_sch_runtime = 37 , kmp_sch_auto = 38 , kmp_sch_trapezoidal = 39 ,
  kmp_sch_static_greedy = 40 , kmp_sch_static_balanced = 41 , kmp_sch_guided_iterative_chunked = 42 , kmp_sch_guided_analytical_chunked = 43 ,
  kmp_sch_static_steal = 44 , kmp_sch_static_balanced_chunked = 45 , kmp_sch_guided_simd = 46 , kmp_sch_runtime_simd = 47 ,
  kmp_sch_upper , kmp_ord_lower = 64 , kmp_ord_static_chunked = 65 , kmp_ord_static = 66 ,
  kmp_ord_dynamic_chunked = 67 , kmp_ord_guided_chunked = 68 , kmp_ord_runtime = 69 , kmp_ord_auto = 70 ,
  kmp_ord_trapezoidal = 71 , kmp_ord_upper , kmp_distribute_static_chunked = 91 , kmp_distribute_static = 92 ,
  kmp_nm_lower = 160 , kmp_nm_static_chunked , kmp_nm_static = 162 , kmp_nm_dynamic_chunked = 163 ,
  kmp_nm_guided_chunked = 164 , kmp_nm_runtime = 165 , kmp_nm_auto = 166 , kmp_nm_trapezoidal = 167 ,
  kmp_nm_static_greedy = 168 , kmp_nm_static_balanced = 169 , kmp_nm_guided_iterative_chunked = 170 , kmp_nm_guided_analytical_chunked = 171 ,
  kmp_nm_static_steal , kmp_nm_ord_static_chunked = 193 , kmp_nm_ord_static = 194 , kmp_nm_ord_dynamic_chunked = 195 ,
  kmp_nm_ord_guided_chunked = 196 , kmp_nm_ord_runtime = 197 , kmp_nm_ord_auto = 198 , kmp_nm_ord_trapezoidal = 199 ,
  kmp_nm_upper , kmp_sch_modifier_monotonic , kmp_sch_modifier_nonmonotonic , kmp_sch_default = kmp_sch_static
}
 Describes the loop schedule to be used for a parallel for loop. More...
 

Functions

kmp_int32 __kmpc_master (ident_t *loc, kmp_int32 global_tid)
 
void __kmpc_end_master (ident_t *loc, kmp_int32 global_tid)
 
kmp_int32 __kmpc_masked (ident_t *loc, kmp_int32 global_tid, kmp_int32 filter)
 
void __kmpc_end_masked (ident_t *loc, kmp_int32 global_tid)
 
void __kmpc_ordered (ident_t *loc, kmp_int32 gtid)
 
void __kmpc_end_ordered (ident_t *loc, kmp_int32 gtid)
 
void __kmpc_critical (ident_t *loc, kmp_int32 global_tid, kmp_critical_name *crit)
 
void __kmpc_end_critical (ident_t *loc, kmp_int32 global_tid, kmp_critical_name *crit)
 
kmp_int32 __kmpc_single (ident_t *loc, kmp_int32 global_tid)
 
void __kmpc_end_single (ident_t *loc, kmp_int32 global_tid)
 
void __kmpc_for_static_fini (ident_t *loc, kmp_int32 global_tid)
 
void __kmpc_doacross_init (ident_t *loc, int gtid, int num_dims, const struct kmp_dim *dims)
 
kmp_int32 __kmpc_sections_init (ident_t *loc, kmp_int32 gtid)
 
kmp_int32 __kmpc_next_section (ident_t *loc, kmp_int32 gtid, kmp_int32 numberOfSections)
 
void __kmpc_end_sections (ident_t *loc, kmp_int32 gtid)
 
void __kmpc_dispatch_init_4 (ident_t *loc, kmp_int32 gtid, enum sched_type schedule, kmp_int32 lb, kmp_int32 ub, kmp_int32 st, kmp_int32 chunk)
 
void __kmpc_dispatch_init_4u (ident_t *loc, kmp_int32 gtid, enum sched_type schedule, kmp_uint32 lb, kmp_uint32 ub, kmp_int32 st, kmp_int32 chunk)
 See __kmpc_dispatch_init_4.
 
void __kmpc_dispatch_init_8 (ident_t *loc, kmp_int32 gtid, enum sched_type schedule, kmp_int64 lb, kmp_int64 ub, kmp_int64 st, kmp_int64 chunk)
 See __kmpc_dispatch_init_4.
 
void __kmpc_dispatch_init_8u (ident_t *loc, kmp_int32 gtid, enum sched_type schedule, kmp_uint64 lb, kmp_uint64 ub, kmp_int64 st, kmp_int64 chunk)
 See __kmpc_dispatch_init_4.
 
void __kmpc_dist_dispatch_init_4 (ident_t *loc, kmp_int32 gtid, enum sched_type schedule, kmp_int32 *p_last, kmp_int32 lb, kmp_int32 ub, kmp_int32 st, kmp_int32 chunk)
 See __kmpc_dispatch_init_4.
 
void __kmpc_dist_dispatch_init_4u (ident_t *loc, kmp_int32 gtid, enum sched_type schedule, kmp_int32 *p_last, kmp_uint32 lb, kmp_uint32 ub, kmp_int32 st, kmp_int32 chunk)
 
void __kmpc_dist_dispatch_init_8 (ident_t *loc, kmp_int32 gtid, enum sched_type schedule, kmp_int32 *p_last, kmp_int64 lb, kmp_int64 ub, kmp_int64 st, kmp_int64 chunk)
 
void __kmpc_dist_dispatch_init_8u (ident_t *loc, kmp_int32 gtid, enum sched_type schedule, kmp_int32 *p_last, kmp_uint64 lb, kmp_uint64 ub, kmp_int64 st, kmp_int64 chunk)
 
int __kmpc_dispatch_next_4 (ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last, kmp_int32 *p_lb, kmp_int32 *p_ub, kmp_int32 *p_st)
 
int __kmpc_dispatch_next_4u (ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last, kmp_uint32 *p_lb, kmp_uint32 *p_ub, kmp_int32 *p_st)
 See __kmpc_dispatch_next_4.
 
int __kmpc_dispatch_next_8 (ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last, kmp_int64 *p_lb, kmp_int64 *p_ub, kmp_int64 *p_st)
 See __kmpc_dispatch_next_4.
 
int __kmpc_dispatch_next_8u (ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last, kmp_uint64 *p_lb, kmp_uint64 *p_ub, kmp_int64 *p_st)
 See __kmpc_dispatch_next_4.
 
void __kmpc_dispatch_fini_4 (ident_t *loc, kmp_int32 gtid)
 
void __kmpc_dispatch_fini_8 (ident_t *loc, kmp_int32 gtid)
 See __kmpc_dispatch_fini_4.
 
void __kmpc_dispatch_fini_4u (ident_t *loc, kmp_int32 gtid)
 See __kmpc_dispatch_fini_4.
 
void __kmpc_dispatch_fini_8u (ident_t *loc, kmp_int32 gtid)
 See __kmpc_dispatch_fini_4.
 
void __kmpc_for_static_init_4 (ident_t *loc, kmp_int32 gtid, kmp_int32 schedtype, kmp_int32 *plastiter, kmp_int32 *plower, kmp_int32 *pupper, kmp_int32 *pstride, kmp_int32 incr, kmp_int32 chunk)
 
void __kmpc_for_static_init_4u (ident_t *loc, kmp_int32 gtid, kmp_int32 schedtype, kmp_int32 *plastiter, kmp_uint32 *plower, kmp_uint32 *pupper, kmp_int32 *pstride, kmp_int32 incr, kmp_int32 chunk)
 See __kmpc_for_static_init_4.
 
void __kmpc_for_static_init_8 (ident_t *loc, kmp_int32 gtid, kmp_int32 schedtype, kmp_int32 *plastiter, kmp_int64 *plower, kmp_int64 *pupper, kmp_int64 *pstride, kmp_int64 incr, kmp_int64 chunk)
 See __kmpc_for_static_init_4.
 
void __kmpc_for_static_init_8u (ident_t *loc, kmp_int32 gtid, kmp_int32 schedtype, kmp_int32 *plastiter, kmp_uint64 *plower, kmp_uint64 *pupper, kmp_int64 *pstride, kmp_int64 incr, kmp_int64 chunk)
 See __kmpc_for_static_init_4.
 
void __kmpc_dist_for_static_init_4 (ident_t *loc, kmp_int32 gtid, kmp_int32 schedule, kmp_int32 *plastiter, kmp_int32 *plower, kmp_int32 *pupper, kmp_int32 *pupperD, kmp_int32 *pstride, kmp_int32 incr, kmp_int32 chunk)
 
void __kmpc_dist_for_static_init_4u (ident_t *loc, kmp_int32 gtid, kmp_int32 schedule, kmp_int32 *plastiter, kmp_uint32 *plower, kmp_uint32 *pupper, kmp_uint32 *pupperD, kmp_int32 *pstride, kmp_int32 incr, kmp_int32 chunk)
 See __kmpc_dist_for_static_init_4.
 
void __kmpc_dist_for_static_init_8 (ident_t *loc, kmp_int32 gtid, kmp_int32 schedule, kmp_int32 *plastiter, kmp_int64 *plower, kmp_int64 *pupper, kmp_int64 *pupperD, kmp_int64 *pstride, kmp_int64 incr, kmp_int64 chunk)
 See __kmpc_dist_for_static_init_4.
 
void __kmpc_dist_for_static_init_8u (ident_t *loc, kmp_int32 gtid, kmp_int32 schedule, kmp_int32 *plastiter, kmp_uint64 *plower, kmp_uint64 *pupper, kmp_uint64 *pupperD, kmp_int64 *pstride, kmp_int64 incr, kmp_int64 chunk)
 See __kmpc_dist_for_static_init_4.
 
void __kmpc_team_static_init_4 (ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last, kmp_int32 *p_lb, kmp_int32 *p_ub, kmp_int32 *p_st, kmp_int32 incr, kmp_int32 chunk)
 
void __kmpc_team_static_init_4u (ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last, kmp_uint32 *p_lb, kmp_uint32 *p_ub, kmp_int32 *p_st, kmp_int32 incr, kmp_int32 chunk)
 See __kmpc_team_static_init_4.
 
void __kmpc_team_static_init_8 (ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last, kmp_int64 *p_lb, kmp_int64 *p_ub, kmp_int64 *p_st, kmp_int64 incr, kmp_int64 chunk)
 See __kmpc_team_static_init_4.
 
void __kmpc_team_static_init_8u (ident_t *loc, kmp_int32 gtid, kmp_int32 *p_last, kmp_uint64 *p_lb, kmp_uint64 *p_ub, kmp_int64 *p_st, kmp_int64 incr, kmp_int64 chunk)
 See __kmpc_team_static_init_4.
 

Detailed Description

These functions are used for implementing #pragma omp for, #pragma omp sections, #pragma omp single and #pragma omp master constructs.

When handling loops, there are different functions for each of the signed and unsigned 32 and 64 bit integer types which have the name suffixes _4, _4u, _8 and _8u. The semantics of each of the functions is the same, so they are only described once.

Static loop scheduling is handled by __kmpc_for_static_init_4 and friends. Only a single call is needed, since the iterations to be executed by any give thread can be determined as soon as the loop parameters are known.

Dynamic scheduling is handled by the __kmpc_dispatch_init_4 and __kmpc_dispatch_next_4 functions. The init function is called once in each thread outside the loop, while the next function is called each time that the previous chunk of work has been exhausted.

Enumeration Type Documentation

◆ sched_type

Describes the loop schedule to be used for a parallel for loop.

Enumerator
kmp_sch_lower 

lower bound for unordered values

kmp_sch_static_chunked 
kmp_sch_static 

static unspecialized

kmp_sch_dynamic_chunked 
kmp_sch_guided_chunked 

guided unspecialized

kmp_sch_runtime 
kmp_sch_auto 

auto

kmp_sch_trapezoidal 
kmp_sch_static_greedy 
kmp_sch_static_balanced 
kmp_sch_guided_iterative_chunked 
kmp_sch_guided_analytical_chunked 
kmp_sch_static_steal 
kmp_sch_static_balanced_chunked 
kmp_sch_guided_simd 

guided with chunk adjustment

kmp_sch_runtime_simd 

runtime with chunk adjustment

kmp_sch_upper 

upper bound for unordered values

kmp_ord_lower 

lower bound for ordered values, must be power of 2

kmp_ord_static_chunked 
kmp_ord_static 

ordered static unspecialized

kmp_ord_dynamic_chunked 
kmp_ord_guided_chunked 
kmp_ord_runtime 
kmp_ord_auto 

ordered auto

kmp_ord_trapezoidal 
kmp_ord_upper 

upper bound for ordered values

kmp_distribute_static_chunked 

distribute static chunked

kmp_distribute_static 

distribute static unspecialized

kmp_nm_lower 

lower bound for nomerge values

kmp_nm_static_chunked 
kmp_nm_static 

static unspecialized

kmp_nm_dynamic_chunked 
kmp_nm_guided_chunked 

guided unspecialized

kmp_nm_runtime 
kmp_nm_auto 

auto

kmp_nm_trapezoidal 
kmp_nm_static_greedy 
kmp_nm_static_balanced 
kmp_nm_guided_iterative_chunked 
kmp_nm_guided_analytical_chunked 
kmp_nm_static_steal 
kmp_nm_ord_static_chunked 
kmp_nm_ord_static 

ordered static unspecialized

kmp_nm_ord_dynamic_chunked 
kmp_nm_ord_guided_chunked 
kmp_nm_ord_runtime 
kmp_nm_ord_auto 

auto

kmp_nm_ord_trapezoidal 
kmp_nm_upper 

upper bound for nomerge values

kmp_sch_modifier_monotonic 

Set if the monotonic schedule modifier was present.

kmp_sch_modifier_nonmonotonic 

Set if the nonmonotonic schedule modifier was present.

kmp_sch_default 

default scheduling algorithm

Definition at line 370 of file kmp.h.

Function Documentation

◆ __kmpc_critical()

void __kmpc_critical ( ident_t loc,
kmp_int32  global_tid,
kmp_critical_name crit 
)
Parameters
locsource location information.
global_tidglobal thread number.
critidentity of the critical section. This could be a pointer to a lock associated with the critical section, or some other suitably unique value.

Enter code protected by a critical construct. This function blocks until the executing thread can enter the critical section.

Definition at line 1288 of file kmp_csupport.cpp.

References __kmp_acquire_user_lock_with_checks(), __kmp_assert_valid_gtid(), __kmp_env_consistency_check, __kmp_get_critical_section_ptr(), __kmp_push_sync(), __kmp_threads, __kmp_user_lock_kind, __kmpc_critical_with_hint(), crit, ct_critical, ompt_callbacks_active_s::enabled, KA_TRACE, KC_TRACE, KMP_CHECK_USER_LOCK_INIT, KMP_COUNT_BLOCK, KMP_POP_PARTITIONED_TIMER, KMP_PUSH_PARTITIONED_TIMER, lck, lk_tas, loc, OMP_CRITICAL_SIZE, ompt_callbacks, ompt_enabled, ompt_thread_info_t::state, and ompt_thread_info_t::wait_id.

Referenced by KMP_API_NAME_GOMP_CRITICAL_NAME_START(), and KMP_API_NAME_GOMP_CRITICAL_START().

◆ __kmpc_dispatch_fini_4()

void __kmpc_dispatch_fini_4 ( ident_t loc,
kmp_int32  gtid 
)
Parameters
locSource code location
gtidGlobal thread id

Mark the end of a dynamic loop.

Definition at line 2988 of file kmp_dispatch.cpp.

References loc.

◆ __kmpc_dispatch_fini_4u()

void __kmpc_dispatch_fini_4u ( ident_t loc,
kmp_int32  gtid 
)

See __kmpc_dispatch_fini_4.

Definition at line 3002 of file kmp_dispatch.cpp.

References loc.

◆ __kmpc_dispatch_fini_8()

void __kmpc_dispatch_fini_8 ( ident_t loc,
kmp_int32  gtid 
)

See __kmpc_dispatch_fini_4.

Definition at line 2995 of file kmp_dispatch.cpp.

References loc.

◆ __kmpc_dispatch_fini_8u()

void __kmpc_dispatch_fini_8u ( ident_t loc,
kmp_int32  gtid 
)

See __kmpc_dispatch_fini_4.

Definition at line 3009 of file kmp_dispatch.cpp.

References loc.

◆ __kmpc_dispatch_init_4()

void __kmpc_dispatch_init_4 ( ident_t loc,
kmp_int32  gtid,
enum sched_type  schedule,
kmp_int32  lb,
kmp_int32  ub,
kmp_int32  st,
kmp_int32  chunk 
)
Parameters
locSource location
gtidGlobal thread id
scheduleSchedule type
lbLower bound
ubUpper bound
stStep (or increment if you prefer)
chunkThe chunk size to block with

This function prepares the runtime to start a dynamically scheduled for loop, saving the loop arguments. These functions are all identical apart from the types of the arguments.

Definition at line 2801 of file kmp_dispatch.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_dispatch_init_4u()

void __kmpc_dispatch_init_4u ( ident_t loc,
kmp_int32  gtid,
enum sched_type  schedule,
kmp_uint32  lb,
kmp_uint32  ub,
kmp_int32  st,
kmp_int32  chunk 
)

See __kmpc_dispatch_init_4.

Definition at line 2813 of file kmp_dispatch.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_dispatch_init_8()

void __kmpc_dispatch_init_8 ( ident_t loc,
kmp_int32  gtid,
enum sched_type  schedule,
kmp_int64  lb,
kmp_int64  ub,
kmp_int64  st,
kmp_int64  chunk 
)

See __kmpc_dispatch_init_4.

Definition at line 2826 of file kmp_dispatch.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_dispatch_init_8u()

void __kmpc_dispatch_init_8u ( ident_t loc,
kmp_int32  gtid,
enum sched_type  schedule,
kmp_uint64  lb,
kmp_uint64  ub,
kmp_int64  st,
kmp_int64  chunk 
)

See __kmpc_dispatch_init_4.

Definition at line 2839 of file kmp_dispatch.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_dispatch_next_4()

int __kmpc_dispatch_next_4 ( ident_t loc,
kmp_int32  gtid,
kmp_int32 p_last,
kmp_int32 p_lb,
kmp_int32 p_ub,
kmp_int32 p_st 
)
Parameters
locSource code location
gtidGlobal thread id
p_lastPointer to a flag set to one if this is the last chunk or zero otherwise
p_lbPointer to the lower bound for the next chunk of work
p_ubPointer to the upper bound for the next chunk of work
p_stPointer to the stride for the next chunk of work
Returns
one if there is work to be done, zero otherwise

Get the next dynamically allocated chunk of work for this thread. If there is no more work, then the lb,ub and stride need not be modified.

Definition at line 2919 of file kmp_dispatch.cpp.

References loc.

◆ __kmpc_dispatch_next_4u()

int __kmpc_dispatch_next_4u ( ident_t loc,
kmp_int32  gtid,
kmp_int32 p_last,
kmp_uint32 p_lb,
kmp_uint32 p_ub,
kmp_int32 p_st 
)

See __kmpc_dispatch_next_4.

Definition at line 2935 of file kmp_dispatch.cpp.

References loc.

◆ __kmpc_dispatch_next_8()

int __kmpc_dispatch_next_8 ( ident_t loc,
kmp_int32  gtid,
kmp_int32 p_last,
kmp_int64 p_lb,
kmp_int64 p_ub,
kmp_int64 p_st 
)

See __kmpc_dispatch_next_4.

Definition at line 2952 of file kmp_dispatch.cpp.

References loc.

◆ __kmpc_dispatch_next_8u()

int __kmpc_dispatch_next_8u ( ident_t loc,
kmp_int32  gtid,
kmp_int32 p_last,
kmp_uint64 p_lb,
kmp_uint64 p_ub,
kmp_int64 p_st 
)

See __kmpc_dispatch_next_4.

Definition at line 2968 of file kmp_dispatch.cpp.

References loc.

◆ __kmpc_dist_dispatch_init_4()

void __kmpc_dist_dispatch_init_4 ( ident_t loc,
kmp_int32  gtid,
enum sched_type  schedule,
kmp_int32 p_last,
kmp_int32  lb,
kmp_int32  ub,
kmp_int32  st,
kmp_int32  chunk 
)

See __kmpc_dispatch_init_4.

Difference from __kmpc_dispatch_init set of functions is these functions are called for composite distribute parallel for construct. Thus before regular iterations dispatching we need to calc per-team iteration space.

These functions are all identical apart from the types of the arguments.

Definition at line 2858 of file kmp_dispatch.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_dist_dispatch_init_4u()

void __kmpc_dist_dispatch_init_4u ( ident_t loc,
kmp_int32  gtid,
enum sched_type  schedule,
kmp_int32 p_last,
kmp_uint32  lb,
kmp_uint32  ub,
kmp_int32  st,
kmp_int32  chunk 
)

Definition at line 2870 of file kmp_dispatch.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_dist_dispatch_init_8()

void __kmpc_dist_dispatch_init_8 ( ident_t loc,
kmp_int32  gtid,
enum sched_type  schedule,
kmp_int32 p_last,
kmp_int64  lb,
kmp_int64  ub,
kmp_int64  st,
kmp_int64  chunk 
)

Definition at line 2882 of file kmp_dispatch.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_dist_dispatch_init_8u()

void __kmpc_dist_dispatch_init_8u ( ident_t loc,
kmp_int32  gtid,
enum sched_type  schedule,
kmp_int32 p_last,
kmp_uint64  lb,
kmp_uint64  ub,
kmp_int64  st,
kmp_int64  chunk 
)

Definition at line 2894 of file kmp_dispatch.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_dist_for_static_init_4()

void __kmpc_dist_for_static_init_4 ( ident_t loc,
kmp_int32  gtid,
kmp_int32  schedule,
kmp_int32 plastiter,
kmp_int32 plower,
kmp_int32 pupper,
kmp_int32 pupperD,
kmp_int32 pstride,
kmp_int32  incr,
kmp_int32  chunk 
)
Parameters
locSource code location
gtidGlobal thread id of this thread
scheduleScheduling type for the parallel loop
plastiterPointer to the "last iteration" flag
plowerPointer to the lower bound
pupperPointer to the upper bound of loop chunk
pupperDPointer to the upper bound of dist_chunk
pstridePointer to the stride for parallel loop
incrLoop increment
chunkThe chunk size for the parallel loop

Each of the four functions here are identical apart from the argument types.

The functions compute the upper and lower bounds and strides to be used for the set of iterations to be executed by the current thread from the statically scheduled loop that is described by the initial values of the bounds, strides, increment and chunks for parallel loop and distribute constructs.

Definition at line 983 of file kmp_sched.cpp.

References loc, and OMPT_CODEPTR_ARG.

◆ __kmpc_dist_for_static_init_4u()

void __kmpc_dist_for_static_init_4u ( ident_t loc,
kmp_int32  gtid,
kmp_int32  schedule,
kmp_int32 plastiter,
kmp_uint32 plower,
kmp_uint32 pupper,
kmp_uint32 pupperD,
kmp_int32 pstride,
kmp_int32  incr,
kmp_int32  chunk 
)

See __kmpc_dist_for_static_init_4.

Definition at line 996 of file kmp_sched.cpp.

References loc, and OMPT_CODEPTR_ARG.

◆ __kmpc_dist_for_static_init_8()

void __kmpc_dist_for_static_init_8 ( ident_t loc,
kmp_int32  gtid,
kmp_int32  schedule,
kmp_int32 plastiter,
kmp_int64 plower,
kmp_int64 pupper,
kmp_int64 pupperD,
kmp_int64 pstride,
kmp_int64  incr,
kmp_int64  chunk 
)

See __kmpc_dist_for_static_init_4.

Definition at line 1009 of file kmp_sched.cpp.

References loc, and OMPT_CODEPTR_ARG.

◆ __kmpc_dist_for_static_init_8u()

void __kmpc_dist_for_static_init_8u ( ident_t loc,
kmp_int32  gtid,
kmp_int32  schedule,
kmp_int32 plastiter,
kmp_uint64 plower,
kmp_uint64 pupper,
kmp_uint64 pupperD,
kmp_int64 pstride,
kmp_int64  incr,
kmp_int64  chunk 
)

See __kmpc_dist_for_static_init_4.

Definition at line 1022 of file kmp_sched.cpp.

References loc, and OMPT_CODEPTR_ARG.

◆ __kmpc_doacross_init()

void __kmpc_doacross_init ( ident_t loc,
int  gtid,
int  num_dims,
const struct kmp_dim dims 
)
Parameters
locsource location information.
gtidglobal thread number.
num_dimsnumber of associated doacross loops.
dimsinfo on loops bounds.

Initialize doacross loop information. Expect compiler send us inclusive bounds, e.g. for(i=2;i<9;i+=2) lo=2, up=8, st=2.

Definition at line 4090 of file kmp_csupport.cpp.

References __kmp_assert_valid_gtid(), __kmp_dispatch_num_buffers, __kmp_eq_4(), __kmp_thread_calloc, __kmp_thread_malloc, __kmp_threads, __kmp_wait_4(), dispatch_shared_info::doacross_buf_idx, dispatch_shared_info::doacross_flags, dispatch_shared_info::doacross_num_done, j, KA_TRACE, KMP_COMPARE_AND_STORE_RET32, KMP_COMPARE_AND_STORE_RET64, KMP_DEBUG_ASSERT, KMP_MB, KMP_YIELD, kmp_dim::lo, size, kmp_dim::st, kmp_team::t, kmp_disp::th_doacross_buf_idx, kmp_disp::th_doacross_flags, kmp_disp::th_doacross_info, TRUE, and kmp_dim::up.

◆ __kmpc_end_critical()

void __kmpc_end_critical ( ident_t loc,
kmp_int32  global_tid,
kmp_critical_name crit 
)
Parameters
locsource location information.
global_tidglobal thread number .
critidentity of the critical section. This could be a pointer to a lock associated with the critical section, or some other suitably unique value.

Leave a critical section, releasing any lock that was held during its execution.

Definition at line 1648 of file kmp_csupport.cpp.

References __kmp_env_consistency_check, __kmp_pop_sync(), __kmp_release_user_lock_with_checks(), __kmp_user_lock_kind, crit, ct_critical, KA_TRACE, KC_TRACE, KMP_ASSERT, KMP_POP_PARTITIONED_TIMER, lck, lk_tas, loc, OMP_CRITICAL_SIZE, ompt_callbacks, ompt_enabled, and TCR_PTR.

Referenced by KMP_API_NAME_GOMP_CRITICAL_END(), and KMP_API_NAME_GOMP_CRITICAL_NAME_END().

◆ __kmpc_end_masked()

void __kmpc_end_masked ( ident_t loc,
kmp_int32  global_tid 
)
Parameters
locsource location information.
global_tidglobal thread number .

Mark the end of a masked region. This should only be called by the thread that executes the masked region.

Definition at line 951 of file kmp_csupport.cpp.

References __kmp_assert_valid_gtid(), __kmp_env_consistency_check, __kmp_pop_sync(), __kmp_threads, __kmp_tid_from_gtid(), ct_masked, KC_TRACE, KMP_POP_PARTITIONED_TIMER, loc, ompt_callbacks, ompt_enabled, OMPT_GET_RETURN_ADDRESS, and kmp_team::t.

◆ __kmpc_end_master()

void __kmpc_end_master ( ident_t loc,
kmp_int32  global_tid 
)
Parameters
locsource location information.
global_tidglobal thread number .

Mark the end of a master region. This should only be called by the thread that executes the master region.

Definition at line 863 of file kmp_csupport.cpp.

References __kmp_assert_valid_gtid(), __kmp_env_consistency_check, __kmp_pop_sync(), __kmp_threads, __kmp_tid_from_gtid(), ct_master, KC_TRACE, KMP_DEBUG_ASSERT, KMP_MASTER_GTID, KMP_POP_PARTITIONED_TIMER, loc, ompt_callbacks, ompt_enabled, OMPT_GET_RETURN_ADDRESS, and kmp_team::t.

◆ __kmpc_end_ordered()

void __kmpc_end_ordered ( ident_t loc,
kmp_int32  gtid 
)
Parameters
locsource location information.
gtidglobal thread number.

End execution of an ordered construct.

Definition at line 1053 of file kmp_csupport.cpp.

References __kmp_assert_valid_gtid(), __kmp_parallel_dxo(), __kmp_team_from_gtid(), __kmp_threads, KC_TRACE, loc, ompt_callbacks, ompt_enabled, and kmp_team::t.

Referenced by KMP_API_NAME_GOMP_ORDERED_END().

◆ __kmpc_end_sections()

void __kmpc_end_sections ( ident_t loc,
kmp_int32  gtid 
)
Parameters
locsource location information
global_tidglobal thread number

End of "sections" construct. Don't need to wait here: barrier is added separately when needed.

Definition at line 2639 of file kmp_dispatch.cpp.

References __kmp_threads, __ompt_get_task_info_object(), __ompt_get_teaminfo(), KD_TRACE, KMP_POP_PARTITIONED_TIMER, ompt_callbacks, ompt_enabled, OMPT_GET_RETURN_ADDRESS, ompt_team_info_t::parallel_data, and ompt_task_info_t::task_data.

◆ __kmpc_end_single()

void __kmpc_end_single ( ident_t loc,
kmp_int32  global_tid 
)
Parameters
locsource location information
global_tidglobal thread number

Mark the end of a single construct. This function should only be called by the thread that executed the block of code protected by the single construct.

Definition at line 1921 of file kmp_csupport.cpp.

References __kmp_assert_valid_gtid(), __kmp_exit_single(), __kmp_threads, __kmp_tid_from_gtid(), KMP_POP_PARTITIONED_TIMER, ompt_callbacks, ompt_enabled, OMPT_GET_RETURN_ADDRESS, and kmp_team::t.

◆ __kmpc_for_static_fini()

void __kmpc_for_static_fini ( ident_t loc,
kmp_int32  global_tid 
)

◆ __kmpc_for_static_init_4()

void __kmpc_for_static_init_4 ( ident_t loc,
kmp_int32  gtid,
kmp_int32  schedtype,
kmp_int32 plastiter,
kmp_int32 plower,
kmp_int32 pupper,
kmp_int32 pstride,
kmp_int32  incr,
kmp_int32  chunk 
)
Parameters
locSource code location
gtidGlobal thread id of this thread
schedtypeScheduling type
plastiterPointer to the "last iteration" flag
plowerPointer to the lower bound
pupperPointer to the upper bound
pstridePointer to the stride
incrLoop increment
chunkThe chunk size

Each of the four functions here are identical apart from the argument types.

The functions compute the upper and lower bounds and stride to be used for the set of iterations to be executed by the current thread from the statically scheduled loop that is described by the initial values of the bounds, stride, increment and chunk size.

Definition at line 889 of file kmp_sched.cpp.

References loc, and OMPT_GET_RETURN_ADDRESS.

◆ __kmpc_for_static_init_4u()

void __kmpc_for_static_init_4u ( ident_t loc,
kmp_int32  gtid,
kmp_int32  schedtype,
kmp_int32 plastiter,
kmp_uint32 plower,
kmp_uint32 pupper,
kmp_int32 pstride,
kmp_int32  incr,
kmp_int32  chunk 
)

See __kmpc_for_static_init_4.

Definition at line 905 of file kmp_sched.cpp.

References loc, and OMPT_GET_RETURN_ADDRESS.

◆ __kmpc_for_static_init_8()

void __kmpc_for_static_init_8 ( ident_t loc,
kmp_int32  gtid,
kmp_int32  schedtype,
kmp_int32 plastiter,
kmp_int64 plower,
kmp_int64 pupper,
kmp_int64 pstride,
kmp_int64  incr,
kmp_int64  chunk 
)

See __kmpc_for_static_init_4.

Definition at line 922 of file kmp_sched.cpp.

References loc, and OMPT_GET_RETURN_ADDRESS.

◆ __kmpc_for_static_init_8u()

void __kmpc_for_static_init_8u ( ident_t loc,
kmp_int32  gtid,
kmp_int32  schedtype,
kmp_int32 plastiter,
kmp_uint64 plower,
kmp_uint64 pupper,
kmp_int64 pstride,
kmp_int64  incr,
kmp_int64  chunk 
)

See __kmpc_for_static_init_4.

Definition at line 938 of file kmp_sched.cpp.

References loc, and OMPT_GET_RETURN_ADDRESS.

◆ __kmpc_masked()

kmp_int32 __kmpc_masked ( ident_t loc,
kmp_int32  global_tid,
kmp_int32  filter 
)
Parameters
locsource location information.
global_tidglobal thread number.
filterresult of evaluating filter clause on thread global_tid, or zero if no filter clause present
Returns
1 if this thread should execute the masked block, 0 otherwise.

Definition at line 895 of file kmp_csupport.cpp.

References __kmp_assert_valid_gtid(), __kmp_check_sync(), __kmp_env_consistency_check, __kmp_init_parallel, __kmp_parallel_initialize(), __kmp_push_sync(), __kmp_resume_if_soft_paused(), __kmp_threads, __kmp_tid_from_gtid(), ct_masked, KC_TRACE, KMP_COUNT_BLOCK, KMP_PUSH_PARTITIONED_TIMER, loc, ompt_callbacks, ompt_enabled, OMPT_GET_RETURN_ADDRESS, status, kmp_team::t, and TCR_4.

◆ __kmpc_master()

kmp_int32 __kmpc_master ( ident_t loc,
kmp_int32  global_tid 
)

◆ __kmpc_next_section()

kmp_int32 __kmpc_next_section ( ident_t loc,
kmp_int32  gtid,
kmp_int32  numberOfSections 
)
Parameters
locsource location information
global_tidglobal thread number
numberOfSectionsnumber of sections in the 'sections' construct
Returns
unsigned [from 0 to n) - number (id) of the section to execute next on this thread. n (or any other number not in range) - nothing to execute on this thread

Definition at line 2550 of file kmp_dispatch.cpp.

References __kmp_dispatch_num_buffers, __kmp_threads, __ompt_get_task_info_object(), __ompt_get_teaminfo(), dispatch_shared_info_template< T >::buffer_index, instance, dispatch_shared_infoXX_template< T >::iteration, KD_TRACE, KMP_DEBUG_ASSERT, KMP_MB, KMP_TIME_PARTITIONED_BLOCK, dispatch_shared_infoXX_template< T >::num_done, ompt_callbacks, ompt_enabled, OMPT_GET_RETURN_ADDRESS, ompt_team_info_t::parallel_data, dispatch_shared_info_template< T >::shared_info_tmpl::s, kmp_team::t, ompt_task_info_t::task_data, test_then_inc< kmp_int32 >(), and dispatch_shared_info_template< T >::u.

◆ __kmpc_ordered()

void __kmpc_ordered ( ident_t loc,
kmp_int32  gtid 
)

◆ __kmpc_sections_init()

kmp_int32 __kmpc_sections_init ( ident_t loc,
kmp_int32  gtid 
)
Parameters
locsource location information
global_tidglobal thread number
Returns
Zero if the parallel region is not active and this thread should execute all sections, non-zero otherwise.

Beginning of sections construct. There are no implicit barriers in the "sections" calls, rather the compiler should introduce an explicit barrier if it is required.

This implementation is based on __kmp_dispatch_init, using same constructs for shared data (we can't have sections nested directly in omp for loop, there should be a parallel region in between)

Definition at line 2466 of file kmp_dispatch.cpp.

References __kmp_dispatch_deo_error(), __kmp_dispatch_dxo_error(), __kmp_dispatch_num_buffers, __kmp_init_parallel, __kmp_init_serial, __kmp_parallel_initialize(), __kmp_resume_if_soft_paused(), __kmp_threads, __ompt_get_task_info_object(), __ompt_get_teaminfo(), dispatch_shared_info_template< T >::buffer_index, CCAST, KD_TRACE, KMP_COUNT_BLOCK, KMP_DEBUG_ASSERT, KMP_MB, KMP_PUSH_PARTITIONED_TIMER, loc, ompt_callbacks, ompt_enabled, OMPT_GET_RETURN_ADDRESS, ompt_team_info_t::parallel_data, kmp_team::t, ompt_task_info_t::task_data, TCR_4, and USE_ITT_BUILD_ARG.

◆ __kmpc_single()

kmp_int32 __kmpc_single ( ident_t loc,
kmp_int32  global_tid 
)
Parameters
locsource location information
global_tidglobal thread number
Returns
One if this thread should execute the single construct, zero otherwise.

Test whether to execute a single construct. There are no implicit barriers in the two "single" calls, rather the compiler should introduce an explicit barrier if it is required.

Definition at line 1868 of file kmp_csupport.cpp.

References __kmp_assert_valid_gtid(), __kmp_enter_single(), __kmp_threads, __kmp_tid_from_gtid(), ompt_callbacks_active_s::enabled, KMP_COUNT_BLOCK, KMP_PUSH_PARTITIONED_TIMER, loc, ompt_callbacks, ompt_enabled, OMPT_GET_RETURN_ADDRESS, kmp_team::t, and TRUE.

◆ __kmpc_team_static_init_4()

void __kmpc_team_static_init_4 ( ident_t loc,
kmp_int32  gtid,
kmp_int32 p_last,
kmp_int32 p_lb,
kmp_int32 p_ub,
kmp_int32 p_st,
kmp_int32  incr,
kmp_int32  chunk 
)
Parameters
locSource location
gtidGlobal thread id
p_lastpointer to last iteration flag
p_lbpointer to Lower bound
p_ubpointer to Upper bound
p_stStep (or increment if you prefer)
incrLoop increment
chunkThe chunk size to block with

The functions compute the upper and lower bounds and stride to be used for the set of iterations to be executed by the current team from the statically scheduled loop that is described by the initial values of the bounds, stride, increment and chunk for the distribute construct as part of composite distribute parallel loop construct. These functions are all identical apart from the types of the arguments.

Definition at line 1061 of file kmp_sched.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_team_static_init_4u()

void __kmpc_team_static_init_4u ( ident_t loc,
kmp_int32  gtid,
kmp_int32 p_last,
kmp_uint32 p_lb,
kmp_uint32 p_ub,
kmp_int32 p_st,
kmp_int32  incr,
kmp_int32  chunk 
)

See __kmpc_team_static_init_4.

Definition at line 1073 of file kmp_sched.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_team_static_init_8()

void __kmpc_team_static_init_8 ( ident_t loc,
kmp_int32  gtid,
kmp_int32 p_last,
kmp_int64 p_lb,
kmp_int64 p_ub,
kmp_int64 p_st,
kmp_int64  incr,
kmp_int64  chunk 
)

See __kmpc_team_static_init_4.

Definition at line 1085 of file kmp_sched.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.

◆ __kmpc_team_static_init_8u()

void __kmpc_team_static_init_8u ( ident_t loc,
kmp_int32  gtid,
kmp_int32 p_last,
kmp_uint64 p_lb,
kmp_uint64 p_ub,
kmp_int64 p_st,
kmp_int64  incr,
kmp_int64  chunk 
)

See __kmpc_team_static_init_4.

Definition at line 1097 of file kmp_sched.cpp.

References __kmp_init_serial, KMP_DEBUG_ASSERT, and loc.