75#define CS_MALLOC(_ptr, _ni, _type) \
76_ptr = (_type *) cs_mem_malloc(_ni, sizeof(_type), \
77 #_ptr, __FILE__, __LINE__)
95#define CS_MALLOC_HD(_ptr, _ni, _type, _mode) \
96_ptr = (_type *) cs_mem_malloc_hd(_mode, _ni, sizeof(_type), \
97 #_ptr, __FILE__, __LINE__)
111#define CS_REALLOC(_ptr, _ni, _type) \
112_ptr = (_type *) cs_mem_realloc(_ptr, _ni, sizeof(_type), \
113 #_ptr, __FILE__, __LINE__)
131#define CS_REALLOC_HD(_ptr, _ni, _type, _mode) \
132_ptr = (_type *) cs_mem_realloc_hd(_ptr, _mode, _ni, sizeof(_type), \
133 #_ptr, __FILE__, __LINE__)
151#define CS_FREE(_ptr) \
152cs_mem_free(_ptr, #_ptr, __FILE__, __LINE__), _ptr = NULL
167#define CS_MEMALIGN(_ptr, _align, _ni, _type) \
168_ptr = (_type *) cs_mem_memalign(_align, _ni, sizeof(_type), \
169 #_ptr, __FILE__, __LINE__)
175#if defined(HAVE_ACCEL)
183#define cs_alloc_mode CS_ALLOC_HOST
184#define cs_alloc_mode_read_mostly CS_ALLOC_HOST
185#define cs_alloc_mode_device CS_ALLOC_HOST
262 const char *var_name,
263 const char *file_name,
266#if defined(HAVE_ACCEL)
293 const char *var_name,
294 const char *file_name,
299extern "C" inline void *
303 const char *var_name,
304 const char *file_name,
307 return cs_mem_malloc(ni, size, var_name, file_name, line_num);
336 const char *var_name,
337 const char *file_name,
370#if defined(HAVE_ACCEL)
373cs_mem_realloc_hd(
void *ptr,
377 const char *var_name,
378 const char *file_name,
383extern "C" inline void *
384cs_mem_realloc_hd(
void *ptr,
388 const char *var_name,
389 const char *file_name,
392 return cs_mem_realloc(ptr, ni, size, var_name, file_name, line_num);
418 const char *var_name,
419 const char *file_name,
448 const char *var_name,
449 const char *file_name,
513#if defined(HAVE_OPENMP_TARGET)
524cs_mem_set_omp_target_device_id(
int device_id);
554 uint64_t *n_reallocs,
556 uint64_t *n_current);
560#if defined(HAVE_ACCEL)
576cs_copy_h2d(
void *dest,
594cs_copy_d2h(
void *dest,
612cs_copy_d2d(
void *dest,
634#if defined(HAVE_ACCEL)
641extern "C" inline void *
649#if defined(HAVE_ACCEL)
679#if defined(HAVE_ACCEL)
694#if defined(HAVE_ACCEL)
703 return (
const T *)ptr_v;
719#if defined(HAVE_ACCEL)
745#if defined(HAVE_ACCEL)
752extern "C" inline bool
777#if defined(HAVE_ACCEL)
786#define cs_associate_device_ptr(_host_ptr, _ni, _size);
801#if defined(HAVE_ACCEL)
808#define cs_disassociate_device_ptr(_host_ptr);
825#if defined(HAVE_ACCEL)
833#define cs_set_alloc_mode(_host_ptr, mode);
850#if defined(HAVE_ACCEL)
864#define cs_set_alloc_mode_r(_host_ptr, mode);
876#if defined(HAVE_ACCEL)
883#define cs_mem_advise_set_read_mostly(ptr);
895#if defined(HAVE_ACCEL)
927#if defined(HAVE_ACCEL)
934extern "C" inline void
959#if defined(HAVE_ACCEL)
966extern "C" inline void
992#if defined(HAVE_ACCEL)
999extern "C" inline void
1025#if defined(HAVE_ACCEL)
1032extern "C" inline void
1058#if defined(HAVE_ACCEL)
1065extern "C" inline void
1091#if defined(HAVE_ACCEL)
1098extern "C" inline void
1118#if defined(HAVE_ACCEL)
1126extern "C" inline void
1128 [[maybe_unused]]
size_t size)
1147#if defined(HAVE_ACCEL)
1155extern "C" inline void
1157 [[maybe_unused]]
size_t size)
1170#if defined(HAVE_ACCEL)
1177extern "C" inline void
1184#if defined(HAVE_ACCEL)
1195cs_mem_device_pool_set_active(
bool status);
1211cs_mem_device_pool_set_max_capacity(
size_t size);
1222cs_mem_device_pool_set_max_tries(
short int n_tries);
1231cs_mem_device_pool_clear(
void);
void() bft_error_handler_t(const char *const file_name, const int line_num, const int sys_error_code, const char *const format, va_list arg_ptr)
Function pointer to opaque error handler.
Definition: bft_error.h:52
#define CS_UNUSED(x)
Definition: cs_defs.h:518
@ p
Definition: cs_field_pointer.h:63
int cs_mem_have_memalign(void)
Indicate if a memory aligned allocation variant is available.
Definition: cs_mem.cpp:2339
void * cs_mem_memalign(size_t alignment, size_t ni, size_t size, const char *var_name, const char *file_name, int line_num)
Allocate aligned memory for ni elements of size bytes.
Definition: cs_mem.cpp:2176
size_t cs_mem_size_max(void)
Return maximum theoretical dynamic memory allocated.
Definition: cs_mem.cpp:2261
int cs_mem_initialized(void)
Indicates if cs_mem_...() functions are initialized.
Definition: cs_mem.cpp:1928
void * cs_mem_malloc(size_t ni, size_t size, const char *var_name, const char *file_name, int line_num)
Allocate memory for ni elements of size bytes.
Definition: cs_mem.cpp:1957
bft_error_handler_t * cs_mem_error_handler_get(void)
Returns the error handler associated with the cs_mem_...() functions.
Definition: cs_mem.cpp:2357
void cs_mem_init(const char *log_file_name)
Initialize memory handling.
Definition: cs_mem.cpp:1757
size_t cs_mem_size_current(void)
Return current theoretical dynamic memory allocated.
Definition: cs_mem.cpp:2247
void cs_mem_end(void)
End memory handling.
Definition: cs_mem.cpp:1851
void * cs_mem_realloc(void *ptr, size_t ni, size_t size, const char *var_name, const char *file_name, int line_num)
Reallocate memory for ni elements of size bytes.
Definition: cs_mem.cpp:2016
void cs_mem_error_handler_set(bft_error_handler_t *handler)
Definition: cs_mem.cpp:2376
void * cs_mem_free(void *ptr, const char *var_name, const char *file_name, int line_num)
Free allocated memory.
Definition: cs_mem.cpp:2109
#define cs_mem_advise_set_read_mostly(ptr)
Advise memory system that a given allocation will be mostly read.
Definition: cs_mem.h:883
#define cs_alloc_mode_device
Definition: cs_mem.h:185
#define cs_set_alloc_mode_r(_host_ptr, mode)
Set allocation mode for an already allocated pointer using pass by reference semantics for the pointe...
Definition: cs_mem.h:864
void cs_sync_d2h_if_needed_start(void *ptr)
Start synchronization of data from device to host, only if needed.
Definition: cs_mem.h:1099
void cs_prefetch_h2d(const void *ptr, size_t size)
Prefetch data from host to device.
Definition: cs_mem.h:1127
void cs_prefetch_d2h(void *ptr, size_t size)
Prefetch data from device to host.
Definition: cs_mem.h:1156
void cs_mem_advise_unset_read_mostly(void *ptr)
Advise memory system that a given allocation will be mostly read.
Definition: cs_mem.h:903
#define cs_associate_device_ptr(_host_ptr, _ni, _size)
Associate device memory with a given host memory pointer.
Definition: cs_mem.h:786
void * cs_get_device_ptr(void *ptr)
Return matching device pointer for a given pointer.
Definition: cs_mem.h:642
#define cs_set_alloc_mode(_host_ptr, mode)
Set allocation mode for an already allocated pointer.
Definition: cs_mem.h:833
#define cs_disassociate_device_ptr(_host_ptr)
Detach device memory from a given host memory pointer.
Definition: cs_mem.h:808
void cs_sync_h2d(const void *ptr)
Synchronize data from host to device.
Definition: cs_mem.h:935
#define cs_alloc_mode
Definition: cs_mem.h:183
bool cs_mem_is_device_ptr(const void *ptr)
Check if a pointer is a device (or shared) pointer.
Definition: cs_mem.h:753
#define cs_alloc_mode_read_mostly
Definition: cs_mem.h:184
void cs_sync_h2d_start(const void *ptr)
Start synchronization of data from host to device.
Definition: cs_mem.h:967
void cs_sync_d2h(void *ptr)
Synchronize data from device to host.
Definition: cs_mem.h:1000
int cs_mem_stats(uint64_t *alloc_cur, uint64_t *alloc_max, uint64_t *n_allocs, uint64_t *n_reallocs, uint64_t *n_frees, uint64_t *n_current)
Return memory allocation stats, if available.
Definition: cs_mem.cpp:2290
void cs_sync_d2h_start(void *ptr)
Start synchronization of data from device to host.
Definition: cs_mem.h:1033
void cs_sync_d2h_if_needed(void *ptr)
Synchronize data from device to host, only if needed.
Definition: cs_mem.h:1066
cs_alloc_mode_t cs_check_device_ptr(const void *ptr)
Check if a pointer is associated with a device.
Definition: cs_mem.h:727
const void * cs_get_device_ptr_const(const void *ptr)
Return matching device pointer for a given constant pointer.
Definition: cs_mem.h:687
cs_alloc_mode_t
Definition: cs_mem.h:46
@ CS_ALLOC_HOST
Definition: cs_mem.h:48
@ CS_ALLOC_HOST_DEVICE_PINNED
Definition: cs_mem.h:50
@ CS_ALLOC_HOST_DEVICE_SHARED
Definition: cs_mem.h:53
@ CS_ALLOC_HOST_DEVICE
Definition: cs_mem.h:49
@ CS_ALLOC_DEVICE
Definition: cs_mem.h:55
void cs_mem_hd_async_wait(void)
Wait for asynchronous memory operations between device and pinned host memory to finish.
Definition: cs_mem.h:1178