[llvm] [llvm-exegesis] Fix snippet value scaling (PR #77226)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 6 22:53:26 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-tools-llvm-exegesis
Author: Aiden Grossman (boomanaiden154)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/77226.diff
1 Files Affected:
- (modified) llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp (+4-3)
``````````diff
diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
index dee7af5fd520a4..87e2b768d5e63f 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);
``````````
</details>
https://github.com/llvm/llvm-project/pull/77226
More information about the llvm-commits
mailing list