Skip to content

Commit cfe5912

Browse files
authored
Merge pull request #2308 from igchor/try_catch
[L0 v2] add try/catch to all API functions
2 parents f98289c + 66be018 commit cfe5912

File tree

7 files changed

+224
-77
lines changed

7 files changed

+224
-77
lines changed

scripts/templates/queue_api.cpp.mako

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ from templates import helper as th
2020
*/
2121

2222
#include "queue_api.hpp"
23+
#include "ur_util.hpp"
2324

2425
ur_queue_handle_t_::~ur_queue_handle_t_() {}
2526

@@ -32,8 +33,10 @@ ${th.make_func_name(n, tags, obj)}(
3233
${line}
3334
%endfor
3435
)
35-
{
36+
try {
3637
return ${obj['params'][0]['name']}->${th.transform_queue_related_function_name(n, tags, obj, format=["name"])};
38+
} catch(...) {
39+
return exceptionToResult(std::current_exception());
3740
}
3841
%endfor
3942
}

source/adapters/level_zero/v2/context.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ namespace ur::level_zero {
106106
ur_result_t urContextCreate(uint32_t deviceCount,
107107
const ur_device_handle_t *phDevices,
108108
const ur_context_properties_t *pProperties,
109-
ur_context_handle_t *phContext) {
109+
ur_context_handle_t *phContext) try {
110110
std::ignore = pProperties;
111111

112112
ur_platform_handle_t hPlatform = phDevices[0]->Platform;
@@ -118,43 +118,50 @@ ur_result_t urContextCreate(uint32_t deviceCount,
118118
*phContext =
119119
new ur_context_handle_t_(zeContext, deviceCount, phDevices, true);
120120
return UR_RESULT_SUCCESS;
121+
} catch (...) {
122+
return exceptionToResult(std::current_exception());
121123
}
122124

123125
ur_result_t urContextGetNativeHandle(ur_context_handle_t hContext,
124-
ur_native_handle_t *phNativeContext) {
126+
ur_native_handle_t *phNativeContext) try {
125127
*phNativeContext =
126128
reinterpret_cast<ur_native_handle_t>(hContext->getZeHandle());
127129
return UR_RESULT_SUCCESS;
130+
} catch (...) {
131+
return exceptionToResult(std::current_exception());
128132
}
129133

130134
ur_result_t urContextCreateWithNativeHandle(
131135
ur_native_handle_t hNativeContext, ur_adapter_handle_t, uint32_t numDevices,
132136
const ur_device_handle_t *phDevices,
133137
const ur_context_native_properties_t *pProperties,
134-
ur_context_handle_t *phContext) {
138+
ur_context_handle_t *phContext) try {
135139
auto zeContext = reinterpret_cast<ze_context_handle_t>(hNativeContext);
136140

137141
auto ownZeHandle = pProperties ? pProperties->isNativeHandleOwned : false;
138142

139143
*phContext =
140144
new ur_context_handle_t_(zeContext, numDevices, phDevices, ownZeHandle);
141145
return UR_RESULT_SUCCESS;
146+
} catch (...) {
147+
return exceptionToResult(std::current_exception());
142148
}
143149

144-
ur_result_t urContextRetain(ur_context_handle_t hContext) {
150+
ur_result_t urContextRetain(ur_context_handle_t hContext) try {
145151
return hContext->retain();
152+
} catch (...) {
153+
return exceptionToResult(std::current_exception());
146154
}
147155

148-
ur_result_t urContextRelease(ur_context_handle_t hContext) {
156+
ur_result_t urContextRelease(ur_context_handle_t hContext) try {
149157
return hContext->release();
158+
} catch (...) {
159+
return exceptionToResult(std::current_exception());
150160
}
151161

152162
ur_result_t urContextGetInfo(ur_context_handle_t hContext,
153163
ur_context_info_t contextInfoType, size_t propSize,
154-
155-
void *pContextInfo,
156-
157-
size_t *pPropSizeRet) {
164+
void *pContextInfo, size_t *pPropSizeRet) try {
158165
// No locking needed here, we only read const members
159166

160167
UrReturnHelper ReturnValue(propSize, pContextInfo, pPropSizeRet);
@@ -182,5 +189,7 @@ ur_result_t urContextGetInfo(ur_context_handle_t hContext,
182189
default:
183190
return UR_RESULT_ERROR_INVALID_ENUMERATION;
184191
}
192+
} catch (...) {
193+
return exceptionToResult(std::current_exception());
185194
}
186195
} // namespace ur::level_zero

source/adapters/level_zero/v2/event.cpp

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,24 +153,32 @@ ur_queue_handle_t ur_event_handle_t_::getQueue() const { return hQueue; }
153153
ur_command_t ur_event_handle_t_::getCommandType() const { return commandType; }
154154

155155
namespace ur::level_zero {
156-
ur_result_t urEventRetain(ur_event_handle_t hEvent) { return hEvent->retain(); }
156+
ur_result_t urEventRetain(ur_event_handle_t hEvent) try {
157+
return hEvent->retain();
158+
} catch (...) {
159+
return exceptionToResult(std::current_exception());
160+
}
157161

158-
ur_result_t urEventRelease(ur_event_handle_t hEvent) {
162+
ur_result_t urEventRelease(ur_event_handle_t hEvent) try {
159163
return hEvent->release();
164+
} catch (...) {
165+
return exceptionToResult(std::current_exception());
160166
}
161167

162168
ur_result_t urEventWait(uint32_t numEvents,
163-
const ur_event_handle_t *phEventWaitList) {
169+
const ur_event_handle_t *phEventWaitList) try {
164170
for (uint32_t i = 0; i < numEvents; ++i) {
165171
ZE2UR_CALL(zeEventHostSynchronize,
166172
(phEventWaitList[i]->getZeEvent(), UINT64_MAX));
167173
}
168174
return UR_RESULT_SUCCESS;
175+
} catch (...) {
176+
return exceptionToResult(std::current_exception());
169177
}
170178

171179
ur_result_t urEventGetInfo(ur_event_handle_t hEvent, ur_event_info_t propName,
172180
size_t propValueSize, void *pPropValue,
173-
size_t *pPropValueSizeRet) {
181+
size_t *pPropValueSizeRet) try {
174182
UrReturnHelper returnValue(propValueSize, pPropValue, pPropValueSizeRet);
175183

176184
switch (propName) {
@@ -207,6 +215,8 @@ ur_result_t urEventGetInfo(ur_event_handle_t hEvent, ur_event_info_t propName,
207215
}
208216

209217
return UR_RESULT_SUCCESS;
218+
} catch (...) {
219+
return exceptionToResult(std::current_exception());
210220
}
211221

212222
ur_result_t urEventGetProfilingInfo(
@@ -218,7 +228,7 @@ ur_result_t urEventGetProfilingInfo(
218228
void *pPropValue, ///< [out][optional] value of the profiling property
219229
size_t *pPropValueSizeRet ///< [out][optional] pointer to the actual size in
220230
///< bytes returned in propValue
221-
) {
231+
) try {
222232
std::scoped_lock<ur_shared_mutex> lock(hEvent->Mutex);
223233

224234
// The event must either have profiling enabled or be recording timestamps.
@@ -287,5 +297,7 @@ ur_result_t urEventGetProfilingInfo(
287297
}
288298

289299
return UR_RESULT_SUCCESS;
300+
} catch (...) {
301+
return exceptionToResult(std::current_exception());
290302
}
291303
} // namespace ur::level_zero

source/adapters/level_zero/v2/kernel.cpp

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -315,51 +315,61 @@ std::vector<char> ur_kernel_handle_t_::getSourceAttributes() const {
315315
namespace ur::level_zero {
316316
ur_result_t urKernelCreate(ur_program_handle_t hProgram,
317317
const char *pKernelName,
318-
ur_kernel_handle_t *phKernel) {
318+
ur_kernel_handle_t *phKernel) try {
319319
*phKernel = new ur_kernel_handle_t_(hProgram, pKernelName);
320320
return UR_RESULT_SUCCESS;
321+
} catch (...) {
322+
return exceptionToResult(std::current_exception());
321323
}
322324

323325
ur_result_t urKernelGetNativeHandle(ur_kernel_handle_t hKernel,
324-
ur_native_handle_t *phNativeKernel) {
326+
ur_native_handle_t *phNativeKernel) try {
325327
// Return the handle of the kernel for the first device
326328
*phNativeKernel =
327329
reinterpret_cast<ur_native_handle_t>(hKernel->getNativeZeHandle());
328330
return UR_RESULT_SUCCESS;
331+
} catch (...) {
332+
return exceptionToResult(std::current_exception());
329333
}
330334

331335
ur_result_t
332336
urKernelCreateWithNativeHandle(ur_native_handle_t hNativeKernel,
333337
ur_context_handle_t hContext,
334338
ur_program_handle_t hProgram,
335339
const ur_kernel_native_properties_t *pProperties,
336-
ur_kernel_handle_t *phKernel) {
340+
ur_kernel_handle_t *phKernel) try {
337341
if (!hProgram) {
338342
return UR_RESULT_ERROR_INVALID_NULL_HANDLE;
339343
}
340344

341345
*phKernel =
342346
new ur_kernel_handle_t_(hNativeKernel, hProgram, hContext, pProperties);
343347
return UR_RESULT_SUCCESS;
348+
} catch (...) {
349+
return exceptionToResult(std::current_exception());
344350
}
345351

346352
ur_result_t urKernelRetain(
347353
ur_kernel_handle_t hKernel ///< [in] handle for the Kernel to retain
348-
) {
354+
) try {
349355
hKernel->RefCount.increment();
350356
return UR_RESULT_SUCCESS;
357+
} catch (...) {
358+
return exceptionToResult(std::current_exception());
351359
}
352360

353361
ur_result_t urKernelRelease(
354362
ur_kernel_handle_t hKernel ///< [in] handle for the Kernel to release
355-
) {
363+
) try {
356364
if (!hKernel->RefCount.decrementAndTest())
357365
return UR_RESULT_SUCCESS;
358366

359367
hKernel->release();
360368
delete hKernel;
361369

362370
return UR_RESULT_SUCCESS;
371+
} catch (...) {
372+
return exceptionToResult(std::current_exception());
363373
}
364374

365375
ur_result_t urKernelSetArgValue(
@@ -370,11 +380,13 @@ ur_result_t urKernelSetArgValue(
370380
*pProperties, ///< [in][optional] argument properties
371381
const void
372382
*pArgValue ///< [in] argument value represented as matching arg type.
373-
) {
383+
) try {
374384
TRACK_SCOPE_LATENCY("ur_kernel_handle_t_::setArgValue");
375385

376386
std::scoped_lock<ur_shared_mutex> guard(hKernel->Mutex);
377387
return hKernel->setArgValue(argIndex, argSize, pProperties, pArgValue);
388+
} catch (...) {
389+
return exceptionToResult(std::current_exception());
378390
}
379391

380392
ur_result_t urKernelSetArgPointer(
@@ -384,11 +396,13 @@ ur_result_t urKernelSetArgPointer(
384396
*pProperties, ///< [in][optional] argument properties
385397
const void
386398
*pArgValue ///< [in] argument value represented as matching arg type.
387-
) {
399+
) try {
388400
TRACK_SCOPE_LATENCY("ur_kernel_handle_t_::setArgPointer");
389401

390402
std::scoped_lock<ur_shared_mutex> guard(hKernel->Mutex);
391403
return hKernel->setArgPointer(argIndex, pProperties, pArgValue);
404+
} catch (...) {
405+
return exceptionToResult(std::current_exception());
392406
}
393407

394408
static ur_mem_handle_t_::device_access_mode_t memAccessFromKernelProperties(
@@ -411,7 +425,7 @@ static ur_mem_handle_t_::device_access_mode_t memAccessFromKernelProperties(
411425
ur_result_t
412426
urKernelSetArgMemObj(ur_kernel_handle_t hKernel, uint32_t argIndex,
413427
const ur_kernel_arg_mem_obj_properties_t *pProperties,
414-
ur_mem_handle_t hArgValue) {
428+
ur_mem_handle_t hArgValue) try {
415429
TRACK_SCOPE_LATENCY("ur_kernel_handle_t_::setArgMemObj");
416430

417431
std::scoped_lock<ur_shared_mutex> guard(hKernel->Mutex);
@@ -420,19 +434,23 @@ urKernelSetArgMemObj(ur_kernel_handle_t hKernel, uint32_t argIndex,
420434
{hArgValue, memAccessFromKernelProperties(pProperties), argIndex}));
421435

422436
return UR_RESULT_SUCCESS;
437+
} catch (...) {
438+
return exceptionToResult(std::current_exception());
423439
}
424440

425441
ur_result_t
426442
urKernelSetArgLocal(ur_kernel_handle_t hKernel, uint32_t argIndex,
427443
size_t argSize,
428-
const ur_kernel_arg_local_properties_t *pProperties) {
444+
const ur_kernel_arg_local_properties_t *pProperties) try {
429445
TRACK_SCOPE_LATENCY("ur_kernel_handle_t_::setArgLocal");
430446

431447
std::scoped_lock<ur_shared_mutex> guard(hKernel->Mutex);
432448

433449
std::ignore = pProperties;
434450

435451
return hKernel->setArgValue(argIndex, argSize, nullptr, nullptr);
452+
} catch (...) {
453+
return exceptionToResult(std::current_exception());
436454
}
437455

438456
ur_result_t urKernelSetExecInfo(
@@ -443,13 +461,15 @@ ur_result_t urKernelSetExecInfo(
443461
*pProperties, ///< [in][optional] pointer to execution info properties
444462
const void *pPropValue ///< [in][range(0, propSize)] pointer to memory
445463
///< location holding the property value.
446-
) {
464+
) try {
447465
std::ignore = propSize;
448466
std::ignore = pProperties;
449467

450468
std::scoped_lock<ur_shared_mutex> guard(hKernel->Mutex);
451469

452470
return hKernel->setExecInfo(propName, pPropValue);
471+
} catch (...) {
472+
return exceptionToResult(std::current_exception());
453473
}
454474

455475
ur_result_t urKernelGetGroupInfo(
@@ -463,7 +483,7 @@ ur_result_t urKernelGetGroupInfo(
463483
///< Kernel Work Group property.
464484
size_t *pParamValueSizeRet ///< [out][optional] pointer to the actual size
465485
///< in bytes of data being queried by propName.
466-
) {
486+
) try {
467487
UrReturnHelper returnValue(paramValueSize, pParamValue, pParamValueSizeRet);
468488

469489
// No locking needed here, we only read const members
@@ -529,6 +549,8 @@ ur_result_t urKernelGetGroupInfo(
529549
}
530550
}
531551
return UR_RESULT_SUCCESS;
552+
} catch (...) {
553+
return exceptionToResult(std::current_exception());
532554
}
533555

534556
ur_result_t urKernelGetSubGroupInfo(
@@ -541,7 +563,7 @@ ur_result_t urKernelGetSubGroupInfo(
541563
///< Kernel SubGroup property.
542564
size_t *pPropSizeRet ///< [out][optional] pointer to the actual size in
543565
///< bytes of data being queried by propName.
544-
) {
566+
) try {
545567
UrReturnHelper returnValue(propSize, pPropValue, pPropSizeRet);
546568

547569
auto props = hKernel->getProperties(hDevice);
@@ -560,11 +582,13 @@ ur_result_t urKernelGetSubGroupInfo(
560582
return {};
561583
}
562584
return UR_RESULT_SUCCESS;
585+
} catch (...) {
586+
return exceptionToResult(std::current_exception());
563587
}
564588

565589
ur_result_t urKernelGetInfo(ur_kernel_handle_t hKernel,
566590
ur_kernel_info_t paramName, size_t propSize,
567-
void *pKernelInfo, size_t *pPropSizeRet) {
591+
void *pKernelInfo, size_t *pPropSizeRet) try {
568592

569593
UrReturnHelper ReturnValue(propSize, pKernelInfo, pPropSizeRet);
570594

@@ -596,5 +620,7 @@ ur_result_t urKernelGetInfo(ur_kernel_handle_t hKernel,
596620
}
597621

598622
return UR_RESULT_SUCCESS;
623+
} catch (...) {
624+
return exceptionToResult(std::current_exception());
599625
}
600626
} // namespace ur::level_zero

0 commit comments

Comments
 (0)