LLVM OpenMP 22.0.0git
z_Windows_NT_util.cpp File Reference
#include "kmp.h"
#include "kmp_affinity.h"
#include "kmp_i18n.h"
#include "kmp_io.h"
#include "kmp_itt.h"
#include "kmp_wait_release.h"
#include <ntsecapi.h>
#include <ntstatus.h>
#include <psapi.h>

Go to the source code of this file.

Classes

struct  CLIENT_ID
struct  VM_COUNTERS
struct  SYSTEM_THREAD
struct  SYSTEM_PROCESS_INFORMATION

Macros

#define CHECK(cond)

Typedefs

typedef SYSTEM_PROCESS_INFORMATIONPSYSTEM_PROCESS_INFORMATION
typedef NTSTATUS(NTAPI * NtQuerySystemInformation_t) (SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG)

Enumerations

enum  SYSTEM_INFORMATION_CLASS { SystemProcessInformation = 5 }
enum  THREAD_STATE {
  StateInitialized , StateReady , StateRunning , StateStandby ,
  StateTerminated , StateWait , StateTransition , StateUnknown
}

Functions

 KMP_BUILD_ASSERT (offsetof(SYSTEM_THREAD, KernelTime)==0)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_THREAD, StartAddress)==32)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_THREAD, State)==68)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_PROCESS_INFORMATION, NextEntryOffset)==0)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_PROCESS_INFORMATION, CreateTime)==32)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_PROCESS_INFORMATION, ImageName)==56)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_PROCESS_INFORMATION, ProcessId)==80)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_PROCESS_INFORMATION, HandleCount)==96)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_PROCESS_INFORMATION, VMCounters)==112)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_PROCESS_INFORMATION, IOCounters)==208)
 KMP_BUILD_ASSERT (offsetof(SYSTEM_PROCESS_INFORMATION, Threads)==256)
void __kmp_win32_mutex_init (kmp_win32_mutex_t *mx)
void __kmp_win32_mutex_destroy (kmp_win32_mutex_t *mx)
void __kmp_win32_mutex_lock (kmp_win32_mutex_t *mx)
int __kmp_win32_mutex_trylock (kmp_win32_mutex_t *mx)
void __kmp_win32_mutex_unlock (kmp_win32_mutex_t *mx)
void __kmp_win32_cond_init (kmp_win32_cond_t *cv)
void __kmp_win32_cond_destroy (kmp_win32_cond_t *cv)
template<class C>
static void __kmp_win32_cond_wait (kmp_win32_cond_t *cv, kmp_win32_mutex_t *mx, kmp_info_t *th, C *flag)
void __kmp_win32_cond_broadcast (kmp_win32_cond_t *cv)
void __kmp_win32_cond_signal (kmp_win32_cond_t *cv)
void __kmp_enable (int new_state)
void __kmp_disable (int *old_state)
void __kmp_suspend_initialize (void)
void __kmp_suspend_initialize_thread (kmp_info_t *th)
void __kmp_suspend_uninitialize_thread (kmp_info_t *th)
int __kmp_try_suspend_mx (kmp_info_t *th)
void __kmp_lock_suspend_mx (kmp_info_t *th)
void __kmp_unlock_suspend_mx (kmp_info_t *th)
template<class C>
static void __kmp_suspend_template (int th_gtid, C *flag)
template<bool C, bool S>
void __kmp_suspend_32 (int th_gtid, kmp_flag_32< C, S > *flag)
template<bool C, bool S>
void __kmp_suspend_64 (int th_gtid, kmp_flag_64< C, S > *flag)
template<bool C, bool S>
void __kmp_atomic_suspend_64 (int th_gtid, kmp_atomic_flag_64< C, S > *flag)
void __kmp_suspend_oncore (int th_gtid, kmp_flag_oncore *flag)
template void __kmp_suspend_32< false, false > (int, kmp_flag_32< false, false > *)
template void __kmp_suspend_64< false, true > (int, kmp_flag_64< false, true > *)
template void __kmp_suspend_64< true, false > (int, kmp_flag_64< true, false > *)
template void __kmp_atomic_suspend_64< false, true > (int, kmp_atomic_flag_64< false, true > *)
template void __kmp_atomic_suspend_64< true, false > (int, kmp_atomic_flag_64< true, false > *)
template<class C>
static void __kmp_resume_template (int target_gtid, C *flag)
template<bool C, bool S>
void __kmp_resume_32 (int target_gtid, kmp_flag_32< C, S > *flag)
template<bool C, bool S>
void __kmp_resume_64 (int target_gtid, kmp_flag_64< C, S > *flag)
template<bool C, bool S>
void __kmp_atomic_resume_64 (int target_gtid, kmp_atomic_flag_64< C, S > *flag)
void __kmp_resume_oncore (int target_gtid, kmp_flag_oncore *flag)
template void __kmp_resume_32< false, true > (int, kmp_flag_32< false, true > *)
template void __kmp_resume_32< false, false > (int, kmp_flag_32< false, false > *)
template void __kmp_resume_64< false, true > (int, kmp_flag_64< false, true > *)
template void __kmp_atomic_resume_64< false, true > (int, kmp_atomic_flag_64< false, true > *)
void __kmp_yield ()
void __kmp_gtid_set_specific (int gtid)
int __kmp_gtid_get_specific ()
void __kmp_affinity_bind_thread (int proc)
void __kmp_affinity_determine_capable (const char *env_var)
double __kmp_read_cpu_time (void)
int __kmp_read_system_info (struct kmp_sys_info *info)
void __kmp_runtime_initialize (void)
void __kmp_runtime_destroy (void)
void __kmp_terminate_thread (int gtid)
void __kmp_clear_system_time (void)
void __kmp_initialize_system_tick (void)
void __kmp_elapsed (double *t)
void __kmp_elapsed_tick (double *t)
void __kmp_read_system_time (double *delta)
kmp_uint64 __kmp_now_nsec ()
void *__stdcall __kmp_launch_worker (void *arg)
void __kmp_create_worker (int gtid, kmp_info_t *th, size_t stack_size)
int __kmp_still_running (kmp_info_t *th)
int __kmp_is_thread_alive (kmp_info_t *th, DWORD *exit_val)
void __kmp_exit_thread (int exit_status)
static void __kmp_reap_common (kmp_info_t *th)
void __kmp_reap_worker (kmp_info_t *th)
void __kmp_thread_sleep (int millis)
int __kmp_is_address_mapped (void *addr)
kmp_uint64 __kmp_hardware_timestamp (void)
void __kmp_free_handle (kmp_thread_t tHandle)
int __kmp_get_load_balance (int max)
void__kmp_lookup_symbol (const char *name, bool next)
void __kmp_hidden_helper_worker_thread_wait ()
void __kmp_do_initialize_hidden_helper_threads ()
void __kmp_hidden_helper_threads_initz_wait ()
void __kmp_hidden_helper_initz_release ()
void __kmp_hidden_helper_main_thread_wait ()
void __kmp_hidden_helper_main_thread_release ()
void __kmp_hidden_helper_worker_thread_signal ()
void __kmp_hidden_helper_threads_deinitz_wait ()
void __kmp_hidden_helper_threads_deinitz_release ()

Variables

NtQuerySystemInformation_t NtQuerySystemInformation = NULL
HMODULE ntdll = NULL
static HMODULE kernel32 = NULL
static kmp_int64 __kmp_win32_time
double __kmp_win32_tick
int __kmp_init_runtime = FALSE
CRITICAL_SECTION __kmp_win32_section

Macro Definition Documentation

◆ CHECK

#define CHECK ( cond)
Value:
{ \
KMP_DEBUG_ASSERT(cond); \
if (!(cond)) { \
running_threads = -1; \
goto finish; \
} \
}

Referenced by __kmp_get_load_balance().

Typedef Documentation

◆ NtQuerySystemInformation_t

typedef NTSTATUS(NTAPI * NtQuerySystemInformation_t) (SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG)

Definition at line 126 of file z_Windows_NT_util.cpp.

◆ PSYSTEM_PROCESS_INFORMATION

Enumeration Type Documentation

◆ SYSTEM_INFORMATION_CLASS

Enumerator
SystemProcessInformation 

Definition at line 32 of file z_Windows_NT_util.cpp.

◆ THREAD_STATE

Enumerator
StateInitialized 
StateReady 
StateRunning 
StateStandby 
StateTerminated 
StateWait 
StateTransition 
StateUnknown 

Definition at line 41 of file z_Windows_NT_util.cpp.

Function Documentation

◆ __kmp_affinity_bind_thread()

◆ __kmp_affinity_determine_capable()

void __kmp_affinity_determine_capable ( const char * env_var)

Definition at line 632 of file z_Windows_NT_util.cpp.

References KA_TRACE.

◆ __kmp_atomic_resume_64()

◆ __kmp_atomic_resume_64< false, true >()

template void __kmp_atomic_resume_64< false, true > ( int ,
kmp_atomic_flag_64< false, true > *  )

◆ __kmp_atomic_suspend_64()

template<bool C, bool S>
void __kmp_atomic_suspend_64 ( int th_gtid,
kmp_atomic_flag_64< C, S > * flag )

◆ __kmp_atomic_suspend_64< false, true >()

template void __kmp_atomic_suspend_64< false, true > ( int ,
kmp_atomic_flag_64< false, true > *  )

◆ __kmp_atomic_suspend_64< true, false >()

template void __kmp_atomic_suspend_64< true, false > ( int ,
kmp_atomic_flag_64< true, false > *  )

◆ __kmp_clear_system_time()

void __kmp_clear_system_time ( void )

◆ __kmp_create_worker()

◆ __kmp_disable()

void __kmp_disable ( int * old_state)

◆ __kmp_do_initialize_hidden_helper_threads()

void __kmp_do_initialize_hidden_helper_threads ( )

Definition at line 1711 of file z_Windows_NT_util.cpp.

References KMP_ASSERT.

Referenced by __kmp_hidden_helper_initialize().

◆ __kmp_elapsed()

◆ __kmp_elapsed_tick()

void __kmp_elapsed_tick ( double * t)

Definition at line 972 of file z_Windows_NT_util.cpp.

References __kmp_win32_tick, and double.

Referenced by FTN_GET_WTICK().

◆ __kmp_enable()

void __kmp_enable ( int new_state)

◆ __kmp_exit_thread()

void __kmp_exit_thread ( int exit_status)

Definition at line 1302 of file z_Windows_NT_util.cpp.

◆ __kmp_free_handle()

void __kmp_free_handle ( kmp_thread_t tHandle)

◆ __kmp_get_load_balance()

◆ __kmp_gtid_get_specific()

◆ __kmp_gtid_set_specific()

void __kmp_gtid_set_specific ( int gtid)

◆ __kmp_hardware_timestamp()

kmp_uint64 __kmp_hardware_timestamp ( void )

Definition at line 1534 of file z_Windows_NT_util.cpp.

References r.

◆ __kmp_hidden_helper_initz_release()

void __kmp_hidden_helper_initz_release ( )

Definition at line 1719 of file z_Windows_NT_util.cpp.

References KMP_ASSERT.

◆ __kmp_hidden_helper_main_thread_release()

void __kmp_hidden_helper_main_thread_release ( )

Definition at line 1727 of file z_Windows_NT_util.cpp.

References KMP_ASSERT.

Referenced by __kmp_internal_end_library(), and __kmp_internal_end_thread().

◆ __kmp_hidden_helper_main_thread_wait()

void __kmp_hidden_helper_main_thread_wait ( )

Definition at line 1723 of file z_Windows_NT_util.cpp.

References KMP_ASSERT.

◆ __kmp_hidden_helper_threads_deinitz_release()

void __kmp_hidden_helper_threads_deinitz_release ( )

Definition at line 1739 of file z_Windows_NT_util.cpp.

References KMP_ASSERT.

Referenced by __kmp_hidden_helper_threads_initz_routine().

◆ __kmp_hidden_helper_threads_deinitz_wait()

void __kmp_hidden_helper_threads_deinitz_wait ( )

Definition at line 1735 of file z_Windows_NT_util.cpp.

References KMP_ASSERT.

Referenced by __kmp_internal_end_library(), and __kmp_internal_end_thread().

◆ __kmp_hidden_helper_threads_initz_wait()

void __kmp_hidden_helper_threads_initz_wait ( )

Definition at line 1715 of file z_Windows_NT_util.cpp.

References KMP_ASSERT.

Referenced by __kmp_hidden_helper_initialize().

◆ __kmp_hidden_helper_worker_thread_signal()

void __kmp_hidden_helper_worker_thread_signal ( )

Definition at line 1731 of file z_Windows_NT_util.cpp.

References KMP_ASSERT.

Referenced by __kmp_push_task(), and __kmp_task_finish().

◆ __kmp_hidden_helper_worker_thread_wait()

void __kmp_hidden_helper_worker_thread_wait ( )

Definition at line 1707 of file z_Windows_NT_util.cpp.

References KMP_ASSERT.

Referenced by __kmp_wait_template().

◆ __kmp_initialize_system_tick()

void __kmp_initialize_system_tick ( void )

◆ __kmp_is_address_mapped()

int __kmp_is_address_mapped ( void * addr)

◆ __kmp_is_thread_alive()

int __kmp_is_thread_alive ( kmp_info_t * th,
DWORD * exit_val )

◆ __kmp_launch_worker()

◆ __kmp_lock_suspend_mx()

◆ __kmp_lookup_symbol()

void * __kmp_lookup_symbol ( const char * name,
bool next )

Definition at line 1673 of file z_Windows_NT_util.cpp.

References __kmp_lookup_symbol(), i, and name.

Referenced by __kmp_lookup_symbol().

◆ __kmp_now_nsec()

kmp_uint64 __kmp_now_nsec ( )

Definition at line 984 of file z_Windows_NT_util.cpp.

References __kmp_win32_tick, and KMP_NSEC_PER_SEC.

◆ __kmp_read_cpu_time()

double __kmp_read_cpu_time ( void )

Definition at line 648 of file z_Windows_NT_util.cpp.

References double, KMP_NSEC_PER_SEC, and status.

◆ __kmp_read_system_info()

◆ __kmp_read_system_time()

◆ __kmp_reap_common()

◆ __kmp_reap_worker()

void __kmp_reap_worker ( kmp_info_t * th)

◆ __kmp_resume_32()

◆ __kmp_resume_32< false, false >()

template void __kmp_resume_32< false, false > ( int ,
kmp_flag_32< false, false > *  )

◆ __kmp_resume_32< false, true >()

template void __kmp_resume_32< false, true > ( int ,
kmp_flag_32< false, true > *  )

◆ __kmp_resume_64()

template<bool C, bool S>
void __kmp_resume_64 ( int target_gtid,
kmp_flag_64< C, S > * flag )

◆ __kmp_resume_64< false, true >()

template void __kmp_resume_64< false, true > ( int ,
kmp_flag_64< false, true > *  )

◆ __kmp_resume_oncore()

void __kmp_resume_oncore ( int target_gtid,
kmp_flag_oncore * flag )

◆ __kmp_resume_template()

◆ __kmp_runtime_destroy()

◆ __kmp_runtime_initialize()

◆ __kmp_still_running()

int __kmp_still_running ( kmp_info_t * th)

Definition at line 1219 of file z_Windows_NT_util.cpp.

◆ __kmp_suspend_32()

template<bool C, bool S>
void __kmp_suspend_32 ( int th_gtid,
kmp_flag_32< C, S > * flag )

◆ __kmp_suspend_32< false, false >()

template void __kmp_suspend_32< false, false > ( int ,
kmp_flag_32< false, false > *  )

◆ __kmp_suspend_64()

template<bool C, bool S>
void __kmp_suspend_64 ( int th_gtid,
kmp_flag_64< C, S > * flag )

◆ __kmp_suspend_64< false, true >()

template void __kmp_suspend_64< false, true > ( int ,
kmp_flag_64< false, true > *  )

◆ __kmp_suspend_64< true, false >()

template void __kmp_suspend_64< true, false > ( int ,
kmp_flag_64< true, false > *  )

◆ __kmp_suspend_initialize()

void __kmp_suspend_initialize ( void )

◆ __kmp_suspend_initialize_thread()

◆ __kmp_suspend_oncore()

void __kmp_suspend_oncore ( int th_gtid,
kmp_flag_oncore * flag )

Definition at line 475 of file z_Windows_NT_util.cpp.

References __kmp_suspend_template(), __kmp_suspend_template(), and flag.

Referenced by kmp_flag_oncore::suspend().

◆ __kmp_suspend_template()

◆ __kmp_suspend_uninitialize_thread()

◆ __kmp_terminate_thread()

void __kmp_terminate_thread ( int gtid)

◆ __kmp_thread_sleep()

void __kmp_thread_sleep ( int millis)

Definition at line 1509 of file z_Windows_NT_util.cpp.

References __kmp_fatal(), __kmp_msg_null, FALSE, KMP_ERR, KMP_MSG, and status.

Referenced by __kmp_fatal().

◆ __kmp_try_suspend_mx()

int __kmp_try_suspend_mx ( kmp_info_t * th)

Definition at line 347 of file z_Windows_NT_util.cpp.

References __kmp_win32_mutex_trylock().

Referenced by __kmp_resume_if_soft_paused().

◆ __kmp_unlock_suspend_mx()

◆ __kmp_win32_cond_broadcast()

void __kmp_win32_cond_broadcast ( kmp_win32_cond_t * cv)

Definition at line 282 of file z_Windows_NT_util.cpp.

References __kmp_win32_mutex_lock(), and __kmp_win32_mutex_unlock().

Referenced by __kmp_win32_cond_signal().

◆ __kmp_win32_cond_destroy()

void __kmp_win32_cond_destroy ( kmp_win32_cond_t * cv)

◆ __kmp_win32_cond_init()

void __kmp_win32_cond_init ( kmp_win32_cond_t * cv)

Definition at line 174 of file z_Windows_NT_util.cpp.

References __kmp_win32_mutex_init(), FALSE, and TRUE.

Referenced by __kmp_suspend_initialize_thread().

◆ __kmp_win32_cond_signal()

void __kmp_win32_cond_signal ( kmp_win32_cond_t * cv)

Definition at line 298 of file z_Windows_NT_util.cpp.

References __kmp_win32_cond_broadcast().

Referenced by __kmp_resume_template().

◆ __kmp_win32_cond_wait()

template<class C>
void __kmp_win32_cond_wait ( kmp_win32_cond_t * cv,
kmp_win32_mutex_t * mx,
kmp_info_t * th,
C * flag )
static

◆ __kmp_win32_mutex_destroy()

void __kmp_win32_mutex_destroy ( kmp_win32_mutex_t * mx)

◆ __kmp_win32_mutex_init()

void __kmp_win32_mutex_init ( kmp_win32_mutex_t * mx)

◆ __kmp_win32_mutex_lock()

void __kmp_win32_mutex_lock ( kmp_win32_mutex_t * mx)

◆ __kmp_win32_mutex_trylock()

int __kmp_win32_mutex_trylock ( kmp_win32_mutex_t * mx)

Definition at line 166 of file z_Windows_NT_util.cpp.

Referenced by __kmp_try_suspend_mx().

◆ __kmp_win32_mutex_unlock()

void __kmp_win32_mutex_unlock ( kmp_win32_mutex_t * mx)

◆ __kmp_yield()

void __kmp_yield ( )

Definition at line 566 of file z_Windows_NT_util.cpp.

◆ KMP_BUILD_ASSERT() [1/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_PROCESS_INFORMATION, CreateTime) = =32)

◆ KMP_BUILD_ASSERT() [2/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_PROCESS_INFORMATION, HandleCount) = =96)

◆ KMP_BUILD_ASSERT() [3/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_PROCESS_INFORMATION, ImageName) = =56)

◆ KMP_BUILD_ASSERT() [4/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_PROCESS_INFORMATION, IOCounters) = =208)

◆ KMP_BUILD_ASSERT() [5/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_PROCESS_INFORMATION, NextEntryOffset) = =0)

◆ KMP_BUILD_ASSERT() [6/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_PROCESS_INFORMATION, ProcessId) = =80)

◆ KMP_BUILD_ASSERT() [7/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_PROCESS_INFORMATION, Threads) = =256)

◆ KMP_BUILD_ASSERT() [8/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_PROCESS_INFORMATION, VMCounters) = =112)

◆ KMP_BUILD_ASSERT() [9/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_THREAD, KernelTime) = =0)

◆ KMP_BUILD_ASSERT() [10/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_THREAD, StartAddress) = =32)

◆ KMP_BUILD_ASSERT() [11/11]

KMP_BUILD_ASSERT ( offsetof(SYSTEM_THREAD, State) = =68)

Variable Documentation

◆ __kmp_init_runtime

int __kmp_init_runtime = FALSE

Definition at line 148 of file z_Windows_NT_util.cpp.

◆ __kmp_win32_section

CRITICAL_SECTION __kmp_win32_section

◆ __kmp_win32_tick

◆ __kmp_win32_time

kmp_int64 __kmp_win32_time
static

Definition at line 145 of file z_Windows_NT_util.cpp.

Referenced by __kmp_clear_system_time(), and __kmp_read_system_time().

◆ kernel32

HMODULE kernel32 = NULL
static

Definition at line 134 of file z_Windows_NT_util.cpp.

Referenced by __kmp_runtime_destroy(), and __kmp_runtime_initialize().

◆ ntdll

HMODULE ntdll = NULL

Definition at line 130 of file z_Windows_NT_util.cpp.

Referenced by __kmp_runtime_destroy(), and __kmp_runtime_initialize().

◆ NtQuerySystemInformation

NtQuerySystemInformation_t NtQuerySystemInformation = NULL