Fixed sim_idle to account for a reasonable number of cycles which have passed when an asynchrnous event terminated the idle wait.
Also corrected the text of a printf which described the units of the asynch latency variable as nano seconds instead of microseconds.
This commit is contained in:
parent
049540aa20
commit
f7b53a5fe9
2 changed files with 8 additions and 1 deletions
2
scp.c
2
scp.c
|
@ -1823,7 +1823,7 @@ else {
|
||||||
fprintf (st, " event delay %d, queue time %d\n", uptr->a_event_time, uptr->a_sim_interval);
|
fprintf (st, " event delay %d, queue time %d\n", uptr->a_event_time, uptr->a_sim_interval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fprintf (st, "asynch latency: %d microseconds\n", sim_asynch_latency);
|
fprintf (st, "asynch latency: %d nanoseconds\n", sim_asynch_latency);
|
||||||
fprintf (st, "asynch instruction latency: %d instructions\n", sim_asynch_inst_latency);
|
fprintf (st, "asynch instruction latency: %d instructions\n", sim_asynch_inst_latency);
|
||||||
pthread_mutex_unlock (&sim_asynch_lock);
|
pthread_mutex_unlock (&sim_asynch_lock);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
in this Software without prior written authorization from Robert M Supnik.
|
in this Software without prior written authorization from Robert M Supnik.
|
||||||
|
|
||||||
|
22-Apr-11 MP Fixed Asynch I/O support to reasonably account cycles
|
||||||
|
when an idle wait is terminated by an external event
|
||||||
05-Jan-11 MP Added Asynch I/O support
|
05-Jan-11 MP Added Asynch I/O support
|
||||||
29-Dec-10 MP Fixed clock resolution determination for Unix platforms
|
29-Dec-10 MP Fixed clock resolution determination for Unix platforms
|
||||||
22-Sep-08 RMS Added "stability threshold" for idle routine
|
22-Sep-08 RMS Added "stability threshold" for idle routine
|
||||||
|
@ -44,6 +46,9 @@
|
||||||
sim_os_msec - return elapsed time in msec
|
sim_os_msec - return elapsed time in msec
|
||||||
sim_os_sleep - sleep specified number of seconds
|
sim_os_sleep - sleep specified number of seconds
|
||||||
sim_os_ms_sleep - sleep specified number of milliseconds
|
sim_os_ms_sleep - sleep specified number of milliseconds
|
||||||
|
sim_idle_ms_sleep - sleep specified number of milliseconds
|
||||||
|
or until awakened by an asynchronous
|
||||||
|
event
|
||||||
|
|
||||||
The calibration, idle, and throttle routines are OS-independent; the _os_
|
The calibration, idle, and throttle routines are OS-independent; the _os_
|
||||||
routines are not.
|
routines are not.
|
||||||
|
@ -576,6 +581,8 @@ if (w_idle == 0) { /* none? */
|
||||||
}
|
}
|
||||||
act_ms = SIM_IDLE_MS_SLEEP (w_ms); /* wait */
|
act_ms = SIM_IDLE_MS_SLEEP (w_ms); /* wait */
|
||||||
act_cyc = act_ms * cyc_ms;
|
act_cyc = act_ms * cyc_ms;
|
||||||
|
if (act_ms < w_ms) /* awakened early? */
|
||||||
|
act_cyc += (cyc_ms * sim_idle_rate_ms) / 2; /* account for half an interval's worth of cycles */
|
||||||
if (sim_interval > act_cyc)
|
if (sim_interval > act_cyc)
|
||||||
sim_interval = sim_interval - act_cyc;
|
sim_interval = sim_interval - act_cyc;
|
||||||
else sim_interval = 0;
|
else sim_interval = 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue