18
18
#include <umf/pools/pool_jemalloc.h>
19
19
#endif
20
20
21
+ #ifdef UMF_BUILD_LIBUMF_POOL_SCALABLE
22
+ #include <umf/pools/pool_scalable.h>
23
+ #endif
24
+
21
25
#include <stdbool.h>
22
26
#include <unistd.h>
23
27
@@ -154,7 +158,8 @@ UBENCH_EX(simple, os_memory_provider) {
154
158
}
155
159
156
160
#if (defined UMF_BUILD_LIBUMF_POOL_DISJOINT ) || \
157
- (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC )
161
+ (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC ) || \
162
+ (defined UMF_BUILD_LIBUMF_POOL_SCALABLE )
158
163
159
164
static void * w_umfPoolMalloc (void * provider , size_t size , size_t alignment ) {
160
165
umf_memory_pool_handle_t hPool = (umf_memory_pool_handle_t )provider ;
@@ -169,7 +174,7 @@ static void w_umfPoolFree(void *provider, void *ptr, size_t size) {
169
174
exit (-1 );
170
175
}
171
176
}
172
- #endif /* (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) */
177
+ #endif /* (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) || (defined UMF_BUILD_LIBUMF_POOL_SCALABLE) */
173
178
174
179
#ifdef UMF_BUILD_LIBUMF_POOL_DISJOINT
175
180
////////////////// DISJOINT POOL WITH OS MEMORY PROVIDER
@@ -251,4 +256,40 @@ UBENCH_EX(simple, jemalloc_pool_with_os_memory_provider) {
251
256
}
252
257
#endif /* UMF_BUILD_LIBUMF_POOL_JEMALLOC */
253
258
259
+ #ifdef UMF_BUILD_LIBUMF_POOL_SCALABLE
260
+ ////////////////// SCALABLE (TBB) POOL WITH OS MEMORY PROVIDER
261
+
262
+ UBENCH_EX (simple , scalable_pool_with_os_memory_provider ) {
263
+ alloc_t * array = alloc_array (N_ITERATIONS );
264
+
265
+ enum umf_result_t umf_result ;
266
+ umf_memory_provider_handle_t os_memory_provider = NULL ;
267
+ umf_result = umfMemoryProviderCreate (& UMF_OS_MEMORY_PROVIDER_OPS ,
268
+ & UMF_OS_MEMORY_PROVIDER_PARAMS ,
269
+ & os_memory_provider );
270
+ if (umf_result != UMF_RESULT_SUCCESS ) {
271
+ exit (-1 );
272
+ }
273
+
274
+ umf_memory_pool_handle_t scalable_pool ;
275
+ umf_result = umfPoolCreate (& UMF_SCALABLE_POOL_OPS , os_memory_provider , NULL ,
276
+ & scalable_pool );
277
+ if (umf_result != UMF_RESULT_SUCCESS ) {
278
+ exit (-1 );
279
+ }
280
+
281
+ do_benchmark (array , N_ITERATIONS , w_umfPoolMalloc , w_umfPoolFree ,
282
+ scalable_pool ); // WARMUP
283
+
284
+ UBENCH_DO_BENCHMARK () {
285
+ do_benchmark (array , N_ITERATIONS , w_umfPoolMalloc , w_umfPoolFree ,
286
+ scalable_pool );
287
+ }
288
+
289
+ umfPoolDestroy (scalable_pool );
290
+ umfMemoryProviderDestroy (os_memory_provider );
291
+ free (array );
292
+ }
293
+ #endif /* UMF_BUILD_LIBUMF_POOL_SCALABLE */
294
+
254
295
UBENCH_MAIN ();
0 commit comments