pub struct Radix2DitParallel<F> { /* private fields */ }
Expand description
A parallel FFT algorithm which divides a butterfly network’s layers into two halves.
For the first half, we apply a butterfly network with smaller blocks in earlier layers, i.e. either DIT or Bowers G. Then we bit-reverse, and for the second half, we continue executing the same network but in bit-reversed order. This way we’re always working with small blocks, so within each half, we can have a certain amount of parallelism with no cross-thread communication.
Trait Implementations§
Source§impl<F: Clone> Clone for Radix2DitParallel<F>
impl<F: Clone> Clone for Radix2DitParallel<F>
Source§fn clone(&self) -> Radix2DitParallel<F>
fn clone(&self) -> Radix2DitParallel<F>
Returns a copy 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 Radix2DitParallel<F>
impl<F: Debug> Debug for Radix2DitParallel<F>
Source§impl<F: Default> Default for Radix2DitParallel<F>
impl<F: Default> Default for Radix2DitParallel<F>
Source§fn default() -> Radix2DitParallel<F>
fn default() -> Radix2DitParallel<F>
Returns the “default value” for a type. Read more
Source§impl<F: TwoAdicField + Ord> TwoAdicSubgroupDft<F> for Radix2DitParallel<F>
impl<F: TwoAdicField + Ord> TwoAdicSubgroupDft<F> for Radix2DitParallel<F>
type Evaluations = RowIndexMappedView<BitReversalPerm, DenseMatrix<F>>
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.Source§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.Source§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
. This can be viewed as interpolation onto a coset of a
multiplicative subgroup, rather than the subgroup itself.Source§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
. This can be viewed as interpolation onto a
coset of a multiplicative subgroup, rather than the subgroup itself.Source§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
.Source§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 can be viewed as an inverse operation of
“coset DFT”, that interpolates over a coset of a multiplicative subgroup, rather than
subgroup itself.Source§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 can be viewed as an inverse operation
of “coset DFT”, that interpolates over a coset of a multiplicative subgroup, rather than the
subgroup itself.Source§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.Source§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.Auto Trait Implementations§
impl<F> !Freeze for Radix2DitParallel<F>
impl<F> !RefUnwindSafe for Radix2DitParallel<F>
impl<F> Send for Radix2DitParallel<F>where
F: Send,
impl<F> !Sync for Radix2DitParallel<F>
impl<F> Unpin for Radix2DitParallel<F>
impl<F> UnwindSafe for Radix2DitParallel<F>where
F: RefUnwindSafe,
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)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