LLVM OpenMP 22.0.0git
Classes | Macros | Typedefs | Functions | Variables
kmp_alloc.cpp File Reference
#include "kmp.h"
#include "kmp_io.h"
#include "kmp_wrapper_malloc.h"

Go to the source code of this file.

Classes

class  kmp_tgt_allocator_t
 Support OMP 6.0 target memory management Expected offload runtime entries. More...
 
class  kmp_tgt_memspace_list_t
 Maintain a list of target memory spaces that are identified with the requested information. More...
 
struct  kmp_mem_desc
 
struct  kmp_mem_descr
 

Macros

#define IS_POWER_OF_TWO(n)   (((n) & ((n)-1)) == 0)
 
#define KMP_IS_TARGET_MEM_SPACE(MS)
 
#define KMP_IS_TARGET_MEM_ALLOC(MA)
 
#define KMP_IS_PREDEF_MEM_SPACE(MS)
 

Typedefs

typedef struct kmp_mem_desc kmp_mem_desc_t
 
typedef struct kmp_mem_descr kmp_mem_descr_t
 

Functions

voidkmpc_malloc (size_t size)
 
voidkmpc_aligned_malloc (size_t size, size_t alignment)
 
voidkmpc_calloc (size_t nelem, size_t elsize)
 
voidkmpc_realloc (void *ptr, size_t size)
 
void kmpc_free (void *ptr)
 
void___kmp_thread_malloc (kmp_info_t *th, size_t size KMP_SRC_LOC_DECL)
 
void___kmp_thread_calloc (kmp_info_t *th, size_t nelem, size_t elsize KMP_SRC_LOC_DECL)
 
void___kmp_thread_realloc (kmp_info_t *th, void *ptr, size_t size KMP_SRC_LOC_DECL)
 
void ___kmp_thread_free (kmp_info_t *th, void *ptr KMP_SRC_LOC_DECL)
 
int omp_get_num_devices (void)
 
void __kmp_init_memkind ()
 
void __kmp_fini_memkind ()
 
void __kmp_init_target_mem ()
 
void __kmp_fini_target_mem ()
 Finalize target memory support.
 
omp_allocator_handle_t __kmpc_init_allocator (int gtid, omp_memspace_handle_t ms, int ntraits, omp_alloctrait_t traits[])
 
void __kmpc_destroy_allocator (int gtid, omp_allocator_handle_t allocator)
 
void __kmpc_set_default_allocator (int gtid, omp_allocator_handle_t allocator)
 
omp_allocator_handle_t __kmpc_get_default_allocator (int gtid)
 
omp_memspace_handle_t __kmp_get_devices_memspace (int ndevs, const int *devs, omp_memspace_handle_t memspace, int host)
 
omp_allocator_handle_t __kmp_get_devices_allocator (int ndevs, const int *devs, omp_memspace_handle_t memspace, int host)
 
int __kmp_get_memspace_num_resources (omp_memspace_handle_t memspace)
 
omp_memspace_handle_t __kmp_get_submemspace (omp_memspace_handle_t memspace, int num_resources, int *resources)
 
void__kmpc_alloc (int gtid, size_t size, omp_allocator_handle_t allocator)
 
void__kmpc_aligned_alloc (int gtid, size_t algn, size_t size, omp_allocator_handle_t allocator)
 
void__kmpc_calloc (int gtid, size_t nmemb, size_t size, omp_allocator_handle_t allocator)
 
void__kmpc_realloc (int gtid, void *ptr, size_t size, omp_allocator_handle_t allocator, omp_allocator_handle_t free_allocator)
 
void __kmpc_free (int gtid, void *ptr, omp_allocator_handle_t allocator)
 
void__kmp_alloc (int gtid, size_t algn, size_t size, omp_allocator_handle_t allocator)
 
void__kmp_calloc (int gtid, size_t algn, size_t nmemb, size_t size, omp_allocator_handle_t allocator)
 
void__kmp_realloc (int gtid, void *ptr, size_t size, omp_allocator_handle_t allocator, omp_allocator_handle_t free_allocator)
 
void ___kmpc_free (int gtid, void *ptr, omp_allocator_handle_t allocator)
 
static void___kmp_allocate_align (size_t size, size_t alignment KMP_SRC_LOC_DECL)
 
void___kmp_allocate (size_t size KMP_SRC_LOC_DECL)
 
void___kmp_page_allocate (size_t size KMP_SRC_LOC_DECL)
 
void ___kmp_free (void *ptr KMP_SRC_LOC_DECL)
 

Variables

static const charkmp_mk_lib_name
 
static voidh_memkind
 
static void *(* kmp_mk_alloc )(void *k, size_t sz)
 
static void(* kmp_mk_free )(void *kind, void *ptr)
 
static int(* kmp_mk_check )(void *kind)
 
static void ** mk_default
 
static void ** mk_interleave
 
static void ** mk_hbw
 
static void ** mk_hbw_interleave
 
static void ** mk_hbw_preferred
 
static void ** mk_hugetlb
 
static void ** mk_hbw_hugetlb
 
static void ** mk_hbw_preferred_hugetlb
 
static void ** mk_dax_kmem
 
static void ** mk_dax_kmem_all
 
static void ** mk_dax_kmem_preferred
 
static void *(* kmp_target_alloc_host )(size_t size, int device)
 
static void *(* kmp_target_alloc_shared )(size_t size, int device)
 
static void *(* kmp_target_alloc_device )(size_t size, int device)
 
static void *(* kmp_target_lock_mem )(void *ptr, size_t size, int device)
 
static void *(* kmp_target_unlock_mem )(void *ptr, int device)
 
static void *(* kmp_target_free_host )(void *ptr, int device)
 
static void *(* kmp_target_free_shared )(void *ptr, int device)
 
static void *(* kmp_target_free_device )(void *ptr, int device)
 
static bool __kmp_target_mem_available
 
class kmp_tgt_allocator_t __kmp_tgt_allocator
 
class kmp_tgt_memspace_list_t __kmp_tgt_memspace_list
 
constexpr size_t alignment = SizeQuant
 

Macro Definition Documentation

◆ IS_POWER_OF_TWO

#define IS_POWER_OF_TWO (   n)    (((n) & ((n)-1)) == 0)

Definition at line 1121 of file kmp_alloc.cpp.

◆ KMP_IS_PREDEF_MEM_SPACE

#define KMP_IS_PREDEF_MEM_SPACE (   MS)
Value:
KMP_IS_TARGET_MEM_SPACE(MS))
omp_memspace_handle_t const omp_default_mem_space
Definition: kmp_global.cpp:326
omp_memspace_handle_t const omp_low_lat_mem_space
Definition: kmp_global.cpp:334
omp_memspace_handle_t const omp_const_mem_space
Definition: kmp_global.cpp:330
omp_memspace_handle_t const omp_null_mem_space
Definition: kmp_global.cpp:325
omp_memspace_handle_t const omp_large_cap_mem_space
Definition: kmp_global.cpp:328
omp_memspace_handle_t const omp_high_bw_mem_space
Definition: kmp_global.cpp:332

Definition at line 1279 of file kmp_alloc.cpp.

◆ KMP_IS_TARGET_MEM_ALLOC

#define KMP_IS_TARGET_MEM_ALLOC (   MA)
Value:
omp_allocator_handle_t const llvm_omp_target_host_mem_alloc
Definition: kmp_global.cpp:315
omp_allocator_handle_t const llvm_omp_target_shared_mem_alloc
Definition: kmp_global.cpp:317
omp_allocator_handle_t const llvm_omp_target_device_mem_alloc
Definition: kmp_global.cpp:319

Definition at line 1274 of file kmp_alloc.cpp.

◆ KMP_IS_TARGET_MEM_SPACE

#define KMP_IS_TARGET_MEM_SPACE (   MS)
Value:
omp_memspace_handle_t const llvm_omp_target_host_mem_space
Definition: kmp_global.cpp:336
omp_memspace_handle_t const llvm_omp_target_shared_mem_space
Definition: kmp_global.cpp:338
omp_memspace_handle_t const llvm_omp_target_device_mem_space
Definition: kmp_global.cpp:340

Definition at line 1269 of file kmp_alloc.cpp.

Typedef Documentation

◆ kmp_mem_desc_t

typedef struct kmp_mem_desc kmp_mem_desc_t

◆ kmp_mem_descr_t

Definition at line 2396 of file kmp_alloc.cpp.

Function Documentation

◆ ___kmp_allocate()

void * ___kmp_allocate ( size_t size  KMP_SRC_LOC_DECL)

◆ ___kmp_allocate_align()

static void * ___kmp_allocate_align ( size_t  size,
size_t alignment  KMP_SRC_LOC_DECL 
)
static

◆ ___kmp_free()

void ___kmp_free ( void *ptr  KMP_SRC_LOC_DECL)

◆ ___kmp_page_allocate()

void * ___kmp_page_allocate ( size_t size  KMP_SRC_LOC_DECL)

Definition at line 2499 of file kmp_alloc.cpp.

References ___kmp_allocate_align(), KE_TRACE, KMP_SRC_LOC_PARM, and size.

◆ ___kmp_thread_calloc()

void * ___kmp_thread_calloc ( kmp_info_t th,
size_t  nelem,
size_t elsize  KMP_SRC_LOC_DECL 
)

Definition at line 1208 of file kmp_alloc.cpp.

References KE_TRACE, and KMP_SRC_LOC_PARM.

◆ ___kmp_thread_free()

void ___kmp_thread_free ( kmp_info_t th,
void *ptr  KMP_SRC_LOC_DECL 
)

Definition at line 1227 of file kmp_alloc.cpp.

References KE_TRACE, and KMP_SRC_LOC_PARM.

◆ ___kmp_thread_malloc()

void * ___kmp_thread_malloc ( kmp_info_t th,
size_t size  KMP_SRC_LOC_DECL 
)

Definition at line 1199 of file kmp_alloc.cpp.

References KE_TRACE, KMP_SRC_LOC_PARM, and size.

◆ ___kmp_thread_realloc()

void * ___kmp_thread_realloc ( kmp_info_t th,
void ptr,
size_t size  KMP_SRC_LOC_DECL 
)

Definition at line 1218 of file kmp_alloc.cpp.

References KE_TRACE, KMP_SRC_LOC_PARM, and size.

◆ ___kmpc_free()

void ___kmpc_free ( int  gtid,
void ptr,
omp_allocator_handle_t  allocator 
)

◆ __kmp_alloc()

void * __kmp_alloc ( int  gtid,
size_t  algn,
size_t  size,
omp_allocator_handle_t  allocator 
)

Definition at line 1910 of file kmp_alloc.cpp.

References __kmp_alloc(), __kmp_hwloc_available, __kmp_init_serial, __kmp_memkind_available, __kmp_target_mem_available, __kmp_tgt_allocator, __kmp_thread_from_gtid(), __kmp_thread_malloc, __kmp_threads, addr, kmp_allocator_t::alignment, alignment, kmp_mem_desc::allocator, kmp_allocator_t::fb, kmp_allocator_t::fb_data, KE_TRACE, KMP_ASSERT, KMP_DEBUG_ASSERT, KMP_INFORM, KMP_IS_TARGET_MEM_ALLOC, KMP_IS_TARGET_MEM_SPACE, kmp_max_mem_alloc, kmp_max_mem_space, KMP_MB, kmp_mk_alloc, kmp_target_alloc_device, kmp_target_alloc_host, kmp_target_alloc_shared, kmp_target_lock_mem, KMP_TEST_THEN_ADD64, KMP_WARNING, llvm_omp_target_host_mem_alloc, llvm_omp_target_host_mem_space, llvm_omp_target_shared_mem_alloc, llvm_omp_target_shared_mem_space, kmp_allocator_t::memkind, kmp_allocator_t::memspace, mk_dax_kmem_all, mk_default, mk_hbw_preferred, kmp_tgt_allocator_t::omp_alloc(), omp_atv_abort_fb, omp_atv_allocator_fb, omp_atv_default_mem_fb, omp_atv_environment, omp_atv_interleaved, omp_cgroup_mem_alloc, omp_const_mem_alloc, omp_default_mem_alloc, omp_high_bw_mem_alloc, omp_large_cap_mem_alloc, omp_low_lat_mem_alloc, omp_null_allocator, omp_pteam_mem_alloc, omp_thread_mem_alloc, kmp_allocator_t::pinned, kmp_allocator_t::pool_size, kmp_allocator_t::pool_used, kmp_mem_desc::ptr_align, kmp_mem_desc::ptr_alloc, RCAST, size, kmp_mem_desc::size_a, and kmp_mem_desc::size_orig.

Referenced by __kmp_alloc(), __kmp_calloc(), __kmp_realloc(), __kmpc_aligned_alloc(), __kmpc_alloc(), KMP_API_NAME_GOMP_ALLOC(), omp_aligned_alloc(), and omp_alloc().

◆ __kmp_calloc()

void * __kmp_calloc ( int  gtid,
size_t  algn,
size_t  nmemb,
size_t  size,
omp_allocator_handle_t  allocator 
)

◆ __kmp_fini_memkind()

void __kmp_fini_memkind ( )

◆ __kmp_fini_target_mem()

void __kmp_fini_target_mem ( )

Finalize target memory support.

Definition at line 1639 of file kmp_alloc.cpp.

References __kmp_tgt_memspace_list, and kmp_tgt_memspace_list_t::fini().

Referenced by __kmp_fini_allocator().

◆ __kmp_get_devices_allocator()

omp_allocator_handle_t __kmp_get_devices_allocator ( int  ndevs,
const int devs,
omp_memspace_handle_t  memspace,
int  host 
)

◆ __kmp_get_devices_memspace()

omp_memspace_handle_t __kmp_get_devices_memspace ( int  ndevs,
const int devs,
omp_memspace_handle_t  memspace,
int  host 
)

◆ __kmp_get_memspace_num_resources()

int __kmp_get_memspace_num_resources ( omp_memspace_handle_t  memspace)

◆ __kmp_get_submemspace()

omp_memspace_handle_t __kmp_get_submemspace ( omp_memspace_handle_t  memspace,
int  num_resources,
int resources 
)

◆ __kmp_init_memkind()

void __kmp_init_memkind ( )

◆ __kmp_init_target_mem()

void __kmp_init_target_mem ( )

◆ __kmp_realloc()

void * __kmp_realloc ( int  gtid,
void ptr,
size_t  size,
omp_allocator_handle_t  allocator,
omp_allocator_handle_t  free_allocator 
)

◆ __kmpc_aligned_alloc()

void * __kmpc_aligned_alloc ( int  gtid,
size_t  algn,
size_t  size,
omp_allocator_handle_t  allocator 
)

Definition at line 1874 of file kmp_alloc.cpp.

References __kmp_alloc(), KE_TRACE, and size.

◆ __kmpc_alloc()

void * __kmpc_alloc ( int  gtid,
size_t  size,
omp_allocator_handle_t  allocator 
)

Definition at line 1867 of file kmp_alloc.cpp.

References __kmp_alloc(), KE_TRACE, and size.

◆ __kmpc_calloc()

void * __kmpc_calloc ( int  gtid,
size_t  nmemb,
size_t  size,
omp_allocator_handle_t  allocator 
)

Definition at line 1883 of file kmp_alloc.cpp.

References __kmp_calloc(), KE_TRACE, and size.

◆ __kmpc_destroy_allocator()

void __kmpc_destroy_allocator ( int  gtid,
omp_allocator_handle_t  allocator 
)

Definition at line 1777 of file kmp_alloc.cpp.

References __kmp_free, and kmp_max_mem_alloc.

Referenced by __kmp_cleanup(), and FTN_DESTROY_ALLOCATOR().

◆ __kmpc_free()

void __kmpc_free ( int  gtid,
void ptr,
omp_allocator_handle_t  allocator 
)

Definition at line 1902 of file kmp_alloc.cpp.

References ___kmpc_free(), and KE_TRACE.

◆ __kmpc_get_default_allocator()

omp_allocator_handle_t __kmpc_get_default_allocator ( int  gtid)

Definition at line 1788 of file kmp_alloc.cpp.

References __kmp_threads.

Referenced by FTN_GET_DEFAULT_ALLOCATOR().

◆ __kmpc_init_allocator()

omp_allocator_handle_t __kmpc_init_allocator ( int  gtid,
omp_memspace_handle_t  ms,
int  ntraits,
omp_alloctrait_t  traits[] 
)

◆ __kmpc_realloc()

void * __kmpc_realloc ( int  gtid,
void ptr,
size_t  size,
omp_allocator_handle_t  allocator,
omp_allocator_handle_t  free_allocator 
)

Definition at line 1892 of file kmp_alloc.cpp.

References __kmp_realloc(), KE_TRACE, and size.

◆ __kmpc_set_default_allocator()

void __kmpc_set_default_allocator ( int  gtid,
omp_allocator_handle_t  allocator 
)

Definition at line 1782 of file kmp_alloc.cpp.

References __kmp_threads, omp_default_mem_alloc, and omp_null_allocator.

Referenced by FTN_SET_DEFAULT_ALLOCATOR().

◆ kmpc_aligned_malloc()

void * kmpc_aligned_malloc ( size_t  size,
size_t  alignment 
)

Definition at line 1123 of file kmp_alloc.cpp.

References __kmp_entry_thread(), alignment, IS_POWER_OF_TWO, KMP_DEBUG_ASSERT, and size.

Referenced by FTN_ALIGNED_MALLOC().

◆ kmpc_calloc()

void * kmpc_calloc ( size_t  nelem,
size_t  elsize 
)

Definition at line 1145 of file kmp_alloc.cpp.

References __kmp_entry_thread().

Referenced by FTN_CALLOC().

◆ kmpc_free()

void kmpc_free ( void ptr)

Definition at line 1186 of file kmp_alloc.cpp.

References __kmp_get_thread, __kmp_init_serial, and KMP_ASSERT.

Referenced by FTN_KFREE().

◆ kmpc_malloc()

void * kmpc_malloc ( size_t  size)

Definition at line 1110 of file kmp_alloc.cpp.

References __kmp_entry_thread(), and size.

Referenced by FTN_MALLOC().

◆ kmpc_realloc()

void * kmpc_realloc ( void ptr,
size_t  size 
)

Definition at line 1156 of file kmp_alloc.cpp.

References __kmp_entry_thread(), __kmp_get_thread, KMP_ASSERT, result, and size.

Referenced by FTN_REALLOC().

◆ omp_get_num_devices()

int omp_get_num_devices ( void  )

Variable Documentation

◆ __kmp_target_mem_available

bool __kmp_target_mem_available
static

◆ __kmp_tgt_allocator

class kmp_tgt_allocator_t __kmp_tgt_allocator

◆ __kmp_tgt_memspace_list

class kmp_tgt_memspace_list_t __kmp_tgt_memspace_list

◆ alignment

constexpr size_t alignment = SizeQuant
constexpr

◆ h_memkind

void* h_memkind
static

Definition at line 1239 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), and __kmp_init_memkind().

◆ kmp_mk_alloc

void *(* kmp_mk_alloc) (void *k, size_t sz) ( void k,
size_t  sz 
)
static

Definition at line 1242 of file kmp_alloc.cpp.

Referenced by __kmp_alloc(), __kmp_fini_memkind(), and __kmp_init_memkind().

◆ kmp_mk_check

int(* kmp_mk_check) (void *kind) ( void kind)
static

Definition at line 1246 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), and __kmp_init_memkind().

◆ kmp_mk_free

void(* kmp_mk_free) (void *kind, void *ptr) ( void kind,
void ptr 
)
static

Definition at line 1244 of file kmp_alloc.cpp.

Referenced by ___kmpc_free(), __kmp_fini_memkind(), and __kmp_init_memkind().

◆ kmp_mk_lib_name

const char* kmp_mk_lib_name
static

Definition at line 1238 of file kmp_alloc.cpp.

Referenced by __kmp_init_memkind().

◆ kmp_target_alloc_device

void *(* kmp_target_alloc_device) (size_t size, int device) ( size_t  size,
int  device 
)
static

Definition at line 1261 of file kmp_alloc.cpp.

Referenced by __kmp_alloc(), and __kmp_init_target_mem().

◆ kmp_target_alloc_host

void *(* kmp_target_alloc_host) (size_t size, int device) ( size_t  size,
int  device 
)
static

Definition at line 1259 of file kmp_alloc.cpp.

Referenced by __kmp_alloc(), and __kmp_init_target_mem().

◆ kmp_target_alloc_shared

void *(* kmp_target_alloc_shared) (size_t size, int device) ( size_t  size,
int  device 
)
static

Definition at line 1260 of file kmp_alloc.cpp.

Referenced by __kmp_alloc(), and __kmp_init_target_mem().

◆ kmp_target_free_device

void *(* kmp_target_free_device) (void *ptr, int device) ( void ptr,
int  device 
)
static

Definition at line 1266 of file kmp_alloc.cpp.

Referenced by ___kmpc_free(), and __kmp_init_target_mem().

◆ kmp_target_free_host

void *(* kmp_target_free_host) (void *ptr, int device) ( void ptr,
int  device 
)
static

Definition at line 1264 of file kmp_alloc.cpp.

Referenced by ___kmpc_free(), and __kmp_init_target_mem().

◆ kmp_target_free_shared

void *(* kmp_target_free_shared) (void *ptr, int device) ( void ptr,
int  device 
)
static

Definition at line 1265 of file kmp_alloc.cpp.

Referenced by ___kmpc_free(), and __kmp_init_target_mem().

◆ kmp_target_lock_mem

void *(* kmp_target_lock_mem) (void *ptr, size_t size, int device) ( void ptr,
size_t  size,
int  device 
)
static

Definition at line 1262 of file kmp_alloc.cpp.

Referenced by __kmp_alloc(), and __kmp_init_target_mem().

◆ kmp_target_unlock_mem

void *(* kmp_target_unlock_mem) (void *ptr, int device) ( void ptr,
int  device 
)
static

Definition at line 1263 of file kmp_alloc.cpp.

Referenced by ___kmpc_free(), and __kmp_init_target_mem().

◆ mk_dax_kmem

void** mk_dax_kmem
static

Definition at line 1256 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), __kmp_init_memkind(), and __kmpc_init_allocator().

◆ mk_dax_kmem_all

void** mk_dax_kmem_all
static

◆ mk_dax_kmem_preferred

void** mk_dax_kmem_preferred
static

Definition at line 1258 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), and __kmp_init_memkind().

◆ mk_default

void** mk_default
static

◆ mk_hbw

void** mk_hbw
static

Definition at line 1250 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), and __kmp_init_memkind().

◆ mk_hbw_hugetlb

void** mk_hbw_hugetlb
static

Definition at line 1254 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), and __kmp_init_memkind().

◆ mk_hbw_interleave

void** mk_hbw_interleave
static

Definition at line 1251 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), __kmp_init_memkind(), and __kmpc_init_allocator().

◆ mk_hbw_preferred

void** mk_hbw_preferred
static

◆ mk_hbw_preferred_hugetlb

void** mk_hbw_preferred_hugetlb
static

Definition at line 1255 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), and __kmp_init_memkind().

◆ mk_hugetlb

void** mk_hugetlb
static

Definition at line 1253 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), and __kmp_init_memkind().

◆ mk_interleave

void** mk_interleave
static

Definition at line 1249 of file kmp_alloc.cpp.

Referenced by __kmp_fini_memkind(), __kmp_init_memkind(), and __kmpc_init_allocator().