17#define OFFLOAD_BUFFER_MEMPOOL
25 assert(NULL != buffer);
26#if defined(OFFLOAD_BUFFER_MEMPOOL)
34#elif defined(__OFFLOAD)
53 const size_t requested_size =
sizeof(double) * length;
55 if (*buffer != NULL) {
56 if (0 == requested_size) {
59 (*buffer)->host_buffer = NULL;
60 (*buffer)->device_buffer = NULL;
62 }
else if (requested_size <= (*buffer)->size) {
69 assert(NULL != *buffer);
72 (*buffer)->size = requested_size;
73 (*buffer)->host_buffer = NULL;
74 (*buffer)->device_buffer = NULL;
75 if (0 == requested_size) {
78#if defined(OFFLOAD_BUFFER_MEMPOOL)
79#if !defined(__OFFLOAD_UNIFIED_MEMORY)
83#elif defined(__OFFLOAD)
85#if !defined(__OFFLOAD_UNIFIED_MEMORY)
86 offloadMallocHost((
void **)&(*buffer)->host_buffer, requested_size);
88 offloadMalloc((
void **)&(*buffer)->device_buffer, requested_size);
90 (*buffer)->host_buffer = malloc(requested_size);
91 (*buffer)->device_buffer = NULL;
93 if (NULL == (*buffer)->host_buffer) {
94 (*buffer)->host_buffer = (*buffer)->device_buffer;
103 if (NULL != buffer) {
114 assert(NULL != buffer);
123 assert(NULL != buffer);
132 assert(NULL != buffer);
133#if defined(__OFFLOAD)
135 const size_t bytes =
sizeof(double) * length;
149 assert(NULL != buffer);
150#if defined(__OFFLOAD)
152 const size_t bytes =
sizeof(double) * length;
double * offload_get_buffer_host_pointer(offload_buffer *buffer)
Returns a pointer to the host buffer (Fortran API).
void offload_buffer_h2d(offload_buffer *buffer, const int length)
Copy data from host to device (Fortran API).
void offload_free_buffer(offload_buffer *buffer)
Deallocate given buffer.
static void offload_free_buffer_internal(offload_buffer *buffer)
Internal routine to deallocate given buffer.
double * offload_get_buffer_device_pointer(offload_buffer *buffer)
Returns a pointer to the device buffer (Fortran API).
void offload_buffer_d2h(offload_buffer *buffer, const int length)
Copy data from device to host (Fortran API).
void offload_create_buffer(const int length, offload_buffer **buffer)
Allocates a buffer (NULL or valid) with the given number of elements.
void offload_activate_chosen_device(void)
Activates the device selected via offload_set_chosen_device().
void offload_mempool_host_free(const void *memory)
Internal routine for releasing memory back to the pool.
void offload_mempool_device_free(const void *memory)
Internal routine for releasing memory back to the pool.
void * offload_mempool_host_malloc(const size_t size)
Internal routine for allocating host memory from the pool.
void * offload_mempool_device_malloc(const size_t size)
Internal routine for allocating device memory from the pool.
Internal representation of a buffer.