mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 13:50:11 +00:00
[OpenMP] NFC: Fix trivial typo
Differential Revision: https://reviews.llvm.org/D77430
This commit is contained in:
parent
3270748127
commit
4201679110
@ -91,5 +91,5 @@ if (OPENMP_ENABLE_OMPT_TOOLS)
|
|||||||
add_subdirectory(tools)
|
add_subdirectory(tools)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Now that we have seen all testuites, create the check-openmp target.
|
# Now that we have seen all testsuites, create the check-openmp target.
|
||||||
construct_check_openmp_target()
|
construct_check_openmp_target()
|
||||||
|
@ -200,7 +200,7 @@ NOINLINE static void check(bool cond) { assert(cond); }
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// for printing without worring about precision, pointers...
|
// for printing without worrying about precision, pointers...
|
||||||
#define P64(_x) ((unsigned long long)(_x))
|
#define P64(_x) ((unsigned long long)(_x))
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -206,8 +206,8 @@ public:
|
|||||||
INLINE void InitTeamDescr();
|
INLINE void InitTeamDescr();
|
||||||
|
|
||||||
INLINE __kmpc_data_sharing_slot *RootS(int wid, bool IsMasterThread) {
|
INLINE __kmpc_data_sharing_slot *RootS(int wid, bool IsMasterThread) {
|
||||||
// If this is invoked by the master thread of the master warp then intialize
|
// If this is invoked by the master thread of the master warp then
|
||||||
// it with a smaller slot.
|
// initialize it with a smaller slot.
|
||||||
if (IsMasterThread) {
|
if (IsMasterThread) {
|
||||||
// Do not initialize this slot again if it has already been initalized.
|
// Do not initialize this slot again if it has already been initalized.
|
||||||
if (master_rootS[0].DataEnd == &master_rootS[0].Data[0] + DS_Slot_Size)
|
if (master_rootS[0].DataEnd == &master_rootS[0].Data[0] + DS_Slot_Size)
|
||||||
|
@ -42,7 +42,7 @@ omptarget_nvptx_TaskDescr::InitLevelZeroTaskDescr() {
|
|||||||
|
|
||||||
items.flags = 0;
|
items.flags = 0;
|
||||||
items.threadId = 0; // is master
|
items.threadId = 0; // is master
|
||||||
items.runtimeChunkSize = 1; // prefered chunking statik with chunk 1
|
items.runtimeChunkSize = 1; // preferred chunking statik with chunk 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is called when all threads are started together in SPMD mode.
|
// This is called when all threads are started together in SPMD mode.
|
||||||
@ -59,7 +59,7 @@ INLINE void omptarget_nvptx_TaskDescr::InitLevelOneTaskDescr(
|
|||||||
TaskDescr_InPar | TaskDescr_IsParConstr; // set flag to parallel
|
TaskDescr_InPar | TaskDescr_IsParConstr; // set flag to parallel
|
||||||
items.threadId =
|
items.threadId =
|
||||||
GetThreadIdInBlock(); // get ids from cuda (only called for 1st level)
|
GetThreadIdInBlock(); // get ids from cuda (only called for 1st level)
|
||||||
items.runtimeChunkSize = 1; // prefered chunking statik with chunk 1
|
items.runtimeChunkSize = 1; // preferred chunking statik with chunk 1
|
||||||
prev = parentTaskDescr;
|
prev = parentTaskDescr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ INLINE void omptarget_nvptx_TaskDescr::CopyForExplicitTask(
|
|||||||
INLINE void omptarget_nvptx_TaskDescr::CopyToWorkDescr(
|
INLINE void omptarget_nvptx_TaskDescr::CopyToWorkDescr(
|
||||||
omptarget_nvptx_TaskDescr *masterTaskDescr) {
|
omptarget_nvptx_TaskDescr *masterTaskDescr) {
|
||||||
CopyParent(masterTaskDescr);
|
CopyParent(masterTaskDescr);
|
||||||
// overrwrite specific items;
|
// overwrite specific items;
|
||||||
items.flags |=
|
items.flags |=
|
||||||
TaskDescr_InPar | TaskDescr_IsParConstr; // set flag to parallel
|
TaskDescr_InPar | TaskDescr_IsParConstr; // set flag to parallel
|
||||||
}
|
}
|
||||||
@ -99,7 +99,7 @@ INLINE void omptarget_nvptx_TaskDescr::CopyFromWorkDescr(
|
|||||||
omptarget_nvptx_TaskDescr *workTaskDescr) {
|
omptarget_nvptx_TaskDescr *workTaskDescr) {
|
||||||
Copy(workTaskDescr);
|
Copy(workTaskDescr);
|
||||||
//
|
//
|
||||||
// overrwrite specific items;
|
// overwrite specific items;
|
||||||
//
|
//
|
||||||
// The threadID should be GetThreadIdInBlock() % GetMasterThreadID().
|
// The threadID should be GetThreadIdInBlock() % GetMasterThreadID().
|
||||||
// This is so that the serial master (first lane in the master warp)
|
// This is so that the serial master (first lane in the master warp)
|
||||||
|
@ -90,7 +90,7 @@ EXTERN int omp_in_parallel(void) {
|
|||||||
EXTERN int omp_in_final(void) {
|
EXTERN int omp_in_final(void) {
|
||||||
// treat all tasks as final... Specs may expect runtime to keep
|
// treat all tasks as final... Specs may expect runtime to keep
|
||||||
// track more precisely if a task was actively set by users... This
|
// track more precisely if a task was actively set by users... This
|
||||||
// is not explicitely specified; will treat as if runtime can
|
// is not explicitly specified; will treat as if runtime can
|
||||||
// actively decide to put a non-final task into a final one.
|
// actively decide to put a non-final task into a final one.
|
||||||
int rc = 1;
|
int rc = 1;
|
||||||
PRINT(LD_IO, "call omp_in_final() returns %d\n", rc);
|
PRINT(LD_IO, "call omp_in_final() returns %d\n", rc);
|
||||||
|
@ -221,7 +221,7 @@ public:
|
|||||||
* When it is we'll want to look at them somewhere here and use that
|
* When it is we'll want to look at them somewhere here and use that
|
||||||
* information to add to our schedule choice. We shouldn't need to pass
|
* information to add to our schedule choice. We shouldn't need to pass
|
||||||
* them on, they merely affect which schedule we can legally choose for
|
* them on, they merely affect which schedule we can legally choose for
|
||||||
* various dynamic cases. (In paritcular, whether or not a stealing scheme
|
* various dynamic cases. (In particular, whether or not a stealing scheme
|
||||||
* is legal).
|
* is legal).
|
||||||
*/
|
*/
|
||||||
schedule = SCHEDULE_WITHOUT_MODIFIERS(schedule);
|
schedule = SCHEDULE_WITHOUT_MODIFIERS(schedule);
|
||||||
|
@ -124,7 +124,7 @@ EXTERN void __kmpc_end_single(kmp_Ident *loc, int32_t global_tid) {
|
|||||||
PRINT0(LD_IO, "call kmpc_end_single\n");
|
PRINT0(LD_IO, "call kmpc_end_single\n");
|
||||||
// decide to implement single with master: master get the single
|
// decide to implement single with master: master get the single
|
||||||
ASSERT0(LT_FUSSY, IsTeamMaster(global_tid), "expected only master here");
|
ASSERT0(LT_FUSSY, IsTeamMaster(global_tid), "expected only master here");
|
||||||
// sync barrier is explicitely called... so that is not a problem
|
// sync barrier is explicitly called... so that is not a problem
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -98,7 +98,7 @@ EXTERN int omp_get_max_task_priority(void);
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// kmp specifc types
|
// kmp specific types
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
typedef enum kmp_sched_t {
|
typedef enum kmp_sched_t {
|
||||||
|
@ -63,7 +63,7 @@ The (simplified) pseudo code generated by LLVM is as follows:
|
|||||||
b. its lane_id
|
b. its lane_id
|
||||||
c. the offset of the lane_id which hosts a remote ReduceData
|
c. the offset of the lane_id which hosts a remote ReduceData
|
||||||
relative to the current one
|
relative to the current one
|
||||||
d. an algorithm version paramter determining which reduction
|
d. an algorithm version parameter determining which reduction
|
||||||
algorithm to use.
|
algorithm to use.
|
||||||
This shuffleReduceFn retrieves the remote ReduceData through shuffle
|
This shuffleReduceFn retrieves the remote ReduceData through shuffle
|
||||||
intrinsics and reduces, using the algorithm specified by the 4th
|
intrinsics and reduces, using the algorithm specified by the 4th
|
||||||
|
@ -70,7 +70,7 @@ int main(int argc, char *argv[]) {
|
|||||||
check4Inc += (omp_get_ancestor_thread_num(1) - id);
|
check4Inc += (omp_get_ancestor_thread_num(1) - id);
|
||||||
// Expected to return the number of threads in the active parallel region.
|
// Expected to return the number of threads in the active parallel region.
|
||||||
check4Inc += 3 * omp_get_team_size(1);
|
check4Inc += 3 * omp_get_team_size(1);
|
||||||
// Exptected to return 0 and 1.
|
// Expected to return 0 and 1.
|
||||||
check4Inc += omp_get_ancestor_thread_num(2) + 3 * omp_get_team_size(2);
|
check4Inc += omp_get_ancestor_thread_num(2) + 3 * omp_get_team_size(2);
|
||||||
// Expected to return -1, see above.
|
// Expected to return -1, see above.
|
||||||
check4Inc += omp_get_ancestor_thread_num(3) + omp_get_team_size(3);
|
check4Inc += omp_get_ancestor_thread_num(3) + omp_get_team_size(3);
|
||||||
|
@ -26,7 +26,7 @@ kmp_target_offload_kind_t TargetOffloadPolicy = tgt_default;
|
|||||||
std::mutex TargetOffloadMtx;
|
std::mutex TargetOffloadMtx;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// manage the success or failure of a target constuct
|
/// manage the success or failure of a target construct
|
||||||
|
|
||||||
static void HandleDefaultTargetOffload() {
|
static void HandleDefaultTargetOffload() {
|
||||||
TargetOffloadMtx.lock();
|
TargetOffloadMtx.lock();
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
# - Fails if stack is executable. Should only be readable and writable. Not executable.
|
# - Fails if stack is executable. Should only be readable and writable. Not executable.
|
||||||
# - Program dependencies: perl, readelf
|
# - Program dependencies: perl, readelf
|
||||||
# - Available for Unix dynamic library builds. Not available otherwise.
|
# - Available for Unix dynamic library builds. Not available otherwise.
|
||||||
# (4) test-instr (Intel(R) MIC Architecutre only)
|
# (4) test-instr (Intel(R) MIC Architecture only)
|
||||||
# - Tests Intel(R) MIC Architecture libraries for valid instruction set
|
# - Tests Intel(R) MIC Architecture libraries for valid instruction set
|
||||||
# - Fails if finds invalid instruction for Intel(R) MIC Architecture (wasn't compiled with correct flags)
|
# - Fails if finds invalid instruction for Intel(R) MIC Architecture (wasn't compiled with correct flags)
|
||||||
# - Program dependencies: perl, objdump
|
# - Program dependencies: perl, objdump
|
||||||
|
@ -183,7 +183,7 @@ if(WIN32)
|
|||||||
add_custom_target(libomp-needed-windows-files DEPENDS ${LIBOMP_LIB_NAME}.def)
|
add_custom_target(libomp-needed-windows-files DEPENDS ${LIBOMP_LIB_NAME}.def)
|
||||||
add_dependencies(omp libomp-needed-windows-files)
|
add_dependencies(omp libomp-needed-windows-files)
|
||||||
# z_Windows_NT-586_asm.asm requires definitions to be sent via command line
|
# z_Windows_NT-586_asm.asm requires definitions to be sent via command line
|
||||||
# It only needs the architecutre macro and OMPT_SUPPORT=0|1
|
# It only needs the architecture macro and OMPT_SUPPORT=0|1
|
||||||
libomp_append(LIBOMP_MASM_DEFINITIONS "-D_M_IA32" IF_TRUE IA32)
|
libomp_append(LIBOMP_MASM_DEFINITIONS "-D_M_IA32" IF_TRUE IA32)
|
||||||
libomp_append(LIBOMP_MASM_DEFINITIONS "-D_M_AMD64" IF_TRUE INTEL64)
|
libomp_append(LIBOMP_MASM_DEFINITIONS "-D_M_AMD64" IF_TRUE INTEL64)
|
||||||
libomp_append(LIBOMP_MASM_DEFINITIONS "-DOMPT_SUPPORT" IF_TRUE_1_0 LIBOMP_OMPT_SUPPORT)
|
libomp_append(LIBOMP_MASM_DEFINITIONS "-DOMPT_SUPPORT" IF_TRUE_1_0 LIBOMP_OMPT_SUPPORT)
|
||||||
|
@ -324,7 +324,7 @@ WrongMessageCatalog "Incompatible message catalog \"%1$s\": Version \"%
|
|||||||
StgIgnored "%1$s: ignored because %2$s has been defined"
|
StgIgnored "%1$s: ignored because %2$s has been defined"
|
||||||
# %1, -- name of ignored variable, %2 -- name of variable with higher priority.
|
# %1, -- name of ignored variable, %2 -- name of variable with higher priority.
|
||||||
OBSOLETE "%1$s: overrides %3$s specified before"
|
OBSOLETE "%1$s: overrides %3$s specified before"
|
||||||
# %1, %2 -- name and value of the overriding variable, %3 -- name of overriden variable.
|
# %1, %2 -- name and value of the overriding variable, %3 -- name of overridden variable.
|
||||||
AffTilesNoHWLOC "%1$s: Tiles are only supported if KMP_TOPOLOGY_METHOD=hwloc, using granularity=package instead"
|
AffTilesNoHWLOC "%1$s: Tiles are only supported if KMP_TOPOLOGY_METHOD=hwloc, using granularity=package instead"
|
||||||
AffTilesNoTiles "%1$s: Tiles requested but were not detected on this HW, using granularity=package instead"
|
AffTilesNoTiles "%1$s: Tiles requested but were not detected on this HW, using granularity=package instead"
|
||||||
TopologyExtraTile "%1$s: %2$d packages x %3$d tiles/pkg x %4$d cores/tile x %5$d threads/core (%6$d total cores)"
|
TopologyExtraTile "%1$s: %2$d packages x %3$d tiles/pkg x %4$d cores/tile x %5$d threads/core (%6$d total cores)"
|
||||||
|
@ -2435,10 +2435,10 @@ typedef struct KMP_ALIGN_CACHE kmp_base_info {
|
|||||||
int th_teams_level; /* save initial level of teams construct */
|
int th_teams_level; /* save initial level of teams construct */
|
||||||
/* it is 0 on device but may be any on host */
|
/* it is 0 on device but may be any on host */
|
||||||
|
|
||||||
/* The blocktime info is copied from the team struct to the thread sruct */
|
/* The blocktime info is copied from the team struct to the thread struct */
|
||||||
/* at the start of a barrier, and the values stored in the team are used */
|
/* at the start of a barrier, and the values stored in the team are used */
|
||||||
/* at points in the code where the team struct is no longer guaranteed */
|
/* at points in the code where the team struct is no longer guaranteed */
|
||||||
/* to exist (from the POV of worker threads). */
|
/* to exist (from the POV of worker threads). */
|
||||||
#if KMP_USE_MONITOR
|
#if KMP_USE_MONITOR
|
||||||
int th_team_bt_intervals;
|
int th_team_bt_intervals;
|
||||||
int th_team_bt_set;
|
int th_team_bt_set;
|
||||||
|
@ -601,7 +601,7 @@ static int __kmp_affinity_create_hwloc_map(AddrUnsPair **address2os,
|
|||||||
|
|
||||||
int depth = 3;
|
int depth = 3;
|
||||||
int levels[5] = {0, 1, 2, 3, 4}; // package, [node,] [tile,] core, thread
|
int levels[5] = {0, 1, 2, 3, 4}; // package, [node,] [tile,] core, thread
|
||||||
int labels[3] = {0}; // package [,node] [,tile] - head of lables array
|
int labels[3] = {0}; // package [,node] [,tile] - head of labels array
|
||||||
if (__kmp_numa_detected)
|
if (__kmp_numa_detected)
|
||||||
++depth;
|
++depth;
|
||||||
if (__kmp_tile_depth)
|
if (__kmp_tile_depth)
|
||||||
@ -828,7 +828,7 @@ static int __kmp_affinity_create_hwloc_map(AddrUnsPair **address2os,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int depth_full = depth; // number of levels before compressing
|
int depth_full = depth; // number of levels before compressing
|
||||||
// Find any levels with radiix 1, and remove them from the map
|
// Find any levels with radix 1, and remove them from the map
|
||||||
// (except for the package level).
|
// (except for the package level).
|
||||||
depth = __kmp_affinity_remove_radix_one_levels(retval, nActiveThreads, depth,
|
depth = __kmp_affinity_remove_radix_one_levels(retval, nActiveThreads, depth,
|
||||||
levels);
|
levels);
|
||||||
@ -918,7 +918,7 @@ static int __kmp_affinity_create_flat_map(AddrUnsPair **address2os,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Contruct the data structure to be returned.
|
// Construct the data structure to be returned.
|
||||||
*address2os =
|
*address2os =
|
||||||
(AddrUnsPair *)__kmp_allocate(sizeof(**address2os) * __kmp_avail_proc);
|
(AddrUnsPair *)__kmp_allocate(sizeof(**address2os) * __kmp_avail_proc);
|
||||||
int avail_ct = 0;
|
int avail_ct = 0;
|
||||||
@ -967,7 +967,7 @@ static int __kmp_affinity_create_proc_group_map(AddrUnsPair **address2os,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Contruct the data structure to be returned.
|
// Construct the data structure to be returned.
|
||||||
*address2os =
|
*address2os =
|
||||||
(AddrUnsPair *)__kmp_allocate(sizeof(**address2os) * __kmp_avail_proc);
|
(AddrUnsPair *)__kmp_allocate(sizeof(**address2os) * __kmp_avail_proc);
|
||||||
KMP_DEBUG_ASSERT(__kmp_pu_os_idx == NULL);
|
KMP_DEBUG_ASSERT(__kmp_pu_os_idx == NULL);
|
||||||
@ -1849,7 +1849,7 @@ static int __kmp_affinity_create_x2apicid_map(AddrUnsPair **address2os,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find any levels with radiix 1, and remove them from the map
|
// Find any levels with radix 1, and remove them from the map
|
||||||
// (except for the package level).
|
// (except for the package level).
|
||||||
int new_depth = 0;
|
int new_depth = 0;
|
||||||
for (level = 0; level < depth; level++) {
|
for (level = 0; level < depth; level++) {
|
||||||
@ -4328,7 +4328,7 @@ static void __kmp_aux_affinity_initialize(void) {
|
|||||||
}
|
}
|
||||||
#endif // KMP_USE_HWLOC
|
#endif // KMP_USE_HWLOC
|
||||||
|
|
||||||
// If the user has specified that a paricular topology discovery method is to be
|
// If the user has specified that a particular topology discovery method is to be
|
||||||
// used, then we abort if that method fails. The exception is group affinity,
|
// used, then we abort if that method fails. The exception is group affinity,
|
||||||
// which might have been implicitly set.
|
// which might have been implicitly set.
|
||||||
|
|
||||||
@ -4647,7 +4647,7 @@ static void __kmp_aux_affinity_initialize(void) {
|
|||||||
#undef KMP_EXIT_AFF_NONE
|
#undef KMP_EXIT_AFF_NONE
|
||||||
|
|
||||||
void __kmp_affinity_initialize(void) {
|
void __kmp_affinity_initialize(void) {
|
||||||
// Much of the code above was written assumming that if a machine was not
|
// Much of the code above was written assuming that if a machine was not
|
||||||
// affinity capable, then __kmp_affinity_type == affinity_none. We now
|
// affinity capable, then __kmp_affinity_type == affinity_none. We now
|
||||||
// explicitly represent this as __kmp_affinity_type == affinity_disabled.
|
// explicitly represent this as __kmp_affinity_type == affinity_disabled.
|
||||||
// There are too many checks for __kmp_affinity_type == affinity_none
|
// There are too many checks for __kmp_affinity_type == affinity_none
|
||||||
@ -4713,7 +4713,7 @@ void __kmp_affinity_set_init_mask(int gtid, int isa_root) {
|
|||||||
KMP_CPU_ZERO(th->th.th_affin_mask);
|
KMP_CPU_ZERO(th->th.th_affin_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy the thread mask to the kmp_info_t strucuture. If
|
// Copy the thread mask to the kmp_info_t structure. If
|
||||||
// __kmp_affinity_type == affinity_none, copy the "full" mask, i.e. one that
|
// __kmp_affinity_type == affinity_none, copy the "full" mask, i.e. one that
|
||||||
// has all of the OS proc ids set, or if __kmp_affinity_respect_mask is set,
|
// has all of the OS proc ids set, or if __kmp_affinity_respect_mask is set,
|
||||||
// then the full mask is the same as the mask of the initialization thread.
|
// then the full mask is the same as the mask of the initialization thread.
|
||||||
@ -4823,7 +4823,7 @@ void __kmp_affinity_set_place(int gtid) {
|
|||||||
(th->th.th_new_place >= th->th.th_last_place));
|
(th->th.th_new_place >= th->th.th_last_place));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy the thread mask to the kmp_info_t strucuture,
|
// Copy the thread mask to the kmp_info_t structure,
|
||||||
// and set this thread's affinity.
|
// and set this thread's affinity.
|
||||||
kmp_affin_mask_t *mask =
|
kmp_affin_mask_t *mask =
|
||||||
KMP_CPU_INDEX(__kmp_affinity_masks, th->th.th_new_place);
|
KMP_CPU_INDEX(__kmp_affinity_masks, th->th.th_new_place);
|
||||||
|
@ -186,7 +186,7 @@ typedef struct thr_data {
|
|||||||
-1: not all pool blocks are the same size
|
-1: not all pool blocks are the same size
|
||||||
>0: (common) block size for all bpool calls made so far
|
>0: (common) block size for all bpool calls made so far
|
||||||
*/
|
*/
|
||||||
bfhead_t *last_pool; /* Last pool owned by this thread (delay dealocation) */
|
bfhead_t *last_pool; /* Last pool owned by this thread (delay deallocation) */
|
||||||
} thr_data_t;
|
} thr_data_t;
|
||||||
|
|
||||||
/* Minimum allocation quantum: */
|
/* Minimum allocation quantum: */
|
||||||
@ -195,7 +195,7 @@ typedef struct thr_data {
|
|||||||
#define MaxSize \
|
#define MaxSize \
|
||||||
(bufsize)( \
|
(bufsize)( \
|
||||||
~(((bufsize)(1) << (sizeof(bufsize) * CHAR_BIT - 1)) | (SizeQuant - 1)))
|
~(((bufsize)(1) << (sizeof(bufsize) * CHAR_BIT - 1)) | (SizeQuant - 1)))
|
||||||
// Maximun for the requested size.
|
// Maximum for the requested size.
|
||||||
|
|
||||||
/* End sentinel: value placed in bsize field of dummy block delimiting
|
/* End sentinel: value placed in bsize field of dummy block delimiting
|
||||||
end of pool block. The most negative number which will fit in a
|
end of pool block. The most negative number which will fit in a
|
||||||
@ -577,7 +577,7 @@ static void *bget(kmp_info_t *th, bufsize requested_size) {
|
|||||||
if (thr->acqfcn != 0) {
|
if (thr->acqfcn != 0) {
|
||||||
if (size > (bufsize)(thr->exp_incr - sizeof(bhead_t))) {
|
if (size > (bufsize)(thr->exp_incr - sizeof(bhead_t))) {
|
||||||
/* Request is too large to fit in a single expansion block.
|
/* Request is too large to fit in a single expansion block.
|
||||||
Try to satisy it by a direct buffer acquisition. */
|
Try to satisfy it by a direct buffer acquisition. */
|
||||||
bdhead_t *bdh;
|
bdhead_t *bdh;
|
||||||
|
|
||||||
size += sizeof(bdhead_t) - sizeof(bhead_t);
|
size += sizeof(bdhead_t) - sizeof(bhead_t);
|
||||||
@ -1961,7 +1961,7 @@ void ___kmp_fast_free(kmp_info_t *this_thr, void *ptr KMP_SRC_LOC_DECL) {
|
|||||||
this_thr->th.th_free_lists[index].th_free_list_other = ptr;
|
this_thr->th.th_free_lists[index].th_free_list_other = ptr;
|
||||||
} else {
|
} else {
|
||||||
// either queue blocks owner is changing or size limit exceeded
|
// either queue blocks owner is changing or size limit exceeded
|
||||||
// return old queue to allocating thread (q_th) synchroneously,
|
// return old queue to allocating thread (q_th) synchronously,
|
||||||
// and start new list for alloc_thr's tasks
|
// and start new list for alloc_thr's tasks
|
||||||
void *old_ptr;
|
void *old_ptr;
|
||||||
void *tail = head;
|
void *tail = head;
|
||||||
|
@ -92,7 +92,7 @@ construct, since the master thread is necessarily thread zero).
|
|||||||
|
|
||||||
If multiple non-OpenMP threads all enter an OpenMP construct then this
|
If multiple non-OpenMP threads all enter an OpenMP construct then this
|
||||||
will be a unique thread identifier among all the threads created by
|
will be a unique thread identifier among all the threads created by
|
||||||
the OpenMP runtime (but the value cannote be defined in terms of
|
the OpenMP runtime (but the value cannot be defined in terms of
|
||||||
OpenMP thread ids returned by omp_get_thread_num()).
|
OpenMP thread ids returned by omp_get_thread_num()).
|
||||||
*/
|
*/
|
||||||
kmp_int32 __kmpc_global_thread_num(ident_t *loc) {
|
kmp_int32 __kmpc_global_thread_num(ident_t *loc) {
|
||||||
|
@ -1250,7 +1250,7 @@ int __kmp_dispatch_next_algorithm(int gtid,
|
|||||||
pr->u.p.parm4 = (victimIdx + 1) % nproc; // next victim
|
pr->u.p.parm4 = (victimIdx + 1) % nproc; // next victim
|
||||||
continue; // not enough chunks to steal
|
continue; // not enough chunks to steal
|
||||||
}
|
}
|
||||||
// stealing succeded, reduce victim's ub by 1/4 of undone chunks or
|
// stealing succeeded, reduce victim's ub by 1/4 of undone chunks or
|
||||||
// by 1
|
// by 1
|
||||||
if (remaining > 3) {
|
if (remaining > 3) {
|
||||||
// steal 1/4 of remaining
|
// steal 1/4 of remaining
|
||||||
@ -1357,7 +1357,7 @@ int __kmp_dispatch_next_algorithm(int gtid,
|
|||||||
(volatile kmp_int64 *)&victim->u.p.count,
|
(volatile kmp_int64 *)&victim->u.p.count,
|
||||||
*VOLATILE_CAST(kmp_int64 *) & vold.b,
|
*VOLATILE_CAST(kmp_int64 *) & vold.b,
|
||||||
*VOLATILE_CAST(kmp_int64 *) & vnew.b)) {
|
*VOLATILE_CAST(kmp_int64 *) & vnew.b)) {
|
||||||
// stealing succedded
|
// stealing succeeded
|
||||||
KMP_COUNT_DEVELOPER_VALUE(FOR_static_steal_stolen,
|
KMP_COUNT_DEVELOPER_VALUE(FOR_static_steal_stolen,
|
||||||
vold.p.ub - vnew.p.ub);
|
vold.p.ub - vnew.p.ub);
|
||||||
status = 1;
|
status = 1;
|
||||||
@ -1372,7 +1372,7 @@ int __kmp_dispatch_next_algorithm(int gtid,
|
|||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
} // if (check CAS result)
|
} // if (check CAS result)
|
||||||
KMP_CPU_PAUSE(); // CAS failed, repeate attempt
|
KMP_CPU_PAUSE(); // CAS failed, repeatedly attempt
|
||||||
} // while (try to steal from particular victim)
|
} // while (try to steal from particular victim)
|
||||||
} // while (search for victim)
|
} // while (search for victim)
|
||||||
} // if (try to find victim and steal)
|
} // if (try to find victim and steal)
|
||||||
@ -1532,7 +1532,7 @@ int __kmp_dispatch_next_algorithm(int gtid,
|
|||||||
}
|
}
|
||||||
if ((T)remaining <
|
if ((T)remaining <
|
||||||
pr->u.p.parm2) { // compare with K*nproc*(chunk+1), K=2 by default
|
pr->u.p.parm2) { // compare with K*nproc*(chunk+1), K=2 by default
|
||||||
// use dynamic-style shcedule
|
// use dynamic-style schedule
|
||||||
// atomically increment iterations, get old value
|
// atomically increment iterations, get old value
|
||||||
init = test_then_add<ST>(RCAST(volatile ST *, &sh->u.s.iteration),
|
init = test_then_add<ST>(RCAST(volatile ST *, &sh->u.s.iteration),
|
||||||
(ST)chunkspec);
|
(ST)chunkspec);
|
||||||
@ -1601,7 +1601,7 @@ int __kmp_dispatch_next_algorithm(int gtid,
|
|||||||
KMP_DEBUG_ASSERT(init % chunk == 0);
|
KMP_DEBUG_ASSERT(init % chunk == 0);
|
||||||
// compare with K*nproc*(chunk+1), K=2 by default
|
// compare with K*nproc*(chunk+1), K=2 by default
|
||||||
if ((T)remaining < pr->u.p.parm2) {
|
if ((T)remaining < pr->u.p.parm2) {
|
||||||
// use dynamic-style shcedule
|
// use dynamic-style schedule
|
||||||
// atomically increment iterations, get old value
|
// atomically increment iterations, get old value
|
||||||
init = test_then_add<ST>(RCAST(volatile ST *, &sh->u.s.iteration),
|
init = test_then_add<ST>(RCAST(volatile ST *, &sh->u.s.iteration),
|
||||||
(ST)chunk);
|
(ST)chunk);
|
||||||
@ -1892,7 +1892,7 @@ static int __kmp_dispatch_next(ident_t *loc, int gtid, kmp_int32 *p_last,
|
|||||||
typedef typename traits_t<T>::unsigned_t UT;
|
typedef typename traits_t<T>::unsigned_t UT;
|
||||||
typedef typename traits_t<T>::signed_t ST;
|
typedef typename traits_t<T>::signed_t ST;
|
||||||
// This is potentially slightly misleading, schedule(runtime) will appear here
|
// This is potentially slightly misleading, schedule(runtime) will appear here
|
||||||
// even if the actual runtme schedule is static. (Which points out a
|
// even if the actual runtime schedule is static. (Which points out a
|
||||||
// disadvantage of schedule(runtime): even when static scheduling is used it
|
// disadvantage of schedule(runtime): even when static scheduling is used it
|
||||||
// costs more than a compile time choice to use static scheduling would.)
|
// costs more than a compile time choice to use static scheduling would.)
|
||||||
KMP_TIME_PARTITIONED_BLOCK(OMP_loop_dynamic_scheduling);
|
KMP_TIME_PARTITIONED_BLOCK(OMP_loop_dynamic_scheduling);
|
||||||
@ -1909,7 +1909,7 @@ static int __kmp_dispatch_next(ident_t *loc, int gtid, kmp_int32 *p_last,
|
|||||||
gtid, p_lb, p_ub, p_st, p_last));
|
gtid, p_lb, p_ub, p_st, p_last));
|
||||||
|
|
||||||
if (team->t.t_serialized) {
|
if (team->t.t_serialized) {
|
||||||
/* NOTE: serialize this dispatch becase we are not at the active level */
|
/* NOTE: serialize this dispatch because we are not at the active level */
|
||||||
pr = reinterpret_cast<dispatch_private_info_template<T> *>(
|
pr = reinterpret_cast<dispatch_private_info_template<T> *>(
|
||||||
th->th.th_dispatch->th_disp_buffer); /* top of the stack */
|
th->th.th_dispatch->th_disp_buffer); /* top of the stack */
|
||||||
KMP_DEBUG_ASSERT(pr);
|
KMP_DEBUG_ASSERT(pr);
|
||||||
|
@ -993,7 +993,7 @@ void __kmp_dispatch_init_hierarchy(ident_t *loc, int n,
|
|||||||
th->th.th_hier_bar_data = (kmp_hier_private_bdata_t *)__kmp_allocate(
|
th->th.th_hier_bar_data = (kmp_hier_private_bdata_t *)__kmp_allocate(
|
||||||
sizeof(kmp_hier_private_bdata_t) * kmp_hier_layer_e::LAYER_LAST);
|
sizeof(kmp_hier_private_bdata_t) * kmp_hier_layer_e::LAYER_LAST);
|
||||||
}
|
}
|
||||||
// Have threads "register" themselves by modifiying the active count for each
|
// Have threads "register" themselves by modifying the active count for each
|
||||||
// level they are involved in. The active count will act as nthreads for that
|
// level they are involved in. The active count will act as nthreads for that
|
||||||
// level regarding the scheduling algorithms
|
// level regarding the scheduling algorithms
|
||||||
for (int i = 0; i < n; ++i) {
|
for (int i = 0; i < n; ++i) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* kmp_environment.h -- Handle environment varoiables OS-independently.
|
* kmp_environment.h -- Handle environment variables OS-independently.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@ -275,7 +275,7 @@ void KMP_EXPAND_NAME(KMP_API_NAME_GOMP_ORDERED_END)(void) {
|
|||||||
#define KMP_DISPATCH_FINI_CHUNK_ULL __kmp_aux_dispatch_fini_chunk_8u
|
#define KMP_DISPATCH_FINI_CHUNK_ULL __kmp_aux_dispatch_fini_chunk_8u
|
||||||
#define KMP_DISPATCH_NEXT_ULL __kmpc_dispatch_next_8u
|
#define KMP_DISPATCH_NEXT_ULL __kmpc_dispatch_next_8u
|
||||||
|
|
||||||
// The parallel contruct
|
// The parallel construct
|
||||||
|
|
||||||
#ifndef KMP_DEBUG
|
#ifndef KMP_DEBUG
|
||||||
static
|
static
|
||||||
@ -325,7 +325,7 @@ static
|
|||||||
enum sched_type schedule, long start,
|
enum sched_type schedule, long start,
|
||||||
long end, long incr,
|
long end, long incr,
|
||||||
long chunk_size) {
|
long chunk_size) {
|
||||||
// Intialize the loop worksharing construct.
|
// Initialize the loop worksharing construct.
|
||||||
|
|
||||||
KMP_DISPATCH_INIT(loc, *gtid, schedule, start, end, incr, chunk_size,
|
KMP_DISPATCH_INIT(loc, *gtid, schedule, start, end, incr, chunk_size,
|
||||||
schedule != kmp_sch_static);
|
schedule != kmp_sch_static);
|
||||||
|
@ -639,7 +639,7 @@ kmp_msg_t __kmp_msg_format(unsigned id_arg, ...) {
|
|||||||
// numbers, for example: "%2$s %1$s".
|
// numbers, for example: "%2$s %1$s".
|
||||||
__kmp_str_buf_vprint(&buffer, __kmp_i18n_catgets(id), args);
|
__kmp_str_buf_vprint(&buffer, __kmp_i18n_catgets(id), args);
|
||||||
#elif KMP_OS_WINDOWS
|
#elif KMP_OS_WINDOWS
|
||||||
// On Winodws, printf() family functions does not recognize GNU style
|
// On Windows, printf() family functions does not recognize GNU style
|
||||||
// parameter numbers, so we have to use FormatMessage() instead. It recognizes
|
// parameter numbers, so we have to use FormatMessage() instead. It recognizes
|
||||||
// parameter numbers, e. g.: "%2!s! "%1!s!".
|
// parameter numbers, e. g.: "%2!s! "%1!s!".
|
||||||
{
|
{
|
||||||
|
@ -32,7 +32,7 @@ extern "C" {
|
|||||||
|
|
||||||
__kmp_i18n_catgets() returns read-only string. It should not be freed.
|
__kmp_i18n_catgets() returns read-only string. It should not be freed.
|
||||||
|
|
||||||
KMP_I18N_STR macro simplifies acces to strings in message catalog a bit.
|
KMP_I18N_STR macro simplifies access to strings in message catalog a bit.
|
||||||
Following two lines are equivalent:
|
Following two lines are equivalent:
|
||||||
|
|
||||||
__kmp_i18n_catgets( kmp_i18n_str_Warning )
|
__kmp_i18n_catgets( kmp_i18n_str_Warning )
|
||||||
|
@ -3021,7 +3021,7 @@ kmp_lock_flags_t (*__kmp_indirect_get_flags[KMP_NUM_I_LOCKS])(
|
|||||||
static kmp_indirect_lock_t *__kmp_indirect_lock_pool[KMP_NUM_I_LOCKS] = {0};
|
static kmp_indirect_lock_t *__kmp_indirect_lock_pool[KMP_NUM_I_LOCKS] = {0};
|
||||||
|
|
||||||
// User lock allocator for dynamically dispatched indirect locks. Every entry of
|
// User lock allocator for dynamically dispatched indirect locks. Every entry of
|
||||||
// the indirect lock table holds the address and type of the allocated indrect
|
// the indirect lock table holds the address and type of the allocated indirect
|
||||||
// lock (kmp_indirect_lock_t), and the size of the table doubles when it is
|
// lock (kmp_indirect_lock_t), and the size of the table doubles when it is
|
||||||
// full. A destroyed indirect lock object is returned to the reusable pool of
|
// full. A destroyed indirect lock object is returned to the reusable pool of
|
||||||
// locks, unique to each lock type.
|
// locks, unique to each lock type.
|
||||||
|
@ -42,7 +42,7 @@ typedef struct ident ident_t;
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// We need to know the size of the area we can assume that the compiler(s)
|
// We need to know the size of the area we can assume that the compiler(s)
|
||||||
// allocated for obects of type omp_lock_t and omp_nest_lock_t. The Intel
|
// allocated for objects of type omp_lock_t and omp_nest_lock_t. The Intel
|
||||||
// compiler always allocates a pointer-sized area, as does visual studio.
|
// compiler always allocates a pointer-sized area, as does visual studio.
|
||||||
//
|
//
|
||||||
// gcc however, only allocates 4 bytes for regular locks, even on 64-bit
|
// gcc however, only allocates 4 bytes for regular locks, even on 64-bit
|
||||||
@ -861,11 +861,11 @@ __kmp_destroy_nested_user_lock_with_checks(kmp_user_lock_p lck) {
|
|||||||
//
|
//
|
||||||
// In other cases, the calling code really should differentiate between an
|
// In other cases, the calling code really should differentiate between an
|
||||||
// unimplemented function and one that is implemented but returning NULL /
|
// unimplemented function and one that is implemented but returning NULL /
|
||||||
// invalied value. If this is the case, no get function wrapper exists.
|
// invalid value. If this is the case, no get function wrapper exists.
|
||||||
|
|
||||||
extern int (*__kmp_is_user_lock_initialized_)(kmp_user_lock_p lck);
|
extern int (*__kmp_is_user_lock_initialized_)(kmp_user_lock_p lck);
|
||||||
|
|
||||||
// no set function; fields set durining local allocation
|
// no set function; fields set during local allocation
|
||||||
|
|
||||||
extern const ident_t *(*__kmp_get_user_lock_location_)(kmp_user_lock_p lck);
|
extern const ident_t *(*__kmp_get_user_lock_location_)(kmp_user_lock_p lck);
|
||||||
|
|
||||||
@ -899,7 +899,7 @@ static inline void __kmp_set_user_lock_flags(kmp_user_lock_p lck,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The fuction which sets up all of the vtbl pointers for kmp_user_lock_t.
|
// The function which sets up all of the vtbl pointers for kmp_user_lock_t.
|
||||||
extern void __kmp_set_user_lock_vptrs(kmp_lock_kind_t user_lock_kind);
|
extern void __kmp_set_user_lock_vptrs(kmp_lock_kind_t user_lock_kind);
|
||||||
|
|
||||||
// Macros for binding user lock functions.
|
// Macros for binding user lock functions.
|
||||||
@ -1128,7 +1128,7 @@ extern int (**__kmp_direct_unset)(kmp_dyna_lock_t *, kmp_int32);
|
|||||||
extern int (**__kmp_direct_test)(kmp_dyna_lock_t *, kmp_int32);
|
extern int (**__kmp_direct_test)(kmp_dyna_lock_t *, kmp_int32);
|
||||||
|
|
||||||
// Function tables for indirect locks. Set/unset/test differentiate functions
|
// Function tables for indirect locks. Set/unset/test differentiate functions
|
||||||
// with/withuot consistency checking.
|
// with/without consistency checking.
|
||||||
extern void (*__kmp_indirect_init[])(kmp_user_lock_p);
|
extern void (*__kmp_indirect_init[])(kmp_user_lock_p);
|
||||||
extern void (**__kmp_indirect_destroy)(kmp_user_lock_p);
|
extern void (**__kmp_indirect_destroy)(kmp_user_lock_p);
|
||||||
extern int (**__kmp_indirect_set)(kmp_user_lock_p, kmp_int32);
|
extern int (**__kmp_indirect_set)(kmp_user_lock_p, kmp_int32);
|
||||||
|
@ -47,7 +47,7 @@ typedef struct {
|
|||||||
} kmp_omp_nthr_item_t;
|
} kmp_omp_nthr_item_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
kmp_int32 num; // Number of items in the arrray.
|
kmp_int32 num; // Number of items in the array.
|
||||||
kmp_uint64 array; // Address of array of kmp_omp_num_threads_item_t.
|
kmp_uint64 array; // Address of array of kmp_omp_num_threads_item_t.
|
||||||
} kmp_omp_nthr_info_t;
|
} kmp_omp_nthr_info_t;
|
||||||
|
|
||||||
|
@ -3529,7 +3529,7 @@ static int __kmp_expand_threads(int nNeed) {
|
|||||||
// > __kmp_max_nth in one of two ways:
|
// > __kmp_max_nth in one of two ways:
|
||||||
//
|
//
|
||||||
// 1) The initialization thread (gtid = 0) exits. __kmp_threads[0]
|
// 1) The initialization thread (gtid = 0) exits. __kmp_threads[0]
|
||||||
// may not be resused by another thread, so we may need to increase
|
// may not be reused by another thread, so we may need to increase
|
||||||
// __kmp_threads_capacity to __kmp_max_nth + 1.
|
// __kmp_threads_capacity to __kmp_max_nth + 1.
|
||||||
//
|
//
|
||||||
// 2) New foreign root(s) are encountered. We always register new foreign
|
// 2) New foreign root(s) are encountered. We always register new foreign
|
||||||
@ -4515,11 +4515,11 @@ __kmp_set_thread_affinity_mask_full_tmp(kmp_affin_mask_t *old_mask) {
|
|||||||
#if KMP_AFFINITY_SUPPORTED
|
#if KMP_AFFINITY_SUPPORTED
|
||||||
|
|
||||||
// __kmp_partition_places() is the heart of the OpenMP 4.0 affinity mechanism.
|
// __kmp_partition_places() is the heart of the OpenMP 4.0 affinity mechanism.
|
||||||
// It calculats the worker + master thread's partition based upon the parent
|
// It calculates the worker + master thread's partition based upon the parent
|
||||||
// thread's partition, and binds each worker to a thread in their partition.
|
// thread's partition, and binds each worker to a thread in their partition.
|
||||||
// The master thread's partition should already include its current binding.
|
// The master thread's partition should already include its current binding.
|
||||||
static void __kmp_partition_places(kmp_team_t *team, int update_master_only) {
|
static void __kmp_partition_places(kmp_team_t *team, int update_master_only) {
|
||||||
// Copy the master thread's place partion to the team struct
|
// Copy the master thread's place partition to the team struct
|
||||||
kmp_info_t *master_th = team->t.t_threads[0];
|
kmp_info_t *master_th = team->t.t_threads[0];
|
||||||
KMP_DEBUG_ASSERT(master_th != NULL);
|
KMP_DEBUG_ASSERT(master_th != NULL);
|
||||||
kmp_proc_bind_t proc_bind = team->t.t_proc_bind;
|
kmp_proc_bind_t proc_bind = team->t.t_proc_bind;
|
||||||
@ -5536,7 +5536,7 @@ kmp_team_t *__kmp_reap_team(kmp_team_t *team) {
|
|||||||
// locality problems on programs where the size of the hot team regularly
|
// locality problems on programs where the size of the hot team regularly
|
||||||
// grew and shrunk.
|
// grew and shrunk.
|
||||||
//
|
//
|
||||||
// Now, for single-level parallelism, the OMP tid is alway == gtid.
|
// Now, for single-level parallelism, the OMP tid is always == gtid.
|
||||||
void __kmp_free_thread(kmp_info_t *this_th) {
|
void __kmp_free_thread(kmp_info_t *this_th) {
|
||||||
int gtid;
|
int gtid;
|
||||||
kmp_info_t **scan;
|
kmp_info_t **scan;
|
||||||
@ -5609,7 +5609,7 @@ void __kmp_free_thread(kmp_info_t *this_th) {
|
|||||||
// scan is the address of a link in the list, possibly the address of
|
// scan is the address of a link in the list, possibly the address of
|
||||||
// __kmp_thread_pool itself.
|
// __kmp_thread_pool itself.
|
||||||
//
|
//
|
||||||
// In the absence of nested parallism, the for loop will have 0 iterations.
|
// In the absence of nested parallelism, the for loop will have 0 iterations.
|
||||||
if (__kmp_thread_pool_insert_pt != NULL) {
|
if (__kmp_thread_pool_insert_pt != NULL) {
|
||||||
scan = &(__kmp_thread_pool_insert_pt->th.th_next_pool);
|
scan = &(__kmp_thread_pool_insert_pt->th.th_next_pool);
|
||||||
} else {
|
} else {
|
||||||
@ -6088,7 +6088,7 @@ void __kmp_internal_end_library(int gtid_req) {
|
|||||||
only place to clear __kmp_serial_init */
|
only place to clear __kmp_serial_init */
|
||||||
/* we'll check this later too, after we get the lock */
|
/* we'll check this later too, after we get the lock */
|
||||||
// 2009-09-06: We do not set g_abort without setting g_done. This check looks
|
// 2009-09-06: We do not set g_abort without setting g_done. This check looks
|
||||||
// redundaant, because the next check will work in any case.
|
// redundant, because the next check will work in any case.
|
||||||
if (__kmp_global.g.g_abort) {
|
if (__kmp_global.g.g_abort) {
|
||||||
KA_TRACE(11, ("__kmp_internal_end_library: abort, exiting\n"));
|
KA_TRACE(11, ("__kmp_internal_end_library: abort, exiting\n"));
|
||||||
/* TODO abort? */
|
/* TODO abort? */
|
||||||
|
@ -667,7 +667,7 @@ static void __kmp_team_static_init(ident_t *loc, kmp_int32 gtid,
|
|||||||
// stride for next chunks calculation.
|
// stride for next chunks calculation.
|
||||||
// Last iteration flag set for the team that will execute
|
// Last iteration flag set for the team that will execute
|
||||||
// the last iteration of the loop.
|
// the last iteration of the loop.
|
||||||
// The routine is called for dist_schedue(static,chunk) only.
|
// The routine is called for dist_schedule(static,chunk) only.
|
||||||
typedef typename traits_t<T>::unsigned_t UT;
|
typedef typename traits_t<T>::unsigned_t UT;
|
||||||
typedef typename traits_t<T>::signed_t ST;
|
typedef typename traits_t<T>::signed_t ST;
|
||||||
kmp_uint32 team_id;
|
kmp_uint32 team_id;
|
||||||
|
@ -364,7 +364,7 @@ static void __kmp_stg_parse_int(
|
|||||||
char const
|
char const
|
||||||
*name, // I: Name of environment variable (used in warning messages).
|
*name, // I: Name of environment variable (used in warning messages).
|
||||||
char const *value, // I: Value of environment variable to parse.
|
char const *value, // I: Value of environment variable to parse.
|
||||||
int min, // I: Miminal allowed value.
|
int min, // I: Minimum allowed value.
|
||||||
int max, // I: Maximum allowed value.
|
int max, // I: Maximum allowed value.
|
||||||
int *out // O: Output (parsed) value.
|
int *out // O: Output (parsed) value.
|
||||||
) {
|
) {
|
||||||
@ -1305,7 +1305,7 @@ static void __kmp_stg_print_max_task_priority(kmp_str_buf_t *buffer,
|
|||||||
} // __kmp_stg_print_max_task_priority
|
} // __kmp_stg_print_max_task_priority
|
||||||
|
|
||||||
// KMP_TASKLOOP_MIN_TASKS
|
// KMP_TASKLOOP_MIN_TASKS
|
||||||
// taskloop threashold to switch from recursive to linear tasks creation
|
// taskloop threshold to switch from recursive to linear tasks creation
|
||||||
static void __kmp_stg_parse_taskloop_min_tasks(char const *name,
|
static void __kmp_stg_parse_taskloop_min_tasks(char const *name,
|
||||||
char const *value, void *data) {
|
char const *value, void *data) {
|
||||||
int tmp;
|
int tmp;
|
||||||
@ -2041,7 +2041,7 @@ static void __kmp_parse_affinity_env(char const *name, char const *value,
|
|||||||
// If we see a parse error, emit a warning and scan to the next ",".
|
// If we see a parse error, emit a warning and scan to the next ",".
|
||||||
//
|
//
|
||||||
// FIXME - there's got to be a better way to print an error
|
// FIXME - there's got to be a better way to print an error
|
||||||
// message, hopefully without overwritting peices of buf.
|
// message, hopefully without overwriting peices of buf.
|
||||||
#define EMIT_WARN(skip, errlist) \
|
#define EMIT_WARN(skip, errlist) \
|
||||||
{ \
|
{ \
|
||||||
char ch; \
|
char ch; \
|
||||||
@ -4395,7 +4395,7 @@ static void __kmp_stg_print_speculative_statsfile(kmp_str_buf_t *buffer,
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// KMP_HW_SUBSET (was KMP_PLACE_THREADS)
|
// KMP_HW_SUBSET (was KMP_PLACE_THREADS)
|
||||||
|
|
||||||
// The longest observable sequense of items is
|
// The longest observable sequence of items is
|
||||||
// Socket-Node-Tile-Core-Thread
|
// Socket-Node-Tile-Core-Thread
|
||||||
// So, let's limit to 5 levels for now
|
// So, let's limit to 5 levels for now
|
||||||
// The input string is usually short enough, let's use 512 limit for now
|
// The input string is usually short enough, let's use 512 limit for now
|
||||||
|
@ -270,7 +270,7 @@ void explicitTimer::stop(tsc_tick_count tick,
|
|||||||
/* ************* partitionedTimers member functions ************* */
|
/* ************* partitionedTimers member functions ************* */
|
||||||
partitionedTimers::partitionedTimers() { timer_stack.reserve(8); }
|
partitionedTimers::partitionedTimers() { timer_stack.reserve(8); }
|
||||||
|
|
||||||
// initialize the paritioned timers to an initial timer
|
// initialize the partitioned timers to an initial timer
|
||||||
void partitionedTimers::init(explicitTimer timer) {
|
void partitionedTimers::init(explicitTimer timer) {
|
||||||
KMP_DEBUG_ASSERT(this->timer_stack.size() == 0);
|
KMP_DEBUG_ASSERT(this->timer_stack.size() == 0);
|
||||||
timer_stack.push_back(timer);
|
timer_stack.push_back(timer);
|
||||||
@ -609,7 +609,7 @@ void kmp_stats_output_module::printTimerStats(FILE *statsOut,
|
|||||||
totalStats[s].format(tag, true).c_str());
|
totalStats[s].format(tag, true).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print historgram of statistics
|
// Print histogram of statistics
|
||||||
if (theStats[0].haveHist()) {
|
if (theStats[0].haveHist()) {
|
||||||
fprintf(statsOut, "\nTimer distributions\n");
|
fprintf(statsOut, "\nTimer distributions\n");
|
||||||
for (int s = 0; s < TIMER_LAST; s++) {
|
for (int s = 0; s < TIMER_LAST; s++) {
|
||||||
|
@ -195,7 +195,7 @@ enum stats_state_e {
|
|||||||
// from a dynamically scheduled loop
|
// from a dynamically scheduled loop
|
||||||
// OMP_critical -- Time thread spends executing critical section
|
// OMP_critical -- Time thread spends executing critical section
|
||||||
// OMP_critical_wait -- Time thread spends waiting to enter
|
// OMP_critical_wait -- Time thread spends waiting to enter
|
||||||
// a critcal seciton
|
// a critical section
|
||||||
// OMP_single -- Time spent executing a "single" region
|
// OMP_single -- Time spent executing a "single" region
|
||||||
// OMP_master -- Time spent executing a "master" region
|
// OMP_master -- Time spent executing a "master" region
|
||||||
// OMP_task_immediate -- Time spent executing non-deferred tasks
|
// OMP_task_immediate -- Time spent executing non-deferred tasks
|
||||||
@ -522,7 +522,7 @@ public:
|
|||||||
void windup();
|
void windup();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Special wrapper around the partioned timers to aid timing code blocks
|
// Special wrapper around the partitioned timers to aid timing code blocks
|
||||||
// It avoids the need to have an explicit end, leaving the scope suffices.
|
// It avoids the need to have an explicit end, leaving the scope suffices.
|
||||||
class blockPartitionedTimer {
|
class blockPartitionedTimer {
|
||||||
partitionedTimers *part_timers;
|
partitionedTimers *part_timers;
|
||||||
@ -920,7 +920,7 @@ extern kmp_stats_output_module __kmp_stats_output;
|
|||||||
#define KMP_OUTPUT_STATS(heading_string) __kmp_output_stats(heading_string)
|
#define KMP_OUTPUT_STATS(heading_string) __kmp_output_stats(heading_string)
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Initializes the paritioned timers to begin with name.
|
* \brief Initializes the partitioned timers to begin with name.
|
||||||
*
|
*
|
||||||
* @param name timer which you want this thread to begin with
|
* @param name timer which you want this thread to begin with
|
||||||
*
|
*
|
||||||
|
@ -72,12 +72,12 @@ struct kmp_str_fname {
|
|||||||
typedef struct kmp_str_fname kmp_str_fname_t;
|
typedef struct kmp_str_fname kmp_str_fname_t;
|
||||||
void __kmp_str_fname_init(kmp_str_fname_t *fname, char const *path);
|
void __kmp_str_fname_init(kmp_str_fname_t *fname, char const *path);
|
||||||
void __kmp_str_fname_free(kmp_str_fname_t *fname);
|
void __kmp_str_fname_free(kmp_str_fname_t *fname);
|
||||||
// Compares file name with specified patern. If pattern is NULL, any fname
|
// Compares file name with specified pattern. If pattern is NULL, any fname
|
||||||
// matched.
|
// matched.
|
||||||
int __kmp_str_fname_match(kmp_str_fname_t const *fname, char const *pattern);
|
int __kmp_str_fname_match(kmp_str_fname_t const *fname, char const *pattern);
|
||||||
|
|
||||||
/* The compiler provides source locations in string form
|
/* The compiler provides source locations in string form
|
||||||
";file;func;line;col;;". It is not convenient for manupulation. This
|
";file;func;line;col;;". It is not convenient for manipulation. This
|
||||||
structure keeps source location in more convenient form.
|
structure keeps source location in more convenient form.
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ void *kmp_malloc(size_t size) {
|
|||||||
i;
|
i;
|
||||||
void *res;
|
void *res;
|
||||||
#if KMP_OS_WINDOWS
|
#if KMP_OS_WINDOWS
|
||||||
// If succesfull returns a pointer to the memory block, otherwise returns
|
// If successful returns a pointer to the memory block, otherwise returns
|
||||||
// NULL.
|
// NULL.
|
||||||
// Sets errno to ENOMEM or EINVAL if memory allocation failed or parameter
|
// Sets errno to ENOMEM or EINVAL if memory allocation failed or parameter
|
||||||
// validation failed.
|
// validation failed.
|
||||||
|
@ -35,7 +35,7 @@ static std::atomic<kmp_int32> kmp_node_id_seed = ATOMIC_VAR_INIT(0);
|
|||||||
|
|
||||||
static void __kmp_init_node(kmp_depnode_t *node) {
|
static void __kmp_init_node(kmp_depnode_t *node) {
|
||||||
node->dn.successors = NULL;
|
node->dn.successors = NULL;
|
||||||
node->dn.task = NULL; // will point to the rigth task
|
node->dn.task = NULL; // will point to the right task
|
||||||
// once dependences have been processed
|
// once dependences have been processed
|
||||||
for (int i = 0; i < MAX_MTX_DEPS; ++i)
|
for (int i = 0; i < MAX_MTX_DEPS; ++i)
|
||||||
node->dn.mtx_locks[i] = NULL;
|
node->dn.mtx_locks[i] = NULL;
|
||||||
@ -473,8 +473,8 @@ static bool __kmp_check_deps(kmp_int32 gtid, kmp_depnode_t *node,
|
|||||||
npredecessors++;
|
npredecessors++;
|
||||||
|
|
||||||
// Update predecessors and obtain current value to check if there are still
|
// Update predecessors and obtain current value to check if there are still
|
||||||
// any outstandig dependences (some tasks may have finished while we processed
|
// any outstanding dependences (some tasks may have finished while we
|
||||||
// the dependences)
|
// processed the dependences)
|
||||||
npredecessors =
|
npredecessors =
|
||||||
node->dn.npredecessors.fetch_add(npredecessors) + npredecessors;
|
node->dn.npredecessors.fetch_add(npredecessors) + npredecessors;
|
||||||
|
|
||||||
@ -498,7 +498,7 @@ task''
|
|||||||
@param noalias_dep_list List of depend items with no aliasing
|
@param noalias_dep_list List of depend items with no aliasing
|
||||||
|
|
||||||
@return Returns either TASK_CURRENT_NOT_QUEUED if the current task was not
|
@return Returns either TASK_CURRENT_NOT_QUEUED if the current task was not
|
||||||
suspendend and queued, or TASK_CURRENT_QUEUED if it was suspended and queued
|
suspended and queued, or TASK_CURRENT_QUEUED if it was suspended and queued
|
||||||
|
|
||||||
Schedule a non-thread-switchable task with dependences for execution
|
Schedule a non-thread-switchable task with dependences for execution
|
||||||
*/
|
*/
|
||||||
|
@ -912,7 +912,7 @@ static void __kmp_task_finish(kmp_int32 gtid, kmp_task_t *task,
|
|||||||
/* If the tasks' destructor thunk flag has been set, we need to invoke the
|
/* If the tasks' destructor thunk flag has been set, we need to invoke the
|
||||||
destructor thunk that has been generated by the compiler. The code is
|
destructor thunk that has been generated by the compiler. The code is
|
||||||
placed here, since at this point other tasks might have been released
|
placed here, since at this point other tasks might have been released
|
||||||
hence overlapping the destructor invokations with some other work in the
|
hence overlapping the destructor invocations with some other work in the
|
||||||
released tasks. The OpenMP spec is not specific on when the destructors
|
released tasks. The OpenMP spec is not specific on when the destructors
|
||||||
are invoked, so we should be free to choose. */
|
are invoked, so we should be free to choose. */
|
||||||
if (taskdata->td_flags.destructors_thunk) {
|
if (taskdata->td_flags.destructors_thunk) {
|
||||||
@ -1411,7 +1411,7 @@ __kmpc_omp_reg_task_with_affinity(ident_t *loc_ref, kmp_int32 gtid,
|
|||||||
//
|
//
|
||||||
// gtid: global thread ID of caller
|
// gtid: global thread ID of caller
|
||||||
// task: the task to invoke
|
// task: the task to invoke
|
||||||
// current_task: the task to resume after task invokation
|
// current_task: the task to resume after task invocation
|
||||||
static void __kmp_invoke_task(kmp_int32 gtid, kmp_task_t *task,
|
static void __kmp_invoke_task(kmp_int32 gtid, kmp_task_t *task,
|
||||||
kmp_taskdata_t *current_task) {
|
kmp_taskdata_t *current_task) {
|
||||||
kmp_taskdata_t *taskdata = KMP_TASK_TO_TASKDATA(task);
|
kmp_taskdata_t *taskdata = KMP_TASK_TO_TASKDATA(task);
|
||||||
@ -2911,7 +2911,7 @@ static inline int __kmp_execute_tasks_template(
|
|||||||
// met, then return now, so that the barrier gather/release pattern can
|
// met, then return now, so that the barrier gather/release pattern can
|
||||||
// proceed. If this thread is in the last spin loop in the barrier,
|
// proceed. If this thread is in the last spin loop in the barrier,
|
||||||
// waiting to be released, we know that the termination condition will not
|
// waiting to be released, we know that the termination condition will not
|
||||||
// be satisified, so don't waste any cycles checking it.
|
// be satisfied, so don't waste any cycles checking it.
|
||||||
if (flag == NULL || (!final_spin && flag->done_check())) {
|
if (flag == NULL || (!final_spin && flag->done_check())) {
|
||||||
KA_TRACE(
|
KA_TRACE(
|
||||||
15,
|
15,
|
||||||
@ -3096,7 +3096,7 @@ static void __kmp_enable_tasking(kmp_task_team_t *task_team,
|
|||||||
* to each thread in the team, so that it can steal work from it.
|
* to each thread in the team, so that it can steal work from it.
|
||||||
*
|
*
|
||||||
* Enter the existence of the kmp_task_team_t struct. It employs a reference
|
* Enter the existence of the kmp_task_team_t struct. It employs a reference
|
||||||
* counting mechanims, and is allocated by the master thread before calling
|
* counting mechanism, and is allocated by the master thread before calling
|
||||||
* __kmp_<barrier_kind>_release, and then is release by the last thread to
|
* __kmp_<barrier_kind>_release, and then is release by the last thread to
|
||||||
* exit __kmp_<barrier_kind>_release at the next barrier. I.e. the lifetimes
|
* exit __kmp_<barrier_kind>_release at the next barrier. I.e. the lifetimes
|
||||||
* of the kmp_task_team_t structs for consecutive barriers can overlap
|
* of the kmp_task_team_t structs for consecutive barriers can overlap
|
||||||
@ -3107,7 +3107,7 @@ static void __kmp_enable_tasking(kmp_task_team_t *task_team,
|
|||||||
* We currently use the existence of the threads array as an indicator that
|
* We currently use the existence of the threads array as an indicator that
|
||||||
* tasks were spawned since the last barrier. If the structure is to be
|
* tasks were spawned since the last barrier. If the structure is to be
|
||||||
* useful outside the context of tasking, then this will have to change, but
|
* useful outside the context of tasking, then this will have to change, but
|
||||||
* not settting the field minimizes the performance impact of tasking on
|
* not setting the field minimizes the performance impact of tasking on
|
||||||
* barriers, when no explicit tasks were spawned (pushed, actually).
|
* barriers, when no explicit tasks were spawned (pushed, actually).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -4258,7 +4258,7 @@ int __kmp_taskloop_task(int gtid, void *ptask) {
|
|||||||
// grainsize Number of loop iterations per task
|
// grainsize Number of loop iterations per task
|
||||||
// extras Number of chunks with grainsize+1 iterations
|
// extras Number of chunks with grainsize+1 iterations
|
||||||
// tc Iterations count
|
// tc Iterations count
|
||||||
// num_t_min Threashold to launch tasks recursively
|
// num_t_min Threshold to launch tasks recursively
|
||||||
// task_dup Tasks duplication routine
|
// task_dup Tasks duplication routine
|
||||||
// codeptr_ra Return address for OMPT events
|
// codeptr_ra Return address for OMPT events
|
||||||
void __kmp_taskloop_recur(ident_t *loc, int gtid, kmp_task_t *task,
|
void __kmp_taskloop_recur(ident_t *loc, int gtid, kmp_task_t *task,
|
||||||
|
@ -194,7 +194,7 @@ void __kmp_query_cpuid(kmp_cpuinfo_t *p) {
|
|||||||
KA_TRACE(trace_level, (" PSN"));
|
KA_TRACE(trace_level, (" PSN"));
|
||||||
}
|
}
|
||||||
if ((buf.edx >> 19) & 1) {
|
if ((buf.edx >> 19) & 1) {
|
||||||
/* CLFULSH - Cache Flush Instruction Available */
|
/* CLFLUSH - Cache Flush Instruction Available */
|
||||||
cflush_size =
|
cflush_size =
|
||||||
data[1] * 8; /* Bits 15-08: CLFLUSH line size = 8 (64 bytes) */
|
data[1] * 8; /* Bits 15-08: CLFLUSH line size = 8 (64 bytes) */
|
||||||
KA_TRACE(trace_level, (" CLFLUSH(%db)", cflush_size));
|
KA_TRACE(trace_level, (" CLFLUSH(%db)", cflush_size));
|
||||||
|
@ -15,11 +15,11 @@
|
|||||||
#define KMP_WRAPPER_MALLOC_H
|
#define KMP_WRAPPER_MALLOC_H
|
||||||
|
|
||||||
/* This header serves for 3 purposes:
|
/* This header serves for 3 purposes:
|
||||||
1. Declaring standard memory allocation rourines in OS-independent way.
|
1. Declaring standard memory allocation routines in OS-independent way.
|
||||||
2. Passing source location info through memory allocation wrappers.
|
2. Passing source location info through memory allocation wrappers.
|
||||||
3. Enabling native memory debugging capabilities.
|
3. Enabling native memory debugging capabilities.
|
||||||
|
|
||||||
1. Declaring standard memory allocation rourines in OS-independent way.
|
1. Declaring standard memory allocation routines in OS-independent way.
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
On Linux* OS, alloca() function is declared in <alloca.h> header, while on
|
On Linux* OS, alloca() function is declared in <alloca.h> header, while on
|
||||||
Windows* OS there is no <alloca.h> header, function _alloca() (note
|
Windows* OS there is no <alloca.h> header, function _alloca() (note
|
||||||
@ -103,9 +103,9 @@
|
|||||||
#error Unknown or unsupported OS.
|
#error Unknown or unsupported OS.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* KMP_SRC_LOC_DECL -- Declaring source location paramemters, to be used in
|
/* KMP_SRC_LOC_DECL -- Declaring source location parameters, to be used in
|
||||||
function declaration.
|
function declaration.
|
||||||
KMP_SRC_LOC_PARM -- Source location paramemters, to be used to pass
|
KMP_SRC_LOC_PARM -- Source location parameters, to be used to pass
|
||||||
parameters to underlying levels.
|
parameters to underlying levels.
|
||||||
KMP_SRC_LOC_CURR -- Source location arguments describing current location,
|
KMP_SRC_LOC_CURR -- Source location arguments describing current location,
|
||||||
to be used at top-level.
|
to be used at top-level.
|
||||||
|
@ -102,7 +102,7 @@ inline void ompt_set_thread_state(kmp_info_t *thread, ompt_state_t state) {
|
|||||||
inline const char *ompt_get_runtime_version() {
|
inline const char *ompt_get_runtime_version() {
|
||||||
return &__kmp_version_lib_ver[KMP_VERSION_MAGIC_LEN];
|
return &__kmp_version_lib_ver[KMP_VERSION_MAGIC_LEN];
|
||||||
}
|
}
|
||||||
#endif // OMPT_SUPPRORT
|
#endif // OMPT_SUPPORT
|
||||||
|
|
||||||
// macros providing the OMPT callbacks for reduction clause
|
// macros providing the OMPT callbacks for reduction clause
|
||||||
#if OMPT_SUPPORT && OMPT_OPTIONAL
|
#if OMPT_SUPPORT && OMPT_OPTIONAL
|
||||||
|
@ -2303,7 +2303,7 @@ ITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_
|
|||||||
* name of the metadata), and a value (the actual data). The encoding of
|
* name of the metadata), and a value (the actual data). The encoding of
|
||||||
* the value depends on the type of the metadata.
|
* the value depends on the type of the metadata.
|
||||||
*
|
*
|
||||||
* The type of metadata is specified by an enumerated type __itt_metdata_type.
|
* The type of metadata is specified by an enumerated type __itt_metadata_type.
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -3196,7 +3196,7 @@ ITT_STUBV(ITTAPI, void, relation_add_ex, (const __itt_domain *domain,
|
|||||||
#define __itt_relation_add_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(relation_add_ex,d,x,y,z,a,b)
|
#define __itt_relation_add_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(relation_add_ex,d,x,y,z,a,b)
|
||||||
#define __itt_relation_add_ex_ptr ITTNOTIFY_NAME(relation_add_ex)
|
#define __itt_relation_add_ex_ptr ITTNOTIFY_NAME(relation_add_ex)
|
||||||
#else /* INTEL_NO_ITTNOTIFY_API */
|
#else /* INTEL_NO_ITTNOTIFY_API */
|
||||||
#define __itt_relation_add_to_current_ex(domain,clock_domain,timestame,relation,tail)
|
#define __itt_relation_add_to_current_ex(domain,clock_domain,timestamp,relation,tail)
|
||||||
#define __itt_relation_add_to_current_ex_ptr 0
|
#define __itt_relation_add_to_current_ex_ptr 0
|
||||||
#define __itt_relation_add_ex(domain,clock_domain,timestamp,head,relation,tail)
|
#define __itt_relation_add_ex(domain,clock_domain,timestamp,head,relation,tail)
|
||||||
#define __itt_relation_add_ex_ptr 0
|
#define __itt_relation_add_ex_ptr 0
|
||||||
|
@ -762,7 +762,7 @@ static const char* __itt_fsplit(const char* s, const char* sep, const char** out
|
|||||||
|
|
||||||
/* This function return value of env variable that placed into static buffer.
|
/* This function return value of env variable that placed into static buffer.
|
||||||
* !!! The same static buffer is used for subsequent calls. !!!
|
* !!! The same static buffer is used for subsequent calls. !!!
|
||||||
* This was done to aviod dynamic allocation for few calls.
|
* This was done to avoid dynamic allocation for few calls.
|
||||||
* Actually we need this function only four times.
|
* Actually we need this function only four times.
|
||||||
*/
|
*/
|
||||||
static const char* __itt_get_env_var(const char* name)
|
static const char* __itt_get_env_var(const char* name)
|
||||||
@ -1012,7 +1012,7 @@ static void __itt_reinit_all_pointers(void)
|
|||||||
static void __itt_nullify_all_pointers(void)
|
static void __itt_nullify_all_pointers(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
/* Nulify all pointers except domain_create, string_handle_create and counter_create */
|
/* Nullify all pointers except domain_create, string_handle_create and counter_create */
|
||||||
for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)
|
for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++)
|
||||||
*_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;
|
*_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func;
|
||||||
}
|
}
|
||||||
|
@ -2207,7 +2207,7 @@ int __kmp_get_load_balance(int max) {
|
|||||||
|
|
||||||
#else // Linux* OS
|
#else // Linux* OS
|
||||||
|
|
||||||
// The fuction returns number of running (not sleeping) threads, or -1 in case
|
// The function returns number of running (not sleeping) threads, or -1 in case
|
||||||
// of error. Error could be reported if Linux* OS kernel too old (without
|
// of error. Error could be reported if Linux* OS kernel too old (without
|
||||||
// "/proc" support). Counting running threads stops if max running threads
|
// "/proc" support). Counting running threads stops if max running threads
|
||||||
// encountered.
|
// encountered.
|
||||||
|
@ -23,7 +23,7 @@ int test_omp_init_lock() {
|
|||||||
omp_unset_lock(&my_lcks[j % LOCKS_PER_ITER]);
|
omp_unset_lock(&my_lcks[j % LOCKS_PER_ITER]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Wait until all repititions are done. The test is exercising growth of
|
// Wait until all repetitions are done. The test is exercising growth of
|
||||||
// the global lock pool, which does not shrink when no locks are allocated.
|
// the global lock pool, which does not shrink when no locks are allocated.
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
// This test checks that values stored in task_data in a barrier_begin event
|
// This test checks that values stored in task_data in a barrier_begin event
|
||||||
// are still present in the corresponding barrier_end event.
|
// are still present in the corresponding barrier_end event.
|
||||||
// Therefore, callback implementations different from the ones in callback.h are neccessary.
|
// Therefore, callback implementations different from the ones in callback.h are necessary.
|
||||||
// This is a test for an issue reported in
|
// This is a test for an issue reported in
|
||||||
// https://github.com/OpenMPToolsInterface/LLVM-openmp/issues/39
|
// https://github.com/OpenMPToolsInterface/LLVM-openmp/issues/39
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ typedef struct red_input {
|
|||||||
void *reduce_orig; /**< original reduction item used for initialization */
|
void *reduce_orig; /**< original reduction item used for initialization */
|
||||||
size_t reduce_size; /**< size of data item in bytes */
|
size_t reduce_size; /**< size of data item in bytes */
|
||||||
// three compiler-generated routines (init, fini are optional):
|
// three compiler-generated routines (init, fini are optional):
|
||||||
void *reduce_init; /**< data initialization routine (single paramemter) */
|
void *reduce_init; /**< data initialization routine (single parameter) */
|
||||||
void *reduce_fini; /**< data finalization routine */
|
void *reduce_fini; /**< data finalization routine */
|
||||||
void *reduce_comb; /**< data combiner routine */
|
void *reduce_comb; /**< data combiner routine */
|
||||||
unsigned flags; /**< flags for additional info from compiler */
|
unsigned flags; /**< flags for additional info from compiler */
|
||||||
|
@ -36,7 +36,7 @@ typedef struct red_input {
|
|||||||
void *reduce_shar; /**< shared between tasks item to reduce into */
|
void *reduce_shar; /**< shared between tasks item to reduce into */
|
||||||
size_t reduce_size; /**< size of data item in bytes */
|
size_t reduce_size; /**< size of data item in bytes */
|
||||||
// three compiler-generated routines (init, fini are optional):
|
// three compiler-generated routines (init, fini are optional):
|
||||||
void *reduce_init; /**< data initialization routine (single paramemter) */
|
void *reduce_init; /**< data initialization routine (single parameter) */
|
||||||
void *reduce_fini; /**< data finalization routine */
|
void *reduce_fini; /**< data finalization routine */
|
||||||
void *reduce_comb; /**< data combiner routine */
|
void *reduce_comb; /**< data combiner routine */
|
||||||
unsigned flags; /**< flags for additional info from compiler */
|
unsigned flags; /**< flags for additional info from compiler */
|
||||||
|
@ -39,7 +39,7 @@ typedef struct red_input {
|
|||||||
void *reduce_orig; /**< original reduction item used for initialization */
|
void *reduce_orig; /**< original reduction item used for initialization */
|
||||||
size_t reduce_size; /**< size of data item in bytes */
|
size_t reduce_size; /**< size of data item in bytes */
|
||||||
// three compiler-generated routines (init, fini are optional):
|
// three compiler-generated routines (init, fini are optional):
|
||||||
void *reduce_init; /**< data initialization routine (single paramemter) */
|
void *reduce_init; /**< data initialization routine (single parameter) */
|
||||||
void *reduce_fini; /**< data finalization routine */
|
void *reduce_fini; /**< data finalization routine */
|
||||||
void *reduce_comb; /**< data combiner routine */
|
void *reduce_comb; /**< data combiner routine */
|
||||||
unsigned flags; /**< flags for additional info from compiler */
|
unsigned flags; /**< flags for additional info from compiler */
|
||||||
|
@ -36,7 +36,7 @@ typedef struct red_input {
|
|||||||
void *reduce_shar; /**< shared between tasks item to reduce into */
|
void *reduce_shar; /**< shared between tasks item to reduce into */
|
||||||
size_t reduce_size; /**< size of data item in bytes */
|
size_t reduce_size; /**< size of data item in bytes */
|
||||||
// three compiler-generated routines (init, fini are optional):
|
// three compiler-generated routines (init, fini are optional):
|
||||||
void *reduce_init; /**< data initialization routine (single paramemter) */
|
void *reduce_init; /**< data initialization routine (single parameter) */
|
||||||
void *reduce_fini; /**< data finalization routine */
|
void *reduce_fini; /**< data finalization routine */
|
||||||
void *reduce_comb; /**< data combiner routine */
|
void *reduce_comb; /**< data combiner routine */
|
||||||
unsigned flags; /**< flags for additional info from compiler */
|
unsigned flags; /**< flags for additional info from compiler */
|
||||||
|
@ -150,7 +150,7 @@ int test_omp_for_schedule_static_3()
|
|||||||
* same logical assignment of chunks to threads. We use the nowait
|
* same logical assignment of chunks to threads. We use the nowait
|
||||||
* clause to increase the probability to get an error. */
|
* clause to increase the probability to get an error. */
|
||||||
|
|
||||||
/* First we allocate some more memmory */
|
/* First we allocate some more memory */
|
||||||
free (tids);
|
free (tids);
|
||||||
tids = (int *) malloc (sizeof (int) * LOOPCOUNT);
|
tids = (int *) malloc (sizeof (int) * LOOPCOUNT);
|
||||||
tids2 = (int *) malloc (sizeof (int) * LOOPCOUNT);
|
tids2 = (int *) malloc (sizeof (int) * LOOPCOUNT);
|
||||||
|
@ -23,7 +23,7 @@ my $target_os;
|
|||||||
my $target_arch;
|
my $target_arch;
|
||||||
|
|
||||||
# --------------------------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------------------------
|
||||||
# Ouput parse error.
|
# Output parse error.
|
||||||
# $tool -- Name of tool.
|
# $tool -- Name of tool.
|
||||||
# @bulk -- Output of the tool.
|
# @bulk -- Output of the tool.
|
||||||
# $n -- Number of line caused parse error.
|
# $n -- Number of line caused parse error.
|
||||||
|
@ -74,7 +74,7 @@ B<check-execstack.pl> -- Check whether stack is executable, issue an error if so
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
B<check-execstack.pl> I<optiion>... I<file>...
|
B<check-execstack.pl> I<option>... I<file>...
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ sub check_file($;$$) {
|
|||||||
|
|
||||||
my $n = 0;
|
my $n = 0;
|
||||||
my $errors = 0;
|
my $errors = 0;
|
||||||
my $current_func = ""; # Name of current fuction.
|
my $current_func = ""; # Name of current function.
|
||||||
my $reported_func = ""; # name of last reported function.
|
my $reported_func = ""; # name of last reported function.
|
||||||
foreach my $line ( @bulk ) {
|
foreach my $line ( @bulk ) {
|
||||||
++ $n;
|
++ $n;
|
||||||
|
@ -152,7 +152,7 @@ sub generate_output(\%$) {
|
|||||||
print( $bulk );
|
print( $bulk );
|
||||||
}; # if
|
}; # if
|
||||||
|
|
||||||
}; # sub generate_ouput
|
}; # sub generate_output
|
||||||
|
|
||||||
#
|
#
|
||||||
# Parse command line.
|
# Parse command line.
|
||||||
@ -268,7 +268,7 @@ A name of input file.
|
|||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
The script reads input file, process conditional directives, checks content for consistency, and
|
The script reads input file, process conditional directives, checks content for consistency, and
|
||||||
generates ouptput file suitable for linker.
|
generates output file suitable for linker.
|
||||||
|
|
||||||
=head2 Input File Format
|
=head2 Input File Format
|
||||||
|
|
||||||
@ -287,7 +287,7 @@ Comments start with C<#> symbol and continue to the end of line.
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
A part of file surrounded by C<%ifdef I<name>> and C<%endif> directives is a conditional part -- it
|
A part of file surrounded by C<%ifdef I<name>> and C<%endif> directives is a conditional part -- it
|
||||||
has effect only if I<name> is defined in the comman line by B<--define> option. C<%ifndef> is a
|
has effect only if I<name> is defined in the command line by B<--define> option. C<%ifndef> is a
|
||||||
negated version of C<%ifdef> -- conditional part has an effect only if I<name> is B<not> defined.
|
negated version of C<%ifdef> -- conditional part has an effect only if I<name> is B<not> defined.
|
||||||
|
|
||||||
Conditional parts may be nested.
|
Conditional parts may be nested.
|
||||||
|
@ -187,12 +187,12 @@ sub target_options() {
|
|||||||
set_target_os( $_[ 1 ] ) or
|
set_target_os( $_[ 1 ] ) or
|
||||||
die "Bad value of --target-os option: \"$_[ 1 ]\"\n";
|
die "Bad value of --target-os option: \"$_[ 1 ]\"\n";
|
||||||
},
|
},
|
||||||
"target-architecture|targert-arch|architecture|arch=s" =>
|
"target-architecture|target-arch|architecture|arch=s" =>
|
||||||
sub {
|
sub {
|
||||||
set_target_arch( $_[ 1 ] ) or
|
set_target_arch( $_[ 1 ] ) or
|
||||||
die "Bad value of --target-architecture option: \"$_[ 1 ]\"\n";
|
die "Bad value of --target-architecture option: \"$_[ 1 ]\"\n";
|
||||||
},
|
},
|
||||||
"target-mic-architecture|targert-mic-arch|mic-architecture|mic-arch=s" =>
|
"target-mic-architecture|target-mic-arch|mic-architecture|mic-arch=s" =>
|
||||||
sub {
|
sub {
|
||||||
set_target_mic_arch( $_[ 1 ] ) or
|
set_target_mic_arch( $_[ 1 ] ) or
|
||||||
die "Bad value of --target-mic-architecture option: \"$_[ 1 ]\"\n";
|
die "Bad value of --target-mic-architecture option: \"$_[ 1 ]\"\n";
|
||||||
@ -390,7 +390,7 @@ naming files, directories, macros, etc.
|
|||||||
my $os = canon_os( "Windows NT" ); # Returns "win".
|
my $os = canon_os( "Windows NT" ); # Returns "win".
|
||||||
|
|
||||||
print( $host_arch, $host_os, $host_platform );
|
print( $host_arch, $host_os, $host_platform );
|
||||||
print( $taregt_arch, $target_os, $target_platform );
|
print( $target_arch, $target_os, $target_platform );
|
||||||
|
|
||||||
tools::get_options(
|
tools::get_options(
|
||||||
Platform::target_options(),
|
Platform::target_options(),
|
||||||
|
@ -87,7 +87,7 @@ my @warning = ( sub {}, \&warning, \&runtime_error );
|
|||||||
|
|
||||||
sub check_opts(\%$;$) {
|
sub check_opts(\%$;$) {
|
||||||
|
|
||||||
my $opts = shift( @_ ); # Referense to hash containing real options and their values.
|
my $opts = shift( @_ ); # Reference to hash containing real options and their values.
|
||||||
my $good = shift( @_ ); # Reference to an array containing all known option names.
|
my $good = shift( @_ ); # Reference to an array containing all known option names.
|
||||||
my $msg = shift( @_ ); # Optional (non-mandatory) message.
|
my $msg = shift( @_ ); # Optional (non-mandatory) message.
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ B<Description:>
|
|||||||
|
|
||||||
It is very simple wrapper arounf Getopt::Long::GetOptions. It passes all arguments to GetOptions,
|
It is very simple wrapper arounf Getopt::Long::GetOptions. It passes all arguments to GetOptions,
|
||||||
and add definitions for standard help options: --help, --doc, --verbose, and --quiet.
|
and add definitions for standard help options: --help, --doc, --verbose, and --quiet.
|
||||||
When GetOptions finihes, this subroutine checks exit code, if it is non-zero, standard error
|
When GetOptions finishes, this subroutine checks exit code, if it is non-zero, standard error
|
||||||
message is issued and script terminated.
|
message is issued and script terminated.
|
||||||
|
|
||||||
If --verbose or --quiet option is specified, C<tools.pm_verbose> environment variable is set.
|
If --verbose or --quiet option is specified, C<tools.pm_verbose> environment variable is set.
|
||||||
@ -333,7 +333,7 @@ B<Synopsis:>
|
|||||||
B<Description:>
|
B<Description:>
|
||||||
|
|
||||||
Package variable. It determines verbosity level, which affects C<warning()>, C<info()>, and
|
Package variable. It determines verbosity level, which affects C<warning()>, C<info()>, and
|
||||||
C<debug()> subroutnes .
|
C<debug()> subroutines .
|
||||||
|
|
||||||
The variable gets initial value from C<tools.pm_verbose> environment variable if it is exists.
|
The variable gets initial value from C<tools.pm_verbose> environment variable if it is exists.
|
||||||
If the environment variable does not exist, variable is set to 2.
|
If the environment variable does not exist, variable is set to 2.
|
||||||
@ -357,7 +357,7 @@ B<Synopsis:>
|
|||||||
B<Description:>
|
B<Description:>
|
||||||
|
|
||||||
Package variable. It determines whether C<debug()>, C<info()>, C<warning()>, C<runtime_error()>
|
Package variable. It determines whether C<debug()>, C<info()>, C<warning()>, C<runtime_error()>
|
||||||
subroutnes print timestamps or not.
|
subroutines print timestamps or not.
|
||||||
|
|
||||||
The variable gets initial value from C<tools.pm_timestamps> environment variable if it is exists.
|
The variable gets initial value from C<tools.pm_timestamps> environment variable if it is exists.
|
||||||
If the environment variable does not exist, variable is set to false.
|
If the environment variable does not exist, variable is set to false.
|
||||||
@ -700,7 +700,7 @@ Look for "echo" in the directories specified in PATH:
|
|||||||
|
|
||||||
my $echo = which( "echo" );
|
my $echo = which( "echo" );
|
||||||
|
|
||||||
Look for all occurenses of "cp" in the PATH:
|
Look for all occurrences of "cp" in the PATH:
|
||||||
|
|
||||||
my @cps = which( "cp", -all => 1 );
|
my @cps = which( "cp", -all => 1 );
|
||||||
|
|
||||||
@ -1488,7 +1488,7 @@ B<Arguments:>
|
|||||||
|
|
||||||
=item B<$file>
|
=item B<$file>
|
||||||
|
|
||||||
The name or handle of file to writte to.
|
The name or handle of file to write to.
|
||||||
|
|
||||||
=item B<$bulk>
|
=item B<$bulk>
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ To compile Fortran applications, compile with gfortran, link with clang:
|
|||||||
## Runtime Flags
|
## Runtime Flags
|
||||||
|
|
||||||
TSan runtime flags are passed via **TSAN_OPTIONS** environment variable,
|
TSan runtime flags are passed via **TSAN_OPTIONS** environment variable,
|
||||||
we highly recommend the following option to aviod false alerts for the
|
we highly recommend the following option to avoid false alerts for the
|
||||||
OpenMP or MPI runtime implementation:
|
OpenMP or MPI runtime implementation:
|
||||||
|
|
||||||
export TSAN_OPTIONS="ignore_noninstrumented_modules=1"
|
export TSAN_OPTIONS="ignore_noninstrumented_modules=1"
|
||||||
|
@ -258,7 +258,7 @@ template <typename T, int N> struct DataPool {
|
|||||||
T data;
|
T data;
|
||||||
};
|
};
|
||||||
// We alloc without initialize the memory. We cannot call constructors.
|
// We alloc without initialize the memory. We cannot call constructors.
|
||||||
// Therfore use malloc!
|
// Therefore use malloc!
|
||||||
pooldata *datas = (pooldata *)malloc(sizeof(pooldata) * N);
|
pooldata *datas = (pooldata *)malloc(sizeof(pooldata) * N);
|
||||||
memory.push_back(datas);
|
memory.push_back(datas);
|
||||||
for (int i = 0; i < N; i++) {
|
for (int i = 0; i < N; i++) {
|
||||||
|
Loading…
Reference in New Issue
Block a user