diff options
author | Clement Courbet <courbet@google.com> | 2018-05-24 12:41:02 +0000 |
---|---|---|
committer | Clement Courbet <courbet@google.com> | 2018-05-24 12:41:02 +0000 |
commit | ae8ae5dc78b8c6950b57b37706dfc37131d4d913 (patch) | |
tree | b2db1517539526a5e3653bc38c881607eb1eaa0f | |
parent | 13f8a77d79ed48da17ee61e0ba1357418ad2d706 (diff) | |
download | llvm-ae8ae5dc78b8c6950b57b37706dfc37131d4d913.zip llvm-ae8ae5dc78b8c6950b57b37706dfc37131d4d913.tar.gz llvm-ae8ae5dc78b8c6950b57b37706dfc37131d4d913.tar.bz2 |
[llvm-exegesis] Analysis: Show value extents.
Summary: Screenshot attached in phabricator.
Reviewers: gchatelet
Subscribers: tschuett, llvm-commits
Differential Revision: https://reviews.llvm.org/D47318
llvm-svn: 333181
-rw-r--r-- | llvm/tools/llvm-exegesis/lib/Analysis.cpp | 32 | ||||
-rw-r--r-- | llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp | 10 | ||||
-rw-r--r-- | llvm/tools/llvm-exegesis/lib/BenchmarkResult.h | 24 | ||||
-rw-r--r-- | llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp | 10 |
4 files changed, 67 insertions, 9 deletions
diff --git a/llvm/tools/llvm-exegesis/lib/Analysis.cpp b/llvm/tools/llvm-exegesis/lib/Analysis.cpp index 6ad693f..0802f84 100644 --- a/llvm/tools/llvm-exegesis/lib/Analysis.cpp +++ b/llvm/tools/llvm-exegesis/lib/Analysis.cpp @@ -195,22 +195,30 @@ void Analysis::printSchedClassClustersHtml(std::vector<size_t> PointIds, OS << "<tr><td>"; writeClusterId<kEscapeHtml>(OS, CurrentClusterId); OS << "</td><td><ul>"; - const auto &ClusterRepresentative = - Points[PointIds[I]]; // FIXME: average measurements. + std::vector<BenchmarkMeasureStats> MeasurementStats( + Points[PointIds[I]].Measurements.size()); for (; I < E && Clustering_.getClusterIdForPoint(PointIds[I]) == CurrentClusterId; ++I) { + const auto &Point = Points[PointIds[I]]; OS << "<li><span class=\"mono\">"; - writeEscaped<kEscapeHtml>(OS, Points[PointIds[I]].Key.OpcodeName); + writeEscaped<kEscapeHtml>(OS, Point.Key.OpcodeName); OS << "</span> <span class=\"mono\">"; - writeEscaped<kEscapeHtml>(OS, Points[PointIds[I]].Key.Config); + writeEscaped<kEscapeHtml>(OS, Point.Key.Config); OS << "</span></li>"; + for (size_t J = 0, F = Point.Measurements.size(); J < F; ++J) { + MeasurementStats[J].push(Point.Measurements[J]); + } } OS << "</ul></td>"; - for (const auto &Measurement : ClusterRepresentative.Measurements) { - OS << "<td>"; - writeMeasurementValue<kEscapeHtml>(OS, Measurement.Value); - OS << "</td>"; + for (const auto &Stats : MeasurementStats) { + OS << "<td class=\"measurement\">"; + writeMeasurementValue<kEscapeHtml>(OS, Stats.avg()); + OS << "<br><span class=\"minmax\">["; + writeMeasurementValue<kEscapeHtml>(OS, Stats.min()); + OS << ";"; + writeMeasurementValue<kEscapeHtml>(OS, Stats.max()); + OS << "]</span></td>"; } OS << "</tr>"; } @@ -321,7 +329,7 @@ void Analysis::printSchedClassDescHtml(const llvm::MCSchedClassDesc &SCDesc, writeEscaped<kEscapeHtml>(OS, SubtargetInfo_->getSchedModel() .getProcResource(WPR.ProcResourceIdx) ->Name); - OS << "</spam>: " << WPR.Cycles << "</li>"; + OS << "</span>: " << WPR.Cycles << "</li>"; } OS << "</ul></td>"; OS << "</tr>"; @@ -378,6 +386,12 @@ table.sched-class-desc td { span.mono { font-family: monospace; } +span.minmax { + color: #888; +} +td.measurement { + text-align: center; +} </style> </head> )"; diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp index b1083f4..ed449db 100644 --- a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp +++ b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp @@ -104,4 +104,14 @@ void InstructionBenchmark::writeYamlOrDie(const llvm::StringRef Filename) { } } +void BenchmarkMeasureStats::push(const BenchmarkMeasure &BM) { + if (Key.empty()) + Key = BM.Key; + assert(Key == BM.Key); + ++NumValues; + SumValues += BM.Value; + MaxValue = std::max(MaxValue, BM.Value); + MinValue = std::min(MinValue, BM.Value); +} + } // namespace exegesis diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.h b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.h index 3a7d241..4362df8 100644 --- a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.h +++ b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.h @@ -18,6 +18,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Support/YAMLTraits.h" +#include <limits> #include <string> #include <vector> @@ -61,6 +62,29 @@ struct InstructionBenchmark { void writeYamlOrDie(const llvm::StringRef Filename); }; +//------------------------------------------------------------------------------ +// Utilities to work with Benchmark measures. + +// A class that measures stats over benchmark measures. +class BenchmarkMeasureStats { +public: + void push(const BenchmarkMeasure &BM); + + double avg() const { + assert(NumValues); + return SumValues / NumValues; + } + double min() const { return MinValue; } + double max() const { return MaxValue; } + +private: + std::string Key; + double SumValues = 0.0; + int NumValues = 0; + double MaxValue = std::numeric_limits<double>::min(); + double MinValue = std::numeric_limits<double>::max(); +}; + } // namespace exegesis #endif // LLVM_TOOLS_LLVM_EXEGESIS_BENCHMARKRESULT_H diff --git a/llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp b/llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp index 9e00510..33b139c 100644 --- a/llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp +++ b/llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp @@ -77,5 +77,15 @@ TEST(BenchmarkResultTest, WriteToAndReadFromDisk) { } } +TEST(BenchmarkResultTest, BenchmarkMeasureStats) { + BenchmarkMeasureStats Stats; + Stats.push(BenchmarkMeasure{"a", 0.5, "debug a"}); + Stats.push(BenchmarkMeasure{"a", 1.5, "debug a"}); + Stats.push(BenchmarkMeasure{"a", -1.0, "debug a"}); + Stats.push(BenchmarkMeasure{"a", 0.0, "debug a"}); + EXPECT_EQ(Stats.min(), -1.0); + EXPECT_EQ(Stats.max(), 1.5); + EXPECT_EQ(Stats.avg(), 0.25); // (0.5+1.5-1.0+0.0) / 4 +} } // namespace } // namespace exegesis |