[llvm] 16b2387 - [llvm-exegesis] Fix snippet value scaling (#77226)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 16 11:49:22 PST 2024
Author: Aiden Grossman
Date: 2024-01-16T11:49:17-08:00
New Revision: 16b238798250cb16ac78c710958b353cb45b11a0
URL: https://github.com/llvm/llvm-project/commit/16b238798250cb16ac78c710958b353cb45b11a0
DIFF: https://github.com/llvm/llvm-project/commit/16b238798250cb16ac78c710958b353cb45b11a0.diff
LOG: [llvm-exegesis] Fix snippet value scaling (#77226)
Currently, BenchmarkRunner scales the per snippet counters by
multiplying the raw counter values by the number of instructions (casted
to a double) divided by the minimum number of instructions. This is
incorrect for the loop repetition mode for snippets that don't fit a
whole number of times into the minimum instruction count. For example,
with 3 instructions in the snippet and the minimum number of
instructions set to 4, the loop repetitor will execute a total of six
instructions, but BenchmarkRunner will scale the raw count by 3/4
instead of 3/6=1/2. This will also be incorrect for the duplicate
snippet repetitor after #77224.
This patch fixes this behavior by dividing the raw count by the ceiling
of the number of repetitions divided by the instruction count.
Added:
Modified:
llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
Removed:
################################################################################
diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
index 28d578ce5bea013..bc43c2d06324cc0 100644
--- a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
+++ b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
@@ -6,6 +6,7 @@
//
//===----------------------------------------------------------------------===//
+#include <cmath>
#include <memory>
#include <string>
@@ -615,9 +616,9 @@ std::pair<Error, Benchmark> BenchmarkRunner::runConfiguration(
// Scale the measurements by instruction.
BM.PerInstructionValue /= BenchmarkResult.NumRepetitions;
// Scale the measurements by snippet.
- BM.PerSnippetValue *=
- static_cast<double>(BenchmarkResult.Key.Instructions.size()) /
- BenchmarkResult.NumRepetitions;
+ BM.PerSnippetValue /=
+ std::ceil(BenchmarkResult.NumRepetitions /
+ static_cast<double>(BenchmarkResult.Key.Instructions.size()));
}
BenchmarkResult.Measurements = std::move(*NewMeasurements);
More information about the llvm-commits
mailing list