1 /* 2 * Copyright 2018 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can 5 * be found in the LICENSE file. 6 * 7 */ 8 9 // 10 // 11 // 12 13 #include <stdlib.h> 14 15 // 16 // 17 // 18 19 #include "runtime_cl_12.h" 20 #include "config_cl.h" 21 22 // 23 // 24 // 25 26 #define SKC_RUNTIME_HOST_CACHELINE_SIZE 64 27 28 #define SKC_ALIGNED_MALLOC(size,alignment) _aligned_malloc(size,alignment) 29 #define SKC_ALIGNED_FREE(p) _aligned_free(p) 30 31 // 32 // PERM 33 // 34 35 void * 36 skc_runtime_host_perm_alloc(struct skc_runtime * const runtime, 37 skc_mem_flags_e const flags, 38 size_t const size) 39 { 40 return SKC_ALIGNED_MALLOC(SKC_ROUND_UP(size,SKC_RUNTIME_HOST_CACHELINE_SIZE), 41 SKC_RUNTIME_HOST_CACHELINE_SIZE); 42 } 43 44 void 45 skc_runtime_host_perm_free(struct skc_runtime * const runtime, 46 void * const mem) 47 { 48 SKC_ALIGNED_FREE(mem); 49 } 50 51 // 52 // TEMP 53 // 54 55 void * 56 skc_runtime_host_temp_alloc(struct skc_runtime * const runtime, 57 skc_mem_flags_e const flags, 58 size_t const size, 59 skc_subbuf_id_t * const subbuf_id, 60 size_t * const subbuf_size) 61 { 62 if (size == 0) 63 { 64 *subbuf_id = (skc_subbuf_id_t)-1; 65 66 if (subbuf_size != NULL) 67 *subbuf_size = 0; 68 69 return NULL; 70 } 71 72 return runtime->allocator.host.temp.extent + 73 skc_suballocator_subbuf_alloc(&runtime->allocator.host.temp.suballocator, 74 runtime->scheduler, 75 size,subbuf_id,subbuf_size); 76 } 77 78 79 void 80 skc_runtime_host_temp_free(struct skc_runtime * const runtime, 81 void * const mem, 82 skc_subbuf_id_t const subbuf_id) 83 { 84 if (mem == NULL) 85 return; 86 87 skc_suballocator_subbuf_free(&runtime->allocator.host.temp.suballocator,subbuf_id); 88 } 89 90 // 91 // 92 // 93 94 void 95 skc_allocator_host_create(struct skc_runtime * const runtime) 96 { 97 skc_suballocator_create(runtime, 98 &runtime->allocator.host.temp.suballocator, 99 "HOST ", 100 runtime->config->suballocator.host.subbufs, 101 SKC_RUNTIME_HOST_CACHELINE_SIZE, 102 runtime->config->suballocator.host.size); 103 104 runtime->allocator.host.temp.extent = 105 skc_runtime_host_perm_alloc(runtime, 106 SKC_MEM_FLAGS_READ_WRITE, 107 runtime->config->suballocator.host.size); 108 } 109 110 void 111 skc_allocator_host_dispose(struct skc_runtime * const runtime) 112 { 113 skc_suballocator_dispose(runtime,&runtime->allocator.host.temp.suballocator); 114 115 skc_runtime_host_perm_free(runtime,runtime->allocator.host.temp.extent); 116 } 117 118 // 119 // 120 // 121