Skip to content

Commit dc52dce

Browse files
committed
Add to L0v2 and fix compile errors.
1 parent b3fbf72 commit dc52dce

21 files changed

+71
-41
lines changed

unified-runtime/source/adapters/hip/adapter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urAdapterGet(
6969
}
7070

7171
UR_APIEXPORT ur_result_t UR_APICALL urAdapterRelease(ur_adapter_handle_t) {
72-
if (--ur::hip::adapter->getRefCounter().decrement() == 0) {
72+
if (ur::hip::adapter->getRefCounter().decrement() == 0) {
7373
delete ur::hip::adapter;
7474
}
7575

unified-runtime/source/adapters/hip/memory.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ checkSupportedImageChannelType(ur_image_channel_type_t ImageChannelType) {
6363
UR_APIEXPORT ur_result_t UR_APICALL urMemRelease(ur_mem_handle_t hMem) {
6464
try {
6565
// Do nothing if there are other references
66-
if (hMem->decrementReferenceCount() > 0) {
66+
if (hMem->getRefCounter().decrement() > 0) {
6767
return UR_RESULT_SUCCESS;
6868
}
6969

@@ -259,7 +259,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemGetInfo(ur_mem_handle_t hMemory,
259259
return ReturnValue(hMemory->getContext());
260260
}
261261
case UR_MEM_INFO_REFERENCE_COUNT: {
262-
return ReturnValue(hMemory->getReferenceCount());
262+
return ReturnValue(hMemory->getRefCounter().getCount());
263263
}
264264

265265
default:
@@ -439,8 +439,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageGetInfo(ur_mem_handle_t hMemory,
439439
}
440440

441441
UR_APIEXPORT ur_result_t UR_APICALL urMemRetain(ur_mem_handle_t hMem) {
442-
UR_ASSERT(hMem->getReferenceCount() > 0, UR_RESULT_ERROR_INVALID_MEM_OBJECT);
443-
hMem->incrementReferenceCount();
442+
UR_ASSERT(hMem->getRefCounter().getCount() > 0,
443+
UR_RESULT_ERROR_INVALID_MEM_OBJECT);
444+
hMem->getRefCounter().increment();
444445
return UR_RESULT_SUCCESS;
445446
}
446447

unified-runtime/source/adapters/hip/program.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ urProgramGetInfo(ur_program_handle_t hProgram, ur_program_info_t propName,
385385

386386
switch (propName) {
387387
case UR_PROGRAM_INFO_REFERENCE_COUNT:
388-
return ReturnValue(hProgram-- > getRefCounter().getCount());
388+
return ReturnValue(hProgram->getRefCounter().getCount());
389389
case UR_PROGRAM_INFO_CONTEXT:
390390
return ReturnValue(hProgram->Context);
391391
case UR_PROGRAM_INFO_NUM_DEVICES:

unified-runtime/source/adapters/level_zero/v2/command_buffer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,15 +237,15 @@ urCommandBufferCreateExp(ur_context_handle_t context, ur_device_handle_t device,
237237

238238
ur_result_t
239239
urCommandBufferRetainExp(ur_exp_command_buffer_handle_t hCommandBuffer) try {
240-
hCommandBuffer->RefCount.increment();
240+
hCommandBuffer->getRefCounter().increment();
241241
return UR_RESULT_SUCCESS;
242242
} catch (...) {
243243
return exceptionToResult(std::current_exception());
244244
}
245245

246246
ur_result_t
247247
urCommandBufferReleaseExp(ur_exp_command_buffer_handle_t hCommandBuffer) try {
248-
if (!hCommandBuffer->RefCount.decrementAndTest())
248+
if (!hCommandBuffer->getRefCounter().decrement() == 0)
249249
return UR_RESULT_SUCCESS;
250250

251251
delete hCommandBuffer;
@@ -683,7 +683,7 @@ urCommandBufferGetInfoExp(ur_exp_command_buffer_handle_t hCommandBuffer,
683683

684684
switch (propName) {
685685
case UR_EXP_COMMAND_BUFFER_INFO_REFERENCE_COUNT:
686-
return ReturnValue(uint32_t{hCommandBuffer->RefCount.load()});
686+
return ReturnValue(uint32_t{hCommandBuffer->getRefCounter().getCount()});
687687
case UR_EXP_COMMAND_BUFFER_INFO_DESCRIPTOR: {
688688
ur_exp_command_buffer_desc_t Descriptor{};
689689
Descriptor.stype = UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_DESC;

unified-runtime/source/adapters/level_zero/v2/command_buffer.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "../helpers/mutable_helpers.hpp"
1313
#include "command_list_manager.hpp"
1414
#include "common.hpp"
15+
#include "common/ur_ref_counter.hpp"
1516
#include "context.hpp"
1617
#include "kernel.hpp"
1718
#include "lockable.hpp"
@@ -59,6 +60,8 @@ struct ur_exp_command_buffer_handle_t_ : public ur_object {
5960
const ur_exp_command_buffer_sync_point_t *pSyncPointWaitList,
6061
uint32_t numSyncPointsInWaitList);
6162

63+
UR_ReferenceCounter &getRefCounter() noexcept { return RefCounter; }
64+
6265
private:
6366
// Stores all sync points that are created by the command buffer.
6467
std::vector<ur_event_handle_t> syncPoints;
@@ -77,4 +80,6 @@ struct ur_exp_command_buffer_handle_t_ : public ur_object {
7780
bool isFinalized = false;
7881

7982
ur_event_handle_t currentExecution = nullptr;
83+
84+
UR_ReferenceCounter RefCounter;
8085
};

unified-runtime/source/adapters/level_zero/v2/context.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,12 @@ ur_context_handle_t_::ur_context_handle_t_(ze_context_handle_t hContext,
8080
defaultUSMPool(this, nullptr), asyncPool(this, nullptr) {}
8181

8282
ur_result_t ur_context_handle_t_::retain() {
83-
RefCount.increment();
83+
RefCounter.increment();
8484
return UR_RESULT_SUCCESS;
8585
}
8686

8787
ur_result_t ur_context_handle_t_::release() {
88-
if (!RefCount.decrementAndTest())
88+
if (!RefCounter.decrement() == 0)
8989
return UR_RESULT_SUCCESS;
9090

9191
delete this;
@@ -191,7 +191,7 @@ ur_result_t urContextGetInfo(ur_context_handle_t hContext,
191191
case UR_CONTEXT_INFO_NUM_DEVICES:
192192
return ReturnValue(uint32_t(hContext->getDevices().size()));
193193
case UR_CONTEXT_INFO_REFERENCE_COUNT:
194-
return ReturnValue(uint32_t{hContext->RefCount.load()});
194+
return ReturnValue(uint32_t{hContext->getRefCounter().getCount()});
195195
case UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT:
196196
// TODO: this is currently not implemented
197197
return ReturnValue(uint8_t{false});

unified-runtime/source/adapters/level_zero/v2/context.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
#include "command_list_cache.hpp"
1616
#include "common.hpp"
17+
#include "common/ur_ref_counter.hpp"
18+
1719
#include "event_pool_cache.hpp"
1820
#include "usm.hpp"
1921

@@ -53,6 +55,8 @@ struct ur_context_handle_t_ : ur_object {
5355
// For that the Device or its root devices need to be in the context.
5456
bool isValidDevice(ur_device_handle_t Device) const;
5557

58+
UR_ReferenceCounter &getRefCounter() noexcept { return RefCounter; }
59+
5660
private:
5761
const v2::raii::ze_context_handle_t hContext;
5862
const std::vector<ur_device_handle_t> hDevices;
@@ -69,4 +73,6 @@ struct ur_context_handle_t_ : ur_object {
6973

7074
ur_usm_pool_handle_t_ defaultUSMPool;
7175
ur_usm_pool_handle_t_ asyncPool;
76+
77+
UR_ReferenceCounter RefCounter;
7278
};

unified-runtime/source/adapters/level_zero/v2/event.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,12 +158,12 @@ ze_event_handle_t ur_event_handle_t_::getZeEvent() const {
158158
}
159159

160160
ur_result_t ur_event_handle_t_::retain() {
161-
RefCount.increment();
161+
RefCounter.increment();
162162
return UR_RESULT_SUCCESS;
163163
}
164164

165165
ur_result_t ur_event_handle_t_::release() {
166-
if (!RefCount.decrementAndTest())
166+
if (!RefCounter.decrement() == 0)
167167
return UR_RESULT_SUCCESS;
168168

169169
if (event_pool) {
@@ -256,7 +256,7 @@ ur_result_t urEventGetInfo(ur_event_handle_t hEvent, ur_event_info_t propName,
256256
}
257257
}
258258
case UR_EVENT_INFO_REFERENCE_COUNT: {
259-
return returnValue(hEvent->RefCount.load());
259+
return returnValue(hEvent->getRefCounter().increment());
260260
}
261261
case UR_EVENT_INFO_COMMAND_QUEUE: {
262262
auto urQueueHandle = reinterpret_cast<uintptr_t>(hEvent->getQueue()) -

unified-runtime/source/adapters/level_zero/v2/event.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "adapters/level_zero/v2/queue_api.hpp"
1919
#include "common.hpp"
20+
#include "common/ur_ref_counter.hpp"
2021
#include "event_provider.hpp"
2122

2223
namespace v2 {
@@ -111,10 +112,14 @@ struct ur_event_handle_t_ : ur_object {
111112
uint64_t getEventStartTimestmap() const;
112113
uint64_t getEventEndTimestamp();
113114

115+
UR_ReferenceCounter &getRefCounter() noexcept { return RefCounter; }
116+
114117
private:
115118
ur_event_handle_t_(ur_context_handle_t hContext, event_variant hZeEvent,
116119
v2::event_flags_t flags, v2::event_pool *pool);
117120

121+
UR_ReferenceCounter RefCounter;
122+
118123
protected:
119124
ur_context_handle_t hContext;
120125

unified-runtime/source/adapters/level_zero/v2/event_pool.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ void event_pool::free(ur_event_handle_t event) {
5151
freelist.push_back(event);
5252

5353
// The event is still in the pool, so we need to increment the refcount
54-
assert(event->RefCount.load() == 0);
55-
event->RefCount.increment();
54+
assert(event->getRefCounter().getCount() == 0);
55+
event->getRefCounter().increment();
5656
}
5757

5858
event_provider *event_pool::getProvider() const { return provider.get(); }

unified-runtime/source/adapters/level_zero/v2/kernel.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ ur_kernel_handle_t_::ur_kernel_handle_t_(
9797
}
9898

9999
ur_result_t ur_kernel_handle_t_::release() {
100-
if (!RefCount.decrementAndTest())
100+
if (!RefCounter.decrement() == 0)
101101
return UR_RESULT_SUCCESS;
102102

103103
// manually release kernels to allow errors to be propagated
@@ -370,7 +370,7 @@ urKernelCreateWithNativeHandle(ur_native_handle_t hNativeKernel,
370370
ur_result_t urKernelRetain(
371371
/// [in] handle for the Kernel to retain
372372
ur_kernel_handle_t hKernel) try {
373-
hKernel->RefCount.increment();
373+
hKernel->getRefCounter().increment();
374374
return UR_RESULT_SUCCESS;
375375
} catch (...) {
376376
return exceptionToResult(std::current_exception());
@@ -634,7 +634,7 @@ ur_result_t urKernelGetInfo(ur_kernel_handle_t hKernel,
634634
spills.size());
635635
}
636636
case UR_KERNEL_INFO_REFERENCE_COUNT:
637-
return ReturnValue(uint32_t{hKernel->RefCount.load()});
637+
return ReturnValue(uint32_t{hKernel->getRefCounter().getCount()});
638638
case UR_KERNEL_INFO_ATTRIBUTES: {
639639
auto attributes = hKernel->getSourceAttributes();
640640
return ReturnValue(static_cast<const char *>(attributes.data()));

unified-runtime/source/adapters/level_zero/v2/kernel.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "../program.hpp"
1414

1515
#include "common.hpp"
16+
#include "common/ur_ref_counter.hpp"
1617
#include "memory.hpp"
1718

1819
struct ur_single_device_kernel_t {
@@ -91,6 +92,8 @@ struct ur_kernel_handle_t_ : ur_object {
9192
ze_command_list_handle_t cmdList,
9293
wait_list_view &waitListView);
9394

95+
UR_ReferenceCounter &getRefCounter() noexcept { return RefCounter; }
96+
9497
private:
9598
// Keep the program of the kernel.
9699
const ur_program_handle_t hProgram;
@@ -116,4 +119,6 @@ struct ur_kernel_handle_t_ : ur_object {
116119

117120
// pointer to any non-null kernel in deviceKernels
118121
ur_single_device_kernel_t *nonEmptyKernel;
122+
123+
UR_ReferenceCounter RefCounter;
119124
};

unified-runtime/source/adapters/level_zero/v2/memory.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ ur_result_t urMemGetInfo(ur_mem_handle_t hMem, ur_mem_info_t propName,
671671
return returnValue(size_t{hMem->getBuffer()->getSize()});
672672
}
673673
case UR_MEM_INFO_REFERENCE_COUNT: {
674-
return returnValue(hMem->getObject()->RefCount.load());
674+
return returnValue(hMem->getRefCounter().getCount());
675675
}
676676
default: {
677677
return UR_RESULT_ERROR_INVALID_ENUMERATION;
@@ -684,14 +684,14 @@ ur_result_t urMemGetInfo(ur_mem_handle_t hMem, ur_mem_info_t propName,
684684
}
685685

686686
ur_result_t urMemRetain(ur_mem_handle_t hMem) try {
687-
hMem->getObject()->RefCount.increment();
687+
hMem->getRefCounter().increment();
688688
return UR_RESULT_SUCCESS;
689689
} catch (...) {
690690
return exceptionToResult(std::current_exception());
691691
}
692692

693693
ur_result_t urMemRelease(ur_mem_handle_t hMem) try {
694-
if (!hMem->getObject()->RefCount.decrementAndTest())
694+
if (!hMem->getRefCounter().decrement() == 0)
695695
return UR_RESULT_SUCCESS;
696696

697697
delete hMem;

unified-runtime/source/adapters/level_zero/v2/memory.hpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "../image_common.hpp"
2020
#include "command_list_manager.hpp"
2121
#include "common.hpp"
22+
#include "common/ur_ref_counter.hpp"
2223
#include "lockable.hpp"
2324

2425
using usm_unique_ptr_t = std::unique_ptr<void, std::function<void(void *)>>;
@@ -280,16 +281,10 @@ struct ur_mem_handle_t_ : ur::handle_base<ur::level_zero::ddi_getter> {
280281
mem);
281282
}
282283

283-
ur_object *getObject() {
284-
return std::visit(
285-
[](auto &&arg) -> ur_object * {
286-
return static_cast<ur_object *>(&arg);
287-
},
288-
mem);
289-
}
290-
291284
bool isImage() const { return std::holds_alternative<ur_mem_image_t>(mem); }
292285

286+
UR_ReferenceCounter &getRefCounter() noexcept { return RefCounter; }
287+
293288
private:
294289
template <typename T, typename... Args>
295290
ur_mem_handle_t_(std::in_place_type_t<T>, Args &&...args)
@@ -300,4 +295,6 @@ struct ur_mem_handle_t_ : ur::handle_base<ur::level_zero::ddi_getter> {
300295
ur_discrete_buffer_handle_t, ur_shared_buffer_handle_t,
301296
ur_mem_sub_buffer_t, ur_mem_image_t>
302297
mem;
298+
299+
UR_ReferenceCounter RefCounter;
303300
};

unified-runtime/source/adapters/level_zero/v2/queue_handle.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ struct ur_queue_handle_t_ : ur::handle_base<ur::level_zero::ddi_getter> {
4848
ur_result_t queueRetain() {
4949
return std::visit(
5050
[](auto &q) {
51-
q.RefCount.increment();
51+
q.getRefCounter().increment();
5252
return UR_RESULT_SUCCESS;
5353
},
5454
queue_data);
@@ -57,7 +57,7 @@ struct ur_queue_handle_t_ : ur::handle_base<ur::level_zero::ddi_getter> {
5757
ur_result_t queueRelease() {
5858
return std::visit(
5959
[queueHandle = this](auto &q) {
60-
if (!q.RefCount.decrementAndTest())
60+
if (!q.getRefCounter().decrement() == 0)
6161
return UR_RESULT_SUCCESS;
6262
delete queueHandle;
6363
return UR_RESULT_SUCCESS;

unified-runtime/source/adapters/level_zero/v2/queue_immediate_in_order.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ ur_queue_immediate_in_order_t::queueGetInfo(ur_queue_info_t propName,
113113
case UR_QUEUE_INFO_DEVICE:
114114
return ReturnValue(hDevice);
115115
case UR_QUEUE_INFO_REFERENCE_COUNT:
116-
return ReturnValue(uint32_t{RefCount.load()});
116+
return ReturnValue(uint32_t{RefCounter.getCount()});
117117
case UR_QUEUE_INFO_FLAGS:
118118
return ReturnValue(flags);
119119
case UR_QUEUE_INFO_SIZE:
@@ -173,7 +173,7 @@ ur_result_t ur_queue_immediate_in_order_t::queueFinish() {
173173
void ur_queue_immediate_in_order_t::recordSubmittedKernel(
174174
ur_kernel_handle_t hKernel) {
175175
submittedKernels.push_back(hKernel);
176-
hKernel->RefCount.increment();
176+
hKernel->getRefCounter().increment();
177177
}
178178

179179
ur_result_t ur_queue_immediate_in_order_t::queueFlush() {
@@ -852,7 +852,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueUSMFreeExp(
852852
if (internalEvent == nullptr) {
853853
// When the output event is used instead of an internal event, we need to
854854
// increment the refcount.
855-
(*phEvent)->RefCount.increment();
855+
(*phEvent)->getRefCounter().increment();
856856
}
857857

858858
if (numWaitEvents > 0) {

unified-runtime/source/adapters/level_zero/v2/queue_immediate_in_order.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include "../common.hpp"
1313
#include "../device.hpp"
14+
#include "common/ur_ref_counter.hpp"
1415

1516
#include "context.hpp"
1617
#include "event.hpp"
@@ -284,6 +285,11 @@ struct ur_queue_immediate_in_order_t : ur_object, public ur_queue_t_ {
284285
const ur_exp_enqueue_native_command_properties_t *,
285286
uint32_t, const ur_event_handle_t *,
286287
ur_event_handle_t *) override;
288+
289+
UR_ReferenceCounter &getRefCounter() noexcept { return RefCounter; }
290+
291+
private:
292+
UR_ReferenceCounter RefCounter;
287293
};
288294

289295
} // namespace v2

0 commit comments

Comments
 (0)