summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-11-23 12:12:57 +0000
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-11-23 12:12:57 +0000
commit07a8255a7879451269960276113f97c98c7f0cfc (patch)
tree846cbd5b6b2caa4f12f1a85c95b6a74ea04aa75f /llvm
parent972e3480e2fb322d7232c98e5e2e9d3b6cd017b6 (diff)
downloadbcm5719-llvm-07a8255a7879451269960276113f97c98c7f0cfc.tar.gz
bcm5719-llvm-07a8255a7879451269960276113f97c98c7f0cfc.zip
[llvm-mca][View] Improved Retire Control Unit Statistics.
RetireControlUnitStatistics now reports extra information about the ROB and the avg/maximum number of entries consumed over the entire simulation. Example: Retire Control Unit - number of cycles where we saw N instructions retired: [# retired], [# cycles] 0, 109 (17.9%) 1, 102 (16.7%) 2, 399 (65.4%) Total ROB Entries: 64 Max Used ROB Entries: 35 ( 54.7% ) Average Used ROB Entries per cy: 32 ( 50.0% ) Documentation in llvm/docs/CommandGuide/llvmn-mca.rst has been updated to reflect this change. llvm-svn: 347493
Diffstat (limited to 'llvm')
-rw-r--r--llvm/docs/CommandGuide/llvm-mca.rst4
-rw-r--r--llvm/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s4
-rw-r--r--llvm/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s4
-rw-r--r--llvm/test/tools/llvm-mca/X86/option-all-stats-1.s4
-rw-r--r--llvm/test/tools/llvm-mca/X86/option-all-stats-2.s4
-rw-r--r--llvm/test/tools/llvm-mca/X86/option-all-views-1.s4
-rw-r--r--llvm/test/tools/llvm-mca/X86/option-all-views-2.s4
-rw-r--r--llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp44
-rw-r--r--llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.h29
-rw-r--r--llvm/tools/llvm-mca/llvm-mca.cpp2
10 files changed, 87 insertions, 16 deletions
diff --git a/llvm/docs/CommandGuide/llvm-mca.rst b/llvm/docs/CommandGuide/llvm-mca.rst
index 100136e4d17..bc50794e0cb 100644
--- a/llvm/docs/CommandGuide/llvm-mca.rst
+++ b/llvm/docs/CommandGuide/llvm-mca.rst
@@ -516,6 +516,10 @@ sections.
1, 102 (16.7%)
2, 399 (65.4%)
+ Total ROB Entries: 64
+ Max Used ROB Entries: 35 ( 54.7% )
+ Average Used ROB Entries per cy: 32 ( 50.0% )
+
Register File statistics:
Total number of mappings created: 900
diff --git a/llvm/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s b/llvm/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s
index 42467f7b3a1..e0f27cc5406 100644
--- a/llvm/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s
+++ b/llvm/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s
@@ -60,3 +60,7 @@
# CHECK-NEXT: 1, 9 (40.9%)
# CHECK-NEXT: 3, 1 (4.5%)
# CHECK-NEXT: 4, 1 (4.5%)
+
+# CHECK: Total ROB Entries: 128
+# CHECK-NEXT: Max Used ROB Entries: 16 ( 12.5% )
+# CHECK-NEXT: Average Used ROB Entries per cy: 9 ( 7.0% )
diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s b/llvm/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s
index 4a1f8706d96..59fbd485894 100644
--- a/llvm/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s
+++ b/llvm/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s
@@ -58,3 +58,7 @@
# CHECK-NEXT: [# retired], [# cycles]
# CHECK-NEXT: 0, 23 (74.2%)
# CHECK-NEXT: 2, 8 (25.8%)
+
+# CHECK: Total ROB Entries: 64
+# CHECK-NEXT: Max Used ROB Entries: 16 ( 25.0% )
+# CHECK-NEXT: Average Used ROB Entries per cy: 11 ( 17.2% )
diff --git a/llvm/test/tools/llvm-mca/X86/option-all-stats-1.s b/llvm/test/tools/llvm-mca/X86/option-all-stats-1.s
index dd3fafb60a6..d2265583c1d 100644
--- a/llvm/test/tools/llvm-mca/X86/option-all-stats-1.s
+++ b/llvm/test/tools/llvm-mca/X86/option-all-stats-1.s
@@ -62,6 +62,10 @@ add %eax, %eax
# FULLREPORT-NEXT: 0, 3 (2.9%)
# FULLREPORT-NEXT: 1, 100 (97.1%)
+# FULLREPORT: Total ROB Entries: 64
+# FULLREPORT-NEXT: Max Used ROB Entries: 22 ( 34.4% )
+# FULLREPORT-NEXT: Average Used ROB Entries per cy: 17 ( 26.6% )
+
# FULLREPORT: Register File statistics:
# FULLREPORT-NEXT: Total number of mappings created: 200
# FULLREPORT-NEXT: Max number of mappings used: 44
diff --git a/llvm/test/tools/llvm-mca/X86/option-all-stats-2.s b/llvm/test/tools/llvm-mca/X86/option-all-stats-2.s
index a7002d9a58d..e752d82bd0f 100644
--- a/llvm/test/tools/llvm-mca/X86/option-all-stats-2.s
+++ b/llvm/test/tools/llvm-mca/X86/option-all-stats-2.s
@@ -63,6 +63,10 @@ add %eax, %eax
# ALL-NEXT: 0, 3 (2.9%)
# ALL-NEXT: 1, 100 (97.1%)
+# ALL: Total ROB Entries: 64
+# ALL-NEXT: Max Used ROB Entries: 22 ( 34.4% )
+# ALL-NEXT: Average Used ROB Entries per cy: 17 ( 26.6% )
+
# ALL: Register File statistics:
# ALL-NEXT: Total number of mappings created: 200
# ALL-NEXT: Max number of mappings used: 44
diff --git a/llvm/test/tools/llvm-mca/X86/option-all-views-1.s b/llvm/test/tools/llvm-mca/X86/option-all-views-1.s
index b0545ab9be0..298a54b9ed4 100644
--- a/llvm/test/tools/llvm-mca/X86/option-all-views-1.s
+++ b/llvm/test/tools/llvm-mca/X86/option-all-views-1.s
@@ -64,6 +64,10 @@ add %eax, %eax
# FULLREPORT-NEXT: 0, 3 (2.9%)
# FULLREPORT-NEXT: 1, 100 (97.1%)
+# FULLREPORT: Total ROB Entries: 64
+# FULLREPORT-NEXT: Max Used ROB Entries: 22 ( 34.4% )
+# FULLREPORT-NEXT: Average Used ROB Entries per cy: 17 ( 26.6% )
+
# FULLREPORT: Register File statistics:
# FULLREPORT-NEXT: Total number of mappings created: 200
# FULLREPORT-NEXT: Max number of mappings used: 44
diff --git a/llvm/test/tools/llvm-mca/X86/option-all-views-2.s b/llvm/test/tools/llvm-mca/X86/option-all-views-2.s
index 66eb3bbdd66..0afd21fc263 100644
--- a/llvm/test/tools/llvm-mca/X86/option-all-views-2.s
+++ b/llvm/test/tools/llvm-mca/X86/option-all-views-2.s
@@ -63,6 +63,10 @@ add %eax, %eax
# ALL-NEXT: 0, 3 (2.9%)
# ALL-NEXT: 1, 100 (97.1%)
+# ALL: Total ROB Entries: 64
+# ALL-NEXT: Max Used ROB Entries: 22 ( 34.4% )
+# ALL-NEXT: Average Used ROB Entries per cy: 17 ( 26.6% )
+
# ALL: Register File statistics:
# ALL-NEXT: Total number of mappings created: 200
# ALL-NEXT: Max number of mappings used: 44
diff --git a/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp b/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp
index 7e2fd316c97..54eb28f1add 100644
--- a/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp
+++ b/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp
@@ -18,9 +18,39 @@
namespace llvm {
namespace mca {
+RetireControlUnitStatistics::RetireControlUnitStatistics(const MCSchedModel &SM)
+ : NumRetired(0), NumCycles(0), EntriesInUse(0), MaxUsedEntries(0),
+ SumOfUsedEntries(0) {
+ TotalROBEntries = SM.MicroOpBufferSize;
+ if (SM.hasExtraProcessorInfo()) {
+ const MCExtraProcessorInfo &EPI = SM.getExtraProcessorInfo();
+ if (EPI.ReorderBufferSize)
+ TotalROBEntries = EPI.ReorderBufferSize;
+ }
+}
+
void RetireControlUnitStatistics::onEvent(const HWInstructionEvent &Event) {
- if (Event.Type == HWInstructionEvent::Retired)
+ if (Event.Type == HWInstructionEvent::Dispatched) {
+ unsigned NumEntries =
+ static_cast<const HWInstructionDispatchedEvent &>(Event).MicroOpcodes;
+ EntriesInUse += NumEntries;
+ }
+
+ if (Event.Type == HWInstructionEvent::Retired) {
+ unsigned ReleasedEntries = Event.IR.getInstruction()->getDesc().NumMicroOps;
+ assert(EntriesInUse >= ReleasedEntries && "Invalid internal state!");
+ EntriesInUse -= ReleasedEntries;
++NumRetired;
+ }
+}
+
+void RetireControlUnitStatistics::onCycleEnd() {
+ // Update histogram
+ RetiredPerCycle[NumRetired]++;
+ NumRetired = 0;
+ ++NumCycles;
+ MaxUsedEntries = std::max(MaxUsedEntries, EntriesInUse);
+ SumOfUsedEntries += EntriesInUse;
}
void RetireControlUnitStatistics::printView(raw_ostream &OS) const {
@@ -41,6 +71,18 @@ void RetireControlUnitStatistics::printView(raw_ostream &OS) const {
<< "%)\n";
}
+ unsigned AvgUsage = (double)SumOfUsedEntries / NumCycles;
+ double MaxUsagePercentage = ((double)MaxUsedEntries / TotalROBEntries) * 100.0;
+ double NormalizedMaxPercentage = floor((MaxUsagePercentage * 10) + 0.5) / 10;
+ double AvgUsagePercentage = ((double)AvgUsage / TotalROBEntries) * 100.0;
+ double NormalizedAvgPercentage = floor((AvgUsagePercentage * 10) + 0.5) / 10;
+
+ TempStream << "\nTotal ROB Entries: " << TotalROBEntries
+ << "\nMax Used ROB Entries: " << MaxUsedEntries
+ << format(" ( %.1f%% )", NormalizedMaxPercentage)
+ << "\nAverage Used ROB Entries per cy: " << AvgUsage
+ << format(" ( %.1f%% )\n", NormalizedAvgPercentage);
+
TempStream.flush();
OS << Buffer;
}
diff --git a/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.h b/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.h
index 9a4821ec31a..02aa13bc444 100644
--- a/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.h
+++ b/llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.h
@@ -16,10 +16,13 @@
///
/// Retire Control Unit - number of cycles where we saw N instructions retired:
/// [# retired], [# cycles]
-/// 0, 9 (6.9%)
-/// 1, 6 (4.6%)
-/// 2, 1 (0.8%)
-/// 4, 3 (2.3%)
+/// 0, 109 (17.9%)
+/// 1, 102 (16.7%)
+/// 2, 399 (65.4%)
+///
+/// Total ROB Entries: 64
+/// Max Used ROB Entries: 35 ( 54.7% )
+/// Average Used ROB Entries per cy: 32 ( 50.0% )
///
//===----------------------------------------------------------------------===//
@@ -27,7 +30,7 @@
#define LLVM_TOOLS_LLVM_MCA_RETIRECONTROLUNITSTATISTICS_H
#include "Views/View.h"
-#include "llvm/MC/MCSubtargetInfo.h"
+#include "llvm/MC/MCSchedule.h"
#include <map>
namespace llvm {
@@ -39,21 +42,19 @@ class RetireControlUnitStatistics : public View {
unsigned NumRetired;
unsigned NumCycles;
-
- void updateHistograms() {
- RetiredPerCycle[NumRetired]++;
- NumRetired = 0;
- }
+ unsigned TotalROBEntries;
+ unsigned EntriesInUse;
+ unsigned MaxUsedEntries;
+ unsigned SumOfUsedEntries;
public:
- RetireControlUnitStatistics() : NumRetired(0), NumCycles(0) {}
+ RetireControlUnitStatistics(const MCSchedModel &SM);
void onEvent(const HWInstructionEvent &Event) override;
- void onCycleBegin() override { NumCycles++; }
- void onCycleEnd() override { updateHistograms(); }
-
+ void onCycleEnd() override;
void printView(llvm::raw_ostream &OS) const override;
};
+
} // namespace mca
} // namespace llvm
diff --git a/llvm/tools/llvm-mca/llvm-mca.cpp b/llvm/tools/llvm-mca/llvm-mca.cpp
index f6e72f3bfd3..8b792be0101 100644
--- a/llvm/tools/llvm-mca/llvm-mca.cpp
+++ b/llvm/tools/llvm-mca/llvm-mca.cpp
@@ -472,7 +472,7 @@ int main(int argc, char **argv) {
Printer.addView(llvm::make_unique<mca::SchedulerStatistics>(*STI));
if (PrintRetireStats)
- Printer.addView(llvm::make_unique<mca::RetireControlUnitStatistics>());
+ Printer.addView(llvm::make_unique<mca::RetireControlUnitStatistics>(SM));
if (PrintRegisterFileStats)
Printer.addView(llvm::make_unique<mca::RegisterFileStatistics>(*STI));
OpenPOWER on IntegriCloud