pub struct AsyncTransferPipeline<T> { /* private fields */ }Expand description
Pipeline that manages a bounded queue of in-flight async transfers.
In CPU simulation mode every submitted transfer completes synchronously
(the completion flag is set to true before submit returns). This
means the pipeline compiles and passes tests on machines without real GPU
hardware.
§Type parameters
T– The element type of the transfer buffers. Must beClone + Send + 'static.
Implementations§
Source§impl<T: Clone + Send + 'static> AsyncTransferPipeline<T>
impl<T: Clone + Send + 'static> AsyncTransferPipeline<T>
Sourcepub fn new(max_pending: usize) -> Self
pub fn new(max_pending: usize) -> Self
Create a new pipeline that allows up to max_pending in-flight
transfers before returning AsyncTransferError::PipelineFull.
A max_pending of 0 is valid and will cause every submit to fail
immediately.
Sourcepub fn submit(
&self,
data: Vec<T>,
direction: TransferDirection,
) -> Result<TransferHandle, AsyncTransferError>
pub fn submit( &self, data: Vec<T>, direction: TransferDirection, ) -> Result<TransferHandle, AsyncTransferError>
Submit a transfer request for data in the given direction.
In CPU simulation mode the transfer completes immediately: the returned
TransferHandle will already report is_complete() == true.
§Errors
Returns AsyncTransferError::PipelineFull when the number of
currently pending (incomplete) transfers equals max_pending.
Sourcepub fn is_complete(&self, handle: &TransferHandle) -> bool
pub fn is_complete(&self, handle: &TransferHandle) -> bool
Returns true if the transfer identified by handle has completed.
This is a convenience wrapper around TransferHandle::is_complete.
Sourcepub fn flush(&self) -> Result<(), AsyncTransferError>
pub fn flush(&self) -> Result<(), AsyncTransferError>
Block until all pending transfers have completed, then drain the queue.
In CPU simulation mode this returns immediately because all transfers are marked complete on submission.
§Errors
Returns AsyncTransferError::LockError if the internal mutex cannot
be acquired.
Sourcepub fn pending_count(&self) -> usize
pub fn pending_count(&self) -> usize
Return the number of transfers currently tracked in the pipeline (including already-completed ones that have not yet been flushed).
Sourcepub fn in_flight_count(&self) -> usize
pub fn in_flight_count(&self) -> usize
Return the number of transfers that have NOT yet completed.
Auto Trait Implementations§
impl<T> !Freeze for AsyncTransferPipeline<T>
impl<T> RefUnwindSafe for AsyncTransferPipeline<T>
impl<T> Send for AsyncTransferPipeline<T>where
T: Send,
impl<T> Sync for AsyncTransferPipeline<T>where
T: Send,
impl<T> Unpin for AsyncTransferPipeline<T>where
T: Unpin,
impl<T> UnsafeUnpin for AsyncTransferPipeline<T>
impl<T> UnwindSafe for AsyncTransferPipeline<T>
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
Source§fn lossless_try_into(self) -> Option<Dst>
fn lossless_try_into(self) -> Option<Dst>
Source§impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
Source§fn lossy_into(self) -> Dst
fn lossy_into(self) -> Dst
Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Source§impl<T> StrictAs for T
impl<T> StrictAs for T
Source§fn strict_as<Dst>(self) -> Dstwhere
T: StrictCast<Dst>,
fn strict_as<Dst>(self) -> Dstwhere
T: StrictCast<Dst>,
Source§impl<Src, Dst> StrictCastFrom<Src> for Dstwhere
Src: StrictCast<Dst>,
impl<Src, Dst> StrictCastFrom<Src> for Dstwhere
Src: StrictCast<Dst>,
Source§fn strict_cast_from(src: Src) -> Dst
fn strict_cast_from(src: Src) -> Dst
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.