Skip to content

[SYCL] Remove program_impl #14368

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jul 5, 2024
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
1 change: 0 additions & 1 deletion sycl/source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,6 @@ set(SYCL_COMMON_SOURCES
"detail/memory_manager.cpp"
"detail/pipes.cpp"
"detail/platform_impl.cpp"
"detail/program_impl.cpp"
"detail/program_manager/program_manager.cpp"
"detail/queue_impl.cpp"
"detail/online_compiler/online_compiler.cpp"
Expand Down
1 change: 0 additions & 1 deletion sycl/source/backend/level_zero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

#include <detail/platform_impl.hpp>
#include <detail/plugin.hpp>
#include <detail/program_impl.hpp>
#include <detail/queue_impl.hpp>
#include <sycl/backend.hpp>
#include <sycl/sycl.hpp>
Expand Down
1 change: 0 additions & 1 deletion sycl/source/backend/opencl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <detail/kernel_impl.hpp>
#include <detail/platform_impl.hpp>
#include <detail/plugin.hpp>
#include <detail/program_impl.hpp>
#include <detail/queue_impl.hpp>
#include <sycl/sycl.hpp>

Expand Down
41 changes: 11 additions & 30 deletions sycl/source/detail/kernel_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <detail/context_impl.hpp>
#include <detail/kernel_bundle_impl.hpp>
#include <detail/kernel_impl.hpp>
#include <detail/program_impl.hpp>

#include <memory>

Expand All @@ -18,34 +17,14 @@ inline namespace _V1 {
namespace detail {

kernel_impl::kernel_impl(sycl::detail::pi::PiKernel Kernel,
ContextImplPtr Context,
KernelBundleImplPtr KernelBundleImpl,
const KernelArgMask *ArgMask)
: kernel_impl(Kernel, Context,
std::make_shared<program_impl>(Context, Kernel),
/*IsCreatedFromSource*/ true, KernelBundleImpl, ArgMask) {
// Enable USM indirect access for interoperability kernels.
// Some PI Plugins (like OpenCL) require this call to enable USM
// For others, PI will turn this into a NOP.
if (Context->getPlatformImpl()->supports_usm())
getPlugin()->call<PiApiKind::piKernelSetExecInfo>(
MKernel, PI_USM_INDIRECT_ACCESS, sizeof(pi_bool), &PI_TRUE);

// This constructor is only called in the interoperability kernel constructor.
MIsInterop = true;
}

kernel_impl::kernel_impl(sycl::detail::pi::PiKernel Kernel,
ContextImplPtr ContextImpl, ProgramImplPtr ProgramImpl,
bool IsCreatedFromSource,
ContextImplPtr ContextImpl,
KernelBundleImplPtr KernelBundleImpl,
const KernelArgMask *ArgMask)
: MKernel(Kernel), MContext(ContextImpl),
MProgram(ProgramImpl->getHandleRef()),
MCreatedFromSource(IsCreatedFromSource),
MKernelBundleImpl(std::move(KernelBundleImpl)),
MKernelArgMaskPtr{ArgMask} {

MProgram(ProgramManager::getInstance().getPiProgramFromPiKernel(
Kernel, ContextImpl)),
MCreatedFromSource(true), MKernelBundleImpl(std::move(KernelBundleImpl)),
MIsInterop(true), MKernelArgMaskPtr{ArgMask} {
sycl::detail::pi::PiContext Context = nullptr;
// Using the plugin from the passed ContextImpl
getPlugin()->call<PiApiKind::piKernelGetInfo>(
Expand All @@ -55,7 +34,12 @@ kernel_impl::kernel_impl(sycl::detail::pi::PiKernel Kernel,
"Input context must be the same as the context of cl_kernel",
PI_ERROR_INVALID_CONTEXT);

MIsInterop = ProgramImpl->isInterop();
// Enable USM indirect access for interoperability kernels.
// Some PI Plugins (like OpenCL) require this call to enable USM
// For others, PI will turn this into a NOP.
if (ContextImpl->getPlatformImpl()->supports_usm())
getPlugin()->call<PiApiKind::piKernelSetExecInfo>(
MKernel, PI_USM_INDIRECT_ACCESS, sizeof(pi_bool), &PI_TRUE);
}

kernel_impl::kernel_impl(sycl::detail::pi::PiKernel Kernel,
Expand All @@ -71,9 +55,6 @@ kernel_impl::kernel_impl(sycl::detail::pi::PiKernel Kernel,
MIsInterop = MKernelBundleImpl->isInterop();
}

kernel_impl::kernel_impl(ContextImplPtr Context, ProgramImplPtr ProgramImpl)
: MContext(Context), MProgram(ProgramImpl->getHandleRef()) {}

kernel_impl::~kernel_impl() {
try {
// TODO catch an exception and put it to list of asynchronous exceptions
Expand Down
29 changes: 1 addition & 28 deletions sycl/source/detail/kernel_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,17 @@ namespace sycl {
inline namespace _V1 {
namespace detail {
// Forward declaration
class program_impl;
class kernel_bundle_impl;

using ContextImplPtr = std::shared_ptr<context_impl>;
using ProgramImplPtr = std::shared_ptr<program_impl>;
using KernelBundleImplPtr = std::shared_ptr<kernel_bundle_impl>;
using sycl::detail::pi::PiProgram;
class kernel_impl {
public:
/// Constructs a SYCL kernel instance from a PiKernel
///
/// This constructor is used for plug-in interoperability. It always marks
/// kernel as being created from source and creates a new program_impl
/// instance.
/// kernel as being created from source.
///
/// \param Kernel is a valid PiKernel instance
/// \param Context is a valid SYCL context
Expand All @@ -48,24 +45,6 @@ class kernel_impl {
KernelBundleImplPtr KernelBundleImpl,
const KernelArgMask *ArgMask = nullptr);

/// Constructs a SYCL kernel instance from a SYCL program and a PiKernel
///
/// This constructor creates a new instance from PiKernel and saves
/// the provided SYCL program. If context of PiKernel differs from
/// context of the SYCL program, an invalid_parameter_error exception is
/// thrown.
///
/// \param Kernel is a valid PiKernel instance
/// \param ContextImpl is a valid SYCL context
/// \param ProgramImpl is a valid instance of program_impl
/// \param IsCreatedFromSource is a flag that indicates whether program
/// is created from source code
/// \param KernelBundleImpl is a valid instance of kernel_bundle_impl
kernel_impl(sycl::detail::pi::PiKernel Kernel, ContextImplPtr ContextImpl,
ProgramImplPtr ProgramImpl, bool IsCreatedFromSource,
KernelBundleImplPtr KernelBundleImpl,
const KernelArgMask *ArgMask);

/// Constructs a SYCL kernel_impl instance from a SYCL device_image,
/// kernel_bundle and / PiKernel.
///
Expand All @@ -78,12 +57,6 @@ class kernel_impl {
const KernelArgMask *ArgMask, PiProgram ProgramPI,
std::mutex *CacheMutex);

/// Constructs a SYCL kernel for host device
///
/// \param Context is a valid SYCL context
/// \param ProgramImpl is a valid instance of program_impl
kernel_impl(ContextImplPtr Context, ProgramImplPtr ProgramImpl);

// This section means the object is non-movable and non-copyable
// There is no need of move and copy constructors in kernel_impl.
// If they need to be added, piKernelRetain method for MKernel
Expand Down
Loading
Loading