Skip to content

Commit

Permalink
Revert "[SYCL] Support online_compiler::compile compiled with pre-C…
Browse files Browse the repository at this point in the history
…++11 ABI" (#16248)

Reverts #16179

```
template <source_language Lang>
__SYCL_EXPORT std::vector<byte> online_compiler<Lang>::compile_impl(
    detail::string_view Src, detail::string_view DeviceStepping,
    const std::vector<detail::string_view> &Options) {
```

accesses `this->CompileToSPIRVHandle` which is laid out *after*
`std::string` data member:

```
  /// Target device stepping (implementation defined)
  std::string DeviceStepping;

  /// Handles to helper functions used by the implementation.
  void *CompileToSPIRVHandle = nullptr;
```

resulting in ABI incompatibility.
  • Loading branch information
aelovikov-intel authored Dec 4, 2024
1 parent 705e8fe commit 3f1aa18
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 80 deletions.
13 changes: 4 additions & 9 deletions sycl/include/sycl/detail/string_view.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,14 @@ class string_view {

const char *data() const noexcept { return str; }

friend bool operator==(string_view lhs, std::string_view rhs) noexcept {
friend bool operator==(const string_view &lhs,
std::string_view rhs) noexcept {
return rhs == lhs.data();
}
friend bool operator==(std::string_view lhs, string_view rhs) noexcept {
friend bool operator==(std::string_view lhs,
const string_view &rhs) noexcept {
return lhs == rhs.data();
}

friend bool operator!=(string_view lhs, std::string_view rhs) noexcept {
return rhs != lhs.data();
}
friend bool operator!=(std::string_view lhs, string_view rhs) noexcept {
return lhs != rhs.data();
}
};

} // namespace detail
Expand Down
42 changes: 5 additions & 37 deletions sycl/include/sycl/ext/intel/experimental/online_compiler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,21 +81,6 @@ class __SYCL2020_DEPRECATED(
"experimental online_compiler is being deprecated. See "
"'sycl_ext_oneapi_kernel_compiler.asciidoc' instead for new kernel "
"compiler extension to kernel_bundle implementation.") online_compiler {
__SYCL_EXPORT std::vector<byte>
compile_impl(sycl::detail::string_view Src,
sycl::detail::string_view DeviceStepping,
const std::vector<sycl::detail::string_view> &Options);

std::vector<byte> compile_impl(const std::string &Source,
const std::vector<std::string> &UserArgs) {
std::vector<sycl::detail::string_view> Args;
for (auto &&Arg : UserArgs)
Args.emplace_back(Arg);

return compile_impl(std::string_view{Source},
std::string_view{DeviceStepping}, Args);
}

public:
/// Constructs online compiler which can target any device and produces
/// given compiled code format. Produces 64-bit device code.
Expand Down Expand Up @@ -211,17 +196,9 @@ class __SYCL2020_DEPRECATED(
/// OpenCL JIT compiler options must be supported.
template <>
template <>
#if !defined(__SYCL_ONLINE_COMPILER_CPP) || \
defined(__INTEL_PREVIEW_BREAKING_CHANGES)
inline
#else
__SYCL_EXPORT
#endif
std::vector<byte>
online_compiler<source_language::opencl_c>::compile(
const std::string &src, const std::vector<std::string> &options) {
return compile_impl(src, options);
}
__SYCL_EXPORT std::vector<byte>
online_compiler<source_language::opencl_c>::compile(
const std::string &src, const std::vector<std::string> &options);

/// Compiles the given OpenCL source. May throw \c online_compile_error.
/// @param src - contents of the source.
Expand All @@ -237,17 +214,8 @@ online_compiler<source_language::opencl_c>::compile(const std::string &src) {
/// @param options - compilation options (implementation defined).
template <>
template <>
#if !defined(__SYCL_ONLINE_COMPILER_CPP) || \
defined(__INTEL_PREVIEW_BREAKING_CHANGES)
inline
#else
__SYCL_EXPORT
#endif
std::vector<byte>
online_compiler<source_language::cm>::compile(
const std::string &src, const std::vector<std::string> &options) {
return compile_impl(src, options);
}
__SYCL_EXPORT std::vector<byte> online_compiler<source_language::cm>::compile(
const std::string &src, const std::vector<std::string> &options);

/// Compiles the given CM source \p src.
template <>
Expand Down
59 changes: 29 additions & 30 deletions sycl/source/detail/online_compiler/online_compiler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
//
//===----------------------------------------------------------------------===//

#define __SYCL_ONLINE_COMPILER_CPP

#include <sycl/detail/os_util.hpp>
#include <sycl/detail/ur.hpp>
#include <sycl/ext/intel/experimental/online_compiler.hpp>
Expand All @@ -21,11 +19,9 @@ inline namespace _V1 {
namespace ext::intel::experimental {
namespace detail {

using namespace sycl::detail;

static std::vector<const char *>
prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
bool Is64Bit, string_view DeviceStepping,
bool Is64Bit, const std::string &DeviceStepping,
const std::string &UserArgs) {
std::vector<const char *> Args = {"ocloc", "-q", "-spv_only", "-device"};

Expand Down Expand Up @@ -58,7 +54,7 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,

if (DeviceStepping != "") {
Args.push_back("-revision_id");
Args.push_back(DeviceStepping.data());
Args.push_back(DeviceStepping.c_str());
}

Args.push_back(Is64Bit ? "-64" : "-32");
Expand Down Expand Up @@ -86,11 +82,11 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
/// allocated during the compilation.
/// @param UserArgs - User's options to ocloc compiler.
static std::vector<byte>
compileToSPIRV(string_view Src, sycl::info::device_type DeviceType,
device_arch DeviceArch, bool Is64Bit, string_view DeviceStepping,
void *&CompileToSPIRVHandle, void *&FreeSPIRVOutputsHandle,
compileToSPIRV(const std::string &Source, sycl::info::device_type DeviceType,
device_arch DeviceArch, bool Is64Bit,
const std::string &DeviceStepping, void *&CompileToSPIRVHandle,
void *&FreeSPIRVOutputsHandle,
const std::vector<std::string> &UserArgs) {
std::string Source{Src.data()};

if (!CompileToSPIRVHandle) {
#ifdef __SYCL_RT_OS_WINDOWS
Expand Down Expand Up @@ -202,10 +198,11 @@ compileToSPIRV(string_view Src, sycl::info::device_type DeviceType,
}
} // namespace detail

template <source_language Lang>
__SYCL_EXPORT std::vector<byte> online_compiler<Lang>::compile_impl(
detail::string_view Src, detail::string_view DeviceStepping,
const std::vector<detail::string_view> &Options) {
template <>
template <>
__SYCL_EXPORT std::vector<byte>
online_compiler<source_language::opencl_c>::compile(
const std::string &Source, const std::vector<std::string> &UserArgs) {

if (OutputFormatVersion != std::pair<int, int>{0, 0}) {
std::string Version = std::to_string(OutputFormatVersion.first) + ", " +
Expand All @@ -214,27 +211,29 @@ __SYCL_EXPORT std::vector<byte> online_compiler<Lang>::compile_impl(
Version + ") is not supported yet");
}

std::vector<std::string> UserArgs;
for (auto &&Opt : Options)
UserArgs.emplace_back(Opt.data());

if constexpr (Lang == source_language::cm)
UserArgs.push_back("-cmc");

return detail::compileToSPIRV(Src, DeviceType, DeviceArch, Is64Bit,
return detail::compileToSPIRV(Source, DeviceType, DeviceArch, Is64Bit,
DeviceStepping, CompileToSPIRVHandle,
FreeSPIRVOutputsHandle, UserArgs);
}

template __SYCL_EXPORT std::vector<byte>
online_compiler<source_language::opencl_c>::compile_impl(
detail::string_view Src, detail::string_view DeviceStepping,
const std::vector<detail::string_view> &Options);
template <>
template <>
__SYCL_EXPORT std::vector<byte> online_compiler<source_language::cm>::compile(
const std::string &Source, const std::vector<std::string> &UserArgs) {

template __SYCL_EXPORT std::vector<byte>
online_compiler<source_language::cm>::compile_impl(
detail::string_view Src, detail::string_view DeviceStepping,
const std::vector<detail::string_view> &Options);
if (OutputFormatVersion != std::pair<int, int>{0, 0}) {
std::string Version = std::to_string(OutputFormatVersion.first) + ", " +
std::to_string(OutputFormatVersion.second);
throw online_compile_error(std::string("The output format version (") +
Version + ") is not supported yet");
}

std::vector<std::string> CMUserArgs = UserArgs;
CMUserArgs.push_back("-cmc");
return detail::compileToSPIRV(Source, DeviceType, DeviceArch, Is64Bit,
DeviceStepping, CompileToSPIRVHandle,
FreeSPIRVOutputsHandle, CMUserArgs);
}
} // namespace ext::intel::experimental

namespace ext {
Expand Down
2 changes: 0 additions & 2 deletions sycl/test/abi/sycl_symbols_linux.dump
Original file line number Diff line number Diff line change
Expand Up @@ -2985,9 +2985,7 @@ _ZN4sycl3_V121__isgreaterequal_implEdd
_ZN4sycl3_V121__isgreaterequal_implEff
_ZN4sycl3_V122accelerator_selector_vERKNS0_6deviceE
_ZN4sycl3_V128verifyUSMAllocatorPropertiesERKNS0_13property_listE
_ZN4sycl3_V13ext5intel12experimental15online_compilerILNS3_15source_languageE0EE12compile_implENS0_6detail11string_viewES8_RKSt6vectorIS8_SaIS8_EE
_ZN4sycl3_V13ext5intel12experimental15online_compilerILNS3_15source_languageE0EE7compileIJSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISE_EEEEES8_IhSaIhEERKSE_DpRKT_
_ZN4sycl3_V13ext5intel12experimental15online_compilerILNS3_15source_languageE1EE12compile_implENS0_6detail11string_viewES8_RKSt6vectorIS8_SaIS8_EE
_ZN4sycl3_V13ext5intel12experimental15online_compilerILNS3_15source_languageE1EE7compileIJSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISE_EEEEES8_IhSaIhEERKSE_DpRKT_
_ZN4sycl3_V13ext5intel12experimental9pipe_base13get_pipe_nameB5cxx11EPKv
_ZN4sycl3_V13ext5intel12experimental9pipe_base17wait_non_blockingERKNS0_5eventE
Expand Down
2 changes: 0 additions & 2 deletions sycl/test/abi/sycl_symbols_windows.dump
Original file line number Diff line number Diff line change
Expand Up @@ -3743,8 +3743,6 @@
?category@exception@_V1@sycl@@QEBAAEBVerror_category@std@@XZ
?clearArgs@handler@_V1@sycl@@AEAAXXZ
?code@exception@_V1@sycl@@QEBAAEBVerror_code@std@@XZ
?compile_impl@?$online_compiler@$00@experimental@intel@ext@_V1@sycl@@AEAA?AV?$vector@EV?$allocator@E@std@@@std@@Vstring_view@detail@56@0AEBV?$vector@Vstring_view@detail@_V1@sycl@@V?$allocator@Vstring_view@detail@_V1@sycl@@@std@@@8@@Z
?compile_impl@?$online_compiler@$0A@@experimental@intel@ext@_V1@sycl@@AEAA?AV?$vector@EV?$allocator@E@std@@@std@@Vstring_view@detail@56@0AEBV?$vector@Vstring_view@detail@_V1@sycl@@V?$allocator@Vstring_view@detail@_V1@sycl@@@std@@@8@@Z
?compile_impl@detail@_V1@sycl@@YA?AV?$shared_ptr@Vkernel_bundle_impl@detail@_V1@sycl@@@std@@AEBV?$kernel_bundle@$0A@@23@AEBV?$vector@Vdevice@_V1@sycl@@V?$allocator@Vdevice@_V1@sycl@@@std@@@5@AEBVproperty_list@23@@Z
?complete_fusion@fusion_wrapper@experimental@codeplay@ext@_V1@sycl@@QEAA?AVevent@56@AEBVproperty_list@56@@Z
?computeFallbackKernelBounds@handler@_V1@sycl@@AEAA?AV?$id@$01@23@_K0@Z
Expand Down

0 comments on commit 3f1aa18

Please sign in to comment.