arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-backend/src/cpu_fft64_avx/zn.rs
poulpy-backend/src/cpu_fft64_avx/zn.rsRaw
 1use poulpy_hal::{
 2    api::TakeSlice,
 3    layouts::{Scratch, ZnToMut},
 4    oep::{TakeSliceImpl, ZnAddNormalImpl, ZnFillNormalImpl, ZnFillUniformImpl, ZnNormalizeInplaceImpl, ZnNormalizeTmpBytesImpl},
 5    reference::zn::{zn_add_normal, zn_fill_normal, zn_fill_uniform, zn_normalize_inplace, zn_normalize_tmp_bytes},
 6    source::Source,
 7};
 8
 9use crate::cpu_fft64_avx::FFT64Avx;
10
11unsafe impl ZnNormalizeTmpBytesImpl<Self> for FFT64Avx {
12    fn zn_normalize_tmp_bytes_impl(n: usize) -> usize {
13        zn_normalize_tmp_bytes(n)
14    }
15}
16
17unsafe impl ZnNormalizeInplaceImpl<Self> for FFT64Avx
18where
19    Self: TakeSliceImpl<Self>,
20{
21    fn zn_normalize_inplace_impl<R>(n: usize, basek: usize, res: &mut R, res_col: usize, scratch: &mut Scratch<Self>)
22    where
23        R: ZnToMut,
24    {
25        let (carry, _) = scratch.take_slice(n);
26        zn_normalize_inplace::<R, FFT64Avx>(n, basek, res, res_col, carry);
27    }
28}
29
30unsafe impl ZnFillUniformImpl<Self> for FFT64Avx {
31    fn zn_fill_uniform_impl<R>(n: usize, basek: usize, res: &mut R, res_col: usize, source: &mut Source)
32    where
33        R: ZnToMut,
34    {
35        zn_fill_uniform(n, basek, res, res_col, source);
36    }
37}
38
39unsafe impl ZnFillNormalImpl<Self> for FFT64Avx {
40    #[allow(clippy::too_many_arguments)]
41    fn zn_fill_normal_impl<R>(
42        n: usize,
43        basek: usize,
44        res: &mut R,
45        res_col: usize,
46        k: usize,
47        source: &mut Source,
48        sigma: f64,
49        bound: f64,
50    ) where
51        R: ZnToMut,
52    {
53        zn_fill_normal(n, basek, res, res_col, k, source, sigma, bound);
54    }
55}
56
57unsafe impl ZnAddNormalImpl<Self> for FFT64Avx {
58    #[allow(clippy::too_many_arguments)]
59    fn zn_add_normal_impl<R>(
60        n: usize,
61        basek: usize,
62        res: &mut R,
63        res_col: usize,
64        k: usize,
65        source: &mut Source,
66        sigma: f64,
67        bound: f64,
68    ) where
69        R: ZnToMut,
70    {
71        zn_add_normal(n, basek, res, res_col, k, source, sigma, bound);
72    }
73}