Skip to content

Commit

Permalink
bench: Fix subtle counting issue when rescaling iteration count
Browse files Browse the repository at this point in the history
Make sure that the count is a zero modulo the new mask before
scaling, otherwise the next time until a measure triggers
will take only 1/2 as long as accounted for. This caused
the 'min time' to be potentially off by as much as 100%.
  • Loading branch information
laanwj committed Nov 22, 2016
1 parent e4dbeb9 commit e0a9cb2
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/bench/bench.cpp
Expand Up @@ -64,8 +64,11 @@ bool State::KeepRunning()
return true;
}
if (elapsed*16 < maxElapsed) {
countMask = ((countMask<<1)|1) & ((1LL<<60)-1);
countMaskInv = 1./(countMask+1);
uint64_t newCountMask = ((countMask<<1)|1) & ((1LL<<60)-1);
if ((count & newCountMask)==0) {
countMask = newCountMask;
countMaskInv = 1./(countMask+1);
}
}
}
lastTime = now;
Expand Down

0 comments on commit e0a9cb2

Please sign in to comment.