Skip to main content

TaskScope

Struct TaskScope 

Source
pub struct TaskScope(/* private fields */);

Implementations§

Source§

impl TaskScope

Source

pub fn alloc<T>(&self, capacity: usize) -> Buffer<T, Self>

Allocates a buffer in this scope on the device.

This call is not blocking. Upon successful completion, it will return a buffer with a memory that is guaranteed to be available in the scope of the task but without any absolute guarantee relative to the host or any other task.

Other tasks may try to allocate memory concurrently. In order to guarantee enough memory for all expected work, the user must ensure some limit on task calls by e.g. using a semaphore.

Source

pub fn try_alloc<T>( &self, capacity: usize, ) -> Result<Buffer<T, Self>, TryReserveError>

Tries to allocate a buffer in this scope on the device.

Source

pub unsafe fn launch_host_fn( &self, host_fn: unsafe extern "C" fn(*mut c_void), data: *mut c_void, ) -> Result<(), CudaError>

Launches a host function in this task.

§Safety

The function essentially executes an extern call in C. The safety assumption of an extern.
The user must ensure the pointer is valid and that the data remains valid as this call will be asynchronous.

Source

pub unsafe fn launch_kernel( &self, kernel: KernelPtr, grid_dim: impl Into<Dim3>, block_dim: impl Into<Dim3>, args: &[*mut c_void], shared_mem: usize, ) -> Result<(), CudaError>

Launches a kernel in this task.

§Safety

The caller must ensure that:

  • The kernel ptr is valid.
  • The arguments are passed correctly across the FFI interface.
  • The data lives whitin the scope of the current task.
Source

pub fn sleep(&self, time: Duration)

Sends the CUDA task to sleep for at least the given duration.

This function will not block the calling host thread. The function does a small allocation so the sleep time might be slightly longer than the given duration for very short times.

Source

pub unsafe fn copy<T: DeviceCopy>( &self, dst: &mut Slice<T, Self>, src: &Slice<T, Self>, ) -> Result<(), CopyError>

Copies data between slices using CudaMemCpyAsync

§Safety

The caller must ensure that the data is valid and that the data remains valid as this call

Source

pub async fn synchronize(&self) -> Result<(), CudaError>

Waits for all work enqueued so far in this task to finish.

This function can be useful in case there is work to be enqueued but for some reason this work cannot be done using Self::launch_host_fn.

Source

pub fn into_device<T: IntoDevice>( &self, data: T, ) -> Result<T::Output, CopyError>

Copies data from the host to the device.

Source

pub fn to_device<T: ToDevice>(&self, data: &T) -> Result<T::Output, CopyError>

Source

pub fn synchronize_blocking(&self) -> Result<(), CudaError>

Waits for all work enqueued so far in this task to finish.

This function can be useful in case there is work to be enqueued but for some reason this work cannot be done using Self::launch_host_fn.

Source

pub unsafe fn handle(&self) -> CudaStreamHandle

§Safety
Source

pub fn owner(&self) -> TaskPool

Source

pub fn spawn<F, Fut>(&self, f: F) -> SpawnHandle<Fut::Output>
where F: FnOnce(TaskScope) -> Fut + Send + 'static, Fut: Future + Send + 'static, Fut::Output: CudaSend + 'static,

Spawns a new task from the current task pool.

The task starting point will have a “happens before” relationship with the current task when the spawn is called. The handle can be used to wait for the child task to finish.

Source

pub async fn run_in_place<F, Fut>(&self, f: F) -> Result<Fut::Output, CudaError>
where F: FnOnce(TaskScope) -> Fut, Fut: Future, Fut::Output: CudaSend,

Runs a task in place in a new stream.

Awaiting this task will peform the device calls and synchronize the end of this task to the parent, but does not do host synchronization.

Trait Implementations§

Source§

impl Allocator for TaskScope

Source§

unsafe fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>

Attempts to allocate a block of memory. Read more
Source§

unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout)

Deallocates the memory referenced by ptr. Read more
Source§

fn by_ref(&self) -> &Self
where Self: Sized,

Source§

impl Backend for TaskScope

Source§

fn copy_from<B, T>( &self, data: T, ) -> Result<<T as CopyIntoBackend<Self, B>>::Output, CopyError>
where B: Backend, T: HasBackend + CopyIntoBackend<Self, B>,

Source§

impl Clone for TaskScope

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TaskScope

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for TaskScope

Source§

type Target = Task

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl DeviceMemory for TaskScope

Source§

unsafe fn copy_nonoverlapping( &self, src: *const u8, dst: *mut u8, size: usize, direction: CopyDirection, ) -> Result<(), CopyError>

Safety Read more
Source§

unsafe fn write_bytes( &self, dst: *mut u8, value: u8, size: usize, ) -> Result<(), CopyError>

Source§

impl DeviceSumKernel<BinomialExtensionField<KoalaBear, 4>> for TaskScope

Source§

impl DeviceSumKernel<KoalaBear> for TaskScope

Source§

impl DeviceTransposeKernel<[KoalaBear; 8]> for TaskScope

Source§

impl DeviceTransposeKernel<[u32; 8]> for TaskScope

Source§

impl DeviceTransposeKernel<BinomialExtensionField<KoalaBear, 4>> for TaskScope

Source§

impl DeviceTransposeKernel<KoalaBear> for TaskScope

Source§

impl DeviceTransposeKernel<u32> for TaskScope

Source§

impl DotKernel<BinomialExtensionField<KoalaBear, 4>, BinomialExtensionField<KoalaBear, 4>> for TaskScope

Source§

impl DotKernel<KoalaBear, BinomialExtensionField<KoalaBear, 4>> for TaskScope

Source§

impl DotKernel<KoalaBear, KoalaBear> for TaskScope

Source§

impl FoldKernel<BinomialExtensionField<KoalaBear, 4>> for TaskScope

Source§

impl FoldKernel<KoalaBear> for TaskScope

Source§

impl IntoFuture for TaskScope

Source§

type Output = Result<(), CudaError>

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

type IntoFuture = StreamCallbackFuture<TaskScope>

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

fn into_future(self) -> Self::IntoFuture

Creates a future from a value. Read more
Source§

impl<F: Field> MleBaseBackend<F> for TaskScope

Source§

fn uninit_mle( &self, num_polynomials: usize, num_non_zero_entries: usize, ) -> Tensor<F, Self>

Creates an uninitialized MLE tensor.
Source§

fn num_polynomials(guts: &Tensor<F, Self>) -> usize

Returns the number of polynomials in the batch.
Source§

fn num_variables(guts: &Tensor<F, Self>) -> u32

Returns the number of variables in the polynomials.
Source§

fn num_non_zero_entries(guts: &Tensor<F, Self>) -> usize

Number of non-zero entries in the MLE.
Source§

impl MleFixLastVariableKernel<BinomialExtensionField<KoalaBear, 4>, BinomialExtensionField<KoalaBear, 4>> for TaskScope

Source§

impl MleFixLastVariableKernel<KoalaBear, BinomialExtensionField<KoalaBear, 4>> for TaskScope

Source§

impl PartialGeqKernel<KoalaBear> for TaskScope

Source§

impl PartialLagrangeKernel<BinomialExtensionField<KoalaBear, 4>> for TaskScope

Source§

impl PartialLagrangeKernel<KoalaBear> for TaskScope

Source§

impl ScanKernel<KoalaBear> for TaskScope

Source§

impl TracegenPreprocessedRecursionBaseAluKernel<KoalaBear> for TaskScope

Source§

impl TracegenPreprocessedRecursionConvertKernel<KoalaBear> for TaskScope

Source§

impl TracegenPreprocessedRecursionExtAluKernel<KoalaBear> for TaskScope

Source§

impl TracegenPreprocessedRecursionLinearLayerKernel<KoalaBear> for TaskScope

Source§

impl TracegenPreprocessedRecursionPoseidon2WideKernel<KoalaBear> for TaskScope

Source§

impl TracegenPreprocessedRecursionSBoxKernel<KoalaBear> for TaskScope

Source§

impl TracegenPreprocessedRecursionSelectKernel<KoalaBear> for TaskScope

Source§

impl TracegenRecursionBaseAluKernel<KoalaBear> for TaskScope

Source§

impl TracegenRecursionConvertKernel<KoalaBear> for TaskScope

Source§

impl TracegenRecursionExtAluKernel<KoalaBear> for TaskScope

Source§

impl TracegenRecursionLinearLayerKernel<KoalaBear> for TaskScope

Source§

impl TracegenRecursionPoseidon2WideKernel<KoalaBear> for TaskScope

Source§

impl TracegenRecursionPrefixSumChecksKernel<KoalaBear> for TaskScope

Source§

impl TracegenRecursionSBoxKernel<KoalaBear> for TaskScope

Source§

impl TracegenRecursionSelectKernel<KoalaBear> for TaskScope

Source§

impl TracegenRiscvGlobalKernel<KoalaBear> for TaskScope

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, Src, A> CanCopyFrom<T, Src> for A
where A: Backend, Src: Backend, T: CopyIntoBackend<A, Src>,

Source§

type Output = <T as CopyIntoBackend<A, Src>>::Output

Source§

fn copy_into( &self, value: T, ) -> Result<<A as CanCopyFrom<T, Src>>::Output, CopyError>

Source§

impl<T, Src, A> CanCopyFromRef<T, Src> for A
where A: Backend, Src: Backend, T: CopyToBackend<A, Src>,

Source§

type Output = <T as CopyToBackend<A, Src>>::Output

Source§

fn copy_to( &self, value: &T, ) -> Result<<A as CanCopyFromRef<T, Src>>::Output, CopyError>

Source§

impl<T, Dst, A> CanCopyInto<T, Dst> for A
where A: Backend, Dst: Backend + CanCopyFrom<T, A>, T: HasBackend<Backend = A>,

Source§

type Output = <Dst as CanCopyFrom<T, A>>::Output

Source§

fn copy_to_dst( dst: &Dst, value: T, ) -> Result<<A as CanCopyInto<T, Dst>>::Output, CopyError>

Source§

impl<T, Dst, Src> CanCopyIntoRef<T, Dst> for Src
where Src: Backend, Dst: Backend + CanCopyFromRef<T, Src>, T: HasBackend<Backend = Src>,

Source§

type Output = <Dst as CanCopyFromRef<T, Src>>::Output

Source§

fn copy_to_dst( dst: &Dst, value: &T, ) -> Result<<Src as CanCopyIntoRef<T, Dst>>::Output, CopyError>

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<Challenger, A> FromChallenger<Challenger, A> for Challenger
where Challenger: Clone,

Source§

fn from_challenger(challenger: &Challenger, _backend: &A) -> Challenger

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T, V> OwnedBorrow<T> for V
where V: Borrow<T> + Send + Sync + Clone + 'static, T: ?Sized,

Source§

impl<T> TaskInput for T
where T: 'static + Send + Sync,