instrument the stimulus evaluation in our sim
... stimulus evaluation accounts for like 80% of the execution time 🤦
This commit is contained in:
@@ -50,7 +50,7 @@ impl Diagnostics {
|
|||||||
render_time,
|
render_time,
|
||||||
block_time,
|
block_time,
|
||||||
render_prep_time,
|
render_prep_time,
|
||||||
overall_time - step_time - stim_time - block_time - render_prep_time,
|
overall_time - step_time /*- stim_time*/ - block_time - render_prep_time,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,9 @@ pub struct Driver<S> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<S: AbstractSim> Driver<S> {
|
impl<S: AbstractSim> Driver<S> {
|
||||||
pub fn new(state: S) -> Self {
|
pub fn new(mut state: S) -> Self {
|
||||||
|
let diag = SyncDiagnostics::new();
|
||||||
|
state.use_diagnostics(diag.clone());
|
||||||
Self {
|
Self {
|
||||||
state,
|
state,
|
||||||
renderer: Arc::new(MultiRenderer::new()),
|
renderer: Arc::new(MultiRenderer::new()),
|
||||||
@@ -45,7 +47,7 @@ impl<S: AbstractSim> Driver<S> {
|
|||||||
],
|
],
|
||||||
stimuli: StimuliAdapter::new(),
|
stimuli: StimuliAdapter::new(),
|
||||||
sim_end_time: None,
|
sim_end_time: None,
|
||||||
diag: SyncDiagnostics::new(),
|
diag,
|
||||||
last_diag_time: Instant::now(),
|
last_diag_time: Instant::now(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -125,6 +127,7 @@ impl<S: AbstractSim + Send + Sync + Serialize + for<'a> Deserialize<'a> + 'stati
|
|||||||
let ser = render::SerializerRenderer::new(state_file);
|
let ser = render::SerializerRenderer::new(state_file);
|
||||||
let loaded = ser.try_load().map(|s| {
|
let loaded = ser.try_load().map(|s| {
|
||||||
self.state = s.state;
|
self.state = s.state;
|
||||||
|
self.state.use_diagnostics(self.diag.clone());
|
||||||
}).is_some();
|
}).is_some();
|
||||||
self.add_renderer(ser, state_file, snapshot_frequency, None);
|
self.add_renderer(ser, state_file, snapshot_frequency, None);
|
||||||
loaded
|
loaded
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
use crate::diagnostics::SyncDiagnostics;
|
||||||
use crate::geom::{Coord, Cube, Index, InvertedRegion, Region};
|
use crate::geom::{Coord, Cube, Index, InvertedRegion, Region};
|
||||||
use crate::cross::mat::{FullyGenericMaterial, Material, Vacuum};
|
use crate::cross::mat::{FullyGenericMaterial, Material, Vacuum};
|
||||||
use crate::cross::real::Real;
|
use crate::cross::real::Real;
|
||||||
@@ -209,6 +210,9 @@ pub trait AbstractSim: Sync {
|
|||||||
/// Take a "snapshot" of the simulation, dropping all material-specific information.
|
/// Take a "snapshot" of the simulation, dropping all material-specific information.
|
||||||
fn to_static(&self) -> StaticSim;
|
fn to_static(&self) -> StaticSim;
|
||||||
fn to_generic(&self) -> GenericSim<Self::Real>;
|
fn to_generic(&self) -> GenericSim<Self::Real>;
|
||||||
|
fn use_diagnostics(&mut self, _diag: SyncDiagnostics) {
|
||||||
|
// optional
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//--- HELPER METHODS below (derived) ---//
|
//--- HELPER METHODS below (derived) ---//
|
||||||
|
@@ -152,6 +152,10 @@ where
|
|||||||
diag: self.diag.clone(),
|
diag: self.diag.clone(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn use_diagnostics(&mut self, diag: SyncDiagnostics) {
|
||||||
|
self.diag = diag;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R: Real, M: Default, B> SpirvSim<R, M, B>
|
impl<R: Real, M: Default, B> SpirvSim<R, M, B>
|
||||||
|
Reference in New Issue
Block a user