use size_t for counter, some statistics tweaks

This commit is contained in:
cathugger 2017-10-09 21:41:34 +00:00
parent 90f42c1675
commit 00df4f8416

37
main.c
View file

@ -527,14 +527,20 @@ struct statstruct {
u32 v; u32 v;
size_t align; size_t align;
} numsuccess; } numsuccess;
union {
u32 v;
size_t align;
} numrestart;
} ; } ;
VEC_STRUCT(statsvec,struct statstruct); VEC_STRUCT(statsvec,struct statstruct);
struct tstatstruct { struct tstatstruct {
u64 numcalc; u64 numcalc;
u64 numsuccess; u64 numsuccess;
u64 numrestart;
u32 oldnumcalc; u32 oldnumcalc;
u32 oldnumsuccess; u32 oldnumsuccess;
u32 oldnumrestart;
} ; } ;
VEC_STRUCT(tstatsvec,struct tstatstruct); VEC_STRUCT(tstatsvec,struct tstatstruct);
#endif #endif
@ -643,6 +649,9 @@ static void *dowork(void *task)
initseed: initseed:
randombytes(seed,sizeof(seed)); randombytes(seed,sizeof(seed));
#ifdef STATISTICS
++st->numrestart.v;
#endif
again: again:
if (unlikely(endwork)) if (unlikely(endwork))
@ -706,7 +715,7 @@ static void *dofastwork(void *task)
u8 seed[SEED_LEN]; u8 seed[SEED_LEN];
u8 hashsrc[checksumstrlen + PUBLIC_LEN + 1]; u8 hashsrc[checksumstrlen + PUBLIC_LEN + 1];
ge_p3 ge_public; ge_p3 ge_public;
u64 counter; size_t counter;
size_t i; size_t i;
char *sname; char *sname;
#ifdef STATISTICS #ifdef STATISTICS
@ -724,13 +733,16 @@ static void *dofastwork(void *task)
memcpy(sname, workdir, workdirlen); memcpy(sname, workdir, workdirlen);
initseed: initseed:
#ifdef STATISTICS
++st->numrestart.v;
#endif
randombytes(seed,sizeof(seed)); randombytes(seed,sizeof(seed));
ed25519_seckey_expand(sk,seed); ed25519_seckey_expand(sk,seed);
ge_scalarmult_base(&ge_public,sk); ge_scalarmult_base(&ge_public,sk);
ge_p3_tobytes(pk,&ge_public); ge_p3_tobytes(pk,&ge_public);
for (counter = 0;counter < U64_MAX-8;counter += 8) { for (counter = 0;counter < SIZE_MAX-8;counter += 8) {
ge_p1p1 sum; ge_p1p1 sum;
if (unlikely(endwork)) if (unlikely(endwork))
@ -984,7 +996,11 @@ int main(int argc,char **argv)
if (!quietflag) if (!quietflag)
printfilters(); printfilters();
#ifdef STATISTICS
if (!filters_count() && !reportdelay)
#else
if (!filters_count()) if (!filters_count())
#endif
return 0; return 0;
if (outfile) if (outfile)
@ -1058,7 +1074,7 @@ int main(int argc,char **argv)
#ifdef STATISTICS #ifdef STATISTICS
clock_gettime(CLOCK_MONOTONIC,&nowtime); clock_gettime(CLOCK_MONOTONIC,&nowtime);
inowtime = (1000000 * (u64)nowtime.tv_sec) + (nowtime.tv_nsec / 1000); inowtime = (1000000 * (u64)nowtime.tv_sec) + (nowtime.tv_nsec / 1000);
u64 sumcalc = 0,sumsuccess = 0; u64 sumcalc = 0,sumsuccess = 0,sumrestart = 0;
for (size_t i = 0;i < numthreads;++i) { for (size_t i = 0;i < numthreads;++i) {
u32 newt,tdiff; u32 newt,tdiff;
// numcalc // numcalc
@ -1073,6 +1089,12 @@ int main(int argc,char **argv)
VEC_BUF(tstats,i).oldnumsuccess = newt; VEC_BUF(tstats,i).oldnumsuccess = newt;
VEC_BUF(tstats,i).numsuccess += (u64)tdiff; VEC_BUF(tstats,i).numsuccess += (u64)tdiff;
sumsuccess += VEC_BUF(tstats,i).numsuccess; sumsuccess += VEC_BUF(tstats,i).numsuccess;
// numrestart
newt = VEC_BUF(stats,i).numrestart.v;
tdiff = newt - VEC_BUF(tstats,i).oldnumrestart;
VEC_BUF(tstats,i).oldnumrestart = newt;
VEC_BUF(tstats,i).numrestart += (u64)tdiff;
sumrestart += VEC_BUF(tstats,i).numrestart;
} }
if (reportdelay && (!ireporttime || inowtime - ireporttime >= reportdelay)) { if (reportdelay && (!ireporttime || inowtime - ireporttime >= reportdelay)) {
if (ireporttime) if (ireporttime)
@ -1083,13 +1105,17 @@ int main(int argc,char **argv)
ireporttime = 1; ireporttime = 1;
double calcpersec = (1000000.0 * sumcalc) / (inowtime - istarttime); double calcpersec = (1000000.0 * sumcalc) / (inowtime - istarttime);
double successpersec = (1000000.0 * sumsuccess) / (inowtime - istarttime); double succpersec = (1000000.0 * sumsuccess) / (inowtime - istarttime);
fprintf(stderr,">calc/sec:%8lf, success/sec:%8lf, elapsed:%5.6lfsec\n",calcpersec,successpersec,(inowtime - istarttime + elapsedoffset) / 1000000.0); double restpersec = (1000000.0 * sumrestart) / (inowtime - istarttime);
fprintf(stderr,">calc/sec:%8lf, succ/sec:%8lf, rest/sec:%8lf, elapsed:%5.6lfsec\n",
calcpersec,succpersec,restpersec,
(inowtime - istarttime + elapsedoffset) / 1000000.0);
if (realtimestats) { if (realtimestats) {
for (size_t i = 0;i < numthreads;++i) { for (size_t i = 0;i < numthreads;++i) {
VEC_BUF(tstats,i).numcalc = 0; VEC_BUF(tstats,i).numcalc = 0;
VEC_BUF(tstats,i).numsuccess = 0; VEC_BUF(tstats,i).numsuccess = 0;
VEC_BUF(tstats,i).numrestart = 0;
} }
elapsedoffset += inowtime - istarttime; elapsedoffset += inowtime - istarttime;
istarttime = inowtime; istarttime = inowtime;
@ -1099,6 +1125,7 @@ int main(int argc,char **argv)
for (size_t i = 0;i < numthreads;++i) { for (size_t i = 0;i < numthreads;++i) {
VEC_BUF(tstats,i).numcalc /= 2; VEC_BUF(tstats,i).numcalc /= 2;
VEC_BUF(tstats,i).numsuccess /= 2; VEC_BUF(tstats,i).numsuccess /= 2;
VEC_BUF(tstats,i).numrestart /= 2;
} }
u64 timediff = (inowtime - istarttime + 1) / 2; u64 timediff = (inowtime - istarttime + 1) / 2;
elapsedoffset += timediff; elapsedoffset += timediff;