bench: Fix subtle counting issue when rescaling iteration count
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%.
This commit is contained in:
parent
e4dbeb9499
commit
e0a9cb25b0
1 changed files with 5 additions and 2 deletions
|
@ -64,8 +64,11 @@ bool State::KeepRunning()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (elapsed*16 < maxElapsed) {
|
if (elapsed*16 < maxElapsed) {
|
||||||
countMask = ((countMask<<1)|1) & ((1LL<<60)-1);
|
uint64_t newCountMask = ((countMask<<1)|1) & ((1LL<<60)-1);
|
||||||
countMaskInv = 1./(countMask+1);
|
if ((count & newCountMask)==0) {
|
||||||
|
countMask = newCountMask;
|
||||||
|
countMaskInv = 1./(countMask+1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastTime = now;
|
lastTime = now;
|
||||||
|
|
Loading…
Reference in a new issue