poulpy/poulpy-backend/src/cpu_spqlios/fft64/zn.rs
poulpy-backend/src/cpu_spqlios/fft64/zn.rsRaw
1use poulpy_hal::{
2 api::TakeSlice,
3 layouts::{Scratch, Zn, ZnToMut, ZnxInfos, ZnxSliceSize, ZnxView, ZnxViewMut},
4 oep::{TakeSliceImpl, ZnAddNormalImpl, ZnFillNormalImpl, ZnFillUniformImpl, ZnNormalizeInplaceImpl},
5 reference::zn::{zn_add_normal, zn_fill_normal, zn_fill_uniform},
6 source::Source,
7};
8
9use crate::cpu_spqlios::{FFT64Spqlios, ffi::zn64};
10
11unsafe impl ZnNormalizeInplaceImpl<Self> for FFT64Spqlios
12where
13 Self: TakeSliceImpl<Self>,
14{
15 fn zn_normalize_inplace_impl<A>(n: usize, basek: usize, a: &mut A, a_col: usize, scratch: &mut Scratch<Self>)
16 where
17 A: ZnToMut,
18 {
19 let mut a: Zn<&mut [u8]> = a.to_mut();
20
21 let (tmp_bytes, _) = scratch.take_slice(n * size_of::<i64>());
22
23 unsafe {
24 zn64::zn64_normalize_base2k_ref(
25 n as u64,
26 basek as u64,
27 a.at_mut_ptr(a_col, 0),
28 a.size() as u64,
29 a.sl() as u64,
30 a.at_ptr(a_col, 0),
31 a.size() as u64,
32 a.sl() as u64,
33 tmp_bytes.as_mut_ptr(),
34 );
35 }
36 }
37}
38
39unsafe impl ZnFillUniformImpl<Self> for FFT64Spqlios {
40 fn zn_fill_uniform_impl<R>(n: usize, basek: usize, res: &mut R, res_col: usize, source: &mut Source)
41 where
42 R: ZnToMut,
43 {
44 zn_fill_uniform(n, basek, res, res_col, source);
45 }
46}
47
48unsafe impl ZnFillNormalImpl<Self> for FFT64Spqlios {
49 #[allow(clippy::too_many_arguments)]
50 fn zn_fill_normal_impl<R>(
51 n: usize,
52 basek: usize,
53 res: &mut R,
54 res_col: usize,
55 k: usize,
56 source: &mut Source,
57 sigma: f64,
58 bound: f64,
59 ) where
60 R: ZnToMut,
61 {
62 zn_fill_normal(n, basek, res, res_col, k, source, sigma, bound);
63 }
64}
65
66unsafe impl ZnAddNormalImpl<Self> for FFT64Spqlios {
67 #[allow(clippy::too_many_arguments)]
68 fn zn_add_normal_impl<R>(
69 n: usize,
70 basek: usize,
71 res: &mut R,
72 res_col: usize,
73 k: usize,
74 source: &mut Source,
75 sigma: f64,
76 bound: f64,
77 ) where
78 R: ZnToMut,
79 {
80 zn_add_normal(n, basek, res, res_col, k, source, sigma, bound);
81 }
82}