oxiphysics_gpu/compute/
cpubackend_traits.rs1#[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}