24class AsyncTaskPromise;
50concept TaskPromise = std::derived_from<T, TaskPromiseBase> &&
requires {
51 { T::task_domain } -> std::convertible_to<TaskDomain>;
65 [[nodiscard]] explicit constexpr operator
bool() const noexcept {
return static_cast<bool>(coroutine_); }
67 [[nodiscard]]
constexpr std::coroutine_handle<>
coroutine() const noexcept {
return coroutine_; }
78 [[nodiscard]]
bool done() const noexcept {
return !coroutine_ || coroutine_.done(); }
82 return lhs.coroutine_ == rhs.coroutine_;
93 std::coroutine_handle<> coroutine_{};
113 : handle_(
std::exchange(other.handle_, {})), await_exception_(std::exchange(other.await_exception_, {}))
122 [[nodiscard]] explicit operator
bool() const noexcept {
return static_cast<bool>(handle_); }
167 [[nodiscard]]
bool await_ready() const noexcept {
return !handle_ || handle_.
done(); }
170 template <TaskPromise ParentPromise>
171 std::coroutine_handle<>
await_suspend(std::coroutine_handle<ParentPromise> parent);
184 void release() noexcept;
185 void destroy_owned_coroutine() noexcept;
188 std::exception_ptr await_exception_{};
Defines shared and concrete task coroutine promises.
static void name_task(std::coroutine_handle<> h, std::string const &label)
Assigns an optional human-readable label to a coroutine task.
Promise type for ordinary AsyncTask coroutines.
Definition async_task_promise.hpp:632
Canonical host-oriented coroutine task type.
Definition async_task.hpp:196
AsyncTask & operator=(AsyncTask const &)=delete
friend class AsyncTaskPromise
Definition async_task.hpp:216
AsyncTask & debug_name(std::string const &label)
Definition async_task.hpp:207
AsyncTask(AsyncTask const &)=delete
AsyncTask(AsyncTask &&) noexcept=default
Move-only promise-neutral ownership claim for a Uni20 coroutine.
Definition async_task.hpp:103
bool set_scheduler(IScheduler *scheduler)
Install the scheduler used for later resumption.
Definition async_task_impl.hpp:142
static void reschedule(BasicTask task)
Reschedule a task when it becomes the sole ownership claimant.
Definition async_task_impl.hpp:11
BasicTask(TaskHandle handle, construction_key) noexcept
Definition async_task.hpp:179
BasicTask & debug_name(std::string const &label)
Assign an optional debug label.
Definition async_task.hpp:131
~BasicTask() noexcept
Release the ownership claim and destroy the frame when appropriate.
Definition async_task_impl.hpp:133
void await_resume()
Definition async_task_impl.hpp:186
std::coroutine_handle coroutine_handle() const noexcept
Return the generic coroutine handle for diagnostics.
Definition async_task.hpp:128
void abandon_leak()
Intentionally leak the coroutine during emergency unwinding.
Definition async_task_impl.hpp:84
void exception_on_resume(std::exception_ptr error) noexcept
Store an exception for delivery on the next resume.
Definition async_task_impl.hpp:97
void resume()
Resume the coroutine and transfer this ownership claim.
Definition async_task_impl.hpp:77
BasicTask() noexcept=default
Construct an empty task.
TaskHandle release_handle()
Release this ownership claim to a scheduler activation.
Definition async_task_impl.hpp:51
friend struct AsyncTaskTestAccess
Definition async_task.hpp:192
void set_preferred_numa_node(std::optional< int > node) noexcept
Definition async_task_impl.hpp:156
BasicTask & operator=(BasicTask const &)=delete
static BasicTask make_sole_owner(BasicTask &&task)
Retain a task only when it is the sole ownership claimant.
Definition async_task_impl.hpp:23
bool await_ready() const noexcept
Definition async_task.hpp:167
void destroy() noexcept
Destroy an exclusively owned coroutine.
Definition async_task_impl.hpp:135
TaskHandle handle() const noexcept
Return the erased task identity.
Definition async_task.hpp:125
void set_cancel_on_resume() noexcept
Request cancellation before the next resume.
Definition async_task_impl.hpp:91
std::optional< int > preferred_numa_node() const noexcept
Definition async_task_impl.hpp:150
std::coroutine_handle await_suspend(std::coroutine_handle< ParentPromise > parent)
Await a nested task from any Uni20 task promise type.
Definition async_task_impl.hpp:162
Internal route for resuming an already-bound coroutine task.
Definition scheduler.hpp:64
Factory for producing multiple BasicTask ownership claims for one coroutine.
Definition async_task_promise.hpp:766
Non-owning erased identity for one Uni20 coroutine frame.
Definition async_task.hpp:59
TaskDomain domain() const noexcept
Return the execution domain declared by the concrete promise.
Definition async_task.hpp:72
friend constexpr bool operator==(TaskHandle lhs, TaskHandle rhs) noexcept
Definition async_task.hpp:80
bool done() const noexcept
Definition async_task.hpp:78
friend class TaskPromiseBase
Definition async_task.hpp:97
constexpr std::coroutine_handle coroutine() const noexcept
Definition async_task.hpp:67
TaskPromiseBase & promise() const noexcept
Definition async_task_promise.hpp:998
static TaskHandle from(std::coroutine_handle< Promise > handle) noexcept
Definition async_task_promise.hpp:991
constexpr TaskHandle() noexcept=default
Shared non-polymorphic implementation for Uni20 task promises.
Definition async_task_promise.hpp:99
Promise concept accepted by Uni20 task machinery.
Definition async_task.hpp:50
cuda::ResourceLease< HandleSlot > handle
Definition cublas/execution.cpp:33
This represents the reverse-mode adjoint for functions of complex variables, assuming a real-valued s...
Definition async/async.hpp:26
TaskDomain
Execution domain declared by a concrete Uni20 task promise.
Definition async_task.hpp:32
Definition async_task.hpp:177
Execution requirements used to validate a scheduler route.
Definition async_task.hpp:43
std::optional< int > cuda_device
Definition async_task.hpp:45
TaskDomain domain
Definition async_task.hpp:44
Selects the task-registry implementation for the current build mode.
#define DEBUG_PRECONDITION(cond,...)
Definition trace.hpp:648
#define DEBUG_CHECK_EQUAL(a, b,...)
Definition trace.hpp:618