Skip to content

Commit 098381d

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

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
@@ -204,6 +204,17 @@ ur_result_t ur_context_handle_t_::initialize() {
204204
.Configs[usm::DisjointPoolMemType::Device])
205205
.second));
206206

207+
MemProvider = umf::memoryProviderMakeUnique<L0DeviceMemoryProvider>(
208+
reinterpret_cast<ur_context_handle_t>(this), Device)
209+
.second;
210+
AsyncDeviceMemPools.emplace(
211+
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::Device])
216+
.second));
217+
207218
MemProvider = umf::memoryProviderMakeUnique<L0SharedMemoryProvider>(
208219
reinterpret_cast<ur_context_handle_t>(this), Device)
209220
.second;
@@ -215,6 +226,17 @@ ur_result_t ur_context_handle_t_::initialize() {
215226
.Configs[usm::DisjointPoolMemType::Shared])
216227
.second));
217228

229+
MemProvider = umf::memoryProviderMakeUnique<L0SharedMemoryProvider>(
230+
reinterpret_cast<ur_context_handle_t>(this), Device)
231+
.second;
232+
AsyncSharedMemPools.emplace(
233+
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
234+
std::make_tuple(umf::poolMakeUniqueFromOps(
235+
umfDisjointPoolOps(), std::move(MemProvider),
236+
&DisjointPoolConfigInstance
237+
.Configs[usm::DisjointPoolMemType::Shared])
238+
.second));
239+
218240
MemProvider = umf::memoryProviderMakeUnique<L0SharedReadOnlyMemoryProvider>(
219241
reinterpret_cast<ur_context_handle_t>(this), Device)
220242
.second;
@@ -227,6 +249,18 @@ ur_result_t ur_context_handle_t_::initialize() {
227249
.Configs[usm::DisjointPoolMemType::SharedReadOnly])
228250
.second));
229251

252+
MemProvider = umf::memoryProviderMakeUnique<L0SharedReadOnlyMemoryProvider>(
253+
reinterpret_cast<ur_context_handle_t>(this), Device)
254+
.second;
255+
AsyncSharedReadOnlyMemPools.emplace(
256+
std::piecewise_construct, std::make_tuple(Device->ZeDevice),
257+
std::make_tuple(
258+
umf::poolMakeUniqueFromOps(
259+
umfDisjointPoolOps(), std::move(MemProvider),
260+
&DisjointPoolConfigInstance
261+
.Configs[usm::DisjointPoolMemType::SharedReadOnly])
262+
.second));
263+
230264
MemProvider = umf::memoryProviderMakeUnique<L0DeviceMemoryProvider>(
231265
reinterpret_cast<ur_context_handle_t>(this), Device)
232266
.second;
@@ -279,6 +313,15 @@ ur_result_t ur_context_handle_t_::initialize() {
279313
&DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Host])
280314
.second;
281315

316+
MemProvider = umf::memoryProviderMakeUnique<L0HostMemoryProvider>(
317+
reinterpret_cast<ur_context_handle_t>(this), nullptr)
318+
.second;
319+
AsyncHostMemPool =
320+
umf::poolMakeUniqueFromOps(
321+
umfDisjointPoolOps(), std::move(MemProvider),
322+
&DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Host])
323+
.second;
324+
282325
MemProvider = umf::memoryProviderMakeUnique<L0HostMemoryProvider>(
283326
reinterpret_cast<ur_context_handle_t>(this), nullptr)
284327
.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
@@ -1333,7 +1333,7 @@ ur_queue_handle_t_::executeCommandList(ur_command_list_ptr_t CommandList,
13331333
Device->Platform->ContextsMutex, std::defer_lock);
13341334

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

0 commit comments

Comments
 (0)