Skip to content

Commit 81866d9

Browse files
author
Hugh Delaney
committed
Add pi entry points
1 parent def7c42 commit 81866d9

File tree

11 files changed

+116
-3
lines changed

11 files changed

+116
-3
lines changed

sycl/include/sycl/detail/host_task_impl.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ class HostTask {
4747
if (HPI)
4848
HPI->end();
4949
}
50+
51+
friend class DispatchHostTask;
5052
};
5153

5254
class CGHostTask : public CG {

sycl/include/sycl/detail/pi.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,4 +227,7 @@ _PI_API(piextVirtualMemUnmap)
227227
_PI_API(piextVirtualMemSetAccess)
228228
_PI_API(piextVirtualMemGetInfo)
229229

230+
// Enqueue native command
231+
_PI_API(piextEnqueueNativeCommand)
232+
230233
#undef _PI_API

sycl/include/sycl/detail/pi.h

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,12 @@
195195
// PI_EXT_ONEAPI_DEVICE_INFO_SUPPORTS_VIRTUAL_MEM device info descriptor,
196196
// _pi_virtual_mem_granularity_info enum, _pi_virtual_mem_info enum and
197197
// pi_virtual_access_flags bit flags.
198+
// 15.55 Added piextEnqueueNativeCommand as well as associated types and enums
199+
200+
198201

199202
#define _PI_H_VERSION_MAJOR 15
200-
#define _PI_H_VERSION_MINOR 54
203+
#define _PI_H_VERSION_MINOR 55
201204

202205
#define _PI_STRING_HELPER(a) #a
203206
#define _PI_CONCAT(a, b) _PI_STRING_HELPER(a.b)
@@ -1279,6 +1282,7 @@ using pi_image_mem_handle = void *;
12791282
using pi_interop_mem_handle = pi_uint64;
12801283
using pi_interop_semaphore_handle = pi_uint64;
12811284
using pi_physical_mem = _pi_physical_mem *;
1285+
using pi_enqueue_native_command_function = void (*)(pi_queue, void *);
12821286

12831287
typedef struct {
12841288
pi_image_channel_order image_channel_order;
@@ -3201,6 +3205,25 @@ __SYCL_EXPORT pi_result piextSignalExternalSemaphore(
32013205
pi_uint32 num_events_in_wait_list, const pi_event *event_wait_list,
32023206
pi_event *event);
32033207

3208+
/// API to enqueue work through a backend API such that the plugin can schedule
3209+
/// the backend API calls within its own DAG.
3210+
///
3211+
/// \param command_queue is the queue instructed to signal
3212+
/// \param fn is the user submitted native function enqueueing work to a
3213+
/// backend API
3214+
/// \param data is the data that will be used in fn
3215+
/// \param num_mems is the number of mems in mem_list
3216+
/// \param mem_list is the list of mems that are used in fn
3217+
/// \param num_events_in_wait_list is the number of events in the wait list
3218+
/// \param event_wait_list is the list of events to wait on before this
3219+
/// operation
3220+
/// \param event is the returned event representing this operation
3221+
__SYCL_EXPORT pi_result piextEnqueueNativeCommand(
3222+
pi_queue command_queue, pi_enqueue_native_command_function fn, void *data,
3223+
pi_uint32 num_mems, const pi_mem *mem_list,
3224+
pi_uint32 num_events_in_wait_list, const pi_event *event_wait_list,
3225+
pi_event *event);
3226+
32043227
typedef enum {
32053228
_PI_SANITIZE_TYPE_NONE = 0x0,
32063229
_PI_SANITIZE_TYPE_ADDRESS = 0x1,

sycl/plugins/cuda/pi_cuda.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1361,6 +1361,16 @@ pi_result piextVirtualMemGetInfo(pi_context context, const void *ptr,
13611361
param_value_size_ret);
13621362
}
13631363

1364+
pi_result
1365+
piextEnqueueNativeCommand(pi_queue Queue, pi_enqueue_native_command_function Fn,
1366+
void *Data, pi_uint32 NumMems, const pi_mem *Mems,
1367+
pi_uint32 NumEventsInWaitList,
1368+
const pi_event *EventWaitList, pi_event *Event) {
1369+
return pi2ur::piextEnqueueNativeCommand(Queue, Fn, Data, NumMems, Mems,
1370+
NumEventsInWaitList, EventWaitList,
1371+
Event);
1372+
}
1373+
13641374
const char SupportedVersion[] = _PI_CUDA_PLUGIN_VERSION_STRING;
13651375

13661376
pi_result piPluginInit(pi_plugin *PluginInit) {

sycl/plugins/hip/pi_hip.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,6 +1364,16 @@ pi_result piextVirtualMemGetInfo(pi_context context, const void *ptr,
13641364
param_value_size_ret);
13651365
}
13661366

1367+
pi_result
1368+
piextEnqueueNativeCommand(pi_queue Queue, pi_enqueue_native_command_function Fn,
1369+
void *Data, pi_uint32 NumMems, const pi_mem *Mems,
1370+
pi_uint32 NumEventsInWaitList,
1371+
const pi_event *EventWaitList, pi_event *Event) {
1372+
return pi2ur::piextEnqueueNativeCommand(Queue, Fn, Data, NumMems, Mems,
1373+
NumEventsInWaitList, EventWaitList,
1374+
Event);
1375+
}
1376+
13671377
const char SupportedVersion[] = _PI_HIP_PLUGIN_VERSION_STRING;
13681378

13691379
pi_result piPluginInit(pi_plugin *PluginInit) {

sycl/plugins/level_zero/pi_level_zero.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1562,6 +1562,16 @@ pi_result piextVirtualMemGetInfo(pi_context Context, const void *Ptr,
15621562
ParamValueSizeRet);
15631563
}
15641564

1565+
pi_result
1566+
piextEnqueueNativeCommand(pi_queue Queue, pi_enqueue_native_command_function Fn,
1567+
void *Data, pi_uint32 NumMems, const pi_mem *Mems,
1568+
pi_uint32 NumEventsInWaitList,
1569+
const pi_event *EventWaitList, pi_event *Event) {
1570+
return pi2ur::piextEnqueueNativeCommand(Queue, Fn, Data, NumMems, Mems,
1571+
NumEventsInWaitList, EventWaitList,
1572+
Event);
1573+
}
1574+
15651575
const char SupportedVersion[] = _PI_LEVEL_ZERO_PLUGIN_VERSION_STRING;
15661576

15671577
pi_result piPluginInit(pi_plugin *PluginInit) { // missing

sycl/plugins/native_cpu/pi_native_cpu.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,6 +1384,16 @@ pi_result piextVirtualMemGetInfo(pi_context context, const void *ptr,
13841384
param_value_size_ret);
13851385
}
13861386

1387+
pi_result
1388+
piextEnqueueNativeCommand(pi_queue Queue, pi_enqueue_native_command_function Fn,
1389+
void *Data, pi_uint32 NumMems, const pi_mem *Mems,
1390+
pi_uint32 NumEventsInWaitList,
1391+
const pi_event *EventWaitList, pi_event *Event) {
1392+
return pi2ur::piextEnqueueNativeCommand(Queue, Fn, Data, NumMems, Mems,
1393+
NumEventsInWaitList, EventWaitList,
1394+
Event);
1395+
}
1396+
13871397
// Initialize function table with stubs.
13881398
#define _PI_API(api) \
13891399
(PluginInit->PiFunctionTable).api = (decltype(&::api))(&api);

sycl/plugins/opencl/pi_opencl.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,6 +1291,16 @@ pi_result piextVirtualMemGetInfo(pi_context Context, const void *Ptr,
12911291
ParamValueSizeRet);
12921292
}
12931293

1294+
pi_result
1295+
piextEnqueueNativeCommand(pi_queue Queue, pi_enqueue_native_command_function Fn,
1296+
void *Data, pi_uint32 NumMems, const pi_mem *Mems,
1297+
pi_uint32 NumEventsInWaitList,
1298+
const pi_event *EventWaitList, pi_event *Event) {
1299+
return pi2ur::piextEnqueueNativeCommand(Queue, Fn, Data, NumMems, Mems,
1300+
NumEventsInWaitList, EventWaitList,
1301+
Event);
1302+
}
1303+
12941304
pi_result piTearDown(void *PluginParameter) {
12951305
return pi2ur::piTearDown(PluginParameter);
12961306
}

sycl/plugins/unified_runtime/pi2ur.hpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5722,7 +5722,6 @@ piextVirtualMemGranularityGetInfo(pi_context Context, pi_device Device,
57225722
HANDLE_ERRORS(urVirtualMemGranularityGetInfo(UrContext, UrDevice, InfoType,
57235723
ParamValueSize, ParamValue,
57245724
ParamValueSizeRet));
5725-
57265725
return PI_SUCCESS;
57275726
}
57285727

@@ -5882,4 +5881,30 @@ inline pi_result piextVirtualMemGetInfo(pi_context Context, const void *Ptr,
58825881
// Virtual Memory
58835882
///////////////////////////////////////////////////////////////////////////////
58845883

5884+
///////////////////////////////////////////////////////////////////////////////
5885+
// Enqueue Native Command Extension
5886+
inline pi_result
5887+
piextEnqueueNativeCommand(pi_queue Queue, pi_enqueue_native_command_function Fn,
5888+
void *Data, pi_uint32 NumMems, const pi_mem *MemList,
5889+
pi_uint32 NumEventsInWaitList,
5890+
const pi_event *EventWaitList, pi_event *Event) {
5891+
PI_ASSERT(Queue, PI_ERROR_INVALID_QUEUE);
5892+
5893+
auto UrQueue = reinterpret_cast<ur_queue_handle_t>(Queue);
5894+
auto UrFn = reinterpret_cast<void (*)(ur_queue_handle_t, void *)>(Fn);
5895+
const ur_mem_handle_t *UrMemList =
5896+
reinterpret_cast<const ur_mem_handle_t *>(MemList);
5897+
const ur_event_handle_t *UrEventWaitList =
5898+
reinterpret_cast<const ur_event_handle_t *>(EventWaitList);
5899+
ur_event_handle_t *UREvent = reinterpret_cast<ur_event_handle_t *>(Event);
5900+
5901+
HANDLE_ERRORS(urEnqueueNativeCommandExp(
5902+
UrQueue, UrFn, Data, NumMems, UrMemList, nullptr /*pProperties*/,
5903+
NumEventsInWaitList, UrEventWaitList, UREvent));
5904+
5905+
return PI_SUCCESS;
5906+
}
5907+
// Enqueue Native Command Extension
5908+
///////////////////////////////////////////////////////////////////////////////
5909+
58855910
} // namespace pi2ur

sycl/plugins/unified_runtime/pi_unified_runtime.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,6 +1447,16 @@ __SYCL_EXPORT pi_result piextSignalExternalSemaphore(
14471447
EventWaitList, Event);
14481448
}
14491449

1450+
pi_result
1451+
piextEnqueueNativeCommand(pi_queue Queue, pi_enqueue_native_command_function Fn,
1452+
void *Data, pi_uint32 NumMems, const pi_mem *Mems,
1453+
pi_uint32 NumEventsInWaitList,
1454+
const pi_event *EventWaitList, pi_event *Event) {
1455+
return pi2ur::piextEnqueueNativeCommand(Queue, Fn, Data, NumMems, Mems,
1456+
NumEventsInWaitList, EventWaitList,
1457+
Event);
1458+
}
1459+
14501460
// This interface is not in Unified Runtime currently
14511461
__SYCL_EXPORT pi_result piPluginInit(pi_plugin *PluginInit) {
14521462
PI_ASSERT(PluginInit, PI_ERROR_INVALID_VALUE);

sycl/source/detail/scheduler/commands.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3195,7 +3195,7 @@ pi_int32 ExecCGCommand::enqueueImpQueue() {
31953195
copySubmissionCodeLocation();
31963196

31973197
MQueue->getThreadPool().submit<DispatchHostTask>(
3198-
DispatchHostTask(this, std::move(ReqToMem)), std::move(ReqPiMem));
3198+
DispatchHostTask(this, std::move(ReqToMem), std::move(ReqPiMem)));
31993199

32003200
MShouldCompleteEventIfPossible = false;
32013201

0 commit comments

Comments
 (0)