Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions sycl/include/sycl/detail/pi.h
Original file line number Diff line number Diff line change
Expand Up @@ -356,8 +356,6 @@ typedef enum {
PI_EXT_INTEL_DEVICE_INFO_MEM_CHANNEL_SUPPORT = 0x20008,
// The number of max registers per block (device specific)
PI_EXT_CODEPLAY_DEVICE_INFO_MAX_REGISTERS_PER_WORK_GROUP = 0x20009,
// Supports command-buffer extension entry-points
PI_EXT_ONEAPI_DEVICE_INFO_COMMAND_BUFFER_SUPPORT = 0x2000A,
} _pi_device_info;

typedef enum {
Expand Down
5 changes: 4 additions & 1 deletion sycl/include/sycl/info/ext_oneapi_device_traits.def
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ __SYCL_PARAM_TRAITS_SPEC(ext::oneapi::experimental,device, max_global_work_group
__SYCL_PARAM_TRAITS_TEMPLATE_SPEC(ext::oneapi::experimental,device, max_work_groups<1>, id<1>, PI_EXT_ONEAPI_DEVICE_INFO_MAX_WORK_GROUPS_1D)
__SYCL_PARAM_TRAITS_TEMPLATE_SPEC(ext::oneapi::experimental,device, max_work_groups<2>, id<2>, PI_EXT_ONEAPI_DEVICE_INFO_MAX_WORK_GROUPS_2D)
__SYCL_PARAM_TRAITS_TEMPLATE_SPEC(ext::oneapi::experimental,device, max_work_groups<3>, id<3>, PI_EXT_ONEAPI_DEVICE_INFO_MAX_WORK_GROUPS_3D)
__SYCL_PARAM_TRAITS_SPEC(ext::oneapi::experimental,device, graph_support, ext::oneapi::experimental::info::device::graph_support_level, PI_EXT_ONEAPI_DEVICE_INFO_COMMAND_BUFFER_SUPPORT)
__SYCL_PARAM_TRAITS_SPEC(
ext::oneapi::experimental, device, graph_support,
ext::oneapi::experimental::info::device::graph_support_level,
0 /* No PI device code needed */)

#ifdef __SYCL_PARAM_TRAITS_TEMPLATE_SPEC_NEEDS_UNDEF
#undef __SYCL_PARAM_TRAITS_TEMPLATE_SPEC
Expand Down
6 changes: 0 additions & 6 deletions sycl/plugins/cuda/pi_cuda.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2175,12 +2175,6 @@ pi_result cuda_piDeviceGetInfo(pi_device device, pi_device_info param_name,
case PI_DEVICE_INFO_GPU_HW_THREADS_PER_EU:
return PI_ERROR_INVALID_VALUE;

case PI_EXT_ONEAPI_DEVICE_INFO_COMMAND_BUFFER_SUPPORT: {
// Using CUDA-Graphs as a backend for PI command-buffers no yet supported
return getInfo<pi_bool>(param_value_size, param_value, param_value_size_ret,
false);
}

default:
__SYCL_PI_HANDLE_UNKNOWN_PARAM_NAME(param_name);
}
Expand Down
3 changes: 0 additions & 3 deletions sycl/plugins/esimd_emulator/pi_esimd_emulator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -843,9 +843,6 @@ pi_result piDeviceGetInfo(pi_device Device, pi_device_info ParamName,
CASE_PI_UNSUPPORTED(PI_EXT_ONEAPI_DEVICE_INFO_MAX_WORK_GROUPS_2D)
CASE_PI_UNSUPPORTED(PI_EXT_ONEAPI_DEVICE_INFO_MAX_WORK_GROUPS_3D)

case PI_EXT_ONEAPI_DEVICE_INFO_COMMAND_BUFFER_SUPPORT:
return ReturnValue(pi_bool{false});

default:
DIE_NO_IMPLEMENTATION;
}
Expand Down
6 changes: 0 additions & 6 deletions sycl/plugins/hip/pi_hip.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2015,12 +2015,6 @@ pi_result hip_piDeviceGetInfo(pi_device device, pi_device_info param_name,
PI_ERROR_INVALID_ARG_VALUE);
return PI_ERROR_PLUGIN_SPECIFIC_ERROR;

case PI_EXT_ONEAPI_DEVICE_INFO_COMMAND_BUFFER_SUPPORT: {
// Using HIP-Graphs as a backend for PI command-buffers no yet supported
return getInfo<pi_bool>(param_value_size, param_value, param_value_size_ret,
false);
}

default:
__SYCL_PI_HANDLE_UNKNOWN_PARAM_NAME(param_name);
}
Expand Down
2 changes: 2 additions & 0 deletions sycl/plugins/level_zero/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ add_sycl_plugin(level_zero
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_queue.hpp"
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_sampler.hpp"
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_usm.hpp"
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_command_buffer.hpp"
"../unified_runtime/ur/adapters/level_zero/ur_level_zero.cpp"
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_common.cpp"
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_context.cpp"
Expand All @@ -124,6 +125,7 @@ add_sycl_plugin(level_zero
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_queue.cpp"
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_sampler.cpp"
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_usm.cpp"
"../unified_runtime/ur/adapters/level_zero/ur_level_zero_command_buffer.cpp"
# Following are the PI Level-Zero Plugin only codes.
"pi_level_zero.cpp"
"pi_level_zero.hpp"
Expand Down
70 changes: 70 additions & 0 deletions sycl/plugins/level_zero/pi_level_zero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1065,6 +1065,76 @@ pi_result piextProgramSetSpecializationConstant(pi_program Prog,
SpecValue);
}

// Command buffer extension
pi_result piextCommandBufferCreate(pi_context Context, pi_device Device,
const pi_ext_command_buffer_desc *Desc,
pi_ext_command_buffer *RetCommandBuffer) {
return pi2ur::piextCommandBufferCreate(Context, Device, Desc,
RetCommandBuffer);
}

pi_result piextCommandBufferRetain(pi_ext_command_buffer CommandBuffer) {
return pi2ur::piextCommandBufferRetain(CommandBuffer);
}

pi_result piextCommandBufferRelease(pi_ext_command_buffer CommandBuffer) {
return pi2ur::piextCommandBufferRelease(CommandBuffer);
}

pi_result piextCommandBufferFinalize(pi_ext_command_buffer CommandBuffer) {
return pi2ur::piextCommandBufferFinalize(CommandBuffer);
}

pi_result piextCommandBufferNDRangeKernel(
pi_ext_command_buffer CommandBuffer, pi_kernel Kernel, pi_uint32 WorkDim,
const size_t *GlobalWorkOffset, const size_t *GlobalWorkSize,
const size_t *LocalWorkSize, pi_uint32 NumSyncPointsInWaitList,
const pi_ext_sync_point *SyncPointWaitList, pi_ext_sync_point *SyncPoint) {
return pi2ur::piextCommandBufferNDRangeKernel(
CommandBuffer, Kernel, WorkDim, GlobalWorkOffset, GlobalWorkSize,
LocalWorkSize, NumSyncPointsInWaitList, SyncPointWaitList, SyncPoint);
}

pi_result piextCommandBufferMemcpyUSM(
pi_ext_command_buffer CommandBuffer, void *DstPtr, const void *SrcPtr,
size_t Size, pi_uint32 NumSyncPointsInWaitList,
const pi_ext_sync_point *SyncPointWaitList, pi_ext_sync_point *SyncPoint) {
return pi2ur::piextCommandBufferMemcpyUSM(CommandBuffer, DstPtr, SrcPtr, Size,
NumSyncPointsInWaitList,
SyncPointWaitList, SyncPoint);
}

pi_result piextCommandBufferMemBufferCopy(
pi_ext_command_buffer CommandBuffer, pi_mem SrcMem, pi_mem DstMem,
size_t SrcOffset, size_t DstOffset, size_t Size,
pi_uint32 NumSyncPointsInWaitList,
const pi_ext_sync_point *SyncPointWaitList, pi_ext_sync_point *SyncPoint) {
return pi2ur::piextCommandBufferMemBufferCopy(
CommandBuffer, SrcMem, DstMem, SrcOffset, DstOffset, Size,
NumSyncPointsInWaitList, SyncPointWaitList, SyncPoint);
}

pi_result piextCommandBufferMemBufferCopyRect(
pi_ext_command_buffer CommandBuffer, pi_mem SrcMem, pi_mem DstMem,
pi_buff_rect_offset SrcOrigin, pi_buff_rect_offset DstOrigin,
pi_buff_rect_region Region, size_t SrcRowPitch, size_t SrcSlicePitch,
size_t DstRowPitch, size_t DstSlicePitch, pi_uint32 NumSyncPointsInWaitList,
const pi_ext_sync_point *SyncPointWaitList, pi_ext_sync_point *SyncPoint) {
return pi2ur::piextCommandBufferMemBufferCopyRect(
CommandBuffer, SrcMem, DstMem, SrcOrigin, DstOrigin, Region, SrcRowPitch,
SrcSlicePitch, DstRowPitch, DstSlicePitch, NumSyncPointsInWaitList,
SyncPointWaitList, SyncPoint);
}

pi_result piextEnqueueCommandBuffer(pi_ext_command_buffer CommandBuffer,
pi_queue Queue,
pi_uint32 NumEventsInWaitList,
const pi_event *EventWaitList,
pi_event *Event) {
return pi2ur::piextEnqueueCommandBuffer(
CommandBuffer, Queue, NumEventsInWaitList, EventWaitList, Event);
}

const char SupportedVersion[] = _PI_LEVEL_ZERO_PLUGIN_VERSION_STRING;

pi_result piPluginInit(pi_plugin *PluginInit) { // missing
Expand Down
8 changes: 0 additions & 8 deletions sycl/plugins/opencl/pi_opencl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -737,14 +737,6 @@ pi_result piDeviceGetInfo(pi_device device, pi_device_info paramName,
return PI_SUCCESS;
}

case PI_EXT_ONEAPI_DEVICE_INFO_COMMAND_BUFFER_SUPPORT: {
// Using cl_khr_command_buffer extensions as a backend for PI
// command-buffers no yet supported
cl_bool result = false;
std::memcpy(paramValue, &result, sizeof(cl_bool));
return PI_SUCCESS;
}

default:
cl_int result = clGetDeviceInfo(
cast<cl_device_id>(device), cast<cl_device_info>(paramName),
Expand Down
6 changes: 4 additions & 2 deletions sycl/plugins/unified_runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
if (NOT DEFINED UNIFIED_RUNTIME_LIBRARY OR NOT DEFINED UNIFIED_RUNTIME_INCLUDE_DIR)
include(FetchContent)

set(UNIFIED_RUNTIME_REPO "https://github.com/oneapi-src/unified-runtime.git")
set(UNIFIED_RUNTIME_TAG 4a9e53b0d7b15d9b0239864d13999f32e6c73bac)
set(UNIFIED_RUNTIME_REPO "https://github.com/bensuo/unified-runtime.git")
set(UNIFIED_RUNTIME_TAG f055b00e70eeaabb5532c1c48dc3c769df6bef57)

message(STATUS "Will fetch Unified Runtime from ${UNIFIED_RUNTIME_REPO}")
FetchContent_Declare(unified-runtime
Expand Down Expand Up @@ -97,6 +97,7 @@ add_sycl_library("ur_adapter_level_zero" SHARED
"ur/adapters/level_zero/ur_level_zero_queue.hpp"
"ur/adapters/level_zero/ur_level_zero_sampler.hpp"
"ur/adapters/level_zero/ur_level_zero_usm.hpp"
"ur/adapters/level_zero/ur_level_zero_command_buffer.hpp"
"ur/adapters/level_zero/ur_level_zero.cpp"
"ur/adapters/level_zero/ur_level_zero_common.cpp"
"ur/adapters/level_zero/ur_level_zero_context.cpp"
Expand All @@ -109,6 +110,7 @@ add_sycl_library("ur_adapter_level_zero" SHARED
"ur/adapters/level_zero/ur_level_zero_queue.cpp"
"ur/adapters/level_zero/ur_level_zero_sampler.cpp"
"ur/adapters/level_zero/ur_level_zero_usm.cpp"
"ur/adapters/level_zero/ur_level_zero_command_buffer.cpp"
INCLUDE_DIRS
${sycl_inc_dir}
LIBRARIES
Expand Down
150 changes: 150 additions & 0 deletions sycl/plugins/unified_runtime/pi2ur.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3937,4 +3937,154 @@ inline pi_result piSamplerRelease(pi_sampler Sampler) {
// Sampler
///////////////////////////////////////////////////////////////////////////////

// Command-buffer extension
///////////////////////////////////////////////////////////////////////////////

inline pi_result
piextCommandBufferCreate(pi_context Context, pi_device Device,
const pi_ext_command_buffer_desc *Desc,
pi_ext_command_buffer *RetCommandBuffer) {
ur_context_handle_t UrContext =
reinterpret_cast<ur_context_handle_t>(Context);
ur_device_handle_t UrDevice = reinterpret_cast<ur_device_handle_t>(Device);
const ur_exp_command_buffer_desc_t *UrDesc =
reinterpret_cast<const ur_exp_command_buffer_desc_t *>(Desc);
ur_exp_command_buffer_handle_t *UrCommandBuffer =
reinterpret_cast<ur_exp_command_buffer_handle_t *>(RetCommandBuffer);

HANDLE_ERRORS(
urCommandBufferCreateExp(UrContext, UrDevice, UrDesc, UrCommandBuffer));
return PI_SUCCESS;
}

inline pi_result piextCommandBufferRetain(pi_ext_command_buffer CommandBuffer) {
ur_exp_command_buffer_handle_t UrCommandBuffer =
reinterpret_cast<ur_exp_command_buffer_handle_t>(CommandBuffer);

HANDLE_ERRORS(urCommandBufferRetainExp(UrCommandBuffer));

return PI_SUCCESS;
}

inline pi_result
piextCommandBufferRelease(pi_ext_command_buffer CommandBuffer) {
ur_exp_command_buffer_handle_t UrCommandBuffer =
reinterpret_cast<ur_exp_command_buffer_handle_t>(CommandBuffer);

HANDLE_ERRORS(urCommandBufferReleaseExp(UrCommandBuffer));

return PI_SUCCESS;
}

inline pi_result
piextCommandBufferFinalize(pi_ext_command_buffer CommandBuffer) {
ur_exp_command_buffer_handle_t UrCommandBuffer =
reinterpret_cast<ur_exp_command_buffer_handle_t>(CommandBuffer);

HANDLE_ERRORS(urCommandBufferFinalizeExp(UrCommandBuffer));

return PI_SUCCESS;
}

inline pi_result piextCommandBufferNDRangeKernel(
pi_ext_command_buffer CommandBuffer, pi_kernel Kernel, pi_uint32 WorkDim,
const size_t *GlobalWorkOffset, const size_t *GlobalWorkSize,
const size_t *LocalWorkSize, pi_uint32 NumSyncPointsInWaitList,
const pi_ext_sync_point *SyncPointWaitList, pi_ext_sync_point *SyncPoint) {
ur_exp_command_buffer_handle_t UrCommandBuffer =
reinterpret_cast<ur_exp_command_buffer_handle_t>(CommandBuffer);

ur_kernel_handle_t UrKernel = reinterpret_cast<ur_kernel_handle_t>(Kernel);

HANDLE_ERRORS(urCommandBufferAppendKernelLaunchExp(
UrCommandBuffer, UrKernel, WorkDim, GlobalWorkOffset, GlobalWorkSize,
LocalWorkSize, NumSyncPointsInWaitList, SyncPointWaitList, SyncPoint));

return PI_SUCCESS;
}

inline pi_result piextCommandBufferMemcpyUSM(
pi_ext_command_buffer CommandBuffer, void *DstPtr, const void *SrcPtr,
size_t Size, pi_uint32 NumSyncPointsInWaitList,
const pi_ext_sync_point *SyncPointWaitList, pi_ext_sync_point *SyncPoint) {
ur_exp_command_buffer_handle_t UrCommandBuffer =
reinterpret_cast<ur_exp_command_buffer_handle_t>(CommandBuffer);

HANDLE_ERRORS(urCommandBufferAppendMemcpyUSMExp(
UrCommandBuffer, DstPtr, SrcPtr, Size, NumSyncPointsInWaitList,
SyncPointWaitList, SyncPoint));

return PI_SUCCESS;
}

inline pi_result piextCommandBufferMemBufferCopy(
pi_ext_command_buffer CommandBuffer, pi_mem SrcMem, pi_mem DstMem,
size_t SrcOffset, size_t DstOffset, size_t Size,
pi_uint32 NumSyncPointsInWaitList,
const pi_ext_sync_point *SyncPointWaitList, pi_ext_sync_point *SyncPoint) {
ur_exp_command_buffer_handle_t UrCommandBuffer =
reinterpret_cast<ur_exp_command_buffer_handle_t>(CommandBuffer);

ur_mem_handle_t UrSrcMem = reinterpret_cast<ur_mem_handle_t>(SrcMem);
ur_mem_handle_t UrDstMem = reinterpret_cast<ur_mem_handle_t>(DstMem);

HANDLE_ERRORS(urCommandBufferAppendMembufferCopyExp(
UrCommandBuffer, UrSrcMem, UrDstMem, SrcOffset, DstOffset, Size,
NumSyncPointsInWaitList, SyncPointWaitList, SyncPoint));

return PI_SUCCESS;
}

inline pi_result piextCommandBufferMemBufferCopyRect(
pi_ext_command_buffer CommandBuffer, pi_mem SrcMem, pi_mem DstMem,
pi_buff_rect_offset SrcOrigin, pi_buff_rect_offset DstOrigin,
pi_buff_rect_region Region, size_t SrcRowPitch, size_t SrcSlicePitch,
size_t DstRowPitch, size_t DstSlicePitch, pi_uint32 NumSyncPointsInWaitList,
const pi_ext_sync_point *SyncPointWaitList, pi_ext_sync_point *SyncPoint) {
ur_exp_command_buffer_handle_t UrCommandBuffer =
reinterpret_cast<ur_exp_command_buffer_handle_t>(CommandBuffer);

ur_mem_handle_t UrSrcMem = reinterpret_cast<ur_mem_handle_t>(SrcMem);
ur_mem_handle_t UrDstMem = reinterpret_cast<ur_mem_handle_t>(DstMem);

ur_rect_offset_t UrSrcOrigin{SrcOrigin->x_bytes, SrcOrigin->y_scalar,
SrcOrigin->z_scalar};
ur_rect_offset_t UrDstOrigin{DstOrigin->x_bytes, DstOrigin->y_scalar,
DstOrigin->z_scalar};
ur_rect_region_t UrRegion{};
UrRegion.depth = Region->depth_scalar;
UrRegion.height = Region->height_scalar;
UrRegion.width = Region->width_bytes;

HANDLE_ERRORS(urCommandBufferAppendMembufferCopyRectExp(
UrCommandBuffer, UrSrcMem, UrDstMem, UrSrcOrigin, UrDstOrigin, UrRegion,
SrcRowPitch, SrcSlicePitch, DstRowPitch, DstSlicePitch,
NumSyncPointsInWaitList, SyncPointWaitList, SyncPoint));

return PI_SUCCESS;
}

inline pi_result piextEnqueueCommandBuffer(pi_ext_command_buffer CommandBuffer,
pi_queue Queue,
pi_uint32 NumEventsInWaitList,
const pi_event *EventWaitList,
pi_event *Event) {

ur_exp_command_buffer_handle_t UrCommandBuffer =
reinterpret_cast<ur_exp_command_buffer_handle_t>(CommandBuffer);

ur_queue_handle_t UrQueue = reinterpret_cast<ur_queue_handle_t>(Queue);
const ur_event_handle_t *UrEventWaitList =
reinterpret_cast<const ur_event_handle_t *>(EventWaitList);
ur_event_handle_t *UrEvent = reinterpret_cast<ur_event_handle_t *>(Event);

HANDLE_ERRORS(urCommandBufferEnqueueExp(
UrCommandBuffer, UrQueue, NumEventsInWaitList, UrEventWaitList, UrEvent));

return PI_SUCCESS;
}

// Command-buffer extension
///////////////////////////////////////////////////////////////////////////////

} // namespace pi2ur
Loading