Skip to content

Commit

Permalink
[llvm-exegesis] Analysis: Show value extents.
Browse files Browse the repository at this point in the history
Summary: Screenshot attached in phabricator.

Reviewers: gchatelet

Subscribers: tschuett, llvm-commits

Differential Revision: https://reviews.llvm.org/D47318

llvm-svn: 333181
  • Loading branch information
legrosbuffle committed May 24, 2018
1 parent 13f8a77 commit ae8ae5d
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 9 deletions.
32 changes: 23 additions & 9 deletions llvm/tools/llvm-exegesis/lib/Analysis.cpp
Expand Up @@ -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>";
}
Expand Down Expand Up @@ -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>";
Expand Down Expand Up @@ -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>
)";
Expand Down
10 changes: 10 additions & 0 deletions llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp
Expand Up @@ -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
24 changes: 24 additions & 0 deletions llvm/tools/llvm-exegesis/lib/BenchmarkResult.h
Expand Up @@ -18,6 +18,7 @@

#include "llvm/ADT/StringRef.h"
#include "llvm/Support/YAMLTraits.h"
#include <limits>
#include <string>
#include <vector>

Expand Down Expand Up @@ -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
10 changes: 10 additions & 0 deletions llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp
Expand Up @@ -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

0 comments on commit ae8ae5d

Please sign in to comment.