pub struct FftRequest<T: FftSupported, I = u8, O = u8> {
pub plan_key: PlanKey,
pub direction: FftDirection,
pub input: GpuRef<I>,
pub output: GpuRef<O>,
pub reply: Sender<Result<(), GpuError>>,
/* private fields */
}Expand description
Typed cuFFT request — the canonical Phase-1 entry point.
§Type parameters
Tis the scalar dtype of the transform (f32for the float lane,f64for the double lane). Used forT::KINDreporting on theFftDispatchtrait.Iis the input buffer’s element type (defaultu8for the raw-byte Path B). Phase 1.5++ adds typed Path A by using e.g.I = f32(R2C input),I = C32(C2R / C2C input).Ois the output buffer’s element type (defaultu8). Path A usesO = C32(R2C / C2C output) orO = f32(C2R output).
Plan resolution is performed by the actor on receipt of the
FftMsg::Exec message — the request only carries a PlanKey.
Repeat calls with the same key hit the LRU cache on the actor.
In-place transforms: output may alias input (cuFFT supports
this when shapes line up — only meaningful when I = O).
Fields§
§plan_key: PlanKey§direction: FftDirection§input: GpuRef<I>§output: GpuRef<O>§reply: Sender<Result<(), GpuError>>Implementations§
Source§impl<T: FftSupported, I, O> FftRequest<T, I, O>
impl<T: FftSupported, I, O> FftRequest<T, I, O>
Sourcepub fn new(
plan_key: PlanKey,
direction: FftDirection,
input: GpuRef<I>,
output: GpuRef<O>,
reply: Sender<Result<(), GpuError>>,
) -> Self
pub fn new( plan_key: PlanKey, direction: FftDirection, input: GpuRef<I>, output: GpuRef<O>, reply: Sender<Result<(), GpuError>>, ) -> Self
Construct a request. For Path B, I = O = u8 and the buffers
are byte-cast on the caller side. For Path A, I and O are
the per-side element types (e.g. f32/C32 for R2C).
Trait Implementations§
Source§impl<T, I, O> FftDispatch for FftRequest<T, I, O>
impl<T, I, O> FftDispatch for FftRequest<T, I, O>
Auto Trait Implementations§
impl<T, I, O> Freeze for FftRequest<T, I, O>
impl<T, I = u8, O = u8> !RefUnwindSafe for FftRequest<T, I, O>
impl<T, I, O> Send for FftRequest<T, I, O>
impl<T, I, O> Sync for FftRequest<T, I, O>
impl<T, I, O> Unpin for FftRequest<T, I, O>where
T: Unpin,
impl<T, I, O> UnsafeUnpin for FftRequest<T, I, O>
impl<T, I = u8, O = u8> !UnwindSafe for FftRequest<T, I, O>
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