Skip to content

Commit e5f0177

Browse files
committed
Implement umfPoolCreateFromMemspace() with scalable pool
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 0ec16a5 commit e5f0177

File tree

2 files changed

+45
-8
lines changed

2 files changed

+45
-8
lines changed

src/CMakeLists.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,21 @@ if(UMF_ENABLE_POOL_TRACKING)
129129
"UMF_ENABLE_POOL_TRACKING")
130130
endif()
131131

132+
if(UMF_BUILD_LIBUMF_POOL_DISJOINT)
133+
set(UMF_PRIVATE_COMPILE_DEFINITIONS ${UMF_PRIVATE_COMPILE_DEFINITIONS}
134+
"UMF_BUILD_LIBUMF_POOL_DISJOINT=1")
135+
endif()
136+
137+
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
138+
set(UMF_PRIVATE_COMPILE_DEFINITIONS ${UMF_PRIVATE_COMPILE_DEFINITIONS}
139+
"UMF_BUILD_LIBUMF_POOL_JEMALLOC=1")
140+
endif()
141+
142+
if(UMF_BUILD_LIBUMF_POOL_SCALABLE)
143+
set(UMF_PRIVATE_COMPILE_DEFINITIONS ${UMF_PRIVATE_COMPILE_DEFINITIONS}
144+
"UMF_BUILD_LIBUMF_POOL_SCALABLE=1")
145+
endif()
146+
132147
target_link_directories(umf PRIVATE ${UMF_PRIVATE_LIBRARY_DIRS})
133148

134149
target_compile_definitions(umf PRIVATE ${UMF_PRIVATE_COMPILE_DEFINITIONS})

src/memory_targets/memory_target_numa.c

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
/*
2-
*
32
* Copyright (C) 2023-2024 Intel Corporation
43
*
54
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
@@ -11,7 +10,11 @@
1110
#include <hwloc.h>
1211
#include <stdlib.h>
1312

14-
#include <umf/pools/pool_disjoint.h>
13+
#ifdef UMF_BUILD_LIBUMF_POOL_SCALABLE
14+
#include <umf/pools/pool_scalable.h>
15+
#endif
16+
17+
#include <umf/pools/pool_proxy.h>
1518
#include <umf/providers/provider_os_memory.h>
1619

1720
#include "../memory_pool_internal.h"
@@ -101,12 +104,31 @@ static umf_result_t numa_memory_provider_create_from_memspace(
101104
static umf_result_t numa_pool_create_from_memspace(
102105
umf_memspace_handle_t memspace, void **memTargets, size_t numTargets,
103106
umf_memspace_policy_handle_t policy, umf_memory_pool_handle_t *pool) {
104-
(void)memspace;
105-
(void)memTargets;
106-
(void)numTargets;
107-
(void)policy;
108-
(void)pool;
109-
return UMF_RESULT_ERROR_NOT_SUPPORTED;
107+
108+
umf_memory_provider_handle_t numa_provider;
109+
umf_result_t umf_result = numa_memory_provider_create_from_memspace(
110+
memspace, memTargets, numTargets, policy, &numa_provider);
111+
if (umf_result != UMF_RESULT_SUCCESS) {
112+
return umf_result;
113+
}
114+
115+
umf_memory_pool_handle_t numa_pool;
116+
117+
#ifdef UMF_BUILD_LIBUMF_POOL_SCALABLE
118+
umf_result = umfPoolCreate(umfScalablePoolOps(), numa_provider, NULL,
119+
UMF_POOL_CREATE_FLAG_OWN_PROVIDER, &numa_pool);
120+
#else
121+
umf_result = UMF_RESULT_ERROR_NOT_SUPPORTED;
122+
#endif
123+
124+
if (umf_result != UMF_RESULT_SUCCESS) {
125+
umfMemoryProviderDestroy(numa_provider);
126+
return umf_result;
127+
}
128+
129+
*pool = numa_pool;
130+
131+
return umf_result;
110132
}
111133

112134
static umf_result_t numa_clone(void *memTarget, void **outMemTarget) {

0 commit comments

Comments
 (0)