Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | cherrypick [8ad25ef9eb] from 8.6 - timerate: added dynamic factor by threshold calculation (avoid growing of the execution time if iterations are not consistent, e. g. wax continuously on time) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | sebres-8-5-timerate |
Files: | files | file ages | folders |
SHA3-256: |
fd80b4356eabc3f1ed6f832b77b952c5 |
User & Date: | sergey.brester 2019-02-12 19:35:37.332 |
Context
2019-02-12
| ||
19:38 | timerate: allow break from measurement cycle (usable to provide conditional stop possibility inside ... check-in: 11760d10b0 user: sergey.brester tags: sebres-8-5-timerate | |
19:35 | cherrypick [8ad25ef9eb] from 8.6 - timerate: added dynamic factor by threshold calculation (avoid gr... check-in: fd80b4356e user: sergey.brester tags: sebres-8-5-timerate | |
18:41 | merge 8.5 (note: to avoid too many conflicts, merged using `fossil merge --baseline 0055a16a8b core-... check-in: 0e846f3e6f user: sergey.brester tags: sebres-8-5-timerate | |
2019-02-07
| ||
21:20 | timerate: added dynamic factor by threshold calculation (avoid growing of the execution time if iter... check-in: 8ad25ef9eb user: sebres tags: sebres-8-6-timerate | |
Changes
Changes to generic/tclCmdMZ.c.
︙ | ︙ | |||
3981 3982 3983 3984 3985 3986 3987 | { static double measureOverhead = 0; /* global measure-overhead */ double overhead = -1; /* given measure-overhead */ register Tcl_Obj *objPtr; register int result, i; Tcl_Obj *calibrate = NULL, *direct = NULL; | | | | > > | 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 | { static double measureOverhead = 0; /* global measure-overhead */ double overhead = -1; /* given measure-overhead */ register Tcl_Obj *objPtr; register int result, i; Tcl_Obj *calibrate = NULL, *direct = NULL; Tcl_WideUInt count = 0; /* Holds repetition count */ Tcl_WideInt maxms = -0x7FFFFFFFFFFFFFFFL; /* Maximal running time (in milliseconds) */ Tcl_WideUInt threshold = 1; /* Current threshold for check time (faster * repeat count without time check) */ Tcl_WideUInt maxIterTm = 1; /* Max time of some iteration as max threshold * additionally avoid divide to zero (never < 1) */ unsigned short factor = 50; /* Factor (4..50) limiting threshold to avoid * growth of execution time. */ register Tcl_WideInt start, middle, stop; #ifndef TCL_WIDE_CLICKS Tcl_Time now; #endif static const char *const options[] = { "-direct", "-overhead", "-calibrate", "--", NULL |
︙ | ︙ | |||
4180 4181 4182 4183 4184 4185 4186 | Tcl_GetTime(&now); middle = now.sec; middle *= 1000000; middle += now.usec; #endif if (middle >= stop) { break; } | | | > > > > > | > > > > > > > > | > > | | 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 | Tcl_GetTime(&now); middle = now.sec; middle *= 1000000; middle += now.usec; #endif if (middle >= stop) { break; } /* don't calculate threshold by few iterations, because sometimes first * iteration(s) can be too fast or slow (cached, delayed clean up, etc) */ if (count < 10) { threshold = 1; continue; } /* average iteration time in microsecs */ threshold = (middle - start) / count; if (threshold > maxIterTm) { maxIterTm = threshold; /* interations seems to be longer */ if (threshold > (maxIterTm * 2)) { if ((factor *= 2) > 50) factor = 50; } else { if (factor < 50) factor++; } } else if (factor > 4) { /* interations seems to be shorter */ if (threshold < (maxIterTm / 2)) { if ((factor /= 2) < 4) factor = 4; } else { factor--; } } /* as relation between remaining time and time since last check, * maximal some % of time (by factor), so avoid growing of the execution time * if iterations are not consistent, e. g. wax continuously on time) */ threshold = ((stop - middle) / maxIterTm) / factor + 1; if (threshold > 100000) { /* fix for too large threshold */ threshold = 100000; } } { Tcl_Obj *objarr[8], **objs = objarr; |
︙ | ︙ |