7
7
*
8
8
*/
9
9
10
+ #include <umf/memory_pool.h>
10
11
#include <umf/providers/provider_os_memory.h>
11
12
12
13
#ifdef UMF_BUILD_LIBUMF_POOL_DISJOINT
13
14
#include <umf/pools/pool_disjoint.h>
14
15
#endif
15
16
17
+ #ifdef UMF_BUILD_LIBUMF_POOL_JEMALLOC
18
+ #include <umf/pools/pool_jemalloc.h>
19
+ #endif
20
+
16
21
#include <stdbool.h>
17
22
#include <unistd.h>
18
23
@@ -148,8 +153,8 @@ UBENCH_EX(simple, os_memory_provider) {
148
153
free (array );
149
154
}
150
155
151
- #ifdef UMF_BUILD_LIBUMF_POOL_DISJOINT
152
- ////////////////// DISJOINT POOL WITH OS MEMORY PROVIDER
156
+ #if (defined UMF_BUILD_LIBUMF_POOL_DISJOINT ) || \
157
+ (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC )
153
158
154
159
static void * w_umfPoolMalloc (void * provider , size_t size , size_t alignment ) {
155
160
umf_memory_pool_handle_t hPool = (umf_memory_pool_handle_t )provider ;
@@ -164,6 +169,10 @@ static void w_umfPoolFree(void *provider, void *ptr, size_t size) {
164
169
exit (-1 );
165
170
}
166
171
}
172
+ #endif /* (defined UMF_BUILD_LIBUMF_POOL_TBB) || (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) */
173
+
174
+ #ifdef UMF_BUILD_LIBUMF_POOL_DISJOINT
175
+ ////////////////// DISJOINT POOL WITH OS MEMORY PROVIDER
167
176
168
177
UBENCH_EX (simple , disjoint_pool_with_os_memory_provider ) {
169
178
alloc_t * array = alloc_array (N_ITERATIONS );
@@ -206,4 +215,40 @@ UBENCH_EX(simple, disjoint_pool_with_os_memory_provider) {
206
215
}
207
216
#endif /* UMF_BUILD_LIBUMF_POOL_DISJOINT */
208
217
218
+ #ifdef UMF_BUILD_LIBUMF_POOL_JEMALLOC
219
+ ////////////////// JEMALLOC POOL WITH OS MEMORY PROVIDER
220
+
221
+ UBENCH_EX (simple , jemalloc_pool_with_os_memory_provider ) {
222
+ alloc_t * array = alloc_array (N_ITERATIONS );
223
+
224
+ enum umf_result_t umf_result ;
225
+ umf_memory_provider_handle_t os_memory_provider = NULL ;
226
+ umf_result = umfMemoryProviderCreate (& UMF_OS_MEMORY_PROVIDER_OPS ,
227
+ & UMF_OS_MEMORY_PROVIDER_PARAMS ,
228
+ & os_memory_provider );
229
+ if (umf_result != UMF_RESULT_SUCCESS ) {
230
+ exit (-1 );
231
+ }
232
+
233
+ umf_memory_pool_handle_t jemalloc_pool ;
234
+ umf_result = umfPoolCreate (& UMF_JEMALLOC_POOL_OPS , os_memory_provider , NULL ,
235
+ & jemalloc_pool );
236
+ if (umf_result != UMF_RESULT_SUCCESS ) {
237
+ exit (-1 );
238
+ }
239
+
240
+ do_benchmark (array , N_ITERATIONS , w_umfPoolMalloc , w_umfPoolFree ,
241
+ jemalloc_pool ); // WARMUP
242
+
243
+ UBENCH_DO_BENCHMARK () {
244
+ do_benchmark (array , N_ITERATIONS , w_umfPoolMalloc , w_umfPoolFree ,
245
+ jemalloc_pool );
246
+ }
247
+
248
+ umfPoolDestroy (jemalloc_pool );
249
+ umfMemoryProviderDestroy (os_memory_provider );
250
+ free (array );
251
+ }
252
+ #endif /* UMF_BUILD_LIBUMF_POOL_JEMALLOC */
253
+
209
254
UBENCH_MAIN ();
0 commit comments