diff options
author | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2018-11-23 12:12:57 +0000 |
---|---|---|
committer | Andrea Di Biagio <Andrea_DiBiagio@sn.scee.net> | 2018-11-23 12:12:57 +0000 |
commit | 07a8255a7879451269960276113f97c98c7f0cfc (patch) | |
tree | 846cbd5b6b2caa4f12f1a85c95b6a74ea04aa75f /llvm | |
parent | 972e3480e2fb322d7232c98e5e2e9d3b6cd017b6 (diff) | |
download | bcm5719-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.rst | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-mca/X86/BdVer2/rcu-statistics.s | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-mca/X86/BtVer2/rcu-statistics.s | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-mca/X86/option-all-stats-1.s | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-mca/X86/option-all-stats-2.s | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-mca/X86/option-all-views-1.s | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-mca/X86/option-all-views-2.s | 4 | ||||
-rw-r--r-- | llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.cpp | 44 | ||||
-rw-r--r-- | llvm/tools/llvm-mca/Views/RetireControlUnitStatistics.h | 29 | ||||
-rw-r--r-- | llvm/tools/llvm-mca/llvm-mca.cpp | 2 |
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)); |