Skip to content
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ad32ada
Initial argument handling implementation
alexbatashev Jun 19, 2021
81a134e
A bit refined implementation
alexbatashev Jun 22, 2021
9b6d5a1
improved comment
alexbatashev Jun 22, 2021
ae4c35d
Minor cleanup
alexbatashev Jun 22, 2021
0d3a580
more cleanup
alexbatashev Jun 22, 2021
a5792a2
more stylistic changes
alexbatashev Jun 22, 2021
a283c03
more file headers
alexbatashev Jun 22, 2021
08702b5
clang-format
alexbatashev Jun 22, 2021
df846f9
remove unused include
alexbatashev Jun 22, 2021
3603bda
fix build
alexbatashev Jun 22, 2021
ab7fba6
More clang-format
alexbatashev Jun 22, 2021
cb248c1
Add arguments for function end as well
alexbatashev Jun 22, 2021
3118d0c
get rid of piapiid
alexbatashev Jun 23, 2021
571b6c4
clang-format
alexbatashev Jun 23, 2021
71805c1
more clang-format
alexbatashev Jun 23, 2021
3151a63
address more feedback
alexbatashev Jun 24, 2021
224d802
Merge remote-tracking branch 'upstream/sycl' into xpti_pi_args
alexbatashev Jun 24, 2021
9775db1
make CI a bit happier
alexbatashev Jun 24, 2021
22ded67
more review feedback
alexbatashev Jun 24, 2021
0b6a5bb
why local and remote clang-format do it differently?
alexbatashev Jun 24, 2021
7a3cde1
remove tuple_view
alexbatashev Jun 30, 2021
47ee4c4
more feedback
alexbatashev Jul 2, 2021
b236f2c
Merge remote-tracking branch 'upstream/sycl' into xpti_pi_args
alexbatashev Jul 2, 2021
57e287f
use template magic instead of changing pi.def
alexbatashev Jul 6, 2021
2e3321b
clang-format
alexbatashev Jul 6, 2021
0b08a09
slight changes to xpti interfaces
alexbatashev Jul 8, 2021
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
3 changes: 3 additions & 0 deletions sycl/include/CL/sycl/detail/common.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ namespace detail {
constexpr const char *SYCL_STREAM_NAME = "sycl";
// Stream name being used for traces generated from the SYCL plugin layer
constexpr const char *SYCL_PICALL_STREAM_NAME = "sycl.pi";
// Stream name being used for traces generated from PI calls. This stream
// contains information about function arguments.
constexpr const char *SYCL_PIARGCALL_STREAM_NAME = "sycl.pi.arg";
// Data structure that captures the user code location information using the
// builtin capabilities of the compiler
struct code_location {
Expand Down
290 changes: 185 additions & 105 deletions sycl/include/CL/sycl/detail/pi.def
Original file line number Diff line number Diff line change
Expand Up @@ -10,127 +10,207 @@
#error Undefined _PI_API macro expansion
#endif

// The list of all PI interfaces wrapped with _PI_API macro.
// The list of all PI interfaces and their arguments wrapped with _PI_API macro.
// This is for convinience of doing same thing for all interfaces, e.g.
// declare, define, initialize.
//
// This list is used to define PiApiKind enum, which is part of external
// interface. To avoid ABI breakage, please, add new entries to the end of the
// list.
//
// Platform
_PI_API(piPlatformsGet)
_PI_API(piPlatformGetInfo)
_PI_API(piextPlatformGetNativeHandle)
_PI_API(piextPlatformCreateWithNativeHandle)
_PI_API(piPlatformsGet, pi_uint32, pi_platform *, pi_uint32 *)
_PI_API(piPlatformGetInfo, pi_platform, pi_platform_info, size_t, void *,
size_t *)
_PI_API(piextPlatformGetNativeHandle, pi_platform, pi_native_handle *)
_PI_API(piextPlatformCreateWithNativeHandle, pi_native_handle, pi_platform *)
// Device
_PI_API(piDevicesGet)
_PI_API(piDeviceGetInfo)
_PI_API(piDevicePartition)
_PI_API(piDeviceRetain)
_PI_API(piDeviceRelease)
_PI_API(piextDeviceSelectBinary)
_PI_API(piextGetDeviceFunctionPointer)
_PI_API(piextDeviceGetNativeHandle)
_PI_API(piextDeviceCreateWithNativeHandle)
_PI_API(piDevicesGet, pi_platform, pi_device_type, pi_uint32, pi_device *,
pi_uint32 *)
_PI_API(piDeviceGetInfo, pi_device, pi_device_info, size_t, void *, size_t *)
_PI_API(piDevicePartition, pi_device, const pi_device_partition_property *,
pi_uint32, pi_device *, pi_uint32 *)
_PI_API(piDeviceRetain, pi_device)
_PI_API(piDeviceRelease, pi_device)
_PI_API(piextDeviceSelectBinary, pi_device, pi_device_binary *, pi_uint32,
pi_uint32 *)
_PI_API(piextGetDeviceFunctionPointer, pi_device, pi_program, const char *,
pi_uint64 *)
_PI_API(piextDeviceGetNativeHandle, pi_device, pi_native_handle *)
_PI_API(piextDeviceCreateWithNativeHandle, pi_native_handle, pi_platform,
pi_device *)
// Context
_PI_API(piContextCreate)
_PI_API(piContextGetInfo)
_PI_API(piContextRetain)
_PI_API(piContextRelease)
_PI_API(piextContextSetExtendedDeleter)
_PI_API(piextContextGetNativeHandle)
_PI_API(piextContextCreateWithNativeHandle)
_PI_API(piContextCreate, const pi_context_properties *, pi_uint32,
const pi_device *,
void (*)(const char *, const void *, size_t, void *),
void *, pi_context *)
_PI_API(piContextGetInfo, pi_context, pi_context_info, size_t, void *, size_t *)
_PI_API(piContextRetain, pi_context)
_PI_API(piContextRelease, pi_context)
_PI_API(piextContextSetExtendedDeleter, pi_context, pi_context_extended_deleter,
void *)
_PI_API(piextContextGetNativeHandle, pi_context, pi_native_handle *)
_PI_API(piextContextCreateWithNativeHandle, pi_native_handle, pi_uint32,
const pi_device *, bool,
pi_context *)
// Queue
_PI_API(piQueueCreate)
_PI_API(piQueueGetInfo)
_PI_API(piQueueFinish)
_PI_API(piQueueRetain)
_PI_API(piQueueRelease)
_PI_API(piextQueueGetNativeHandle)
_PI_API(piextQueueCreateWithNativeHandle)
_PI_API(piQueueCreate, pi_context, pi_device, pi_queue_properties, pi_queue *)
_PI_API(piQueueGetInfo, pi_queue, pi_queue_info, size_t, void *, size_t *)
_PI_API(piQueueFinish, pi_queue)
_PI_API(piQueueRetain, pi_queue)
_PI_API(piQueueRelease, pi_queue)
_PI_API(piextQueueGetNativeHandle, pi_queue, pi_native_handle *)
_PI_API(piextQueueCreateWithNativeHandle, pi_native_handle, pi_context,
pi_queue *)
// Memory
_PI_API(piMemBufferCreate)
_PI_API(piMemImageCreate)
_PI_API(piMemGetInfo)
_PI_API(piMemImageGetInfo)
_PI_API(piMemRetain)
_PI_API(piMemRelease)
_PI_API(piMemBufferPartition)
_PI_API(piextMemGetNativeHandle)
_PI_API(piextMemCreateWithNativeHandle)
_PI_API(piMemBufferCreate, pi_context, pi_mem_flags, size_t, void *, pi_mem *,
const pi_mem_properties *)
_PI_API(piMemImageCreate, pi_context, pi_mem_flags, const pi_image_format *,
const pi_image_desc *, void *, pi_mem *)
_PI_API(piMemGetInfo, pi_mem, cl_mem_info, size_t, void *, size_t *)
_PI_API(piMemImageGetInfo, pi_mem, pi_image_info, size_t, void *, size_t *)
_PI_API(piMemRetain, pi_mem)
_PI_API(piMemRelease, pi_mem)
_PI_API(piMemBufferPartition, pi_mem, pi_mem_flags, pi_buffer_create_type,
void *, pi_mem *)
_PI_API(piextMemGetNativeHandle, pi_mem, pi_native_handle *)
_PI_API(piextMemCreateWithNativeHandle, pi_native_handle, pi_mem *)
// Program
_PI_API(piProgramCreate)
_PI_API(piclProgramCreateWithSource)
_PI_API(piProgramCreateWithBinary)
_PI_API(piProgramGetInfo)
_PI_API(piProgramCompile)
_PI_API(piProgramBuild)
_PI_API(piProgramLink)
_PI_API(piProgramGetBuildInfo)
_PI_API(piProgramRetain)
_PI_API(piProgramRelease)
_PI_API(piextProgramSetSpecializationConstant)
_PI_API(piextProgramGetNativeHandle)
_PI_API(piextProgramCreateWithNativeHandle)
_PI_API(piProgramCreate, pi_context, const void *, size_t, pi_program *)
_PI_API(piclProgramCreateWithSource, pi_context, pi_uint32, const char **,
const size_t, pi_program *)
_PI_API(piProgramCreateWithBinary, pi_context, pi_uint32, const pi_device *,
const size_t *, const unsigned char **,
pi_uint32 *, pi_program *)
_PI_API(piProgramGetInfo, pi_program, pi_program_info, size_t, void *, size_t *)
_PI_API(piProgramCompile, pi_program, pi_uint32, const pi_device *,
const char *, pi_uint32, const pi_program *,
const char **, void (*)(pi_program, void *), void *)
_PI_API(piProgramBuild, pi_program, pi_uint32, const pi_device *,
const char *, void (*)(pi_program, void *), void *)
_PI_API(piProgramLink, pi_context, pi_uint32, const pi_device *,
const char *, pi_uint32, const pi_program *,
void (*)(pi_program, void *), void *, pi_program *)
_PI_API(piProgramGetBuildInfo, pi_program, pi_device, cl_program_build_info,
size_t, void *, size_t *)
_PI_API(piProgramRetain, pi_program)
_PI_API(piProgramRelease, pi_program)
_PI_API(piextProgramSetSpecializationConstant, pi_program, pi_uint32, size_t,
const void *)
_PI_API(piextProgramGetNativeHandle, pi_program, pi_native_handle *)
_PI_API(piextProgramCreateWithNativeHandle, pi_native_handle, pi_context,
pi_program *)
// Kernel
_PI_API(piKernelCreate)
_PI_API(piKernelSetArg)
_PI_API(piKernelGetInfo)
_PI_API(piKernelGetGroupInfo)
_PI_API(piKernelGetSubGroupInfo)
_PI_API(piKernelRetain)
_PI_API(piKernelRelease)
_PI_API(piextKernelSetArgPointer)
_PI_API(piKernelSetExecInfo)
_PI_API(piextKernelCreateWithNativeHandle)
_PI_API(piextKernelGetNativeHandle)
_PI_API(piKernelCreate, pi_program, const char *, pi_kernel *)
_PI_API(piKernelSetArg, pi_kernel, pi_uint32, size_t, const void *)
_PI_API(piKernelGetInfo, pi_kernel, pi_kernel_info, size_t, void *, size_t *)
_PI_API(piKernelGetGroupInfo, pi_kernel, pi_device, pi_kernel_group_info, size_t,
void *, size_t *)
_PI_API(piKernelGetSubGroupInfo, pi_kernel, pi_device, pi_kernel_sub_group_info,
size_t, const void *, size_t, void *, size_t *)
_PI_API(piKernelRetain, pi_kernel)
_PI_API(piKernelRelease, pi_kernel)
_PI_API(piextKernelSetArgPointer, pi_kernel, pi_uint32, size_t, const void *)
_PI_API(piKernelSetExecInfo, pi_kernel, pi_kernel_exec_info, size_t,
const void *)
_PI_API(piextKernelCreateWithNativeHandle, pi_native_handle, pi_context, bool,
pi_kernel *)
_PI_API(piextKernelGetNativeHandle, pi_kernel, pi_native_handle *)
// Event
_PI_API(piEventCreate)
_PI_API(piEventGetInfo)
_PI_API(piEventGetProfilingInfo)
_PI_API(piEventsWait)
_PI_API(piEventSetCallback)
_PI_API(piEventSetStatus)
_PI_API(piEventRetain)
_PI_API(piEventRelease)
_PI_API(piextEventGetNativeHandle)
_PI_API(piextEventCreateWithNativeHandle)
_PI_API(piEventCreate, pi_context, pi_event *)
_PI_API(piEventGetInfo, pi_event, pi_event_info, size_t, void *, size_t *)
_PI_API(piEventGetProfilingInfo, pi_event, pi_profiling_info, size_t, void *,
size_t *)
_PI_API(piEventsWait, pi_uint32, const pi_event *)
_PI_API(piEventSetCallback, pi_event, pi_int32,
void (*)(pi_event, pi_int32, void *), void *)
_PI_API(piEventSetStatus, pi_event, pi_int32)
_PI_API(piEventRetain, pi_event)
_PI_API(piEventRelease, pi_event)
_PI_API(piextEventGetNativeHandle, pi_event, pi_native_handle *)
_PI_API(piextEventCreateWithNativeHandle, pi_native_handle, pi_event *)
// Sampler
_PI_API(piSamplerCreate)
_PI_API(piSamplerGetInfo)
_PI_API(piSamplerRetain)
_PI_API(piSamplerRelease)
_PI_API(piSamplerCreate, pi_context, const pi_sampler_properties *,
pi_sampler *)
_PI_API(piSamplerGetInfo, pi_sampler, pi_sampler_info, size_t, void *, size_t *)
_PI_API(piSamplerRetain, pi_sampler)
_PI_API(piSamplerRelease, pi_sampler)
// Queue commands
_PI_API(piEnqueueKernelLaunch)
_PI_API(piEnqueueNativeKernel)
_PI_API(piEnqueueEventsWait)
_PI_API(piEnqueueEventsWaitWithBarrier)
_PI_API(piEnqueueMemBufferRead)
_PI_API(piEnqueueMemBufferReadRect)
_PI_API(piEnqueueMemBufferWrite)
_PI_API(piEnqueueMemBufferWriteRect)
_PI_API(piEnqueueMemBufferCopy)
_PI_API(piEnqueueMemBufferCopyRect)
_PI_API(piEnqueueMemBufferFill)
_PI_API(piEnqueueMemImageRead)
_PI_API(piEnqueueMemImageWrite)
_PI_API(piEnqueueMemImageCopy)
_PI_API(piEnqueueMemImageFill)
_PI_API(piEnqueueMemBufferMap)
_PI_API(piEnqueueMemUnmap)
_PI_API(piEnqueueKernelLaunch, pi_queue, pi_kernel, pi_uint32, const size_t *,
const size_t *, const size_t *, pi_uint32,
const pi_event *, pi_event *)
_PI_API(piEnqueueNativeKernel, pi_queue, void (*)(void *), void *, size_t,
pi_uint32, const pi_mem *, const void **,
pi_uint32, const pi_event *, pi_event *)
_PI_API(piEnqueueEventsWait, pi_queue, pi_uint32, const pi_event *, pi_event *)
_PI_API(piEnqueueEventsWaitWithBarrier, pi_queue, pi_uint32, const pi_event *,
pi_event *)
_PI_API(piEnqueueMemBufferRead, pi_queue, pi_mem, pi_bool, size_t, size_t,
void *, pi_uint32, const pi_event *, pi_event *)
_PI_API(piEnqueueMemBufferReadRect, pi_queue, pi_mem, pi_bool,
pi_buff_rect_offset, pi_buff_rect_offset,
pi_buff_rect_region, size_t, size_t, size_t,
size_t, void *, pi_uint32, const pi_event *,
pi_event *)
_PI_API(piEnqueueMemBufferWrite, pi_queue, pi_mem, pi_bool, size_t, size_t,
const void *, pi_uint32, const pi_event *,
pi_event *)
_PI_API(piEnqueueMemBufferWriteRect, pi_queue, pi_mem, pi_bool,
pi_buff_rect_offset, pi_buff_rect_offset,
pi_buff_rect_region, size_t, size_t,
size_t, size_t, const void *, pi_uint32,
const pi_event *, pi_event *)
_PI_API(piEnqueueMemBufferCopy, pi_queue, pi_mem, pi_mem, size_t, size_t,
size_t, pi_uint32, const pi_event *, pi_event *)
_PI_API(piEnqueueMemBufferCopyRect, pi_queue, pi_mem, pi_mem,
pi_buff_rect_offset, pi_buff_rect_offset,
pi_buff_rect_region, size_t, size_t,
size_t, size_t, pi_uint32, const pi_event *,
pi_event *)
_PI_API(piEnqueueMemBufferFill, pi_queue, pi_mem, const void *, size_t, size_t,
size_t, pi_uint32, const pi_event *, pi_event *)
_PI_API(piEnqueueMemImageRead, pi_queue, pi_mem, pi_bool, pi_image_offset,
pi_image_region, size_t, size_t, void *,
pi_uint32, const pi_event *, pi_event *)
_PI_API(piEnqueueMemImageWrite, pi_queue, pi_mem, pi_bool, pi_image_offset,
pi_image_region, size_t, size_t, const void *,
pi_uint32, const pi_event *, pi_event *)
_PI_API(piEnqueueMemImageCopy, pi_queue, pi_mem, pi_mem, pi_image_offset,
pi_image_offset, pi_image_region, pi_uint32,
const pi_event *, pi_event *)
_PI_API(piEnqueueMemImageFill, pi_queue, pi_mem, const void *, const size_t *,
const size_t *, pi_uint32, const pi_event *,
pi_event *)
_PI_API(piEnqueueMemBufferMap, pi_queue, pi_mem, pi_bool, pi_map_flags, size_t,
size_t, pi_uint32, const pi_event *, pi_event *,
void **)
_PI_API(piEnqueueMemUnmap, pi_queue, pi_mem, void *, pi_uint32, const pi_event *,
pi_event *)
// USM
_PI_API(piextUSMHostAlloc)
_PI_API(piextUSMDeviceAlloc)
_PI_API(piextUSMSharedAlloc)
_PI_API(piextUSMFree)
_PI_API(piextUSMEnqueueMemset)
_PI_API(piextUSMEnqueueMemcpy)
_PI_API(piextUSMEnqueuePrefetch)
_PI_API(piextUSMEnqueueMemAdvise)
_PI_API(piextUSMGetMemAllocInfo)
_PI_API(piextUSMHostAlloc, void **, pi_context, pi_usm_mem_properties *, size_t,
pi_uint32)
_PI_API(piextUSMDeviceAlloc, void **, pi_context, pi_device,
pi_usm_mem_properties *, size_t, pi_uint32)
_PI_API(piextUSMSharedAlloc, void **, pi_context, pi_device,
pi_usm_mem_properties *, size_t, pi_uint32)
_PI_API(piextUSMFree, pi_context, void *)
_PI_API(piextUSMEnqueueMemset, pi_queue, void *, pi_int32, size_t, pi_uint32,
const pi_event *, pi_event *)
_PI_API(piextUSMEnqueueMemcpy, pi_queue, pi_bool, void *, const void *, size_t,
pi_uint32, const pi_event *, pi_event *)
_PI_API(piextUSMEnqueuePrefetch, pi_queue, const void *, size_t,
pi_usm_migration_flags, pi_uint32,
const pi_event *, pi_event *)
_PI_API(piextUSMEnqueueMemAdvise, pi_queue, const void *, size_t, pi_mem_advice,
pi_event *)
_PI_API(piextUSMGetMemAllocInfo, pi_context, const void *, pi_mem_info, size_t,
void *, size_t *)

_PI_API(piextKernelSetArgMemObj)
_PI_API(piextKernelSetArgSampler)
_PI_API(piextKernelSetArgMemObj, pi_kernel, pi_uint32, const pi_mem *)
_PI_API(piextKernelSetArgSampler, pi_kernel, pi_uint32, const pi_sampler *)

_PI_API(piextPluginGetOpaqueData)
_PI_API(piextPluginGetOpaqueData, void *, void **)

_PI_API(piTearDown)
_PI_API(piTearDown, void *)

#undef _PI_API
2 changes: 1 addition & 1 deletion sycl/include/CL/sycl/detail/pi.h
Original file line number Diff line number Diff line change
Expand Up @@ -1661,7 +1661,7 @@ struct _pi_plugin {
char PluginVersion[4];
char *Targets;
struct FunctionPointers {
#define _PI_API(api) decltype(::api) *api;
#define _PI_API(api, ...) decltype(::api) *api;
#include <CL/sycl/detail/pi.def>
} PiFunctionTable;
};
Expand Down
23 changes: 21 additions & 2 deletions sycl/include/CL/sycl/detail/pi.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class context;
namespace detail {

enum class PiApiKind {
#define _PI_API(api) api,
#define _PI_API(api, ...) api,
#include <CL/sycl/detail/pi.def>
};
class plugin;
Expand Down Expand Up @@ -160,7 +160,7 @@ template <backend BE> __SYCL_EXPORT const plugin &getPlugin();
// Utility Functions to get Function Name for a PI Api.
template <PiApiKind PiApiOffset> struct PiFuncInfo {};

#define _PI_API(api) \
#define _PI_API(api, ...) \
template <> struct PiFuncInfo<PiApiKind::api> { \
using FuncPtrT = decltype(&::api); \
inline const char *getFuncName() { return #api; } \
Expand All @@ -182,6 +182,23 @@ uint64_t emitFunctionBeginTrace(const char *FName);
/// \param FName The name of the PI API call
void emitFunctionEndTrace(uint64_t CorrelationID, const char *FName);

/// Notifies XPTI subscribers about PI function calls and packs call arguments.
///
/// \param FuncID is the API hash ID from PiApiID type trait.
/// \param ArgsData is a pointer to packed function call arguments.
uint64_t emitFunctionWithArgsBeginTrace(uint32_t FuncID,
unsigned char *ArgsData);

/// Notifies XPTI subscribers about PI function call result.
///
/// \param CorrelationID The correlation ID for the API call generated by the
/// emitFunctionWithArgsBeginTrace() call.
/// \param FuncID is the API hash ID from PiApiID type trait.
/// \param ArgsData is a pointer to packed function call arguments.
/// \param Result is function call result value.
void emitFunctionWithArgsEndTrace(uint64_t CorrelationID, uint32_t FuncID,
unsigned char *ArgsData, pi_result Result);

// A wrapper for passing around byte array properties
class ByteArray {
public:
Expand Down Expand Up @@ -391,3 +408,5 @@ namespace RT = cl::sycl::detail::pi;

} // namespace sycl
} // __SYCL_INLINE_NAMESPACE(cl)

#undef _PI_API
2 changes: 1 addition & 1 deletion sycl/plugins/esimd_cpu/pi_esimd_cpu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1245,7 +1245,7 @@ pi_result piPluginInit(pi_plugin *PluginInit) {
PiESimdDeviceAccess->data =
reinterpret_cast<void *>(new sycl::detail::ESIMDDeviceInterface());

#define _PI_API(api) \
#define _PI_API(api, ...) \
(PluginInit->PiFunctionTable).api = (decltype(&::api))(&api);
#include <CL/sycl/detail/pi.def>

Expand Down
2 changes: 1 addition & 1 deletion sycl/plugins/level_zero/pi_level_zero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6418,7 +6418,7 @@ pi_result piPluginInit(pi_plugin *PluginInit) {

strncpy(PluginInit->PluginVersion, _PI_H_VERSION_STRING, PluginVersionSize);

#define _PI_API(api) \
#define _PI_API(api, ...) \
(PluginInit->PiFunctionTable).api = (decltype(&::api))(&api);
#include <CL/sycl/detail/pi.def>

Expand Down
Loading