oxiphysics_gpu/compute/
cpubackend_traits.rs1use 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}