custos_math/ops/
mod.rs

1pub mod nn;
2
3mod arithmetic;
4mod assign;
5mod clip;
6mod col_op;
7mod diagflat;
8mod fns;
9mod gemm;
10mod max;
11mod row_op;
12mod scalar;
13mod scalar_assign;
14mod sum;
15mod transpose;
16
17#[cfg(feature = "fastrand")]
18mod random;
19
20pub use arithmetic::*;
21pub use assign::*;
22pub use clip::*;
23pub use col_op::*;
24pub use diagflat::*;
25pub use fns::*;
26pub use gemm::*;
27pub use max::*;
28pub use row_op::*;
29pub use scalar::*;
30pub use scalar_assign::*;
31pub use sum::*;
32pub use transpose::*;
33
34#[cfg(feature = "fastrand")]
35pub use random::*;
36
37#[cfg(feature = "opencl")]
38use crate::Matrix;
39#[cfg(feature = "opencl")]
40use custos::cpu::CPU;
41
42#[cfg(feature = "opencl")]
43use custos::OpenCL;
44
45#[cfg(feature = "opencl")]
46///OpenCL
47pub fn cl_to_cpu_lr<'a, 'o, T, F>(
48    device: &'a OpenCL,
49    lhs: &Matrix<T, OpenCL>,
50    rhs: &Matrix<T, OpenCL>,
51    f: F,
52) -> Matrix<'a, T, OpenCL>
53where
54    T: Copy + Default + std::fmt::Debug,
55    F: for<'b> Fn(&'b CPU, &Matrix<T>, &Matrix<T>) -> Matrix<'b, T>,
56{
57    use crate::opencl::cpu_exec_lhs_rhs;
58    cpu_exec_lhs_rhs(device, lhs, rhs, f).unwrap()
59}
60
61#[cfg(feature = "opencl")]
62///OpenCL
63pub fn cl_to_cpu_s<'a, 'o, T, F>(
64    device: &'o OpenCL,
65    x: &Matrix<'a, T, OpenCL>,
66    f: F,
67) -> Matrix<'o, T, OpenCL>
68where
69    T: Copy + Default + std::fmt::Debug,
70    F: for<'b> Fn(&'b CPU, &Matrix<'_, T>) -> Matrix<'b, T>,
71{
72    use crate::opencl::cpu_exec;
73    cpu_exec(device, x, &f).unwrap()
74}
75
76#[cfg(feature = "opencl")]
77///OpenCL
78fn cl_to_cpu_scalar<T: Default + Copy, F: Fn(&CPU, &Matrix<T>) -> T>(
79    device: &OpenCL,
80    x: &Matrix<T, OpenCL>,
81    f: F,
82) -> T {
83    use crate::opencl::cpu_exec_scalar;
84    cpu_exec_scalar(device, x, f)
85}