`-kN' runs N iterations of the underlying job between looking at the
clock, without affecting the other statistics. The main purpose here is
to reduce the impact of the measurement overhead.
unsigned gbits; /* Group size bits */
unsigned n; /* Number of factors */
unsigned i; /* Number of intervals (or zero) */
unsigned gbits; /* Group size bits */
unsigned n; /* Number of factors */
unsigned i; /* Number of intervals (or zero) */
+ unsigned k; /* Main loop batch size */
double t; /* Time for each interval (secs) */
mp *e; /* Public exponent */
unsigned f; /* Flags */
double t; /* Time for each interval (secs) */
mp *e; /* Public exponent */
unsigned f; /* Flags */
data size for enc and hash.\n\
-n, --factors=COUNT Number of factors for {exp,mul}-sim.\n\
-i, --intervals=COUNT Number of intervals to run for. [0; forever]\n\
data size for enc and hash.\n\
-n, --factors=COUNT Number of factors for {exp,mul}-sim.\n\
-i, --intervals=COUNT Number of intervals to run for. [0; forever]\n\
+-k, --batch=COUNT Number of operations to batch between timer checks.\n\
-t, --time=TIME Length of an interval in seconds. [1]\n\
");
}
-t, --time=TIME Length of an interval in seconds. [1]\n\
");
}
const jobops *j;
struct timeval tv_next, tv_now;
double t, ttot;
const jobops *j;
struct timeval tv_next, tv_now;
double t, ttot;
unsigned long ii;
clock_t c_start, c_stop;
double itot;
unsigned long ii;
clock_t c_start, c_stop;
double itot;
{ "group-bits", OPTF_ARGREQ, 0, 'B' },
{ "factors", OPTF_ARGREQ, 0, 'n' },
{ "intervals", OPTF_ARGREQ, 0, 'i' },
{ "group-bits", OPTF_ARGREQ, 0, 'B' },
{ "factors", OPTF_ARGREQ, 0, 'n' },
{ "intervals", OPTF_ARGREQ, 0, 'i' },
+ { "batch", OPTF_ARGREQ, 0, 'k' },
{ "public-exponent", OPTF_ARGREQ, 0, 'e' },
{ "time", OPTF_ARGREQ, 0, 't' },
{ "no-check", 0, 0, 'q' },
{ 0, 0, 0, 0 }
};
{ "public-exponent", OPTF_ARGREQ, 0, 'e' },
{ "time", OPTF_ARGREQ, 0, 't' },
{ "no-check", 0, 0, 'q' },
{ 0, 0, 0, 0 }
};
- i = mdwopt(argc, argv, "hvulC:b:B:n:i:e:t:q", opts, 0, 0, 0);
+ i = mdwopt(argc, argv, "hvulC:b:B:n:i:k:e:t:q", opts, 0, 0, 0);
if (i < 0) break;
switch (i) {
case 'h': help(stdout); exit(0);
if (i < 0) break;
switch (i) {
case 'h': help(stdout); exit(0);
break;
case 'i': o.i = uarg("interval count", optarg); break;
case 't': o.t = farg("interval length", optarg); break;
break;
case 'i': o.i = uarg("interval count", optarg); break;
case 't': o.t = farg("interval length", optarg); break;
+ case 'k': o.k = uarg("batch size", optarg); break;
case 'q': o.f |= OF_NOCHECK; break;
default: usage(stderr); exit(1);
}
case 'q': o.f |= OF_NOCHECK; break;
default: usage(stderr); exit(1);
}
ii = 0;
c_start = clock();
do {
ii = 0;
c_start = clock();
do {
+ for (k = 0; k < o.k; k++) { j->run(p); }
+ ii += k;
gettimeofday(&tv_now, 0);
} while (TV_CMP(&tv_now, <, &tv_next));
c_stop = clock();
gettimeofday(&tv_now, 0);
} while (TV_CMP(&tv_now, <, &tv_next));
c_stop = clock();