Skip to main content

dot_one_soa

Function dot_one_soa 

Source
unsafe fn dot_one_soa(a: &mut [Complex4], b: &[Complex4])
Examples found in repository?
crates/competitive/src/math/fast_fourier_transform.rs (line 315)
305    pub unsafe fn convolve_f64_avx2(
306        a: impl ExactSizeIterator<Item = f64>,
307        b: impl ExactSizeIterator<Item = f64>,
308        range: std::ops::Range<usize>,
309    ) -> Vec<f64> {
310        let n = (range.end.next_power_of_two() / 2).max(4);
311        let mut fa = pack_f64(a, n);
312        let mut fb = pack_f64(b, n);
313        fft_soa(&mut fa);
314        fft_soa(&mut fb);
315        dot_one_soa(&mut fa, &fb);
316        drop(fb);
317        ifft_soa(&mut fa);
318        range
319            .map(|i| {
320                if i < n {
321                    fa[i >> 2].re[i & 3]
322                } else {
323                    fa[(i - n) >> 2].im[i & 3]
324                }
325            })
326            .collect()
327    }