Remove countMaskInv caching in bench framework
We were saving a div by caching the inverse as a float, but this ended up requiring a int -> float -> int conversion, which takes almost as much time as the difference between float mul and div. There are lots of other more pressing issues with the bench framework which probably require simply removing the adaptive iteration count stuff anyway.
This commit is contained in:
parent
31e72b284e
commit
0b1b9148cd
2 changed files with 3 additions and 6 deletions
|
@ -55,13 +55,13 @@ bool benchmark::State::KeepRunning()
|
|||
else {
|
||||
now = gettimedouble();
|
||||
double elapsed = now - lastTime;
|
||||
double elapsedOne = elapsed * countMaskInv;
|
||||
double elapsedOne = elapsed / (countMask + 1);
|
||||
if (elapsedOne < minTime) minTime = elapsedOne;
|
||||
if (elapsedOne > maxTime) maxTime = elapsedOne;
|
||||
|
||||
// We only use relative values, so don't have to handle 64-bit wrap-around specially
|
||||
nowCycles = perf_cpucycles();
|
||||
uint64_t elapsedOneCycles = (nowCycles - lastCycles) * countMaskInv;
|
||||
uint64_t elapsedOneCycles = (nowCycles - lastCycles) / (countMask + 1);
|
||||
if (elapsedOneCycles < minCycles) minCycles = elapsedOneCycles;
|
||||
if (elapsedOneCycles > maxCycles) maxCycles = elapsedOneCycles;
|
||||
|
||||
|
@ -69,7 +69,6 @@ bool benchmark::State::KeepRunning()
|
|||
// If the execution was much too fast (1/128th of maxElapsed), increase the count mask by 8x and restart timing.
|
||||
// The restart avoids including the overhead of this code in the measurement.
|
||||
countMask = ((countMask<<3)|7) & ((1LL<<60)-1);
|
||||
countMaskInv = 1./(countMask+1);
|
||||
count = 0;
|
||||
minTime = std::numeric_limits<double>::max();
|
||||
maxTime = std::numeric_limits<double>::min();
|
||||
|
@ -81,7 +80,6 @@ bool benchmark::State::KeepRunning()
|
|||
uint64_t newCountMask = ((countMask<<1)|1) & ((1LL<<60)-1);
|
||||
if ((count & newCountMask)==0) {
|
||||
countMask = newCountMask;
|
||||
countMaskInv = 1./(countMask+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ namespace benchmark {
|
|||
std::string name;
|
||||
double maxElapsed;
|
||||
double beginTime;
|
||||
double lastTime, minTime, maxTime, countMaskInv;
|
||||
double lastTime, minTime, maxTime;
|
||||
uint64_t count;
|
||||
uint64_t countMask;
|
||||
uint64_t beginCycles;
|
||||
|
@ -55,7 +55,6 @@ namespace benchmark {
|
|||
minCycles = std::numeric_limits<uint64_t>::max();
|
||||
maxCycles = std::numeric_limits<uint64_t>::min();
|
||||
countMask = 1;
|
||||
countMaskInv = 1./(countMask + 1);
|
||||
}
|
||||
bool KeepRunning();
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue