Struct CommandGraph

Source
pub struct CommandGraph { /* private fields */ }
Expand description

A directional sequence dependency graph representing the temporal requirements of each asynchronous read, write, copy, and kernel (commands) for a particular task.

Obviously this is an overkill for this example but this graph is flexible enough to schedule execution correctly and optimally with arbitrarily many parallel tasks with arbitrary duration reads, writes and kernels.

Note that in this example we are using buffer_id a usize to represent memory regions (because that’s what the allocator above is using) but we could easily use multiple part, complex identifiers/keys. For example, we may have a program with a large number of buffers which are organized into a complex hierarchy or some other arbitrary structure. We could swap buffer_id for some value which represented that as long as the identifier we used could uniquely identify each subsection of memory. We could also use ranges of values and do an overlap check and have byte-level precision.

Implementations§

Source§

impl CommandGraph

Source

pub fn new() -> CommandGraph

Returns a new, empty graph.

Source

pub fn add(&mut self, command: Command) -> Result<usize, ()>

Adds a new command and returns the command index if successful.

Source

pub fn populate_requisites(&mut self)

Populates the list of requisite commands necessary for each command.

Requisite commands (preceding writers and following readers) for a command are those which are causally linked and must come either directly before or after. By determining whether or not a command comes directly before or after another we can determine the causal/temporal relationship between any two nodes on the graph.

Nodes without any preceding writers or following readers are start or finish endpoints respectively. It’s possible for a graph to have no endpoints, in which case the graph is closed and at least partially cyclical.

Source

pub fn get_req_events( &self, cmd_idx: usize, ) -> Result<Ref<'_, EventList>, &'static str>

Returns the list of requisite events for a command.

Source

pub fn set_cmd_event( &self, cmd_idx: usize, event: Event, ) -> Result<(), &'static str>

Sets the event associated with the completion of a command.

Source

pub fn commands<'a>(&'a self) -> &'a [Command]

Source

pub fn get_finish_events(&self, event_list: &mut EventList)

Auto Trait Implementations§

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<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.