Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
cuda_task.hpp
Go to the documentation of this file.
1
6#pragma once
7
9
10namespace uni20::async
11{
12
14class CudaTask final : public BasicTask {
15 public:
18
19 CudaTask() = default;
20 CudaTask(CudaTask const&) = delete;
21 CudaTask& operator=(CudaTask const&) = delete;
22 CudaTask(CudaTask&&) noexcept = default;
23 CudaTask& operator=(CudaTask&&) noexcept = default;
24
28 CudaTask& debug_name(std::string const& label)
29 {
30 this->BasicTask::debug_name(label);
31 return *this;
32 }
33
34 private:
35 explicit CudaTask(TaskHandle handle) noexcept : BasicTask(handle, construction_key{}) {}
36
37 friend class CudaTaskPromise;
38};
39
41{
42 auto handle = std::coroutine_handle<CudaTaskPromise>::from_promise(*this);
43 return CudaTask(this->initialize_task(handle));
44}
45
49class ICudaScheduler : public virtual IScheduler {
50 public:
51 ~ICudaScheduler() override = default;
52
57 virtual void schedule(CudaTask&& task) = 0;
58
62 virtual void schedule(CudaTask&& task, int device) = 0;
63};
64
65} // namespace uni20::async
Defines shared and concrete task coroutine promises.
Move-only promise-neutral ownership claim for a Uni20 coroutine.
Definition async_task.hpp:103
BasicTask & debug_name(std::string const &label)
Assign an optional debug label.
Definition async_task.hpp:131
BasicTask() noexcept=default
Construct an empty task.
TaskHandle handle() const noexcept
Return the erased task identity.
Definition async_task.hpp:125
Promise type for CUDA-constrained CudaTask coroutines.
Definition async_task_promise.hpp:646
CudaTask get_return_object() noexcept
Definition cuda_task.hpp:40
CUDA-constrained public task type used for typed initial admission.
Definition cuda_task.hpp:14
CudaTask & debug_name(std::string const &label)
Assign an optional debug label while preserving the concrete task type.
Definition cuda_task.hpp:28
friend class CudaTaskPromise
Definition cuda_task.hpp:37
CudaTask & operator=(CudaTask const &)=delete
CudaTask(CudaTask const &)=delete
CudaTask(CudaTask &&) noexcept=default
Scheduler interface for initial CudaTask admission.
Definition cuda_task.hpp:49
virtual void schedule(CudaTask &&task)=0
Submit a CUDA task without establishing device affinity.
virtual void schedule(CudaTask &&task, int device)=0
Bind and submit a CUDA task for initial execution on a device.
~ICudaScheduler() override=default
Internal route for resuming an already-bound coroutine task.
Definition scheduler.hpp:64
Non-owning erased identity for one Uni20 coroutine frame.
Definition async_task.hpp:59
TaskHandle initialize_task(std::coroutine_handle< Promise > handle) noexcept
Cache erased self-identity and register the initial ownership claim.
Definition async_task_promise.hpp:495
cuda::ResourceLease< HandleSlot > handle
Definition cublas/execution.cpp:33
Definition qnum.hpp:403
This represents the reverse-mode adjoint for functions of complex variables, assuming a real-valued s...
Definition async/async.hpp:26