pub struct FastCpuExecutor<'a, T: TowerFamily, P: PackedTop<T>> { /* private fields */ }
Implementations§
Source§impl<'a, T: TowerFamily, P: PackedTop<T>> FastCpuExecutor<'a, T, P>
impl<'a, T: TowerFamily, P: PackedTop<T>> FastCpuExecutor<'a, T, P>
Trait Implementations§
Source§impl<'a, T: TowerFamily, P: PackedTop<T>> ComputeLayerExecutor<<T as TowerFamily>::B128> for FastCpuExecutor<'a, T, P>
impl<'a, T: TowerFamily, P: PackedTop<T>> ComputeLayerExecutor<<T as TowerFamily>::B128> for FastCpuExecutor<'a, T, P>
Source§type KernelExec = FastKernelBuilder<T, P>
type KernelExec = FastKernelBuilder<T, P>
The executor that can execute operations on a kernel-level granularity (i.e., a single
core).
Source§type DevMem = PackedMemory<P>
type DevMem = PackedMemory<P>
The device memory.
Source§type OpValue = <T as TowerFamily>::B128
type OpValue = <T as TowerFamily>::B128
The operation (scalar) value type.
Source§type ExprEval = ArithCircuitPoly<<T as TowerFamily>::B128>
type ExprEval = ArithCircuitPoly<<T as TowerFamily>::B128>
The evaluator for arithmetic expressions (polynomials).
Source§fn inner_product(
&mut self,
a_in: SubfieldSlice<'_, T::B128, Self::DevMem>,
b_in: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>,
) -> Result<Self::OpValue, Error>
fn inner_product( &mut self, a_in: SubfieldSlice<'_, T::B128, Self::DevMem>, b_in: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>, ) -> Result<Self::OpValue, Error>
Returns the inner product of a vector of subfield elements with big field elements. Read more
Source§fn tensor_expand(
&mut self,
log_n: usize,
coordinates: &[T::B128],
data: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>,
) -> Result<(), Error>
fn tensor_expand( &mut self, log_n: usize, coordinates: &[T::B128], data: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>, ) -> Result<(), Error>
Computes the iterative tensor product of the input with the given coordinates. Read more
Source§fn accumulate_kernels(
&mut self,
map: impl Sync + for<'b> Fn(&'b mut Self::KernelExec, usize, Vec<KernelBuffer<'b, T::B128, Self::DevMem>>) -> Result<Vec<T::B128>, Error>,
mem_maps: Vec<KernelMemMap<'_, T::B128, Self::DevMem>>,
) -> Result<Vec<Self::OpValue>, Error>
fn accumulate_kernels( &mut self, map: impl Sync + for<'b> Fn(&'b mut Self::KernelExec, usize, Vec<KernelBuffer<'b, T::B128, Self::DevMem>>) -> Result<Vec<T::B128>, Error>, mem_maps: Vec<KernelMemMap<'_, T::B128, Self::DevMem>>, ) -> Result<Vec<Self::OpValue>, Error>
Launch many kernels in parallel and accumulate the scalar results with field addition. Read more
Source§fn fold_left(
&mut self,
mat: SubfieldSlice<'_, T::B128, Self::DevMem>,
vec: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>,
out: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>,
) -> Result<(), Error>
fn fold_left( &mut self, mat: SubfieldSlice<'_, T::B128, Self::DevMem>, vec: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>, out: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>, ) -> Result<(), Error>
Computes left matrix-vector multiplication of a subfield matrix with a big field vector. Read more
Source§fn fold_right(
&mut self,
mat: SubfieldSlice<'_, T::B128, Self::DevMem>,
vec: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>,
out: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>,
) -> Result<(), Error>
fn fold_right( &mut self, mat: SubfieldSlice<'_, T::B128, Self::DevMem>, vec: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>, out: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>, ) -> Result<(), Error>
Computes right matrix-vector multiplication of a subfield matrix with a big field vector. Read more
Source§fn fri_fold<FSub>(
&mut self,
ntt: &(impl AdditiveNTT<FSub> + Sync),
log_len: usize,
log_batch_size: usize,
challenges: &[T::B128],
data_in: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>,
data_out: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>,
) -> Result<(), Error>
fn fri_fold<FSub>( &mut self, ntt: &(impl AdditiveNTT<FSub> + Sync), log_len: usize, log_batch_size: usize, challenges: &[T::B128], data_in: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>, data_out: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>, ) -> Result<(), Error>
FRI-fold the interleaved codeword using the given challenges. Read more
Source§fn extrapolate_line(
&mut self,
evals_0: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>,
evals_1: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>,
z: T::B128,
) -> Result<(), Error>
fn extrapolate_line( &mut self, evals_0: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>, evals_1: <Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>, z: T::B128, ) -> Result<(), Error>
Extrapolates a line between a vector of evaluations at 0 and evaluations at 1. Read more
Source§fn compute_composite(
&mut self,
inputs: &SlicesBatch<<Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>>,
output: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>,
composition: &ArithCircuitPoly<T::B128>,
) -> Result<(), Error>
fn compute_composite( &mut self, inputs: &SlicesBatch<<Self::DevMem as ComputeMemory<T::B128>>::FSlice<'_>>, output: &mut <Self::DevMem as ComputeMemory<T::B128>>::FSliceMut<'_>, composition: &ArithCircuitPoly<T::B128>, ) -> Result<(), Error>
Computes the elementwise application of a compiled arithmetic expression to multiple input
slices. Read more
Auto Trait Implementations§
impl<'a, T, P> Freeze for FastCpuExecutor<'a, T, P>where
<T as TowerFamily>::B128: Sized,
<<T as TowerFamily>::B128 as WithUnderlier>::Underlier: Sized,
impl<'a, T, P> RefUnwindSafe for FastCpuExecutor<'a, T, P>where
<T as TowerFamily>::B128: Sized,
<<T as TowerFamily>::B128 as WithUnderlier>::Underlier: Sized,
T: RefUnwindSafe,
impl<'a, T, P> Send for FastCpuExecutor<'a, T, P>where
<T as TowerFamily>::B128: Sized,
<<T as TowerFamily>::B128 as WithUnderlier>::Underlier: Sized,
impl<'a, T, P> Sync for FastCpuExecutor<'a, T, P>where
<T as TowerFamily>::B128: Sized,
<<T as TowerFamily>::B128 as WithUnderlier>::Underlier: Sized,
impl<'a, T, P> Unpin for FastCpuExecutor<'a, T, P>where
<T as TowerFamily>::B128: Sized,
<<T as TowerFamily>::B128 as WithUnderlier>::Underlier: Sized,
T: Unpin,
impl<'a, T, P> UnwindSafe for FastCpuExecutor<'a, T, P>where
<T as TowerFamily>::B128: Sized,
<<T as TowerFamily>::B128 as WithUnderlier>::Underlier: Sized,
T: UnwindSafe,
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
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 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>
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