rstsr_openblas/rayon_auto_impl/
op_tri.rs

1use 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}