Skip to main content

oxiphysics_gpu/compute/
cpubackend_traits.rs

1//! # CpuBackend - Trait Implementations
2//!
3//! This module contains trait implementations for `CpuBackend`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Default`
8//! - `ComputeBackend`
9//!
10//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
11use super::functions::{ComputeBackend, ComputeKernel};
12use super::types::{BufferHandle, CpuBackend};
13
14impl Default for CpuBackend {
15    fn default() -> Self {
16        Self::new()
17    }
18}
19
20impl ComputeBackend for CpuBackend {
21    fn name(&self) -> &str {
22        "CPU Fallback"
23    }
24    fn create_buffer(&self, size: usize) -> BufferHandle {
25        let mut bufs = self.buffers.borrow_mut();
26        let id = bufs.len();
27        bufs.push(vec![0.0; size]);
28        BufferHandle(id)
29    }
30    fn write_buffer(&self, handle: BufferHandle, data: &[f64]) {
31        let mut bufs = self.buffers.borrow_mut();
32        bufs[handle.0] = data.to_vec();
33    }
34    fn read_buffer(&self, handle: BufferHandle) -> Vec<f64> {
35        let bufs = self.buffers.borrow();
36        bufs[handle.0].clone()
37    }
38    fn dispatch(&self, kernel: &dyn ComputeKernel, work_size: usize) {
39        let mut outputs: Vec<Vec<f64>> = Vec::new();
40        kernel.execute(&[], &mut outputs, work_size);
41    }
42}