poulpy/poulpy-hal/src/oep/convolution.rs
poulpy-hal/src/oep/convolution.rsRaw
1use crate::layouts::{
2 Backend, CnvPVecL, CnvPVecLToMut, CnvPVecLToRef, CnvPVecR, CnvPVecRToMut, CnvPVecRToRef, Module, Scratch, VecZnxBigToMut,
3 VecZnxDftToMut, VecZnxToRef, ZnxInfos,
4};
5
6/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
7/// * See the TODO reference implementation.
8/// * See [crate::api::CnvPVecLAlloc] for corresponding public API.
9/// # Safety [crate::doc::backend_safety] for safety contract.
10pub unsafe trait CnvPVecLAllocImpl<BE: Backend> {
11 fn cnv_pvec_left_alloc_impl(n: usize, cols: usize, size: usize) -> CnvPVecL<Vec<u8>, BE>;
12 fn cnv_pvec_right_alloc_impl(n: usize, cols: usize, size: usize) -> CnvPVecR<Vec<u8>, BE>;
13}
14
15/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
16/// * See the TODO reference implementation.
17/// * See [crate::api::CnvPVecLBytesOf] for corresponding public API.
18/// # Safety [crate::doc::backend_safety] for safety contract.
19pub unsafe trait CnvPVecBytesOfImpl {
20 fn bytes_of_cnv_pvec_left_impl(n: usize, cols: usize, size: usize) -> usize;
21 fn bytes_of_cnv_pvec_right_impl(n: usize, cols: usize, size: usize) -> usize;
22}
23
24/// # THIS TRAIT IS AN OPEN EXTENSION POINT (unsafe)
25/// * See the TODO reference implementation.
26/// * See [crate::api::Convolution] for corresponding public API.
27/// # Safety [crate::doc::backend_safety] for safety contract.
28pub unsafe trait ConvolutionImpl<BE: Backend> {
29 fn cnv_prepare_left_tmp_bytes_impl(module: &Module<BE>, res_size: usize, a_size: usize) -> usize;
30 fn cnv_prepare_left_impl<R, A>(module: &Module<BE>, res: &mut R, a: &A, scratch: &mut Scratch<BE>)
31 where
32 R: CnvPVecLToMut<BE>,
33 A: VecZnxToRef;
34 fn cnv_prepare_right_tmp_bytes_impl(module: &Module<BE>, res_size: usize, a_size: usize) -> usize;
35 fn cnv_prepare_right_impl<R, A>(module: &Module<BE>, res: &mut R, a: &A, scratch: &mut Scratch<BE>)
36 where
37 R: CnvPVecRToMut<BE>,
38 A: VecZnxToRef + ZnxInfos;
39 fn cnv_apply_dft_tmp_bytes_impl(
40 module: &Module<BE>,
41 res_size: usize,
42 res_offset: usize,
43 a_size: usize,
44 b_size: usize,
45 ) -> usize;
46
47 fn cnv_by_const_apply_tmp_bytes_impl(
48 module: &Module<BE>,
49 res_size: usize,
50 res_offset: usize,
51 a_size: usize,
52 b_size: usize,
53 ) -> usize;
54
55 #[allow(clippy::too_many_arguments)]
56 fn cnv_by_const_apply_impl<R, A>(
57 module: &Module<BE>,
58 res: &mut R,
59 res_offset: usize,
60 res_col: usize,
61 a: &A,
62 a_col: usize,
63 b: &[i64],
64 scratch: &mut Scratch<BE>,
65 ) where
66 R: VecZnxBigToMut<BE>,
67 A: VecZnxToRef;
68
69 #[allow(clippy::too_many_arguments)]
70 fn cnv_apply_dft_impl<R, A, B>(
71 module: &Module<BE>,
72 res: &mut R,
73 res_offset: usize,
74 res_col: usize,
75 a: &A,
76 a_col: usize,
77 b: &B,
78 b_col: usize,
79 scratch: &mut Scratch<BE>,
80 ) where
81 R: VecZnxDftToMut<BE>,
82 A: CnvPVecLToRef<BE>,
83 B: CnvPVecRToRef<BE>;
84 fn cnv_pairwise_apply_dft_tmp_bytes(
85 module: &Module<BE>,
86 res_size: usize,
87 res_offset: usize,
88 a_size: usize,
89 b_size: usize,
90 ) -> usize;
91 #[allow(clippy::too_many_arguments)]
92 fn cnv_pairwise_apply_dft_impl<R, A, B>(
93 module: &Module<BE>,
94 res: &mut R,
95 res_offset: usize,
96 res_col: usize,
97 a: &A,
98 b: &B,
99 i: usize,
100 j: usize,
101 scratch: &mut Scratch<BE>,
102 ) where
103 R: VecZnxDftToMut<BE>,
104 A: CnvPVecLToRef<BE>,
105 B: CnvPVecRToRef<BE>;
106}