pub struct Radix2DFTSmallBatch<F> { /* private fields */ }Expand description
An FFT algorithm which divides a butterfly network’s layers into two halves.
Unlike other FFT algorithms, this algorithm is optimized for small batch sizes. It also stores its twiddle factors and only re-computes if it is asked to do a larger FFT.
Instead of parallelizing across rows, this algorithm parallelizes across groups of rows with the same twiddle factors. This allows it to make use of field packings far more than the standard methods even for low width matrices. Once the chunk size is small enough, it computes a large set of layers fully on a single thread, which avoids the overhead of passing data between threads.
Implementations§
Source§impl<F: TwoAdicField> Radix2DFTSmallBatch<F>
impl<F: TwoAdicField> Radix2DFTSmallBatch<F>
Trait Implementations§
Source§impl<F: Clone> Clone for Radix2DFTSmallBatch<F>
impl<F: Clone> Clone for Radix2DFTSmallBatch<F>
Source§fn clone(&self) -> Radix2DFTSmallBatch<F>
fn clone(&self) -> Radix2DFTSmallBatch<F>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<F: Debug> Debug for Radix2DFTSmallBatch<F>
impl<F: Debug> Debug for Radix2DFTSmallBatch<F>
Source§impl<F: Default> Default for Radix2DFTSmallBatch<F>
impl<F: Default> Default for Radix2DFTSmallBatch<F>
Source§fn default() -> Radix2DFTSmallBatch<F>
fn default() -> Radix2DFTSmallBatch<F>
Returns the “default value” for a type. Read more
Source§impl<F> TwoAdicSubgroupDft<F> for Radix2DFTSmallBatch<F>where
F: TwoAdicField,
impl<F> TwoAdicSubgroupDft<F> for Radix2DFTSmallBatch<F>where
F: TwoAdicField,
Source§type Evaluations = DenseMatrix<F>
type Evaluations = DenseMatrix<F>
The matrix type used to store the result of a batched DFT operation. Read more
Source§fn dft_batch(&self, mat: RowMajorMatrix<F>) -> Self::Evaluations
fn dft_batch(&self, mat: RowMajorMatrix<F>) -> Self::Evaluations
Compute the discrete Fourier transform (DFT) of each column in
mat.
This is the only method an implementer needs to define, all other
methods can be derived from this one. Read moreSource§fn idft_batch(&self, mat: RowMajorMatrix<F>) -> RowMajorMatrix<F>
fn idft_batch(&self, mat: RowMajorMatrix<F>) -> RowMajorMatrix<F>
Compute the inverse DFT of each column in
mat. Read moreSource§fn coset_lde_batch(
&self,
mat: RowMajorMatrix<F>,
added_bits: usize,
shift: F,
) -> Self::Evaluations
fn coset_lde_batch( &self, mat: RowMajorMatrix<F>, added_bits: usize, shift: F, ) -> Self::Evaluations
Compute the low-degree extension of each column in
mat onto a coset of a larger subgroup. Read moreSource§fn dft(&self, vec: Vec<F>) -> Vec<F>
fn dft(&self, vec: Vec<F>) -> Vec<F>
Compute the discrete Fourier transform (DFT) of
vec. Read moreSource§fn coset_dft(&self, vec: Vec<F>, shift: F) -> Vec<F>
fn coset_dft(&self, vec: Vec<F>, shift: F) -> Vec<F>
Compute the “coset DFT” of
vec. Read moreSource§fn coset_dft_batch(&self, mat: RowMajorMatrix<F>, shift: F) -> Self::Evaluations
fn coset_dft_batch(&self, mat: RowMajorMatrix<F>, shift: F) -> Self::Evaluations
Compute the “coset DFT” of each column in
mat. Read moreSource§fn coset_idft(&self, vec: Vec<F>, shift: F) -> Vec<F>
fn coset_idft(&self, vec: Vec<F>, shift: F) -> Vec<F>
Compute the “coset iDFT” of
vec. This is the inverse operation of “coset DFT”. Read moreSource§fn coset_idft_batch(
&self,
mat: RowMajorMatrix<F>,
shift: F,
) -> RowMajorMatrix<F>
fn coset_idft_batch( &self, mat: RowMajorMatrix<F>, shift: F, ) -> RowMajorMatrix<F>
Compute the “coset iDFT” of each column in
mat. This is the inverse operation
of “coset DFT”. Read moreSource§fn lde(&self, vec: Vec<F>, added_bits: usize) -> Vec<F>
fn lde(&self, vec: Vec<F>, added_bits: usize) -> Vec<F>
Compute the low-degree extension of
vec onto a larger subgroup. Read moreSource§fn lde_batch(
&self,
mat: RowMajorMatrix<F>,
added_bits: usize,
) -> Self::Evaluations
fn lde_batch( &self, mat: RowMajorMatrix<F>, added_bits: usize, ) -> Self::Evaluations
Compute the low-degree extension of each column in
mat onto a larger subgroup. Read moreSource§fn coset_lde(&self, vec: Vec<F>, added_bits: usize, shift: F) -> Vec<F>
fn coset_lde(&self, vec: Vec<F>, added_bits: usize, shift: F) -> Vec<F>
Compute the low-degree extension of of
vec onto a coset of a larger subgroup. Read moreSource§fn dft_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
vec: Vec<V>,
) -> Vec<V>
fn dft_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, vec: Vec<V>, ) -> Vec<V>
Compute the discrete Fourier transform (DFT) of
vec. Read moreSource§fn dft_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
mat: RowMajorMatrix<V>,
) -> RowMajorMatrix<V>
fn dft_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, mat: RowMajorMatrix<V>, ) -> RowMajorMatrix<V>
Compute the discrete Fourier transform (DFT) of each column in
mat. Read moreSource§fn coset_dft_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
vec: Vec<V>,
shift: F,
) -> Vec<V>
fn coset_dft_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, vec: Vec<V>, shift: F, ) -> Vec<V>
Compute the “coset DFT” of
vec. Read moreSource§fn coset_dft_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
mat: RowMajorMatrix<V>,
shift: F,
) -> RowMajorMatrix<V>
fn coset_dft_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, mat: RowMajorMatrix<V>, shift: F, ) -> RowMajorMatrix<V>
Compute the “coset DFT” of each column in
mat. Read moreSource§fn idft_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
vec: Vec<V>,
) -> Vec<V>
fn idft_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, vec: Vec<V>, ) -> Vec<V>
Compute the inverse DFT of
vec. Read moreSource§fn idft_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
mat: RowMajorMatrix<V>,
) -> RowMajorMatrix<V>
fn idft_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, mat: RowMajorMatrix<V>, ) -> RowMajorMatrix<V>
Compute the inverse DFT of each column in
mat. Read moreSource§fn coset_idft_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
vec: Vec<V>,
shift: F,
) -> Vec<V>
fn coset_idft_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, vec: Vec<V>, shift: F, ) -> Vec<V>
Compute the “coset iDFT” of
vec. This is the inverse operation of “coset DFT”. Read moreSource§fn coset_idft_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
mat: RowMajorMatrix<V>,
shift: F,
) -> RowMajorMatrix<V>
fn coset_idft_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, mat: RowMajorMatrix<V>, shift: F, ) -> RowMajorMatrix<V>
Compute the “coset iDFT” of each column in
mat. This is the inverse operation
of “coset DFT”. Read moreSource§fn lde_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
vec: Vec<V>,
added_bits: usize,
) -> Vec<V>
fn lde_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, vec: Vec<V>, added_bits: usize, ) -> Vec<V>
Compute the low-degree extension of
vec onto a larger subgroup. Read moreSource§fn lde_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
mat: RowMajorMatrix<V>,
added_bits: usize,
) -> RowMajorMatrix<V>
fn lde_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, mat: RowMajorMatrix<V>, added_bits: usize, ) -> RowMajorMatrix<V>
Compute the low-degree extension of each column in
mat onto a larger subgroup. Read moreSource§fn coset_lde_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
vec: Vec<V>,
added_bits: usize,
shift: F,
) -> Vec<V>
fn coset_lde_algebra<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, vec: Vec<V>, added_bits: usize, shift: F, ) -> Vec<V>
Compute the low-degree extension of of
vec onto a coset of a larger subgroup. Read moreSource§fn coset_lde_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>(
&self,
mat: RowMajorMatrix<V>,
added_bits: usize,
shift: F,
) -> RowMajorMatrix<V>
fn coset_lde_algebra_batch<V: BasedVectorSpace<F> + Clone + Send + Sync>( &self, mat: RowMajorMatrix<V>, added_bits: usize, shift: F, ) -> RowMajorMatrix<V>
Compute the low-degree extension of each column in
mat onto a coset of a larger subgroup. Read moreAuto Trait Implementations§
impl<F> Freeze for Radix2DFTSmallBatch<F>
impl<F> !RefUnwindSafe for Radix2DFTSmallBatch<F>
impl<F> Send for Radix2DFTSmallBatch<F>
impl<F> Sync for Radix2DFTSmallBatch<F>
impl<F> Unpin for Radix2DFTSmallBatch<F>
impl<F> !UnwindSafe for Radix2DFTSmallBatch<F>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
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