Skip to content

Commit 58e4d76

Browse files
authored
Merge pull request #2436 from igchor/umf_params_bump
[UMF] bump UMF version to v0.10.0 and adjust code
2 parents e23a750 + bc5d6a6 commit 58e4d76

File tree

8 files changed

+184
-80
lines changed

8 files changed

+184
-80
lines changed

source/adapters/cuda/usm.cpp

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -403,29 +403,32 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
403403
umf::memoryProviderMakeUnique<USMHostMemoryProvider>(Context, nullptr)
404404
.second;
405405

406+
auto UmfHostParamsHandle = getUmfParamsHandle(
407+
DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host]);
406408
HostMemPool =
407-
umf::poolMakeUniqueFromOps(
408-
umfDisjointPoolOps(), std::move(MemProvider),
409-
&this->DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host])
409+
umf::poolMakeUniqueFromOps(umfDisjointPoolOps(), std::move(MemProvider),
410+
UmfHostParamsHandle.get())
410411
.second;
411412

412413
for (const auto &Device : Context->getDevices()) {
413414
MemProvider =
414415
umf::memoryProviderMakeUnique<USMDeviceMemoryProvider>(Context, Device)
415416
.second;
416-
DeviceMemPool = umf::poolMakeUniqueFromOps(
417-
umfDisjointPoolOps(), std::move(MemProvider),
418-
&this->DisjointPoolConfigs
419-
.Configs[usm::DisjointPoolMemType::Device])
420-
.second;
417+
auto UmfDeviceParamsHandle = getUmfParamsHandle(
418+
DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Device]);
419+
DeviceMemPool =
420+
umf::poolMakeUniqueFromOps(umfDisjointPoolOps(), std::move(MemProvider),
421+
UmfDeviceParamsHandle.get())
422+
.second;
421423
MemProvider =
422424
umf::memoryProviderMakeUnique<USMSharedMemoryProvider>(Context, Device)
423425
.second;
424-
SharedMemPool = umf::poolMakeUniqueFromOps(
425-
umfDisjointPoolOps(), std::move(MemProvider),
426-
&this->DisjointPoolConfigs
427-
.Configs[usm::DisjointPoolMemType::Shared])
428-
.second;
426+
auto UmfSharedParamsHandle = getUmfParamsHandle(
427+
DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Shared]);
428+
SharedMemPool =
429+
umf::poolMakeUniqueFromOps(umfDisjointPoolOps(), std::move(MemProvider),
430+
UmfSharedParamsHandle.get())
431+
.second;
429432
Context->addPool(this);
430433
}
431434
}
@@ -452,6 +455,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urUSMPoolCreate(
452455
new ur_usm_pool_handle_t_(Context, PoolDesc));
453456
} catch (const UsmAllocationException &Ex) {
454457
return Ex.getError();
458+
} catch (umf_result_t e) {
459+
return umf::umf2urResult(e);
460+
} catch (...) {
461+
return UR_RESULT_ERROR_UNKNOWN;
455462
}
456463
return UR_RESULT_SUCCESS;
457464
#else

source/adapters/hip/usm.cpp

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -345,30 +345,33 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
345345
umf::memoryProviderMakeUnique<USMHostMemoryProvider>(Context, nullptr)
346346
.second;
347347

348+
auto UmfHostParamsHandle = getUmfParamsHandle(
349+
DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host]);
348350
HostMemPool =
349-
umf::poolMakeUniqueFromOps(
350-
umfDisjointPoolOps(), std::move(MemProvider),
351-
&this->DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host])
351+
umf::poolMakeUniqueFromOps(umfDisjointPoolOps(), std::move(MemProvider),
352+
UmfHostParamsHandle.get())
352353
.second;
353354

354355
for (const auto &Device : Context->getDevices()) {
355356
MemProvider =
356357
umf::memoryProviderMakeUnique<USMDeviceMemoryProvider>(Context, Device)
357358
.second;
358-
DeviceMemPool = umf::poolMakeUniqueFromOps(
359-
umfDisjointPoolOps(), std::move(MemProvider),
360-
&this->DisjointPoolConfigs
361-
.Configs[usm::DisjointPoolMemType::Device])
362-
.second;
359+
auto UmfDeviceParamsHandle = getUmfParamsHandle(
360+
DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Device]);
361+
DeviceMemPool =
362+
umf::poolMakeUniqueFromOps(umfDisjointPoolOps(), std::move(MemProvider),
363+
UmfDeviceParamsHandle.get())
364+
.second;
363365

364366
MemProvider =
365367
umf::memoryProviderMakeUnique<USMSharedMemoryProvider>(Context, Device)
366368
.second;
367-
SharedMemPool = umf::poolMakeUniqueFromOps(
368-
umfDisjointPoolOps(), std::move(MemProvider),
369-
&this->DisjointPoolConfigs
370-
.Configs[usm::DisjointPoolMemType::Shared])
371-
.second;
369+
auto UmfSharedParamsHandle = getUmfParamsHandle(
370+
DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Shared]);
371+
SharedMemPool =
372+
umf::poolMakeUniqueFromOps(umfDisjointPoolOps(), std::move(MemProvider),
373+
UmfSharedParamsHandle.get())
374+
.second;
372375
Context->addPool(this);
373376
}
374377
}
@@ -395,6 +398,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urUSMPoolCreate(
395398
new ur_usm_pool_handle_t_(Context, PoolDesc));
396399
} catch (const UsmAllocationException &Ex) {
397400
return Ex.getError();
401+
} catch (umf_result_t e) {
402+
return umf::umf2urResult(e);
403+
} catch (...) {
404+
return UR_RESULT_ERROR_UNKNOWN;
398405
}
399406
return UR_RESULT_SUCCESS;
400407
#else

source/adapters/level_zero/context.cpp

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ ur_result_t urContextCreate(
4848
}
4949
} catch (const std::bad_alloc &) {
5050
return UR_RESULT_ERROR_OUT_OF_HOST_MEMORY;
51+
} catch (umf_result_t e) {
52+
return umf::umf2urResult(e);
5153
} catch (...) {
5254
return UR_RESULT_ERROR_UNKNOWN;
5355
}
@@ -196,36 +198,41 @@ ur_result_t ur_context_handle_t_::initialize() {
196198
auto MemProvider = umf::memoryProviderMakeUnique<L0DeviceMemoryProvider>(
197199
reinterpret_cast<ur_context_handle_t>(this), Device)
198200
.second;
201+
auto UmfDeviceParamsHandle = getUmfParamsHandle(
202+
DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Device]);
199203
DeviceMemPools.emplace(
200204
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
201-
std::make_tuple(umf::poolMakeUniqueFromOps(
202-
umfDisjointPoolOps(), std::move(MemProvider),
203-
&DisjointPoolConfigInstance
204-
.Configs[usm::DisjointPoolMemType::Device])
205+
std::make_tuple(umf::poolMakeUniqueFromOps(umfDisjointPoolOps(),
206+
std::move(MemProvider),
207+
UmfDeviceParamsHandle.get())
205208
.second));
206209

207210
MemProvider = umf::memoryProviderMakeUnique<L0SharedMemoryProvider>(
208211
reinterpret_cast<ur_context_handle_t>(this), Device)
209212
.second;
213+
214+
auto UmfSharedParamsHandle = getUmfParamsHandle(
215+
DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Shared]);
210216
SharedMemPools.emplace(
211217
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
212-
std::make_tuple(umf::poolMakeUniqueFromOps(
213-
umfDisjointPoolOps(), std::move(MemProvider),
214-
&DisjointPoolConfigInstance
215-
.Configs[usm::DisjointPoolMemType::Shared])
218+
std::make_tuple(umf::poolMakeUniqueFromOps(umfDisjointPoolOps(),
219+
std::move(MemProvider),
220+
UmfSharedParamsHandle.get())
216221
.second));
217222

218223
MemProvider = umf::memoryProviderMakeUnique<L0SharedReadOnlyMemoryProvider>(
219224
reinterpret_cast<ur_context_handle_t>(this), Device)
220225
.second;
226+
227+
auto UmfSharedROParamsHandle = getUmfParamsHandle(
228+
DisjointPoolConfigInstance
229+
.Configs[usm::DisjointPoolMemType::SharedReadOnly]);
221230
SharedReadOnlyMemPools.emplace(
222231
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
223-
std::make_tuple(
224-
umf::poolMakeUniqueFromOps(
225-
umfDisjointPoolOps(), std::move(MemProvider),
226-
&DisjointPoolConfigInstance
227-
.Configs[usm::DisjointPoolMemType::SharedReadOnly])
228-
.second));
232+
std::make_tuple(umf::poolMakeUniqueFromOps(
233+
umfDisjointPoolOps(), std::move(MemProvider),
234+
UmfSharedROParamsHandle.get())
235+
.second));
229236

230237
MemProvider = umf::memoryProviderMakeUnique<L0DeviceMemoryProvider>(
231238
reinterpret_cast<ur_context_handle_t>(this), Device)
@@ -273,10 +280,11 @@ ur_result_t ur_context_handle_t_::initialize() {
273280
auto MemProvider = umf::memoryProviderMakeUnique<L0HostMemoryProvider>(
274281
reinterpret_cast<ur_context_handle_t>(this), nullptr)
275282
.second;
283+
auto UmfHostParamsHandle = getUmfParamsHandle(
284+
DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Host]);
276285
HostMemPool =
277-
umf::poolMakeUniqueFromOps(
278-
umfDisjointPoolOps(), std::move(MemProvider),
279-
&DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Host])
286+
umf::poolMakeUniqueFromOps(umfDisjointPoolOps(), std::move(MemProvider),
287+
UmfHostParamsHandle.get())
280288
.second;
281289

282290
MemProvider = umf::memoryProviderMakeUnique<L0HostMemoryProvider>(

source/adapters/level_zero/usm.cpp

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,10 @@ ur_result_t urUSMPoolCreate(
709709

710710
} catch (const UsmAllocationException &Ex) {
711711
return Ex.getError();
712+
} catch (umf_result_t e) {
713+
return umf2urResult(e);
714+
} catch (...) {
715+
return UR_RESULT_ERROR_UNKNOWN;
712716
}
713717
return UR_RESULT_SUCCESS;
714718
}
@@ -1051,46 +1055,50 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context,
10511055
umf::memoryProviderMakeUnique<L0HostMemoryProvider>(Context, nullptr)
10521056
.second;
10531057

1058+
auto UmfHostParamsHandle = getUmfParamsHandle(
1059+
DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Host]);
10541060
HostMemPool =
1055-
umf::poolMakeUniqueFromOps(
1056-
umfDisjointPoolOps(), std::move(MemProvider),
1057-
&this->DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host])
1061+
umf::poolMakeUniqueFromOps(umfDisjointPoolOps(), std::move(MemProvider),
1062+
UmfHostParamsHandle.get())
10581063
.second;
10591064

10601065
for (auto device : Context->Devices) {
10611066
MemProvider =
10621067
umf::memoryProviderMakeUnique<L0DeviceMemoryProvider>(Context, device)
10631068
.second;
1069+
auto UmfDeviceParamsHandle = getUmfParamsHandle(
1070+
DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Device]);
10641071
DeviceMemPools.emplace(
10651072
std::piecewise_construct, std::make_tuple(device),
1066-
std::make_tuple(umf::poolMakeUniqueFromOps(
1067-
umfDisjointPoolOps(), std::move(MemProvider),
1068-
&this->DisjointPoolConfigs
1069-
.Configs[usm::DisjointPoolMemType::Device])
1073+
std::make_tuple(umf::poolMakeUniqueFromOps(umfDisjointPoolOps(),
1074+
std::move(MemProvider),
1075+
UmfDeviceParamsHandle.get())
10701076
.second));
10711077

10721078
MemProvider =
10731079
umf::memoryProviderMakeUnique<L0SharedMemoryProvider>(Context, device)
10741080
.second;
1081+
auto UmfSharedParamsHandle = getUmfParamsHandle(
1082+
DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Shared]);
10751083
SharedMemPools.emplace(
10761084
std::piecewise_construct, std::make_tuple(device),
1077-
std::make_tuple(umf::poolMakeUniqueFromOps(
1078-
umfDisjointPoolOps(), std::move(MemProvider),
1079-
&this->DisjointPoolConfigs
1080-
.Configs[usm::DisjointPoolMemType::Shared])
1085+
std::make_tuple(umf::poolMakeUniqueFromOps(umfDisjointPoolOps(),
1086+
std::move(MemProvider),
1087+
UmfSharedParamsHandle.get())
10811088
.second));
10821089

10831090
MemProvider = umf::memoryProviderMakeUnique<L0SharedReadOnlyMemoryProvider>(
10841091
Context, device)
10851092
.second;
1093+
auto UmfSharedROParamsHandle = getUmfParamsHandle(
1094+
DisjointPoolConfigInstance
1095+
.Configs[usm::DisjointPoolMemType::SharedReadOnly]);
10861096
SharedReadOnlyMemPools.emplace(
10871097
std::piecewise_construct, std::make_tuple(device),
1088-
std::make_tuple(
1089-
umf::poolMakeUniqueFromOps(
1090-
umfDisjointPoolOps(), std::move(MemProvider),
1091-
&this->DisjointPoolConfigs
1092-
.Configs[usm::DisjointPoolMemType::SharedReadOnly])
1093-
.second));
1098+
std::make_tuple(umf::poolMakeUniqueFromOps(
1099+
umfDisjointPoolOps(), std::move(MemProvider),
1100+
UmfSharedROParamsHandle.get())
1101+
.second));
10941102
}
10951103
}
10961104

source/adapters/level_zero/v2/usm.cpp

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -82,31 +82,55 @@ descToDisjoinPoolMemType(const usm::pool_descriptor &desc) {
8282
}
8383

8484
static umf::pool_unique_handle_t
85-
makePool(umf_disjoint_pool_params_t *poolParams,
85+
makePool(usm::umf_disjoint_pool_config_t *poolParams,
8686
usm::pool_descriptor poolDescriptor) {
87-
level_zero_memory_provider_params_t params = {};
88-
params.level_zero_context_handle = poolDescriptor.hContext->getZeHandle();
89-
params.level_zero_device_handle =
87+
umf_level_zero_memory_provider_params_handle_t params = NULL;
88+
umf_result_t umf_ret = umfLevelZeroMemoryProviderParamsCreate(&params);
89+
if (umf_ret != UMF_RESULT_SUCCESS) {
90+
throw umf::umf2urResult(umf_ret);
91+
}
92+
93+
umf_ret = umfLevelZeroMemoryProviderParamsSetContext(
94+
params, poolDescriptor.hContext->getZeHandle());
95+
if (umf_ret != UMF_RESULT_SUCCESS) {
96+
throw umf::umf2urResult(umf_ret);
97+
};
98+
99+
ze_device_handle_t level_zero_device_handle =
90100
poolDescriptor.hDevice ? poolDescriptor.hDevice->ZeDevice : nullptr;
91-
params.memory_type = urToUmfMemoryType(poolDescriptor.type);
101+
102+
umf_ret = umfLevelZeroMemoryProviderParamsSetDevice(params,
103+
level_zero_device_handle);
104+
if (umf_ret != UMF_RESULT_SUCCESS) {
105+
throw umf::umf2urResult(umf_ret);
106+
}
107+
108+
umf_ret = umfLevelZeroMemoryProviderParamsSetMemoryType(
109+
params, urToUmfMemoryType(poolDescriptor.type));
110+
if (umf_ret != UMF_RESULT_SUCCESS) {
111+
throw umf::umf2urResult(umf_ret);
112+
}
92113

93114
std::vector<ze_device_handle_t> residentZeHandles;
94115

95116
if (poolDescriptor.type == UR_USM_TYPE_DEVICE) {
96-
assert(params.level_zero_device_handle);
117+
assert(level_zero_device_handle);
97118
auto residentHandles =
98119
poolDescriptor.hContext->getP2PDevices(poolDescriptor.hDevice);
99-
residentZeHandles.push_back(params.level_zero_device_handle);
120+
residentZeHandles.push_back(level_zero_device_handle);
100121
for (auto &device : residentHandles) {
101122
residentZeHandles.push_back(device->ZeDevice);
102123
}
103124

104-
params.resident_device_handles = residentZeHandles.data();
105-
params.resident_device_count = residentZeHandles.size();
125+
umf_ret = umfLevelZeroMemoryProviderParamsSetResidentDevices(
126+
params, residentZeHandles.data(), residentZeHandles.size());
127+
if (umf_ret != UMF_RESULT_SUCCESS) {
128+
throw umf::umf2urResult(umf_ret);
129+
}
106130
}
107131

108132
auto [ret, provider] =
109-
umf::providerMakeUniqueFromOps(umfLevelZeroMemoryProviderOps(), &params);
133+
umf::providerMakeUniqueFromOps(umfLevelZeroMemoryProviderOps(), params);
110134
if (ret != UMF_RESULT_SUCCESS) {
111135
throw umf::umf2urResult(ret);
112136
}
@@ -118,9 +142,11 @@ makePool(umf_disjoint_pool_params_t *poolParams,
118142
throw umf::umf2urResult(ret);
119143
return std::move(poolHandle);
120144
} else {
145+
auto umfParams = getUmfParamsHandle(*poolParams);
146+
121147
auto [ret, poolHandle] =
122148
umf::poolMakeUniqueFromOps(umfDisjointPoolOps(), std::move(provider),
123-
static_cast<void *>(poolParams));
149+
static_cast<void *>(umfParams.get()));
124150
if (ret != UMF_RESULT_SUCCESS)
125151
throw umf::umf2urResult(ret);
126152
return std::move(poolHandle);
@@ -199,10 +225,13 @@ ur_result_t urUSMPoolCreate(
199225
pPoolDesc, ///< [in] pointer to USM pool descriptor. Can be chained with
200226
///< ::ur_usm_pool_limits_desc_t
201227
ur_usm_pool_handle_t *hPool ///< [out] pointer to USM memory pool
202-
) {
203-
228+
) try {
204229
*hPool = new ur_usm_pool_handle_t_(hContext, pPoolDesc);
205230
return UR_RESULT_SUCCESS;
231+
} catch (umf_result_t e) {
232+
return umf::umf2urResult(e);
233+
} catch (...) {
234+
return exceptionToResult(std::current_exception());
206235
}
207236

208237
ur_result_t

source/common/CMakeLists.txt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,10 @@ if (NOT DEFINED UMF_REPO)
3232
endif()
3333

3434
if (NOT DEFINED UMF_TAG)
35-
# special branch with cherry-picks for incoming pulldown
36-
# contains UMF PRs: #866, #924, and #930
37-
# branch was based on commit: 3bae087c9a8c0cbed5bde40f0d5a2
38-
# umf-fixes-nov-pulldown: 25.11.2024: Disable libudev in hwloc builds
39-
set(UMF_TAG a7b6152b7b095c88ddf34bc7d442eb4c2b3f74d6)
35+
# tag v0.10.0
36+
# Tagger: Łukasz Stolarczuk <[email protected]>
37+
# Date: Mon Dec 9 17:01:43 2024 +0100
38+
set(UMF_TAG v0.10.0)
4039
endif()
4140

4241
message(STATUS "Will fetch Unified Memory Framework from ${UMF_REPO}")

source/common/umf_pools/disjoint_pool_config_parser.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,13 @@ constexpr auto operator""_GB(unsigned long long x) -> size_t {
2525
return x * 1024 * 1024 * 1024;
2626
}
2727

28+
umf_disjoint_pool_config_t::umf_disjoint_pool_config_t()
29+
: SlabMinSize(0), MaxPoolableSize(0), Capacity(0),
30+
MinBucketSize(UMF_DISJOINT_POOL_MIN_BUCKET_DEFAULT_SIZE), PoolTrace(0),
31+
SharedLimits(nullptr), Name("disjoint_pool") {}
32+
2833
DisjointPoolAllConfigs::DisjointPoolAllConfigs(int trace) {
2934
for (auto &Config : Configs) {
30-
Config = umfDisjointPoolParamsDefault();
3135
Config.PoolTrace = trace;
3236
}
3337

0 commit comments

Comments
 (0)