rstsr_openblas/rayon_auto_impl/
op_tri.rs1use crate::prelude_dev::*;
2use num::complex::ComplexFloat;
3
4impl<T> DeviceOpPackTriAPI<T> for DeviceRayonAutoImpl
5where
6 T: Clone + Send + Sync,
7{
8 fn pack_tri(
9 &self,
10 a: &mut Vec<MaybeUninit<T>>,
11 la: &Layout<IxD>,
12 b: &Vec<T>,
13 lb: &Layout<IxD>,
14 uplo: FlagUpLo,
15 ) -> Result<()> {
16 let pool = self.get_current_pool();
17 let default_order = self.default_order();
18 match default_order {
19 RowMajor => pack_tri_cpu_rayon(a, la, b, lb, uplo, pool),
20 ColMajor => {
21 let la = la.reverse_axes();
22 let lb = lb.reverse_axes();
23 let uplo = uplo.flip()?;
24 pack_tri_cpu_rayon(a, &la, b, &lb, uplo, pool)
25 },
26 }
27 }
28}
29
30impl<T> DeviceOpUnpackTriAPI<T> for DeviceRayonAutoImpl
31where
32 T: ComplexFloat + Send + Sync,
33{
34 fn unpack_tri(
35 &self,
36 a: &mut Vec<MaybeUninit<T>>,
37 la: &Layout<IxD>,
38 b: &Vec<T>,
39 lb: &Layout<IxD>,
40 uplo: FlagUpLo,
41 symm: FlagSymm,
42 ) -> Result<()> {
43 let pool = self.get_current_pool();
44 let default_order = self.default_order();
45 match default_order {
46 RowMajor => unpack_tri_cpu_rayon(a, la, b, lb, uplo, symm, pool),
47 ColMajor => {
48 let la = la.reverse_axes();
49 let lb = lb.reverse_axes();
50 let uplo = uplo.flip()?;
51 unpack_tri_cpu_rayon(a, &la, b, &lb, uplo, symm, pool)
52 },
53 }
54 }
55}