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)
11
12#[allow(unused_imports)]
13use super::functions::*;
14use super::functions::{ComputeBackend, ComputeKernel};
15use super::types::{BufferHandle, CpuBackend};
16
17impl Default for CpuBackend {
18    fn default() -> Self {
19        Self::new()
20    }
21}
22
23impl ComputeBackend for CpuBackend {
24    fn name(&self) -> &str {
25        "CPU Fallback"
26    }
27    fn create_buffer(&self, size: usize) -> BufferHandle {
28        let mut bufs = self.buffers.borrow_mut();
29        let id = bufs.len();
30        bufs.push(vec![0.0; size]);
31        BufferHandle(id)
32    }
33    fn write_buffer(&self, handle: BufferHandle, data: &[f64]) {
34        let mut bufs = self.buffers.borrow_mut();
35        bufs[handle.0] = data.to_vec();
36    }
37    fn read_buffer(&self, handle: BufferHandle) -> Vec<f64> {
38        let bufs = self.buffers.borrow();
39        bufs[handle.0].clone()
40    }
41    fn dispatch(&self, kernel: &dyn ComputeKernel, work_size: usize) {
42        let mut outputs: Vec<Vec<f64>> = Vec::new();
43        kernel.execute(&[], &mut outputs, work_size);
44    }
45}