Skip to content

Commit ae0e85c

Browse files
[NFC][SYCL] Pass context_impl by raw ptr/ref in kernel_impl.hpp (#18979)
Part of the ongoing refactoring to prefer raw ptr/ref for SYCL RT objects by default with explicit `shared_from_this` when lifetimes need to be extended.
1 parent 0dbcd3a commit ae0e85c

File tree

6 files changed

+16
-16
lines changed

6 files changed

+16
-16
lines changed

sycl/source/backend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ kernel make_kernel(const context &TargetContext,
360360

361361
// Construct the SYCL queue from UR queue.
362362
return detail::createSyclObjFromImpl<kernel>(
363-
std::make_shared<kernel_impl>(UrKernel, ContextImpl, KernelBundleImpl));
363+
std::make_shared<kernel_impl>(UrKernel, *ContextImpl, KernelBundleImpl));
364364
}
365365

366366
kernel make_kernel(ur_native_handle_t NativeHandle,

sycl/source/detail/device_image_impl.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,7 @@ class device_image_impl {
638638
auto [UrKernel, CacheMutex, ArgMask] =
639639
PM.getOrCreateKernel(Context, AdjustedName,
640640
/*PropList=*/{}, UrProgram);
641-
return std::make_shared<kernel_impl>(UrKernel, getSyclObjImpl(Context),
641+
return std::make_shared<kernel_impl>(UrKernel, *getSyclObjImpl(Context),
642642
Self, OwnerBundle, ArgMask,
643643
UrProgram, CacheMutex);
644644
}
@@ -653,7 +653,7 @@ class device_image_impl {
653653
// Kernel created by urKernelCreate is implicitly retained.
654654

655655
return std::make_shared<kernel_impl>(
656-
UrKernel, detail::getSyclObjImpl(Context), Self, OwnerBundle,
656+
UrKernel, *detail::getSyclObjImpl(Context), Self, OwnerBundle,
657657
/*ArgMask=*/nullptr, UrProgram, /*CacheMutex=*/nullptr);
658658
}
659659

sycl/source/detail/kernel_bundle_impl.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -938,7 +938,7 @@ class kernel_bundle_impl {
938938
SelectedImage->get_ur_program_ref());
939939

940940
return std::make_shared<kernel_impl>(
941-
Kernel, detail::getSyclObjImpl(MContext), SelectedImage, Self, ArgMask,
941+
Kernel, *detail::getSyclObjImpl(MContext), SelectedImage, Self, ArgMask,
942942
SelectedImage->get_ur_program_ref(), CacheMutex);
943943
}
944944

sycl/source/detail/kernel_impl.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@ namespace sycl {
1616
inline namespace _V1 {
1717
namespace detail {
1818

19-
kernel_impl::kernel_impl(ur_kernel_handle_t Kernel, ContextImplPtr Context,
19+
kernel_impl::kernel_impl(ur_kernel_handle_t Kernel, context_impl &Context,
2020
KernelBundleImplPtr KernelBundleImpl,
2121
const KernelArgMask *ArgMask)
22-
: MKernel(Kernel), MContext(Context),
23-
MProgram(ProgramManager::getInstance().getUrProgramFromUrKernel(
24-
Kernel, *Context)),
22+
: MKernel(Kernel), MContext(Context.shared_from_this()),
23+
MProgram(ProgramManager::getInstance().getUrProgramFromUrKernel(Kernel,
24+
Context)),
2525
MCreatedFromSource(true), MKernelBundleImpl(std::move(KernelBundleImpl)),
2626
MIsInterop(true), MKernelArgMaskPtr{ArgMask} {
2727
ur_context_handle_t UrContext = nullptr;
2828
// Using the adapter from the passed ContextImpl
2929
getAdapter()->call<UrApiKind::urKernelGetInfo>(
3030
MKernel, UR_KERNEL_INFO_CONTEXT, sizeof(UrContext), &UrContext, nullptr);
31-
if (Context->getHandleRef() != UrContext)
31+
if (Context.getHandleRef() != UrContext)
3232
throw sycl::exception(
3333
make_error_code(errc::invalid),
3434
"Input context must be the same as the context of cl_kernel");
@@ -37,12 +37,13 @@ kernel_impl::kernel_impl(ur_kernel_handle_t Kernel, ContextImplPtr Context,
3737
enableUSMIndirectAccess();
3838
}
3939

40-
kernel_impl::kernel_impl(ur_kernel_handle_t Kernel, ContextImplPtr ContextImpl,
40+
kernel_impl::kernel_impl(ur_kernel_handle_t Kernel, context_impl &ContextImpl,
4141
DeviceImageImplPtr DeviceImageImpl,
4242
KernelBundleImplPtr KernelBundleImpl,
4343
const KernelArgMask *ArgMask,
4444
ur_program_handle_t Program, std::mutex *CacheMutex)
45-
: MKernel(Kernel), MContext(std::move(ContextImpl)), MProgram(Program),
45+
: MKernel(Kernel), MContext(ContextImpl.shared_from_this()),
46+
MProgram(Program),
4647
MCreatedFromSource(DeviceImageImpl->isNonSYCLSourceBased()),
4748
MDeviceImageImpl(std::move(DeviceImageImpl)),
4849
MKernelBundleImpl(std::move(KernelBundleImpl)),

sycl/source/detail/kernel_impl.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ namespace detail {
2828
// Forward declaration
2929
class kernel_bundle_impl;
3030

31-
using ContextImplPtr = std::shared_ptr<context_impl>;
3231
using KernelBundleImplPtr = std::shared_ptr<kernel_bundle_impl>;
3332
class kernel_impl {
3433
public:
@@ -40,7 +39,7 @@ class kernel_impl {
4039
/// \param Kernel is a valid UrKernel instance
4140
/// \param Context is a valid SYCL context
4241
/// \param KernelBundleImpl is a valid instance of kernel_bundle_impl
43-
kernel_impl(ur_kernel_handle_t Kernel, ContextImplPtr Context,
42+
kernel_impl(ur_kernel_handle_t Kernel, context_impl &Context,
4443
KernelBundleImplPtr KernelBundleImpl,
4544
const KernelArgMask *ArgMask = nullptr);
4645

@@ -50,7 +49,7 @@ class kernel_impl {
5049
/// \param Kernel is a valid UrKernel instance
5150
/// \param ContextImpl is a valid SYCL context
5251
/// \param KernelBundleImpl is a valid instance of kernel_bundle_impl
53-
kernel_impl(ur_kernel_handle_t Kernel, ContextImplPtr ContextImpl,
52+
kernel_impl(ur_kernel_handle_t Kernel, context_impl &ContextImpl,
5453
DeviceImageImplPtr DeviceImageImpl,
5554
KernelBundleImplPtr KernelBundleImpl,
5655
const KernelArgMask *ArgMask, ur_program_handle_t Program,
@@ -245,7 +244,7 @@ class kernel_impl {
245244

246245
private:
247246
ur_kernel_handle_t MKernel = nullptr;
248-
const ContextImplPtr MContext;
247+
const std::shared_ptr<context_impl> MContext;
249248
const ur_program_handle_t MProgram = nullptr;
250249
bool MCreatedFromSource = true;
251250
const DeviceImageImplPtr MDeviceImageImpl;

sycl/source/kernel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ kernel::kernel(cl_kernel ClKernel, const context &SyclContext) {
2727
nativeHandle, detail::getSyclObjImpl(SyclContext)->getHandleRef(),
2828
nullptr, nullptr, &hKernel);
2929
impl = std::make_shared<detail::kernel_impl>(
30-
hKernel, detail::getSyclObjImpl(SyclContext), nullptr, nullptr);
30+
hKernel, *detail::getSyclObjImpl(SyclContext), nullptr, nullptr);
3131
// This is a special interop constructor for OpenCL, so the kernel must be
3232
// retained.
3333
if (get_backend() == backend::opencl) {

0 commit comments

Comments
 (0)