pub struct Plan { /* private fields */ }
Expand description
Ordered FFT plan.
This type holds a forward and inverse FFT plan and twiddling factors for a specific size.
The size must be a power of two, and can be as large as 2^16
(inclusive).
Implementations§
Source§impl Plan
impl Plan
Sourcepub fn new(n: usize, method: Method) -> Self
pub fn new(n: usize, method: Method) -> Self
Returns a new FFT plan for the given vector size, selected by the provided method.
§Panics
- Panics if
n
is not a power of two. - Panics if
n
is greater than2^10
.
§Example
use tfhe_fft::ordered::{Method, Plan};
use core::time::Duration;
let plan = Plan::new(4, Method::Measure(Duration::from_millis(10)));
Sourcepub fn fft_size(&self) -> usize
pub fn fft_size(&self) -> usize
Returns the vector size of the FFT.
§Example
use tfhe_fft::ordered::{Method, Plan};
use core::time::Duration;
let plan = Plan::new(4, Method::Measure(Duration::from_millis(10)));
assert_eq!(plan.fft_size(), 4);
Sourcepub fn algo(&self) -> FftAlgo
pub fn algo(&self) -> FftAlgo
Returns the algorithm that’s internally used by the FFT.
§Example
use tfhe_fft::ordered::{FftAlgo, Method, Plan};
let plan = Plan::new(4, Method::UserProvided(FftAlgo::Dif2));
assert_eq!(plan.algo(), FftAlgo::Dif2);
Sourcepub fn fft_scratch(&self) -> Result<StackReq, SizeOverflow>
pub fn fft_scratch(&self) -> Result<StackReq, SizeOverflow>
Returns the size and alignment of the scratch memory needed to perform an FFT.
§Example
use tfhe_fft::ordered::{Method, Plan};
use core::time::Duration;
let plan = Plan::new(4, Method::Measure(Duration::from_millis(10)));
let scratch = plan.fft_scratch().unwrap();
Sourcepub fn fwd(&self, buf: &mut [c64], stack: PodStack<'_>)
pub fn fwd(&self, buf: &mut [c64], stack: PodStack<'_>)
Performs a forward FFT in place, using the provided stack as scratch space.
§Example
use tfhe_fft::c64;
use tfhe_fft::ordered::{Method, Plan};
use dyn_stack::{PodStack, GlobalPodBuffer};
use core::time::Duration;
let plan = Plan::new(4, Method::Measure(Duration::from_millis(10)));
let mut memory = GlobalPodBuffer::new(plan.fft_scratch().unwrap());
let stack = PodStack::new(&mut memory);
let mut buf = [c64::default(); 4];
plan.fwd(&mut buf, stack);
Sourcepub fn inv(&self, buf: &mut [c64], stack: PodStack<'_>)
pub fn inv(&self, buf: &mut [c64], stack: PodStack<'_>)
Performs an inverse FFT in place, using the provided stack as scratch space.
§Example
use tfhe_fft::c64;
use tfhe_fft::ordered::{Method, Plan};
use dyn_stack::{PodStack, GlobalPodBuffer, ReborrowMut};
use core::time::Duration;
let plan = Plan::new(4, Method::Measure(Duration::from_millis(10)));
let mut memory = GlobalPodBuffer::new(plan.fft_scratch().unwrap());
let mut stack = PodStack::new(&mut memory);
let mut buf = [c64::default(); 4];
plan.fwd(&mut buf, stack.rb_mut());
plan.inv(&mut buf, stack);
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Plan
impl RefUnwindSafe for Plan
impl Send for Plan
impl Sync for Plan
impl Unpin for Plan
impl UnwindSafe for Plan
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