chiark
/
gitweb
/
~mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
progs/perftest.c: Introduce top-level option for batching.
[catacomb]
/
progs
/
perftest.c
diff --git
a/progs/perftest.c
b/progs/perftest.c
index f064c2aada5afc41440d48ef0e6963c581c84578..405bb31492de9e315ffa227cf51d8b8e7f8d08ca 100644
(file)
--- a/
progs/perftest.c
+++ b/
progs/perftest.c
@@
-86,6
+86,7
@@
typedef struct opts {
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 */
@@
-678,6
+679,7
@@
Options:\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\
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\
");
}
@@
-735,7
+737,7
@@
int main(int argc, char *argv[])
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 n;
+ unsigned n
, k
;
unsigned long ii;
clock_t c_start, c_stop;
double itot;
unsigned long ii;
clock_t c_start, c_stop;
double itot;
@@
-754,13
+756,14
@@
int main(int argc, char *argv[])
{ "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);
@@
-778,6
+781,7
@@
int main(int argc, char *argv[])
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);
}
@@
-797,8
+801,8
@@
int main(int argc, char *argv[])
ii = 0;
c_start = clock();
do {
ii = 0;
c_start = clock();
do {
- j->run(p);
- ii
++
;
+ 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();