Skip to content

Commit 2ac56a1

Browse files
committed
Add the coarseProvider_split_merge_file_prov test
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent de334f0 commit 2ac56a1

File tree

2 files changed

+112
-2
lines changed

2 files changed

+112
-2
lines changed

test/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ function(build_umf_test)
6060
SRCS ${ARG_SRCS}
6161
LIBS ${TEST_LIBS})
6262

63+
if(UMF_BUILD_LEVEL_ZERO_PROVIDER)
64+
target_compile_definitions(${TEST_TARGET_NAME}
65+
PRIVATE UMF_BUILD_LEVEL_ZERO_PROVIDER=1)
66+
endif()
67+
if(UMF_BUILD_CUDA_PROVIDER)
68+
target_compile_definitions(${TEST_TARGET_NAME}
69+
PRIVATE UMF_BUILD_CUDA_PROVIDER=1)
70+
endif()
6371
if(UMF_POOL_JEMALLOC_ENABLED)
6472
target_compile_definitions(${TEST_TARGET_NAME}
6573
PRIVATE UMF_POOL_JEMALLOC_ENABLED=1)

test/provider_coarse.cpp

Lines changed: 104 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77

88
#include <random>
99

10-
#include "provider.hpp"
11-
10+
#include <umf/ipc.h>
11+
#include <umf/pools/pool_proxy.h>
1212
#include <umf/providers/provider_coarse.h>
1313
#include <umf/providers/provider_file_memory.h>
1414

15+
#include "provider.hpp"
16+
1517
using umf_test::BA_GLOBAL_SPLIT_MERGE_OPS;
1618
using umf_test::KB;
1719
using umf_test::MB;
@@ -417,6 +419,106 @@ TEST_P(CoarseWithMemoryStrategyTest, coarseProvider_merge_upstream) {
417419
umfMemoryProviderDestroy(coarse_memory_provider);
418420
umfMemoryProviderDestroy(file_memory_provider);
419421
}
422+
423+
TEST_P(CoarseWithMemoryStrategyTest, coarseProvider_split_merge_file_prov) {
424+
umf_memory_provider_handle_t file_memory_provider;
425+
umf_result_t umf_result;
426+
427+
umf_file_memory_provider_params_t file_params =
428+
umfFileMemoryProviderParamsDefault(FILE_PATH);
429+
file_params.visibility = UMF_MEM_MAP_SHARED;
430+
431+
umf_result = umfMemoryProviderCreate(umfFileMemoryProviderOps(),
432+
&file_params, &file_memory_provider);
433+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
434+
ASSERT_NE(file_memory_provider, nullptr);
435+
436+
const size_t init_buffer_size = 8 * KB;
437+
438+
coarse_memory_provider_params_t coarse_memory_provider_params;
439+
// make sure there are no undefined members - prevent a UB
440+
memset(&coarse_memory_provider_params, 0,
441+
sizeof(coarse_memory_provider_params));
442+
coarse_memory_provider_params.upstream_memory_provider =
443+
file_memory_provider;
444+
coarse_memory_provider_params.immediate_init_from_upstream = true;
445+
coarse_memory_provider_params.init_buffer = NULL;
446+
coarse_memory_provider_params.init_buffer_size = init_buffer_size;
447+
coarse_memory_provider_params.destroy_upstream_memory_provider = true;
448+
449+
umf_memory_provider_handle_t coarse_memory_provider;
450+
umf_result = umfMemoryProviderCreate(umfCoarseMemoryProviderOps(),
451+
&coarse_memory_provider_params,
452+
&coarse_memory_provider);
453+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
454+
ASSERT_NE(coarse_memory_provider, nullptr);
455+
456+
umf_memory_pool_handle_t pool;
457+
umf_result =
458+
umfPoolCreate(umfProxyPoolOps(), coarse_memory_provider, nullptr,
459+
UMF_POOL_CREATE_FLAG_OWN_PROVIDER, &pool);
460+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
461+
ASSERT_NE(pool, nullptr);
462+
463+
umf_memory_provider_handle_t cp = coarse_memory_provider;
464+
void *ptr1 = nullptr;
465+
void *ptr2 = nullptr;
466+
467+
ASSERT_EQ(GetStats(cp).used_size, 0 * MB);
468+
ASSERT_EQ(GetStats(cp).alloc_size, init_buffer_size);
469+
ASSERT_EQ(GetStats(cp).num_all_blocks, 1);
470+
471+
ptr1 = umfPoolMalloc(pool, init_buffer_size / 2);
472+
ASSERT_NE(ptr1, nullptr);
473+
ASSERT_EQ(GetStats(cp).used_size, init_buffer_size / 2);
474+
ASSERT_EQ(GetStats(cp).alloc_size, init_buffer_size);
475+
ASSERT_EQ(GetStats(cp).num_all_blocks, 2);
476+
477+
ptr2 = umfPoolMalloc(pool, init_buffer_size / 2);
478+
ASSERT_NE(ptr2, nullptr);
479+
ASSERT_EQ(GetStats(cp).used_size, init_buffer_size);
480+
ASSERT_EQ(GetStats(cp).alloc_size, init_buffer_size);
481+
ASSERT_EQ(GetStats(cp).num_all_blocks, 2);
482+
483+
umf_ipc_handle_t ipcHandle1 = nullptr;
484+
umf_ipc_handle_t ipcHandle2 = nullptr;
485+
size_t handleSize1 = 0;
486+
size_t handleSize2 = 0;
487+
void *handle1 = nullptr;
488+
void *handle2 = nullptr;
489+
490+
umf_result = umfGetIPCHandle(ptr1, &ipcHandle1, &handleSize1);
491+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
492+
umf_result = umfGetIPCHandle(ptr2, &ipcHandle2, &handleSize2);
493+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
494+
ASSERT_EQ(handleSize1, handleSize2);
495+
496+
umf_result = umfOpenIPCHandle(pool, ipcHandle1, &handle1);
497+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
498+
umf_result = umfOpenIPCHandle(pool, ipcHandle2, &handle2);
499+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
500+
501+
umf_result = umfCloseIPCHandle(handle1);
502+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
503+
umf_result = umfCloseIPCHandle(handle2);
504+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
505+
506+
umf_result = umfPutIPCHandle(ipcHandle1);
507+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
508+
umf_result = umfPutIPCHandle(ipcHandle2);
509+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
510+
511+
umf_result = umfPoolFree(pool, ptr1);
512+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
513+
umf_result = umfPoolFree(pool, ptr2);
514+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
515+
516+
ASSERT_EQ(GetStats(cp).used_size, 0);
517+
ASSERT_EQ(GetStats(cp).alloc_size, init_buffer_size);
518+
ASSERT_EQ(GetStats(cp).num_all_blocks, 1);
519+
520+
umfPoolDestroy(pool);
521+
}
420522
#endif /* !defined(_WIN32) && !defined(UMF_DISABLE_HWLOC) */
421523

422524
TEST_P(CoarseWithMemoryStrategyTest, coarseProvider_split_merge) {

0 commit comments

Comments
 (0)