18 #include <type_traits>
21 inline namespace _V1 {
22 namespace ext::intel::experimental {
26 template <
typename ReturnT,
typename... ArgsT, ReturnT (&f)(ArgsT...)>
36 "Property list is invalid.");
39 template <
typename ReturnT,
typename... ArgsT, ReturnT (&f)(ArgsT...),
41 #if defined(__SYCL_DEVICE_ONLY__)
43 [[__sycl_detail__::__uses_aspects__(aspect::ext_intel_fpga_task_sequence)]]
task_sequence<
57 #if defined(__SYCL_DEVICE_ONLY__)
58 taskSequence = __spirv_TaskSequenceCreateINTEL(
62 "task_sequence is not supported on the host"};
66 void async([[maybe_unused]] ArgsT... Args) {
67 #if defined(__SYCL_DEVICE_ONLY__)
69 __spirv_TaskSequenceAsyncINTEL(taskSequence, Args...);
72 "task_sequence is not supported on the host"};
77 #if defined(__SYCL_DEVICE_ONLY__)
79 return __spirv_TaskSequenceGetINTEL<ReturnT>(taskSequence);
82 "task_sequence is not supported on the host"};
87 #if defined(__SYCL_DEVICE_ONLY__)
88 if constexpr (!has_property<balanced_key>()) {
89 while (outstanding > 0)
92 __spirv_TaskSequenceReleaseINTEL(taskSequence);
97 template <
typename propertyT>
static constexpr
bool has_property() {
98 return property_list_t::template has_property<propertyT>();
102 return property_list_t::template get_property<propertyT>();
106 #if defined(__SYCL_DEVICE_ONLY__)
107 unsigned outstanding = 0;
108 __spv::__spirv_TaskSequenceINTEL *taskSequence;
114 has_property<fpga_cluster_key>()
116 typename std::underlying_type<fpga_cluster_options_enum>::type
>(
119 template get<fpga_cluster_options_enum>(
static constexpr bool has_property()
task_sequence & operator=(const task_sequence &)=delete
task_sequence(const task_sequence &)=delete
static constexpr auto get_property()
void async([[maybe_unused]] ArgsT... Args)
task_sequence(task_sequence &&)=delete
task_sequence & operator=(task_sequence &&)=delete
constexpr invocation_capacity_key::value_t< Size > invocation_capacity
constexpr fpga_cluster_key::value_t< option > fpga_cluster
constexpr pipelined_key::value_t< pipeline_directive_or_initiation_interval > pipelined
constexpr response_capacity_key::value_t< Size > response_capacity
properties< std::tuple< PropertyValueTs... > > properties_t
detail::properties_t< Props... > property_list_t
decltype(properties{}) empty_properties_t
std::error_code make_error_code(sycl::errc E) noexcept
Constructs an error code using e and sycl_category()