Skip to content

Commit 4ee1e63

Browse files
[L0] Add initial USM alloc enqueue API
Co-authored-by: Michał Staniewski <[email protected]>
1 parent ef96130 commit 4ee1e63

File tree

6 files changed

+424
-95
lines changed

6 files changed

+424
-95
lines changed

source/adapters/level_zero/context.cpp

+43
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,17 @@ ur_result_t ur_context_handle_t_::initialize() {
201201
.Configs[usm::DisjointPoolMemType::Device])
202202
.second));
203203

204+
MemProvider = umf::memoryProviderMakeUnique<L0DeviceMemoryProvider>(
205+
reinterpret_cast<ur_context_handle_t>(this), Device)
206+
.second;
207+
AsyncDeviceMemPools.emplace(
208+
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
209+
std::make_tuple(umf::poolMakeUniqueFromOps(
210+
umfDisjointPoolOps(), std::move(MemProvider),
211+
&DisjointPoolConfigInstance
212+
.Configs[usm::DisjointPoolMemType::Device])
213+
.second));
214+
204215
MemProvider = umf::memoryProviderMakeUnique<L0SharedMemoryProvider>(
205216
reinterpret_cast<ur_context_handle_t>(this), Device)
206217
.second;
@@ -212,6 +223,17 @@ ur_result_t ur_context_handle_t_::initialize() {
212223
.Configs[usm::DisjointPoolMemType::Shared])
213224
.second));
214225

226+
MemProvider = umf::memoryProviderMakeUnique<L0SharedMemoryProvider>(
227+
reinterpret_cast<ur_context_handle_t>(this), Device)
228+
.second;
229+
AsyncSharedMemPools.emplace(
230+
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
231+
std::make_tuple(umf::poolMakeUniqueFromOps(
232+
umfDisjointPoolOps(), std::move(MemProvider),
233+
&DisjointPoolConfigInstance
234+
.Configs[usm::DisjointPoolMemType::Shared])
235+
.second));
236+
215237
MemProvider = umf::memoryProviderMakeUnique<L0SharedReadOnlyMemoryProvider>(
216238
reinterpret_cast<ur_context_handle_t>(this), Device)
217239
.second;
@@ -224,6 +246,18 @@ ur_result_t ur_context_handle_t_::initialize() {
224246
.Configs[usm::DisjointPoolMemType::SharedReadOnly])
225247
.second));
226248

249+
MemProvider = umf::memoryProviderMakeUnique<L0SharedReadOnlyMemoryProvider>(
250+
reinterpret_cast<ur_context_handle_t>(this), Device)
251+
.second;
252+
AsyncSharedReadOnlyMemPools.emplace(
253+
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
254+
std::make_tuple(
255+
umf::poolMakeUniqueFromOps(
256+
umfDisjointPoolOps(), std::move(MemProvider),
257+
&DisjointPoolConfigInstance
258+
.Configs[usm::DisjointPoolMemType::SharedReadOnly])
259+
.second));
260+
227261
MemProvider = umf::memoryProviderMakeUnique<L0DeviceMemoryProvider>(
228262
reinterpret_cast<ur_context_handle_t>(this), Device)
229263
.second;
@@ -276,6 +310,15 @@ ur_result_t ur_context_handle_t_::initialize() {
276310
&DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Host])
277311
.second;
278312

313+
MemProvider = umf::memoryProviderMakeUnique<L0HostMemoryProvider>(
314+
reinterpret_cast<ur_context_handle_t>(this), nullptr)
315+
.second;
316+
AsyncHostMemPool =
317+
umf::poolMakeUniqueFromOps(
318+
umfDisjointPoolOps(), std::move(MemProvider),
319+
&DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Host])
320+
.second;
321+
279322
MemProvider = umf::memoryProviderMakeUnique<L0HostMemoryProvider>(
280323
reinterpret_cast<ur_context_handle_t>(this), nullptr)
281324
.second;

source/adapters/level_zero/context.hpp

+9
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,15 @@ struct ur_context_handle_t_ : _ur_object {
124124
SharedReadOnlyMemProxyPools;
125125
umf::pool_unique_handle_t HostMemProxyPool;
126126

127+
// USM pools for async allocations.
128+
std::unordered_map<ze_device_handle_t, umf::pool_unique_handle_t>
129+
AsyncDeviceMemPools;
130+
std::unordered_map<ze_device_handle_t, umf::pool_unique_handle_t>
131+
AsyncSharedMemPools;
132+
std::unordered_map<ze_device_handle_t, umf::pool_unique_handle_t>
133+
AsyncSharedReadOnlyMemPools;
134+
umf::pool_unique_handle_t AsyncHostMemPool;
135+
127136
// Map associating pools created with urUsmPoolCreate and internal pools
128137
std::list<ur_usm_pool_handle_t> UsmPoolHandles{};
129138

source/adapters/level_zero/queue.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1327,7 +1327,7 @@ ur_queue_handle_t_::executeCommandList(ur_command_list_ptr_t CommandList,
13271327
Device->Platform->ContextsMutex, std::defer_lock);
13281328

13291329
if (IndirectAccessTrackingEnabled) {
1330-
// We are going to submit kernels for execution. If indirect access flag is
1330+
// We are going to submit kernels for execution. If indirect access flag is
13311331
// set for a kernel then we need to make a snapshot of existing memory
13321332
// allocations in all contexts in the platform. We need to lock the mutex
13331333
// guarding the list of contexts in the platform to prevent creation of new

0 commit comments

Comments
 (0)