| /* |
| * Copyright 2018 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can |
| * be found in the LICENSE file. |
| * |
| */ |
| |
| // |
| // |
| // |
| |
| #include <stdlib.h> |
| |
| // |
| // |
| // |
| |
| #include "runtime_cl_12.h" |
| #include "config_cl.h" |
| |
| // |
| // |
| // |
| |
| #define SKC_RUNTIME_HOST_CACHELINE_SIZE 64 |
| |
| #define SKC_ALIGNED_MALLOC(size,alignment) _aligned_malloc(size,alignment) |
| #define SKC_ALIGNED_FREE(p) _aligned_free(p) |
| |
| // |
| // PERM |
| // |
| |
| void * |
| skc_runtime_host_perm_alloc(struct skc_runtime * const runtime, |
| skc_mem_flags_e const flags, |
| size_t const size) |
| { |
| return SKC_ALIGNED_MALLOC(SKC_ROUND_UP(size,SKC_RUNTIME_HOST_CACHELINE_SIZE), |
| SKC_RUNTIME_HOST_CACHELINE_SIZE); |
| } |
| |
| void |
| skc_runtime_host_perm_free(struct skc_runtime * const runtime, |
| void * const mem) |
| { |
| SKC_ALIGNED_FREE(mem); |
| } |
| |
| // |
| // TEMP |
| // |
| |
| void * |
| skc_runtime_host_temp_alloc(struct skc_runtime * const runtime, |
| skc_mem_flags_e const flags, |
| size_t const size, |
| skc_subbuf_id_t * const subbuf_id, |
| size_t * const subbuf_size) |
| { |
| if (size == 0) |
| { |
| *subbuf_id = (skc_subbuf_id_t)-1; |
| |
| if (subbuf_size != NULL) |
| *subbuf_size = 0; |
| |
| return NULL; |
| } |
| |
| return runtime->allocator.host.temp.extent + |
| skc_suballocator_subbuf_alloc(&runtime->allocator.host.temp.suballocator, |
| runtime->scheduler, |
| size,subbuf_id,subbuf_size); |
| } |
| |
| |
| void |
| skc_runtime_host_temp_free(struct skc_runtime * const runtime, |
| void * const mem, |
| skc_subbuf_id_t const subbuf_id) |
| { |
| if (mem == NULL) |
| return; |
| |
| skc_suballocator_subbuf_free(&runtime->allocator.host.temp.suballocator,subbuf_id); |
| } |
| |
| // |
| // |
| // |
| |
| void |
| skc_allocator_host_create(struct skc_runtime * const runtime) |
| { |
| skc_suballocator_create(runtime, |
| &runtime->allocator.host.temp.suballocator, |
| "HOST ", |
| runtime->config->suballocator.host.subbufs, |
| SKC_RUNTIME_HOST_CACHELINE_SIZE, |
| runtime->config->suballocator.host.size); |
| |
| runtime->allocator.host.temp.extent = |
| skc_runtime_host_perm_alloc(runtime, |
| SKC_MEM_FLAGS_READ_WRITE, |
| runtime->config->suballocator.host.size); |
| } |
| |
| void |
| skc_allocator_host_dispose(struct skc_runtime * const runtime) |
| { |
| skc_suballocator_dispose(runtime,&runtime->allocator.host.temp.suballocator); |
| |
| skc_runtime_host_perm_free(runtime,runtime->allocator.host.temp.extent); |
| } |
| |
| // |
| // |
| // |