36 #include <type_traits>
42 inline namespace _V1 {
44 template <backend Backend>
class backend_traits;
45 template <backend Backend, bundle_state State>
46 auto get_native(
const kernel_bundle<State> &Obj)
47 -> backend_return_t<Backend, kernel_bundle<State>>;
56 namespace ext::oneapi::experimental {
69 const char *get_name() const
noexcept;
71 bool operator==(const
kernel_id &RHS)
const {
return impl == RHS.impl; }
78 kernel_id(
const std::shared_ptr<detail::kernel_id_impl> &Impl)
79 : impl(
std::move(Impl)) {}
81 std::shared_ptr<detail::kernel_id_impl> impl;
84 friend const decltype(Obj::impl) &
92 class device_image_impl;
100 : impl(
std::move(Impl)) {}
103 return impl == RHS.
impl;
107 return !(*
this == RHS);
114 ur_native_handle_t getNative()
const;
120 friend const decltype(Obj::impl) &
129 template <sycl::bundle_state State>
138 return device_image_plain::has_kernel(KernelID);
144 return device_image_plain::has_kernel(KernelID, Dev);
152 friend const decltype(Obj::impl) &
167 : impl(
std::move(Impl)) {}
170 return impl == RHS.
impl;
174 return !(*
this == RHS);
191 bool contains_specialization_constants() const
noexcept;
193 bool native_specialization_constant() const
noexcept;
195 bool ext_oneapi_has_kernel(const
std::
string &name) {
214 bool has_specialization_constant_impl(
const char *SpecName)
const noexcept;
216 void set_specialization_constant_impl(
const char *SpecName,
void *Value,
219 void get_specialization_constant_impl(
const char *SpecName,
224 bool is_specialization_constant_set(
const char *SpecName)
const noexcept;
239 template <bundle_state State>
250 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
252 return kernel_bundle_plain::empty();
257 return kernel_bundle_plain::get_backend();
262 return kernel_bundle_plain::get_context();
267 return kernel_bundle_plain::get_devices();
274 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
276 return kernel_bundle_plain::has_kernel(KernelID);
284 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
286 return kernel_bundle_plain::has_kernel(KernelID, Dev);
293 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
295 return has_kernel(get_kernel_id<KernelName>());
302 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
304 return has_kernel(get_kernel_id<KernelName>(), Dev);
310 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
319 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
321 return kernel_bundle_plain::contains_specialization_constants();
328 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
330 return kernel_bundle_plain::native_specialization_constant();
336 typename = std::enable_if_t<_State == bundle_state::executable>>
343 template <
typename KernelName,
bundle_state _State = State,
344 typename = std::enable_if_t<_State == bundle_state::executable>>
353 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
355 const char *SpecSymName = detail::get_spec_constant_symbolic_ID<SpecName>();
363 typename = std::enable_if_t<_State == bundle_state::input>>
365 typename std::remove_reference_t<decltype(SpecName)>::
value_type Value) {
366 const char *SpecSymName = detail::get_spec_constant_symbolic_ID<SpecName>();
368 sizeof(decltype(Value)));
375 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
376 typename std::remove_reference_t<decltype(SpecName)>
::value_type
379 typename std::remove_reference_t<decltype(SpecName)>
::value_type;
381 const char *SpecSymName = detail::get_spec_constant_symbolic_ID<SpecName>();
382 SCType Res{SpecName.getDefaultValue()};
386 std::array<char,
sizeof(SCType)> RetValue;
388 std::memcpy(&Res, RetValue.data(),
sizeof(SCType));
396 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
399 kernel_bundle_plain::begin());
405 typename = std::enable_if_t<_State != bundle_state::ext_oneapi_source>>
415 typename = std::enable_if_t<_State == bundle_state::executable>>
421 template <auto *Func>
422 std::enable_if_t<ext::oneapi::experimental::is_kernel_v<Func>,
bool>
424 return has_kernel(ext::oneapi::experimental::get_kernel_id<Func>());
427 template <auto *Func>
428 std::enable_if_t<ext::oneapi::experimental::is_kernel_v<Func>,
bool>
430 return has_kernel(ext::oneapi::experimental::get_kernel_id<Func>(), dev);
434 typename = std::enable_if_t<_State == bundle_state::executable>>
435 std::enable_if_t<ext::oneapi::experimental::is_kernel_v<Func>,
kernel>
438 ext::oneapi::experimental::get_kernel_id<Func>());
446 typename = std::enable_if_t<_State == bundle_state::executable>>
456 friend const decltype(Obj::impl) &
462 template <backend Backend, bundle_state StateB>
466 template <backend Backend>
471 ReturnValue.reserve(std::distance(
begin(),
end()));
474 ReturnValue.push_back(
482 template <bundle_state State>
499 using KI = sycl::detail::KernelInfo<KernelName>;
518 __SYCL_EXPORT
const std::vector<device>
527 template <bundle_state State>
529 const std::vector<device> &Devs) {
535 return detail::createSyclObjFromImpl<kernel_bundle<State>>(Impl);
538 template <bundle_state State>
540 return get_kernel_bundle<State>(Ctx, Ctx.
get_devices());
549 const std::vector<kernel_id> &KernelIDs,
561 template <bundle_state State>
564 const std::vector<kernel_id> &KernelIDs) {
569 return detail::createSyclObjFromImpl<kernel_bundle<State>>(Impl);
572 template <bundle_state State>
575 return get_kernel_bundle<State>(Ctx, Ctx.
get_devices(), KernelIDs);
578 template <
typename KernelName, bundle_state State>
580 return get_kernel_bundle<State>(Ctx, Ctx.
get_devices(),
581 {get_kernel_id<KernelName>()});
584 template <
typename KernelName, bundle_state State>
586 const std::vector<device> &Devs) {
587 return get_kernel_bundle<State>(Ctx, Devs, {get_kernel_id<KernelName>()});
591 namespace ext::oneapi::experimental {
592 template <auto *Func, bundle_state State>
593 std::enable_if_t<is_kernel_v<Func>, kernel_bundle<State>>
595 return get_kernel_bundle<State>(Ctx, Devs, {get_kernel_id<Func>()});
598 template <auto *Func, bundle_state State>
601 return get_kernel_bundle<State>(Ctx, Ctx.
get_devices(),
602 {get_kernel_id<Func>()});
622 const std::vector<device> &Devs);
626 template <bundle_state State>
630 return detail::createSyclObjFromImpl<sycl::kernel_bundle<State>>(Impl);
636 template <bundle_state State,
typename SelectorT>
638 const std::vector<device> &Devs,
639 SelectorT Selector) {
649 Ctx, UniqueDevices, State, SelectorWrapper);
651 return detail::createSyclObjFromImpl<sycl::kernel_bundle<State>>(Impl);
654 template <bundle_state State,
typename SelectorT>
656 return get_kernel_bundle<State>(Ctx, Ctx.
get_devices(), Selector);
666 const std::vector<device> &Devs,
671 const std::vector<kernel_id> &kernelIds,
685 template <bundle_state State>
690 template <bundle_state State>
692 const std::vector<kernel_id> &KernelIDs) {
697 return has_kernel_bundle<State>(Ctx, Ctx.
get_devices());
700 template <bundle_state State>
702 const std::vector<kernel_id> &KernelIDs) {
703 return has_kernel_bundle<State>(Ctx, Ctx.
get_devices(), KernelIDs);
706 template <
typename KernelName, bundle_state State>
708 return has_kernel_bundle<State>(Ctx, {get_kernel_id<KernelName>()});
711 template <
typename KernelName, bundle_state State>
713 return has_kernel_bundle<State>(Ctx, Devs, {get_kernel_id<KernelName>()});
717 namespace ext::oneapi::experimental {
718 template <auto *Func, bundle_state State>
719 std::enable_if_t<is_kernel_v<Func>,
bool>
721 return has_kernel_bundle<State>(Ctx, {get_kernel_id<Func>()});
724 template <auto *Func, bundle_state State>
725 std::enable_if_t<is_kernel_v<Func>,
bool>
727 return has_kernel_bundle<State>(Ctx, Devs, {get_kernel_id<Func>()});
737 __SYCL_EXPORT
bool is_compatible(
const std::vector<kernel_id> &KernelIDs,
745 namespace ext::oneapi::experimental {
746 template <auto *Func>
758 __SYCL_EXPORT std::shared_ptr<detail::kernel_bundle_impl>
759 join_impl(
const std::vector<detail::KernelBundleImplPtr> &Bundles,
765 template <sycl::bundle_state State>
769 std::vector<detail::KernelBundleImplPtr> KernelBundleImpls;
770 KernelBundleImpls.reserve(Bundles.size());
774 std::shared_ptr<detail::kernel_bundle_impl> Impl =
776 return detail::createSyclObjFromImpl<kernel_bundle<State>>(Impl);
785 __SYCL_EXPORT std::shared_ptr<detail::kernel_bundle_impl>
786 compile_impl(
const kernel_bundle<bundle_state::input> &InputBundle,
787 const std::vector<device> &Devs,
const property_list &PropList);
794 inline kernel_bundle<bundle_state::object>
796 const std::vector<device> &Devs,
const property_list &PropList = {}) {
802 kernel_bundle<sycl::bundle_state::object>>(Impl);
805 inline kernel_bundle<bundle_state::object>
817 const std::vector<kernel_bundle<bundle_state::object>> &ObjectBundles);
819 __SYCL_EXPORT std::shared_ptr<detail::kernel_bundle_impl>
820 link_impl(
const std::vector<kernel_bundle<bundle_state::object>> &ObjectBundles,
821 const std::vector<device> &Devs,
const property_list &PropList);
829 inline kernel_bundle<bundle_state::executable>
831 const std::vector<device> &Devs,
const property_list &PropList = {}) {
837 kernel_bundle<sycl::bundle_state::executable>>(Impl);
840 inline kernel_bundle<bundle_state::executable>
843 return link(std::vector<kernel_bundle<bundle_state::object>>{ObjectBundle},
847 inline kernel_bundle<bundle_state::executable>
850 std::vector<sycl::device> IntersectDevices =
852 return link(ObjectBundles, IntersectDevices, PropList);
855 inline kernel_bundle<bundle_state::executable>
857 const std::vector<device> &Devs,
const property_list &PropList = {}) {
858 return link(std::vector<kernel_bundle<bundle_state::object>>{ObjectBundle},
867 __SYCL_EXPORT std::shared_ptr<detail::kernel_bundle_impl>
868 build_impl(
const kernel_bundle<bundle_state::input> &InputBundle,
869 const std::vector<device> &Devs,
const property_list &PropList);
876 inline kernel_bundle<bundle_state::executable>
878 const std::vector<device> &Devs,
const property_list &PropList = {}) {
884 kernel_bundle<sycl::bundle_state::executable>>(Impl);
887 inline kernel_bundle<bundle_state::executable>
893 namespace ext::oneapi::experimental {
896 struct create_bundle_from_source_props;
897 struct build_source_bundle_props;
907 record.emplace_back(std::make_pair(name, content));
909 void add(
const std::string &name,
const std::string &content) {
910 record.emplace_back(std::make_pair(name, content));
912 std::vector<std::pair<std::string, std::string>>
record;
918 detail::create_bundle_from_source_props>
965 detail::build_source_bundle_props> : std::true_type {
976 sycl::detail::string_view Source,
977 std::vector<std::pair<sycl::detail::string_view, sycl::detail::string_view>>
983 const std::string &Source,
984 std::vector<std::pair<std::string, std::string>> IncludePairsVec) {
985 size_t n = IncludePairsVec.size();
986 std::vector<std::pair<sycl::detail::string_view, sycl::detail::string_view>>
989 for (
auto &Pair : IncludePairsVec)
990 PairVec.push_back({sycl::detail::string_view{Pair.first},
991 sycl::detail::string_view{Pair.second}});
994 SyclContext, Language, sycl::detail::string_view{Source}, PairVec);
997 #if (!defined(_HAS_STD_BYTE) || _HAS_STD_BYTE != 0)
1001 const std::vector<std::byte> &Bytes,
1002 std::vector<std::pair<sycl::detail::string_view, sycl::detail::string_view>>
1008 const std::vector<std::byte> &Bytes,
1009 std::vector<std::pair<std::string, std::string>> IncludePairsVec) {
1010 size_t n = IncludePairsVec.size();
1011 std::vector<std::pair<sycl::detail::string_view, sycl::detail::string_view>>
1014 for (
auto &Pair : IncludePairsVec)
1015 PairVec.push_back({sycl::detail::string_view{Pair.first},
1016 sycl::detail::string_view{Pair.second}});
1024 const std::vector<device> &Devices,
1025 const std::vector<sycl::detail::string_view> &
BuildOptions,
1026 sycl::detail::string *LogPtr,
1031 const std::vector<device> &Devices,
1033 std::string *LogPtr,
1035 std::vector<sycl::detail::string_view> Options;
1037 Options.push_back(sycl::detail::string_view{opt});
1039 std::vector<sycl::detail::string_view> KernelNames;
1041 KernelNames.push_back(sycl::detail::string_view{name});
1044 sycl::detail::string Log;
1047 *LogPtr = Log.c_str();
1059 typename = std::enable_if_t<
1060 is_property_list_v<PropertyListT> &&
1061 detail::all_props_are_keys_of<detail::create_bundle_from_source_props,
1062 PropertyListT>::value>>
1065 const std::string &Source, PropertyListT props = {}) {
1066 std::vector<std::pair<std::string, std::string>> IncludePairsVec;
1067 if constexpr (props.template has_property<include_files>()) {
1068 IncludePairsVec = props.template get_property<include_files>().record;
1075 #if (!defined(_HAS_STD_BYTE) || _HAS_STD_BYTE != 0)
1078 typename = std::enable_if_t<
1079 is_property_list_v<PropertyListT> &&
1080 detail::all_props_are_keys_of<detail::create_bundle_from_source_props,
1081 PropertyListT>::value>>
1084 const std::vector<std::byte> &Bytes, PropertyListT props = {}) {
1085 std::vector<std::pair<std::string, std::string>> IncludePairsVec;
1086 if constexpr (props.template has_property<include_files>()) {
1087 IncludePairsVec = props.template get_property<include_files>().record;
1100 typename = std::enable_if_t<
1101 is_property_list_v<PropertyListT> &&
1102 detail::all_props_are_keys_of<detail::build_source_bundle_props,
1103 PropertyListT>::value>>
1107 const std::vector<device> &Devices, PropertyListT props = {}) {
1108 std::vector<std::string> BuildOptionsVec;
1109 std::string *LogPtr =
nullptr;
1110 std::vector<std::string> RegisteredKernelNamesVec;
1111 if constexpr (props.template has_property<build_options>()) {
1112 BuildOptionsVec = props.template get_property<build_options>().opts;
1114 if constexpr (props.template has_property<save_log>()) {
1115 LogPtr = props.template get_property<save_log>().log;
1117 if constexpr (props.template has_property<registered_kernel_names>()) {
1118 RegisteredKernelNamesVec =
1119 props.template get_property<registered_kernel_names>().kernel_names;
1122 RegisteredKernelNamesVec);
1126 typename = std::enable_if_t<
1127 is_property_list_v<PropertyListT> &&
1128 detail::all_props_are_keys_of<detail::build_source_bundle_props,
1129 PropertyListT>::value>>
1130 kernel_bundle<bundle_state::executable>
1132 PropertyListT props = {}) {
1133 return build<PropertyListT>(SourceKB, SourceKB.
get_devices(), props);
1142 template <>
struct hash<
sycl::kernel_id> {
1144 return hash<std::shared_ptr<sycl::detail::kernel_id_impl>>()(
1149 template <sycl::bundle_state State>
struct hash<
sycl::device_image<State>> {
1151 return hash<std::shared_ptr<sycl::detail::device_image_impl>>()(
1158 return hash<std::shared_ptr<sycl::detail::kernel_bundle_impl>>()(
The context class represents a SYCL context on which kernel functions may be executed.
std::vector< device > get_devices() const
Gets devices associated with this SYCL context.
ur_native_handle_t getNative() const
bool operator==(const device_image_plain &RHS) const
device_image_plain(const detail::DeviceImageImplPtr &Impl)
bool operator!=(const device_image_plain &RHS) const
detail::DeviceImageImplPtr impl
bool operator!=(const kernel_bundle_plain &RHS) const
bool ext_oneapi_has_kernel(const std::string &name)
void get_specialization_constant_impl(const char *SpecName, void *Value) const noexcept
bool is_specialization_constant_set(const char *SpecName) const noexcept
bool has_specialization_constant_impl(const char *SpecName) const noexcept
detail::KernelBundleImplPtr impl
kernel_bundle_plain(const detail::KernelBundleImplPtr &Impl)
bool operator==(const kernel_bundle_plain &RHS) const
void set_specialization_constant_impl(const char *SpecName, void *Value, size_t Size) noexcept
kernel ext_oneapi_get_kernel(const std::string &name)
kernel get_kernel(const kernel_id &KernelID) const
Objects of the class represents an instance of an image in a specific state.
bool has_kernel(const kernel_id &KernelID, const device &Dev) const noexcept
bool has_kernel(const kernel_id &KernelID) const noexcept
The SYCL device class encapsulates a single SYCL device on which kernels may be executed.
The kernel_bundle class represents collection of device images in a particular state.
bool ext_oneapi_has_kernel(const std::string &name)
std::vector< kernel_id > get_kernel_ids() const
bool contains_specialization_constants() const noexcept
bool has_kernel(const kernel_id &KernelID) const noexcept
bool has_specialization_constant() const noexcept
device_image_iterator begin() const
kernel get_kernel() const
device_image_iterator end() const
kernel get_kernel(const kernel_id &KernelID) const
bool has_kernel(const device &Dev) const noexcept
kernel ext_oneapi_get_kernel(const std::string &name)
backend get_backend() const noexcept
std::enable_if_t< ext::oneapi::experimental::is_kernel_v< Func >, bool > ext_oneapi_has_kernel(const device &dev)
friend auto get_native(const kernel_bundle< StateB > &Obj) -> backend_return_t< Backend, kernel_bundle< StateB >>
std::vector< device > get_devices() const noexcept
bool has_kernel(const kernel_id &KernelID, const device &Dev) const noexcept
context get_context() const noexcept
std::enable_if_t< ext::oneapi::experimental::is_kernel_v< Func >, bool > ext_oneapi_has_kernel()
bool has_kernel() const noexcept
bool empty() const noexcept
bool native_specialization_constant() const noexcept
std::remove_reference_t< decltype(SpecName)>::value_type get_specialization_constant() const
std::enable_if_t< ext::oneapi::experimental::is_kernel_v< Func >, kernel > ext_oneapi_get_kernel()
void set_specialization_constant(typename std::remove_reference_t< decltype(SpecName)>::value_type Value)
Sets the value of the specialization constant whose address is SpecName for this bundle.
Objects of the class identify kernel is some kernel_bundle related APIs.
bool operator!=(const kernel_id &RHS) const
Provides an abstraction of a SYCL kernel.
Objects of the property_list class are containers for the SYCL properties.
To cast(std::vector< cl_event > value)
std::vector< sycl::device > find_device_intersection(const std::vector< kernel_bundle< bundle_state::object >> &ObjectBundles)
std::shared_ptr< detail::kernel_bundle_impl > build_impl(const kernel_bundle< bundle_state::input > &InputBundle, const std::vector< device > &Devs, const property_list &PropList)
std::shared_ptr< device_image_impl > DeviceImageImplPtr
decltype(Obj::impl) const & getSyclObjImpl(const Obj &SyclObject)
std::function< bool(const detail::DeviceImageImplPtr &DevImgImpl)> DevImgSelectorImpl
const std::vector< device > removeDuplicateDevices(const std::vector< device > &Devs)
detail::KernelBundleImplPtr get_kernel_bundle_impl(const context &Ctx, const std::vector< device > &Devs, bundle_state State)
T createSyclObjFromImpl(decltype(T::impl) ImplObj)
std::shared_ptr< detail::kernel_bundle_impl > compile_impl(const kernel_bundle< bundle_state::input > &InputBundle, const std::vector< device > &Devs, const property_list &PropList)
std::shared_ptr< detail::kernel_bundle_impl > join_impl(const std::vector< detail::KernelBundleImplPtr > &Bundles, bundle_state State)
kernel_id get_kernel_id_impl(string_view KernelName)
std::shared_ptr< detail::kernel_bundle_impl > KernelBundleImplPtr
kernel_bundle< State > get_empty_interop_kernel_bundle(const context &Ctx)
make_kernel may need an empty interop kernel bundle.
bool has_kernel_bundle_impl(const context &Ctx, const std::vector< device > &Devs, bundle_state State)
detail::KernelBundleImplPtr get_empty_interop_kernel_bundle_impl(const context &Ctx, const std::vector< device > &Devs)
std::shared_ptr< detail::kernel_bundle_impl > link_impl(const std::vector< kernel_bundle< bundle_state::object >> &ObjectBundles, const std::vector< device > &Devs, const property_list &PropList)
kernel_bundle< bundle_state::ext_oneapi_source > make_kernel_bundle_from_source(const context &SyclContext, source_language Language, sycl::detail::string_view Source, std::vector< std::pair< sycl::detail::string_view, sycl::detail::string_view >> IncludePairsVec)
bool is_source_kernel_bundle_supported(backend BE, source_language Language)
kernel_bundle< bundle_state::executable > build_from_source(kernel_bundle< bundle_state::ext_oneapi_source > &SourceKB, const std::vector< device > &Devices, const std::vector< sycl::detail::string_view > &BuildOptions, sycl::detail::string *LogPtr, const std::vector< sycl::detail::string_view > &RegisteredKernelNames)
kernel_bundle< bundle_state::executable > build(kernel_bundle< bundle_state::ext_oneapi_source > &SourceKB, const std::vector< device > &Devices, PropertyListT props={})
std::enable_if_t< is_kernel_v< Func >, kernel_bundle< State > > get_kernel_bundle(const context &Ctx, const std::vector< device > &Devs)
kernel_bundle< bundle_state::ext_oneapi_source > create_kernel_bundle_from_source(const context &SyclContext, source_language Language, const std::string &Source, PropertyListT props={})
properties< std::tuple<> > empty_properties_t
sycl::detail::kernel_bundle_impl kernel_bundle_impl
std::enable_if_t< is_kernel_v< Func >, bool > has_kernel_bundle(const context &Ctx)
std::enable_if_t< is_kernel_v< Func >, bool > is_compatible(const device &Dev)
std::enable_if_t< is_kernel_v< Func >, kernel_id > get_kernel_id()
kernel_bundle(kernel_bundle< State > &&) -> kernel_bundle< State >
sycl::kernel_bundle< State > join(const std::vector< sycl::kernel_bundle< State >> &Bundles)
kernel_bundle< bundle_state::executable > build(const kernel_bundle< bundle_state::input > &InputBundle, const std::vector< device > &Devs, const property_list &PropList={})
kernel_id get_kernel_id()
kernel_bundle< bundle_state::object > compile(const kernel_bundle< bundle_state::input > &InputBundle, const std::vector< device > &Devs, const property_list &PropList={})
std::vector< kernel_id > get_kernel_ids()
bool is_compatible(const std::vector< kernel_id > &KernelIDs, const device &Dev)
bool has_kernel_bundle(const context &Ctx, const std::vector< device > &Devs)
kernel_bundle< State > get_kernel_bundle(const context &Ctx, const std::vector< device > &Devs)
A kernel bundle in state State which contains all of the kernels in the application which are compati...
auto get_native(const SyclObjectT &Obj) -> backend_return_t< BackendName, SyclObjectT >
typename backend_traits< Backend >::template return_type< SyclType > backend_return_t
kernel_bundle< bundle_state::executable > link(const std::vector< kernel_bundle< bundle_state::object >> &ObjectBundles, const std::vector< device > &Devs, const property_list &PropList={})
_Abi const simd< _Tp, _Abi > & noexcept
size_t operator()(const sycl::device_image< State > &DeviceImage) const
size_t operator()(const sycl::kernel_bundle< State > &KernelBundle) const
size_t operator()(const sycl::kernel_id &KernelID) const
build_options(const std::string &optsArg)
std::vector< std::string > opts
build_options(const std::vector< std::string > &optsArg)
void add(const std::string &name, const std::string &content)
std::vector< std::pair< std::string, std::string > > record
include_files(const std::string &name, const std::string &content)
void add(const std::string &name)
std::vector< std::string > kernel_names
registered_kernel_names(const std::vector< std::string > &knsArg)
registered_kernel_names()
registered_kernel_names(const std::string &knArg)
save_log(std::string *logArg)
C++ utilities for Unified Runtime integration.