mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-10 06:25:01 +00:00
[llvm-exegesis] Sum counter values when several counters are specified for a ProcRes.
Summary: This allows handling memory ports on SNB. Reviewers: gchatelet Subscribers: tschuett, llvm-commits Differential Revision: https://reviews.llvm.org/D48076 llvm-svn: 334502
This commit is contained in:
parent
3d6f625e55
commit
e5b71bf1a2
@ -227,18 +227,24 @@ UopsBenchmarkRunner::runMeasurements(const ExecutableFunction &Function,
|
||||
.PfmCounters.IssueCounters[ProcResIdx];
|
||||
if (!PfmCounters)
|
||||
continue;
|
||||
// FIXME: Sum results when there are several counters for a single ProcRes
|
||||
// We sum counts when there are several counters for a single ProcRes
|
||||
// (e.g. P23 on SandyBridge).
|
||||
pfm::PerfEvent UopPerfEvent(PfmCounters);
|
||||
if (!UopPerfEvent.valid())
|
||||
llvm::report_fatal_error(
|
||||
llvm::Twine("invalid perf event ").concat(PfmCounters));
|
||||
pfm::Counter Counter(UopPerfEvent);
|
||||
Counter.start();
|
||||
Function();
|
||||
Counter.stop();
|
||||
int64_t CounterValue = 0;
|
||||
llvm::SmallVector<llvm::StringRef, 2> CounterNames;
|
||||
llvm::StringRef(PfmCounters).split(CounterNames, ',');
|
||||
for (const auto& CounterName : CounterNames) {
|
||||
pfm::PerfEvent UopPerfEvent(CounterName);
|
||||
if (!UopPerfEvent.valid())
|
||||
llvm::report_fatal_error(
|
||||
llvm::Twine("invalid perf event ").concat(PfmCounters));
|
||||
pfm::Counter Counter(UopPerfEvent);
|
||||
Counter.start();
|
||||
Function();
|
||||
Counter.stop();
|
||||
CounterValue += Counter.read();
|
||||
}
|
||||
Result.push_back({llvm::itostr(ProcResIdx),
|
||||
static_cast<double>(Counter.read()) / NumRepetitions,
|
||||
static_cast<double>(CounterValue) / NumRepetitions,
|
||||
SchedModel.getProcResource(ProcResIdx)->Name});
|
||||
}
|
||||
return Result;
|
||||
|
Loading…
x
Reference in New Issue
Block a user