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/SchedulerStatistics.h
35290 views
1
//===--------------------- SchedulerStatistics.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 defines class SchedulerStatistics. Class SchedulerStatistics is a
11
/// View that listens to instruction issue events in order to print general
12
/// statistics related to the hardware schedulers.
13
///
14
/// Example:
15
/// ========
16
///
17
/// Schedulers - number of cycles where we saw N instructions issued:
18
/// [# issued], [# cycles]
19
/// 0, 6 (2.9%)
20
/// 1, 106 (50.7%)
21
/// 2, 97 (46.4%)
22
///
23
/// Scheduler's queue usage:
24
/// [1] Resource name.
25
/// [2] Average number of used buffer entries.
26
/// [3] Maximum number of used buffer entries.
27
/// [4] Total number of buffer entries.
28
///
29
/// [1] [2] [3] [4]
30
/// JALU01 0 0 20
31
/// JFPU01 15 18 18
32
/// JLSAGU 0 0 12
33
//
34
//===----------------------------------------------------------------------===//
35
36
#ifndef LLVM_TOOLS_LLVM_MCA_SCHEDULERSTATISTICS_H
37
#define LLVM_TOOLS_LLVM_MCA_SCHEDULERSTATISTICS_H
38
39
#include "llvm/ADT/SmallVector.h"
40
#include "llvm/MC/MCSubtargetInfo.h"
41
#include "llvm/MCA/View.h"
42
#include <map>
43
44
namespace llvm {
45
namespace mca {
46
47
class SchedulerStatistics final : public View {
48
const llvm::MCSchedModel &SM;
49
unsigned LQResourceID;
50
unsigned SQResourceID;
51
52
unsigned NumIssued;
53
unsigned NumCycles;
54
55
unsigned MostRecentLoadDispatched;
56
unsigned MostRecentStoreDispatched;
57
58
// Tracks the usage of a scheduler's queue.
59
struct BufferUsage {
60
unsigned SlotsInUse;
61
unsigned MaxUsedSlots;
62
uint64_t CumulativeNumUsedSlots;
63
};
64
65
using Histogram = std::map<unsigned, unsigned>;
66
Histogram IssueWidthPerCycle;
67
68
std::vector<BufferUsage> Usage;
69
70
void updateHistograms();
71
void printSchedulerStats(llvm::raw_ostream &OS) const;
72
void printSchedulerUsage(llvm::raw_ostream &OS) const;
73
74
public:
75
SchedulerStatistics(const llvm::MCSubtargetInfo &STI);
76
void onEvent(const HWInstructionEvent &Event) override;
77
void onCycleBegin() override { NumCycles++; }
78
void onCycleEnd() override { updateHistograms(); }
79
80
// Increases the number of used scheduler queue slots of every buffered
81
// resource in the Buffers set.
82
void onReservedBuffers(const InstRef &IR,
83
llvm::ArrayRef<unsigned> Buffers) override;
84
85
// Decreases by one the number of used scheduler queue slots of every
86
// buffered resource in the Buffers set.
87
void onReleasedBuffers(const InstRef &IR,
88
llvm::ArrayRef<unsigned> Buffers) override;
89
90
void printView(llvm::raw_ostream &OS) const override;
91
StringRef getNameAsString() const override { return "SchedulerStatistics"; }
92
bool isSerializable() const override { return false; }
93
};
94
} // namespace mca
95
} // namespace llvm
96
97
#endif
98
99