Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/tools/llvm-mca/Views/DispatchStatistics.h
35290 views
1
//===--------------------- DispatchStatistics.h -----------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
/// \file
9
///
10
/// This file implements a view that prints a few statistics related to the
11
/// dispatch logic. It collects and analyzes instruction dispatch events as
12
/// well as static/dynamic dispatch stall events.
13
///
14
/// Example:
15
/// ========
16
///
17
/// Dynamic Dispatch Stall Cycles:
18
/// RAT - Register unavailable: 0
19
/// RCU - Retire tokens unavailable: 0
20
/// SCHEDQ - Scheduler full: 42
21
/// LQ - Load queue full: 0
22
/// SQ - Store queue full: 0
23
/// GROUP - Static restrictions on the dispatch group: 0
24
///
25
///
26
/// Dispatch Logic - number of cycles where we saw N micro opcodes dispatched:
27
/// [# dispatched], [# cycles]
28
/// 0, 15 (11.5%)
29
/// 2, 4 (3.1%)
30
///
31
//===----------------------------------------------------------------------===//
32
33
#ifndef LLVM_TOOLS_LLVM_MCA_DISPATCHVIEW_H
34
#define LLVM_TOOLS_LLVM_MCA_DISPATCHVIEW_H
35
36
#include "llvm/ADT/SmallVector.h"
37
#include "llvm/MC/MCSubtargetInfo.h"
38
#include "llvm/MCA/View.h"
39
#include <map>
40
41
namespace llvm {
42
namespace mca {
43
44
class DispatchStatistics : public View {
45
unsigned NumDispatched;
46
unsigned NumCycles;
47
48
// Counts dispatch stall events caused by unavailability of resources. There
49
// is one counter for every generic stall kind (see class HWStallEvent).
50
llvm::SmallVector<unsigned, 8> HWStalls;
51
52
using Histogram = std::map<unsigned, unsigned>;
53
Histogram DispatchGroupSizePerCycle;
54
55
void updateHistograms() {
56
DispatchGroupSizePerCycle[NumDispatched]++;
57
NumDispatched = 0;
58
}
59
60
void printDispatchHistogram(llvm::raw_ostream &OS) const;
61
62
void printDispatchStalls(llvm::raw_ostream &OS) const;
63
64
public:
65
DispatchStatistics()
66
: NumDispatched(0), NumCycles(0),
67
HWStalls(HWStallEvent::LastGenericEvent) {}
68
69
void onEvent(const HWStallEvent &Event) override;
70
71
void onEvent(const HWInstructionEvent &Event) override;
72
73
void onCycleBegin() override { NumCycles++; }
74
75
void onCycleEnd() override { updateHistograms(); }
76
77
void printView(llvm::raw_ostream &OS) const override {
78
printDispatchStalls(OS);
79
printDispatchHistogram(OS);
80
}
81
StringRef getNameAsString() const override { return "DispatchStatistics"; }
82
json::Value toJSON() const override;
83
};
84
} // namespace mca
85
} // namespace llvm
86
87
#endif
88
89