[llvm] r347493 - [llvm-mca][View] Improved Retire Control Unit Statistics.
Andrea Di Biagio via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 23 04:12:58 PST 2018
Author: adibiagio
Date: Fri Nov 23 04:12:57 2018
New Revision: 347493
URL: http://llvm.org/viewvc/llvm-project?rev=347493&view=rev
Log:
[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.
Modified:
llvm/trunk/docs/CommandGuide/llvm-mca.rst
llvm/trunk/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s
llvm/trunk/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s
llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-1.s
llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-2.s
llvm/trunk/test/tools/llvm-mca/X86/option-all-views-1.s
llvm/trunk/test/tools/llvm-mca/X86/option-all-views-2.s
llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp
llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.h
llvm/trunk/tools/llvm-mca/llvm-mca.cpp
Modified: llvm/trunk/docs/CommandGuide/llvm-mca.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CommandGuide/llvm-mca.rst?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/docs/CommandGuide/llvm-mca.rst (original)
+++ llvm/trunk/docs/CommandGuide/llvm-mca.rst Fri Nov 23 04:12:57 2018
@@ -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
Modified: llvm/trunk/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s (original)
+++ llvm/trunk/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s Fri Nov 23 04:12:57 2018
@@ -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% )
Modified: llvm/trunk/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s (original)
+++ llvm/trunk/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s Fri Nov 23 04:12:57 2018
@@ -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% )
Modified: llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-1.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-1.s?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-1.s (original)
+++ llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-1.s Fri Nov 23 04:12:57 2018
@@ -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
Modified: llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-2.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-2.s?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-2.s (original)
+++ llvm/trunk/test/tools/llvm-mca/X86/option-all-stats-2.s Fri Nov 23 04:12:57 2018
@@ -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
Modified: llvm/trunk/test/tools/llvm-mca/X86/option-all-views-1.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/option-all-views-1.s?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/option-all-views-1.s (original)
+++ llvm/trunk/test/tools/llvm-mca/X86/option-all-views-1.s Fri Nov 23 04:12:57 2018
@@ -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
Modified: llvm/trunk/test/tools/llvm-mca/X86/option-all-views-2.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/option-all-views-2.s?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/option-all-views-2.s (original)
+++ llvm/trunk/test/tools/llvm-mca/X86/option-all-views-2.s Fri Nov 23 04:12:57 2018
@@ -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
Modified: llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp (original)
+++ llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp Fri Nov 23 04:12:57 2018
@@ -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::printV
<< "%)\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;
}
Modified: llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.h?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.h (original)
+++ llvm/trunk/tools/llvm-mca/Views/RetireControlUnitStatistics.h Fri Nov 23 04:12:57 2018
@@ -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 : publ
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
Modified: llvm/trunk/tools/llvm-mca/llvm-mca.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mca/llvm-mca.cpp?rev=347493&r1=347492&r2=347493&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mca/llvm-mca.cpp (original)
+++ llvm/trunk/tools/llvm-mca/llvm-mca.cpp Fri Nov 23 04:12:57 2018
@@ -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));
More information about the llvm-commits
mailing list