TIMER: Run simulator pre-calibration for a minimum of 100ms

Faster host systems today can get very fast instruction execution rates
for a short duration calibration test.  These may be skewed by round
off error, so we now run the calibration for a minimum of 100ms.
This commit is contained in:
Mark Pizzolato 2020-11-18 14:47:42 -08:00
parent 03a79b1205
commit 8233fdc3c1
2 changed files with 5 additions and 2 deletions

View file

@ -3459,8 +3459,10 @@ sim_switches = saved_switches;
sim_cancel (&SIM_INTERNAL_UNIT); sim_cancel (&SIM_INTERNAL_UNIT);
sim_activate (&precalib_unit, sim_precalibrate_ips); sim_activate (&precalib_unit, sim_precalibrate_ips);
start = sim_os_msec(); start = sim_os_msec();
do {
sim_instr(); sim_instr();
end = sim_os_msec(); end = sim_os_msec();
} while ((end - start) < SIM_PRE_CALIBRATE_MIN_MS);
sim_precalibrate_ips = (int32)(1000.0 * (sim_precalibrate_ips / (double)(end - start))); sim_precalibrate_ips = (int32)(1000.0 * (sim_precalibrate_ips / (double)(end - start)));
for (tmr=0; tmr<=SIM_NTIMERS; tmr++) { for (tmr=0; tmr<=SIM_NTIMERS; tmr++) {

View file

@ -78,6 +78,7 @@ int clock_gettime(int clock_id, struct timespec *tp);
#define SIM_INITIAL_IPS 5000000 /* uncalibrated assumption */ #define SIM_INITIAL_IPS 5000000 /* uncalibrated assumption */
/* about instructions per second */ /* about instructions per second */
#define SIM_PRE_CALIBRATE_MIN_MS 100 /* minimum time to run precalibration activities */
#define SIM_IDLE_CAL 10 /* ms to calibrate */ #define SIM_IDLE_CAL 10 /* ms to calibrate */
#define SIM_IDLE_STMIN 2 /* min sec for stability */ #define SIM_IDLE_STMIN 2 /* min sec for stability */