Skip to content

Commit 3758e75

Browse files
committed
Implement DeviceKernelInfo for interop kernels
1 parent cb03a1b commit 3758e75

File tree

4 files changed

+48
-10
lines changed

4 files changed

+48
-10
lines changed

sycl/include/sycl/handler.hpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -501,14 +501,7 @@ class __SYCL_EXPORT handler {
501501
setType(detail::CGType::Kernel);
502502
}
503503

504-
void setDeviceKernelInfo(kernel &&Kernel) {
505-
MKernel = detail::getSyclObjImpl(std::move(Kernel));
506-
MKernelName = getKernelName();
507-
setType(detail::CGType::Kernel);
508-
509-
// If any extra actions are added here make sure that logic around
510-
// `lambdaAndKernelHaveEqualName` calls can handle that.
511-
}
504+
void setDeviceKernelInfo(kernel &&Kernel);
512505

513506
#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
514507
// TODO: Those functions are not used anymore, remove it in the next

sycl/source/detail/kernel_impl.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,17 @@ kernel_impl::kernel_impl(Managed<ur_kernel_handle_t> &&Kernel,
2626
MCreatedFromSource(true),
2727
MKernelBundleImpl(KernelBundleImpl ? KernelBundleImpl->shared_from_this()
2828
: nullptr),
29-
MIsInterop(true), MKernelArgMaskPtr{ArgMask} {
29+
MIsInterop(true), MKernelArgMaskPtr{ArgMask},
30+
MDeviceKernelInfo(
31+
MIsInterop
32+
? DeviceKernelInfoUniquePtr(
33+
new DeviceKernelInfo(
34+
CompileTimeKernelInfoTy{std::string_view(getName())}),
35+
DeviceKernelInfoDeleter)
36+
: DeviceKernelInfoUniquePtr(
37+
&ProgramManager::getInstance().getOrCreateDeviceKernelInfo(
38+
KernelNameStrT(getName())),
39+
noopDeviceKernelInfoDeleter)) {
3040
ur_context_handle_t UrContext = nullptr;
3141
// Using the adapter from the passed ContextImpl
3242
getAdapter().call<UrApiKind::urKernelGetInfo>(
@@ -52,7 +62,17 @@ kernel_impl::kernel_impl(Managed<ur_kernel_handle_t> &&Kernel,
5262
MDeviceImageImpl(std::move(DeviceImageImpl)),
5363
MKernelBundleImpl(KernelBundleImpl.shared_from_this()),
5464
MIsInterop(MDeviceImageImpl->getOriginMask() & ImageOriginInterop),
55-
MKernelArgMaskPtr{ArgMask}, MCacheMutex{CacheMutex} {
65+
MKernelArgMaskPtr{ArgMask}, MCacheMutex{CacheMutex},
66+
MDeviceKernelInfo(
67+
MIsInterop
68+
? DeviceKernelInfoUniquePtr(
69+
new DeviceKernelInfo(
70+
CompileTimeKernelInfoTy{std::string_view(getName())}),
71+
DeviceKernelInfoDeleter)
72+
: DeviceKernelInfoUniquePtr(
73+
&ProgramManager::getInstance().getOrCreateDeviceKernelInfo(
74+
KernelNameStrT(getName())),
75+
noopDeviceKernelInfoDeleter)) {
5676
// Enable USM indirect access for interop and non-sycl-jit source kernels.
5777
// sycl-jit kernels will enable this if needed through the regular kernel
5878
// path.

sycl/source/detail/kernel_impl.hpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,10 @@ class kernel_impl {
238238
std::mutex *getCacheMutex() const { return MCacheMutex; }
239239
std::string_view getName() const;
240240

241+
DeviceKernelInfo *getDeviceKernelInfoPtr() const {
242+
return MDeviceKernelInfo.get();
243+
}
244+
241245
private:
242246
Managed<ur_kernel_handle_t> MKernel;
243247
const std::shared_ptr<context_impl> MContext;
@@ -251,6 +255,17 @@ class kernel_impl {
251255
std::mutex *MCacheMutex = nullptr;
252256
mutable std::string MName;
253257

258+
using DeviceKernelInfoDeleterTy = void (*)(DeviceKernelInfo *);
259+
using DeviceKernelInfoUniquePtr =
260+
std::unique_ptr<DeviceKernelInfo, DeviceKernelInfoDeleterTy>;
261+
DeviceKernelInfoUniquePtr MDeviceKernelInfo;
262+
263+
static void DeviceKernelInfoDeleter(DeviceKernelInfo *Ptr) { delete Ptr; }
264+
265+
static void noopDeviceKernelInfoDeleter(DeviceKernelInfo *) {
266+
// do nothing
267+
}
268+
254269
bool isBuiltInKernel(device_impl &Device) const;
255270
void checkIfValidForNumArgsInfoQuery() const;
256271

sycl/source/handler.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2535,6 +2535,16 @@ bool handler::HasAssociatedAccessor(detail::AccessorImplHost *Req,
25352535
void handler::setType(sycl::detail::CGType Type) { impl->MCGType = Type; }
25362536
sycl::detail::CGType handler::getType() const { return impl->MCGType; }
25372537

2538+
void handler::setDeviceKernelInfo(kernel &&Kernel) {
2539+
MKernel = detail::getSyclObjImpl(std::move(Kernel));
2540+
MKernelName = getKernelName();
2541+
setDeviceKernelInfoPtr(MKernel->getDeviceKernelInfoPtr());
2542+
setType(detail::CGType::Kernel);
2543+
2544+
// If any extra actions are added here make sure that logic around
2545+
// `lambdaAndKernelHaveEqualName` calls can handle that.
2546+
}
2547+
25382548
#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
25392549
void handler::setNDRangeDescriptorPadded(sycl::range<3> N,
25402550
bool SetNumWorkGroups, int Dims) {

0 commit comments

Comments
 (0)