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, base2k: 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, base2k, res, res_col, carry);
27 }
28}
29
30unsafe impl ZnFillUniformImpl<Self> for FFT64Avx {
31 fn zn_fill_uniform_impl<R>(n: usize, base2k: usize, res: &mut R, res_col: usize, source: &mut Source)
32 where
33 R: ZnToMut,
34 {
35 zn_fill_uniform(n, base2k, 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 base2k: 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, base2k, 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 base2k: 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, base2k, res, res_col, k, source, sigma, bound);
72 }
73}