Skip to content

Commit 6ca745c

Browse files
igchorkswiecicki
authored andcommitted
Bump UMF version and update integration code
1 parent 78e2ae5 commit 6ca745c

File tree

10 files changed

+58
-44
lines changed

10 files changed

+58
-44
lines changed

source/adapters/cuda/usm.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
398398

399399
HostMemPool =
400400
umf::poolMakeUniqueFromOps(
401-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
401+
umfDisjointPoolOps(), std::move(MemProvider),
402402
&this->DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host])
403403
.second;
404404

@@ -407,15 +407,15 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
407407
umf::memoryProviderMakeUnique<USMDeviceMemoryProvider>(Context, Device)
408408
.second;
409409
DeviceMemPool = umf::poolMakeUniqueFromOps(
410-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
410+
umfDisjointPoolOps(), std::move(MemProvider),
411411
&this->DisjointPoolConfigs
412412
.Configs[usm::DisjointPoolMemType::Device])
413413
.second;
414414
MemProvider =
415415
umf::memoryProviderMakeUnique<USMSharedMemoryProvider>(Context, Device)
416416
.second;
417417
SharedMemPool = umf::poolMakeUniqueFromOps(
418-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
418+
umfDisjointPoolOps(), std::move(MemProvider),
419419
&this->DisjointPoolConfigs
420420
.Configs[usm::DisjointPoolMemType::Shared])
421421
.second;

source/adapters/cuda/usm.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ class USMMemoryProvider {
8181
umf_result_t purge_force(void *, size_t) {
8282
return UMF_RESULT_ERROR_NOT_SUPPORTED;
8383
};
84+
umf_result_t allocation_merge(void *, void *, size_t) {
85+
return UMF_RESULT_ERROR_UNKNOWN;
86+
}
87+
umf_result_t allocation_split(void *, size_t, size_t) {
88+
return UMF_RESULT_ERROR_UNKNOWN;
89+
}
8490
virtual const char *get_name() = 0;
8591

8692
virtual ~USMMemoryProvider() = default;

source/adapters/hip/usm.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
340340

341341
HostMemPool =
342342
umf::poolMakeUniqueFromOps(
343-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
343+
umfDisjointPoolOps(), std::move(MemProvider),
344344
&this->DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host])
345345
.second;
346346

@@ -349,7 +349,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
349349
umf::memoryProviderMakeUnique<USMDeviceMemoryProvider>(Context, Device)
350350
.second;
351351
DeviceMemPool = umf::poolMakeUniqueFromOps(
352-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
352+
umfDisjointPoolOps(), std::move(MemProvider),
353353
&this->DisjointPoolConfigs
354354
.Configs[usm::DisjointPoolMemType::Device])
355355
.second;
@@ -358,7 +358,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
358358
umf::memoryProviderMakeUnique<USMSharedMemoryProvider>(Context, Device)
359359
.second;
360360
SharedMemPool = umf::poolMakeUniqueFromOps(
361-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
361+
umfDisjointPoolOps(), std::move(MemProvider),
362362
&this->DisjointPoolConfigs
363363
.Configs[usm::DisjointPoolMemType::Shared])
364364
.second;

source/adapters/hip/usm.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ class USMMemoryProvider {
8181
umf_result_t purge_force(void *, size_t) {
8282
return UMF_RESULT_ERROR_NOT_SUPPORTED;
8383
};
84+
umf_result_t allocation_merge(void *, void *, size_t) {
85+
return UMF_RESULT_ERROR_UNKNOWN;
86+
}
87+
umf_result_t allocation_split(void *, size_t, size_t) {
88+
return UMF_RESULT_ERROR_UNKNOWN;
89+
}
8490
virtual const char *get_name() = 0;
8591

8692
virtual ~USMMemoryProvider() = default;

source/adapters/level_zero/context.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ ur_result_t ur_context_handle_t_::initialize() {
195195
DeviceMemPools.emplace(
196196
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
197197
std::make_tuple(umf::poolMakeUniqueFromOps(
198-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
198+
umfDisjointPoolOps(), std::move(MemProvider),
199199
&DisjointPoolConfigInstance
200200
.Configs[usm::DisjointPoolMemType::Device])
201201
.second));
@@ -206,7 +206,7 @@ ur_result_t ur_context_handle_t_::initialize() {
206206
SharedMemPools.emplace(
207207
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
208208
std::make_tuple(umf::poolMakeUniqueFromOps(
209-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
209+
umfDisjointPoolOps(), std::move(MemProvider),
210210
&DisjointPoolConfigInstance
211211
.Configs[usm::DisjointPoolMemType::Shared])
212212
.second));
@@ -218,7 +218,7 @@ ur_result_t ur_context_handle_t_::initialize() {
218218
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
219219
std::make_tuple(
220220
umf::poolMakeUniqueFromOps(
221-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
221+
umfDisjointPoolOps(), std::move(MemProvider),
222222
&DisjointPoolConfigInstance
223223
.Configs[usm::DisjointPoolMemType::SharedReadOnly])
224224
.second));
@@ -271,7 +271,7 @@ ur_result_t ur_context_handle_t_::initialize() {
271271
.second;
272272
HostMemPool =
273273
umf::poolMakeUniqueFromOps(
274-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
274+
umfDisjointPoolOps(), std::move(MemProvider),
275275
&DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Host])
276276
.second;
277277

source/adapters/level_zero/usm.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -827,7 +827,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
827827

828828
HostMemPool =
829829
umf::poolMakeUniqueFromOps(
830-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
830+
umfDisjointPoolOps(), std::move(MemProvider),
831831
&this->DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host])
832832
.second;
833833

@@ -838,7 +838,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
838838
DeviceMemPools.emplace(
839839
std::piecewise_construct, std::make_tuple(device),
840840
std::make_tuple(umf::poolMakeUniqueFromOps(
841-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
841+
umfDisjointPoolOps(), std::move(MemProvider),
842842
&this->DisjointPoolConfigs
843843
.Configs[usm::DisjointPoolMemType::Device])
844844
.second));
@@ -849,7 +849,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
849849
SharedMemPools.emplace(
850850
std::piecewise_construct, std::make_tuple(device),
851851
std::make_tuple(umf::poolMakeUniqueFromOps(
852-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
852+
umfDisjointPoolOps(), std::move(MemProvider),
853853
&this->DisjointPoolConfigs
854854
.Configs[usm::DisjointPoolMemType::Shared])
855855
.second));
@@ -861,7 +861,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
861861
std::piecewise_construct, std::make_tuple(device),
862862
std::make_tuple(
863863
umf::poolMakeUniqueFromOps(
864-
&UMF_DISJOINT_POOL_OPS, std::move(MemProvider),
864+
umfDisjointPoolOps(), std::move(MemProvider),
865865
&this->DisjointPoolConfigs
866866
.Configs[usm::DisjointPoolMemType::SharedReadOnly])
867867
.second));

source/adapters/level_zero/usm.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ class USMMemoryProviderBase {
8585
virtual umf_result_t purge_force(void *, size_t) {
8686
return UMF_RESULT_ERROR_NOT_SUPPORTED;
8787
};
88+
umf_result_t allocation_merge(void *, void *, size_t) {
89+
return UMF_RESULT_ERROR_UNKNOWN;
90+
}
91+
umf_result_t allocation_split(void *, size_t, size_t) {
92+
return UMF_RESULT_ERROR_UNKNOWN;
93+
}
8894
virtual const char *get_name() { return ""; };
8995
virtual ~USMMemoryProviderBase() = default;
9096
};

source/common/CMakeLists.txt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ if (NOT DEFINED UMF_REPO)
2626
endif()
2727

2828
if (NOT DEFINED UMF_TAG)
29-
# Merge pull request #119 from ldorau/Fix_arena_extent_split_and_arena_extent_merge
30-
set(UMF_TAG 9bf7a0dc4dff76844e10edbb5c6e9d917536ef6d)
29+
# Merge pull request #637 from kswiecicki/fix-dpool-poison-macro
30+
set(UMF_TAG 1c34aae4c804e133c1273f30b1d6441ebb766f2f)
3131
endif()
3232

3333
message(STATUS "Will fetch Unified Memory Framework from ${UMF_REPO}")
@@ -43,16 +43,18 @@ if(UR_BUILD_TESTS)
4343
else()
4444
set(UMF_BUILD_TESTS OFF CACHE INTERNAL "Build UMF tests")
4545
endif()
46+
# TODO: L0 provider not ready yet
47+
set(UMF_BUILD_LEVEL_ZERO_PROVIDER OFF CACHE INTERNAL "Build Level Zero Provider")
48+
set(UMF_BUILD_SHARED_LIBRARY ${UMF_BUILD_SHARED_LIBRARY} CACHE INTERNAL "Build UMF shared library")
4649
set(UMF_BUILD_LIBUMF_POOL_DISJOINT ON CACHE INTERNAL "Build Disjoint Pool")
47-
set(UMF_BUILD_OS_MEMORY_PROVIDER OFF CACHE INTERNAL "Build OS Provider")
4850

4951
FetchContent_MakeAvailable(unified-memory-framework)
5052
FetchContent_GetProperties(unified-memory-framework)
5153

5254
target_link_libraries(ur_common PUBLIC
53-
unified-memory-framework::umf
54-
unified-memory-framework::headers
55-
unified-memory-framework::disjoint_pool
55+
umf::umf
56+
umf::headers
57+
umf::disjoint_pool
5658
${CMAKE_DL_LIBS}
5759
${PROJECT_NAME}::headers
5860
)

source/common/umf_helpers.hpp

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ umf_result_t initialize(T *obj, ArgsTuple &&args) {
6969

7070
template <typename T, typename ArgsTuple>
7171
umf_memory_pool_ops_t poolMakeUniqueOps() {
72-
umf_memory_pool_ops_t ops;
72+
umf_memory_pool_ops_t ops = {};
7373

7474
ops.version = UMF_VERSION_CURRENT;
7575
ops.initialize = [](umf_memory_provider_handle_t provider, void *params,
@@ -106,7 +106,7 @@ umf_memory_pool_ops_t poolMakeUniqueOps() {
106106
/// forwarded to T::initialize().
107107
template <typename T, typename... Args>
108108
auto memoryProviderMakeUnique(Args &&...args) {
109-
umf_memory_provider_ops_t ops;
109+
umf_memory_provider_ops_t ops = {};
110110
auto argsTuple = std::make_tuple(std::forward<Args>(args)...);
111111

112112
ops.version = UMF_VERSION_CURRENT;
@@ -128,9 +128,11 @@ auto memoryProviderMakeUnique(Args &&...args) {
128128
UMF_ASSIGN_OP_NORETURN(ops, T, get_last_native_error);
129129
UMF_ASSIGN_OP(ops, T, get_recommended_page_size, UMF_RESULT_ERROR_UNKNOWN);
130130
UMF_ASSIGN_OP(ops, T, get_min_page_size, UMF_RESULT_ERROR_UNKNOWN);
131-
UMF_ASSIGN_OP(ops, T, purge_lazy, UMF_RESULT_ERROR_UNKNOWN);
132-
UMF_ASSIGN_OP(ops, T, purge_force, UMF_RESULT_ERROR_UNKNOWN);
133131
UMF_ASSIGN_OP(ops, T, get_name, "");
132+
UMF_ASSIGN_OP(ops.ext, T, purge_lazy, UMF_RESULT_ERROR_UNKNOWN);
133+
UMF_ASSIGN_OP(ops.ext, T, purge_force, UMF_RESULT_ERROR_UNKNOWN);
134+
UMF_ASSIGN_OP(ops.ext, T, allocation_merge, UMF_RESULT_ERROR_UNKNOWN);
135+
UMF_ASSIGN_OP(ops.ext, T, allocation_split, UMF_RESULT_ERROR_UNKNOWN);
134136

135137
umf_memory_provider_handle_t hProvider = nullptr;
136138
auto ret = umfMemoryProviderCreate(&ops, &argsTuple, &hProvider);
@@ -146,40 +148,32 @@ auto poolMakeUnique(provider_unique_handle_t provider, Args &&...args) {
146148
auto argsTuple = std::make_tuple(std::forward<Args>(args)...);
147149
auto ops = detail::poolMakeUniqueOps<T, decltype(argsTuple)>();
148150

149-
auto hProvider = provider.release();
150-
151-
// capture providers and destroy them after the pool is destroyed
152-
auto poolDestructor = [hProvider](umf_memory_pool_handle_t hPool) {
153-
umfPoolDestroy(hPool);
154-
umfMemoryProviderDestroy(hProvider);
155-
};
156-
157151
umf_memory_pool_handle_t hPool = nullptr;
158-
auto ret = umfPoolCreate(&ops, hProvider, &argsTuple, &hPool);
152+
153+
auto ret = umfPoolCreate(&ops, provider.get(), &argsTuple,
154+
UMF_POOL_CREATE_FLAG_OWN_PROVIDER, &hPool);
155+
if (ret == UMF_RESULT_SUCCESS) {
156+
provider.release(); // pool now owns the provider
157+
}
159158
return std::pair<umf_result_t, pool_unique_handle_t>{
160-
ret, pool_unique_handle_t(hPool, std::move(poolDestructor))};
159+
ret, pool_unique_handle_t(hPool, umfPoolDestroy)};
161160
}
162161

163162
static inline auto poolMakeUniqueFromOps(umf_memory_pool_ops_t *ops,
164163
provider_unique_handle_t provider,
165164
void *params) {
166165
umf_memory_pool_handle_t hPool;
167-
auto ret = umfPoolCreate(ops, provider.get(), params, &hPool);
166+
auto ret = umfPoolCreate(ops, provider.get(), params,
167+
UMF_POOL_CREATE_FLAG_OWN_PROVIDER, &hPool);
168168
if (ret != UMF_RESULT_SUCCESS) {
169169
return std::pair<umf_result_t, pool_unique_handle_t>{
170170
ret, pool_unique_handle_t(nullptr, nullptr)};
171171
}
172172

173-
// capture provider and destroy it after the pool is destroyed
174-
auto poolDestructor =
175-
[provider_handle = provider.release()](umf_memory_pool_handle_t pool) {
176-
umfPoolDestroy(pool);
177-
umfMemoryProviderDestroy(provider_handle);
178-
};
173+
provider.release(); // pool now owns the provider
179174

180175
return std::pair<umf_result_t, pool_unique_handle_t>{
181-
UMF_RESULT_SUCCESS,
182-
pool_unique_handle_t(hPool, std::move(poolDestructor))};
176+
UMF_RESULT_SUCCESS, pool_unique_handle_t(hPool, umfPoolDestroy)};
183177
}
184178

185179
template <typename Type> umf_result_t &getPoolLastStatusRef() {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
urDeviceCreateWithNativeHandleTest.SuccessWithUnOwnedNativeHandle
22
{{OPT}}urDeviceGetGlobalTimestampTest.SuccessSynchronizedTime
3-
urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE
3+
{{OPT}}urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE

0 commit comments

Comments
 (0)