[−][src]Function concrete_lib::operators::math::fft::two_double_mac
pub fn two_double_mac(
fft_res_1: &mut AlignedVec<CTorus>,
fft_res_2: &mut AlignedVec<CTorus>,
fft_a_1: &[CTorus],
fft_b: &AlignedVec<CTorus>,
fft_c_1: &[CTorus],
fft_d: &AlignedVec<CTorus>,
fft_a_2: &[CTorus],
fft_c_2: &[CTorus]
)
Compute two mac (multiplier-accumulator) fft_res_1[i] += fft_a_1[i] * fft_b[i] + fft_c_1[i] * fft_d[i] fft_res_2[i] += fft_a_2[i] * fft_b[i] + fft_c_2[i] * fft_d[i]
Arguments
fft_res_1
- Aligned Vector (output)fft_res_2
- Aligned Vector (output)fft_a_1
- CTorus slice (input)fft_b
- Aligned Vector (input)fft_c_1
- CTorus Slice (input)fft_d
- Aligned Vector (input)fft_a_2
- CTorus Slice (input)fft_c_2
- CTorus Slice (input)
Example
#[macro_use] use concrete_lib; use concrete_lib::operators::math::fft; use concrete_lib::types::{C2CPlanTorus, CTorus}; use fftw::array::AlignedVec; let big_n: usize = 1024; let mut fft_a_1: AlignedVec<CTorus> = AlignedVec::new(big_n); let mut fft_a_2: AlignedVec<CTorus> = AlignedVec::new(big_n); let mut fft_b: AlignedVec<CTorus> = AlignedVec::new(big_n); let mut fft_d: AlignedVec<CTorus> = AlignedVec::new(big_n); let mut fft_c_1: AlignedVec<CTorus> = AlignedVec::new(big_n); let mut fft_c_2: AlignedVec<CTorus> = AlignedVec::new(big_n); let mut fft_res_1: AlignedVec<CTorus> = AlignedVec::new(big_n); let mut fft_res_2: AlignedVec<CTorus> = AlignedVec::new(big_n); // .. fft::two_double_mac( &mut fft_res_1, &mut fft_res_2, &fft_a_1, &fft_b, &fft_c_1, &fft_d, &fft_a_2, &fft_c_2, );