Driver: fix a bug where we might step more than the user wanted

This commit is contained in:
2022-08-22 01:23:41 -07:00
parent 82af4b100d
commit b0bedd1efa

View File

@@ -296,14 +296,8 @@ where
}
steps_this_time
}
pub fn step_multiple(&mut self, num_steps: u32) {
let mut steps_remaining = num_steps;
while steps_remaining != 0 {
steps_remaining -= self.step_at_most(steps_remaining);
}
}
pub fn step(&mut self) {
self.step_multiple(1);
self.step_at_most(1);
}
/// Returns the number of timesteps needed to reach the end time
@@ -318,7 +312,9 @@ where
self.sim_end_time = Some(sim_end_time);
let mut stepped = false;
while self.state.step_no() < *sim_end_time {
self.step_multiple(1000);
let steps_left = *sim_end_time - self.state.step_no();
// sanity limit: don't try to step too much at once else we may lock up the GPU/etc.
self.step_at_most(steps_left.min(1000) as u32);
stepped = true;
}
if stepped {
@@ -519,9 +515,11 @@ impl<R: Real, T: DriverStimulus<R> + Send + 'static> StimAccess<R, T> {
assert!(!self.outstanding.get());
self.outstanding.set(true);
// these are cheap Arc clones
let diag = self.diag.clone();
let stim = self.stim.clone();
let response_handle = self.response_channel.0.clone();
self.worker.execute(move || {
trace!("eval_stimulus begin");
let rendered = diag.instrument_stimuli(|| {