use coremem::{Driver, SimState, SpirvDriver}; use coremem::geom::Index; use coremem::mat::{Ferroxcube3R1MH, IsoConductorOr, GenericMaterial, GenericMaterialNoPml, GenericMaterialOneField}; use coremem::real::R32; use coremem::sim::spirv::{self, SpirvSim}; use criterion::{BenchmarkId, criterion_group, criterion_main, Criterion}; type DefaultDriver = Driver::>>; pub fn bench_step(c: &mut Criterion) { for size in &[10, 20, 40, 80, 160] { let sim = SimState::>::new(Index::new(*size, *size, *size), 1e-5); c.bench_with_input(BenchmarkId::new("Driver::step", size), &sim, |b, sim| { let mut driver = Driver::new_with_state(sim.clone()); b.iter(|| driver.step()) }); } } pub fn bench_step_spirv(c: &mut Criterion) { for size in &[10, 20, 40, 80, 160] { let sim: SpirvSim = SpirvSim::new(Index::new(*size, *size, *size), 1e-5); c.bench_with_input(BenchmarkId::new("Driver::step_spirv", size), &sim, |b, sim| { let mut driver = Driver::new_with_state(sim.clone()); b.iter(|| driver.step()) }); } } pub fn bench_step_spirv_iso_3r1(c: &mut Criterion) { type Mat = IsoConductorOr; for size in &[10, 20, 40, 80, 160] { let sim: SpirvSim = SpirvSim::new(Index::new(*size, *size, *size), 1e-5); c.bench_with_input(BenchmarkId::new("Driver::spirv_ISO3R1", size), &sim, |b, sim| { let mut driver: SpirvDriver = Driver::new_with_state(sim.clone()); b.iter(|| driver.step()) }); } } // pub fn bench_step_no_pml(c: &mut Criterion) { // for size in &[10, 20, 40, 80, 160] { // c.bench_with_input(BenchmarkId::new("Driver::step_no_pml", size), size, |b, &size| { // let mut driver = DefaultDriver::new(Index::new(size, size, size), 1e-5); // b.iter(|| driver.step()) // }); // } // } // // pub fn bench_step_one_vec(c: &mut Criterion) { // for size in &[10, 20, 40, 80, 160] { // c.bench_with_input(BenchmarkId::new("Driver::step_one_vec", size), size, |b, &size| { // let mut driver = DefaultDriver::new(Index::new(size, size, size), 1e-5); // b.iter(|| driver.step()) // }); // } // } // // pub fn bench_step_with_pml(c: &mut Criterion) { // let size = 40; // for thickness in &[0, 1, 2, 4, 8, 16] { // c.bench_with_input(BenchmarkId::new("Driver::step_with_pml", thickness), thickness, |b, &thickness| { // let mut driver = DefaultDriver::new(Index::new(size, size, size), 1e-5); // driver.add_pml_boundary(Index::new(thickness, thickness, thickness)); // b.iter(|| driver.step()) // }); // } // } criterion_group!(benches, /*bench_step,*/ bench_step_spirv, bench_step_spirv_iso_3r1); criterion_main!(benches);