[][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,
);