Function custos_math::opencl::cpu_exec
source · pub fn cpu_exec<'a, 'o, T, F>(
device: &'o OpenCL,
matrix: &Matrix<'a, T, OpenCL>,
f: F
) -> Result<Matrix<'o, T, OpenCL>>where
F: for<'b> Fn(&'b CPU, &Matrix<'_, T>) -> Matrix<'b, T>,
T: Copy + Default + Debug,Expand description
Compute operations on the CPU even though the matrix was created with an OpenCL device. There were some optimizations implemented regarding unified memory architectures.
Example
use custos::{OpenCL, Read};
use custos_math::{Matrix, opencl::cpu_exec, FnsOps};
fn main() -> custos::Result<()> {
let device = OpenCL::new(0)?;
let a = Matrix::from((&device, 2, 2, [1f32, 2., 3., 4.]));
let res = cpu_exec(&device, &a, |cpu, x| cpu.neg(x))?;
assert_eq!(res.read(), vec![-1., -2., -3., -4.]);
Ok(())
}