|
1 | 1 | use criterion::{Criterion, criterion_group}; |
| 2 | +use nalgebra::{Scalar, Vector3}; |
| 3 | +use serde_derive::{Deserialize, Serialize}; |
2 | 4 | use splashsurf_lib::dense_subdomains; |
3 | 5 | use splashsurf_lib::kernel::CubicSplineKernel; |
| 6 | +use splashsurf_lib::uniform_grid::UniformCartesianCubeGrid3d; |
4 | 7 | use std::time::Duration; |
5 | 8 |
|
| 9 | +// Code to generate the input data for the benchmark from dense_subdomains.rs |
| 10 | +/* |
| 11 | +if subdomain_particles.len() > 6800 { |
| 12 | + println!("{}", subdomain_particles.len()); |
| 13 | + let arguments = DensityGridLoopParameters { |
| 14 | + levelset_grid: levelset_grid.clone(), |
| 15 | + subdomain_particles: subdomain_particles.clone(), |
| 16 | + subdomain_particle_densities: subdomain_particle_densities.clone(), |
| 17 | + subdomain_mc_grid: mc_grid.clone(), |
| 18 | + subdomain_ijk: *subdomain_idx.index(), |
| 19 | + global_mc_grid: parameters.global_marching_cubes_grid.clone(), |
| 20 | + cube_radius, |
| 21 | + squared_support_with_margin, |
| 22 | + particle_rest_mass: parameters.particle_rest_mass, |
| 23 | + compact_support_radius: parameters.compact_support_radius, |
| 24 | + }; |
| 25 | + serde_json::to_writer( |
| 26 | + std::fs::File::create(format!( |
| 27 | + "density_grid_loop_subdomain_{}.json", |
| 28 | + flat_subdomain_idx |
| 29 | + )) |
| 30 | + .unwrap(), |
| 31 | + &arguments, |
| 32 | + ) |
| 33 | + .unwrap(); |
| 34 | +} |
| 35 | + */ |
| 36 | + |
| 37 | +#[derive(Clone, Serialize, Deserialize)] |
| 38 | +pub struct DensityGridLoopParameters<I: Scalar, R: Scalar> { |
| 39 | + pub levelset_grid: Vec<R>, |
| 40 | + pub subdomain_particles: Vec<Vector3<R>>, |
| 41 | + pub subdomain_particle_densities: Vec<R>, |
| 42 | + pub subdomain_mc_grid: UniformCartesianCubeGrid3d<I, R>, |
| 43 | + pub subdomain_ijk: [I; 3], |
| 44 | + pub global_mc_grid: UniformCartesianCubeGrid3d<i64, R>, |
| 45 | + pub cube_radius: I, |
| 46 | + pub squared_support_with_margin: R, |
| 47 | + pub particle_rest_mass: R, |
| 48 | + pub compact_support_radius: R, |
| 49 | +} |
| 50 | + |
6 | 51 | pub fn grid_loop_no_simd(c: &mut Criterion) { |
7 | | - let params: dense_subdomains::DensityGridLoopParameters<i64, f32> = serde_json::from_reader( |
| 52 | + let params: DensityGridLoopParameters<i64, f32> = serde_json::from_reader( |
8 | 53 | std::fs::File::open("../data/density_grid_loop_subdomain_33.json").unwrap(), |
9 | 54 | ) |
10 | 55 | .unwrap(); |
@@ -45,7 +90,7 @@ pub fn grid_loop_neon(c: &mut Criterion) { |
45 | 90 | return; |
46 | 91 | } |
47 | 92 |
|
48 | | - let params: dense_subdomains::DensityGridLoopParameters<i64, f32> = serde_json::from_reader( |
| 93 | + let params: DensityGridLoopParameters<i64, f32> = serde_json::from_reader( |
49 | 94 | std::fs::File::open("../data/density_grid_loop_subdomain_33.json").unwrap(), |
50 | 95 | ) |
51 | 96 | .unwrap(); |
@@ -160,7 +205,7 @@ pub fn grid_loop_avx2(c: &mut Criterion) { |
160 | 205 | return; |
161 | 206 | } |
162 | 207 |
|
163 | | - let params: dense_subdomains::DensityGridLoopParameters<i64, f32> = serde_json::from_reader( |
| 208 | + let params: DensityGridLoopParameters<i64, f32> = serde_json::from_reader( |
164 | 209 | std::fs::File::open("../data/density_grid_loop_subdomain_33.json").unwrap(), |
165 | 210 | ) |
166 | 211 | .unwrap(); |
|
0 commit comments