Struct Future

Source
pub struct Future<'closure, T> { /* private fields */ }
Expand description

Future for CUDA operations.

Note that this future abstracts over two different asynchronousprimitives: dedicated-thread semantics, and stream asynchrony.

§Dedicated-thread semantics

In this crate, all operations that use CUDA internally are off-loaded to a dedicated thread (the runtime). This improves CUDA’s ability to parallelize without being interrupted by the OS scheduler or being affected by starvation when under load.

§Stream asynchrony

CUDA has internal asynchrony as well. Lots of CUDA operations are asynchronous with respect to the host with regards to the stream they are bound to.

It is important to understand that most of the operations in this crate do NOT actually wait for the CUDA asynchronous operation to complete. Instead, the operation is started and then the future becomes ready. This means that if the caller must still synchronize the underlying CUDA stream.

§Usage

To create a Future, move the closure into with Future::new:

let future = Future::new(move || {
    ()
});
let return_value = future.await;
assert_eq!(return_value, ());

Implementations§

Source§

impl<'closure, T> Future<'closure, T>

Source

pub fn new<F>(call: F) -> Self
where F: FnOnce() -> T + Send + 'closure, T: Send + 'closure,

Wrap the provided function in this future. It will be sent to the runtime thread and executed there. The future resolves once the call on the runtime completes.

§Arguments
  • call - Closure that contains relevant function call.
§Example
let return_value = Future::new(|| ()).await;
assert_eq!(return_value, ());
})

Trait Implementations§

Source§

impl<'closure, T> Drop for Future<'closure, T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<'closure, T> Future for Future<'closure, T>

Source§

type Output = T

The type of value produced on completion.
Source§

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>

Attempts to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more

Auto Trait Implementations§

§

impl<'closure, T> Freeze for Future<'closure, T>

§

impl<'closure, T> RefUnwindSafe for Future<'closure, T>

§

impl<'closure, T> Send for Future<'closure, T>
where T: Send,

§

impl<'closure, T> Sync for Future<'closure, T>
where T: Send,

§

impl<'closure, T> Unpin for Future<'closure, T>

§

impl<'closure, T> UnwindSafe for Future<'closure, T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<F> IntoFuture for F
where F: Future,

Source§

type Output = <F as Future>::Output

The output that the future will produce on completion.
Source§

type IntoFuture = F

Which kind of future are we turning this into?
Source§

fn into_future(self) -> <F as IntoFuture>::IntoFuture

Creates a future from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.