poulpy/backend/src/hal/oep/vmp_pmat.rs
backend/src/hal/oep/vmp_pmat.rsRaw
1use crate::hal::layouts::{
2 Backend, MatZnxToRef, Module, Scratch, VecZnxDftToMut, VecZnxDftToRef, VmpPMatOwned, VmpPMatToMut, VmpPMatToRef,
3};
4
5pub unsafe trait VmpPMatAllocImpl<B: Backend> {
6 fn vmp_pmat_alloc_impl(n: usize, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> VmpPMatOwned<B>;
7}
8
9pub unsafe trait VmpPMatAllocBytesImpl<B: Backend> {
10 fn vmp_pmat_alloc_bytes_impl(n: usize, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> usize;
11}
12
13pub unsafe trait VmpPMatFromBytesImpl<B: Backend> {
14 fn vmp_pmat_from_bytes_impl(
15 n: usize,
16 rows: usize,
17 cols_in: usize,
18 cols_out: usize,
19 size: usize,
20 bytes: Vec<u8>,
21 ) -> VmpPMatOwned<B>;
22}
23
24pub unsafe trait VmpPrepareTmpBytesImpl<B: Backend> {
25 fn vmp_prepare_tmp_bytes_impl(module: &Module<B>, rows: usize, cols_in: usize, cols_out: usize, size: usize) -> usize;
26}
27
28pub unsafe trait VmpPMatPrepareImpl<B: Backend> {
29 fn vmp_prepare_impl<R, A>(module: &Module<B>, res: &mut R, a: &A, scratch: &mut Scratch<B>)
30 where
31 R: VmpPMatToMut<B>,
32 A: MatZnxToRef;
33}
34
35pub unsafe trait VmpApplyTmpBytesImpl<B: Backend> {
36 fn vmp_apply_tmp_bytes_impl(
37 module: &Module<B>,
38 res_size: usize,
39 a_size: usize,
40 b_rows: usize,
41 b_cols_in: usize,
42 b_cols_out: usize,
43 b_size: usize,
44 ) -> usize;
45}
46
47pub unsafe trait VmpApplyImpl<B: Backend> {
48 fn vmp_apply_impl<R, A, C>(module: &Module<B>, res: &mut R, a: &A, b: &C, scratch: &mut Scratch<B>)
49 where
50 R: VecZnxDftToMut<B>,
51 A: VecZnxDftToRef<B>,
52 C: VmpPMatToRef<B>;
53}
54
55pub unsafe trait VmpApplyAddTmpBytesImpl<B: Backend> {
56 fn vmp_apply_add_tmp_bytes_impl(
57 module: &Module<B>,
58 res_size: usize,
59 a_size: usize,
60 b_rows: usize,
61 b_cols_in: usize,
62 b_cols_out: usize,
63 b_size: usize,
64 ) -> usize;
65}
66
67pub unsafe trait VmpApplyAddImpl<B: Backend> {
68 // Same as [MatZnxDftOps::vmp_apply] except result is added on R instead of overwritting R.
69 fn vmp_apply_add_impl<R, A, C>(module: &Module<B>, res: &mut R, a: &A, b: &C, scale: usize, scratch: &mut Scratch<B>)
70 where
71 R: VecZnxDftToMut<B>,
72 A: VecZnxDftToRef<B>,
73 C: VmpPMatToRef<B>;
74}